source

'java' 명령어는 Java 프로그램을 컴파일합니까?

goodcode 2022. 7. 17. 00:26
반응형

'java' 명령어는 Java 프로그램을 컴파일합니까?

인터넷상의 대부분의 웹 사이트에는 다음과 같이 기술되어 있습니다.

'를 사용"javac하여 ""를 합니다..java '파일'을 .javas uncommand'snowledge"

은 자바 , 실행하지 않았어요.javac츠키노

.hello.java:

public class Myclass {
 public static void main(String[] args){
    System.out.println("hello world");
  }
}

그리고 뛰었습니다.

$ javac hello.java

이 경우 다음과 같은 오류가 발생합니다.

hello.java:1: error: class Myclass is public, should be declared in a file named Myclass.java
public class Myclass {
       ^
1 error

내가 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★javac이치노

$ java hello.java
hello world

java령어 프왜 는 약면면면, 면면면면면면면 if if if가 합니까?javac★★★★★★★★★★★★★★★★★?

자바 버전은 다음과 같습니다.

openjdk version "12.0.2" 2019-07-16
OpenJDK Runtime Environment (build 12.0.2+10)
OpenJDK 64-Bit Server VM (build 12.0.2+10, mixed mode)

Java 11 이전 버전에서는 코드를 실행하려면 먼저 컴파일한 후 실행할 수 있습니다.다음은 예를 제시하겠습니다.

javac test.java
java test

11 11을 사용할 수 .javac+java 뛰어도 .java코드를 컴파일하고 자동으로 실행할 수 있습니다.: " "는 주의해 ..class파일이 생성됩니다.하다

java test.java

<고객명>을java -help하다★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★마주친 입니다.java [options] <sourcefile> [args]이치노

$ java -help
Usage: java [options] <mainclass> [args...]
           (to execute a class)
   or  java [options] -jar <jarfile> [args...]
           (to execute a jar file)
   or  java [options] -m <module>[/<mainclass>] [args...]
       java [options] --module <module>[/<mainclass>] [args...]
           (to execute the main class in a module)
   or  java [options] <sourcefile> [args]
           (to execute a single source-file program)

갱신:

@BillK가 지적한 바와 같이 OP는 다음과 같은 질문도 했습니다.

javac 명령어가 필요한 이유는 무엇입니까?

★★★★★★★★★★★★★★★★★★★★가 필요한 이유javac 창조하다.class현재와 같이 코드를 생성, 테스트, 배포, 실행, 공유 등을 할 수 있습니다.JEP 330의 동기는 기존 용도를 변경하지 않고 "Java의 초기 단계소규모 유틸리티 프로그램 작성"을 쉽게 하기 위함이었다.

Java 11을 실행하고 있는 경우 단일 소스 파일을 실행할 수 있는 새로운 기능이 있습니다.단일 소스 컴파일러는 클래스 이름 대 파일 이름 측면에서 더 혼합적이기 때문에 실행할 수 있지만 성공적으로 컴파일을 수행할 수 없습니다.

이전 버전의 Java를 사용하는 경우 컴파일 오류, 특히 클래스 이름 주위에 현재 hello.java가 컴파일되지 않습니다.따라서 java hello.java를 호출하면 컴파일되지 않기 때문에 코드를 컴파일할 수 없습니다.

Java 명령어를 실행할 때 이전에 컴파일된 코드를 실행하고 있었을 가능성이 높습니다.

하려면 , 할 필요가 .basename.

인 경우 두 할 수 있습니다.javac;java시퀀스:

  1. 클래스 이름 변경public class Hello또는

  2. 이름 바꾸기hello.java로.myclass.java.

javaJava 11용 인터프리터는 이 요건을 부과하지 않습니다.를 포함하는 클래스main는 파일 내의 첫 번째 클래스인 한 임의의 이름을 가질 수 있습니다.이것은 주로 초보자용 학습 프로세스를 용이하게 하고 shebang을 사용한 "자바 스크립팅"을 가능하게 하기 위한 것이었다(참조).

네, 하지만 당신이 말하는 그런 방식은 아니에요.

를 사용하는 경우javac명령어를 사용하여 .class 파일을 .class 파일로 컴파일합니다.이 출력은 바이트 코드라고 불립니다.바이트 코드는 Java Virtual Machine 규격을 기반으로 하는 이론 CPU의 기계 코드(네이티브 명령)입니다.

이 가상 CPU 규격은 규격이 작성될 당시 일반적인 CPU 유형의 평균입니다.따라서 여러 CPU 유형에서 동일한 Java .class 파일을 쉽게 실행할 수 있습니다.

Java가 처음 출시되었을 때java명령어는 .class 파일을 읽고 바이트 코드 명령을 한 번에 하나씩 해석한 후 실제로 실행 중인 CPU의 동등한 네이티브 명령에 매핑합니다.이것은 효과가 있었지만 특별히 빠르지는 않았다.이 JIT(Just in Time) 컴파일이 Java 런타임에 추가되었습니다.

THE J와 IT it함 함 itjava명령어는 바이트 코드를 가져와 실행 중인 CPU의 네이티브명령어로 다시 컴파일합니다.현대의 Java 런타임은 백그라운드에서 JIT 컴파일을 하는 동안 바이트 코드를 해석하기 시작하고 실행 중인 애플리케이션을 프로파일링한 후 다른 최적화로 바이트 코드를 다시 컴파일하여 최상의 성능을 얻는 경향이 있습니다.

편집(다운된 유권자를 달래기 위해):

따라서 특정의 경우(v11보다 새로운 JRE를 실행하고 있는 경우) 코드는 2회 이상 컴파일됩니다(적어도).

  1. 바이트 코드에 대한 단일 .java 파일로서
  2. 바이트 코드를 해석할 때 JIT 컴파일러 경유(helloWorld의 경우 컴파일된 네이티브 코드를 실행할 시간이 없을 수 있음)

언급URL : https://stackoverflow.com/questions/58086412/does-the-java-command-compile-java-programs

반응형