javac Test.java
- 해당 명령어는 자바 컴파일을 이용해 해당 자바 파일을 컴파일 한다는 의미다.
java -jar Test.jar
- 해당 명령어는 자바 코드를 컴파일 후 바이트코드로 변환된 것들의 데이터 모음을 jar로 묶어둔 파일을 실행한다는 의미이다. (프로그램 실행의 의미)
- *.java 생성
- 코드 작성
- 컴파일
- jdk/javac.exe -> 컴파일러
- 컴파일러는 코드의 문법만 검증하고 이때 문법상 오류가 없다면 .java 파일을 byte code로 변환시킨다.
- byte code는 인터프리터가 코드를 실행시킨다.
- 인터프리터가 바이터코드를 실행 시킨 후 *.class 파일을 생성한다.
- 이때 .java 파일은 src에 존재하고 .class 파일은 bin에 존재한다.
- 실행
- jdk/jre/java.exe -> 인터프리터
- 인터프리터는 컴파일러가 바이트코드로 만든 코드를 해석하고 실행할 때 사용한다.
- *.java 파일을 여기서 인식하는 것은 불가하다.
- *.class 라는 바이트 코드만을 인식하고 실행한다.
- *.class들로 구성된 jar 파일 생성
- 데이터 포맷등의 유효성 검증 작업은 이곳에서 진행되고 데이터가 무효한 경우 에러가 발생한다.
실행 단계 (더 구체적으로)
- java file명 -> 해당 프로그램 실행
- 1단계: *.class로 해당 파일명에 해당하는 바이트 코드가 있는지 확인한다.
- 2단계: 존재한다면 해당 바이트 코드를 메모리에 할당한다.
- method 영역 저장
- static 멤버 변수는 생성
- static {} 실행
- 3단계: main 메소드 시작 호출