Java static Main
javap
jdk technical stack diagram
javap
흔한 인사 코드
• public class T1
• {
• public static void main(String[] args)
• {
• System.out.println("Hello World!");
• }
• }
javap로 디컴파일
javap –c T1
Compiled from "T1.java“
public class T1 {
public T1();
Code:
0: aload_0
1: invokespecial #1 ()V // Method java/lang/Object."<init>":
4: return
public static void main(java.lang.String[]);
Code:
0: getstatic #2 // Field java/lang/System.out:Ljava/
io/PrintStream;
3: ldc #3 // String Hello World!
5: invokevirtual #4 // Method java/io/PrintStream.printl
n:(Ljava/lang/String;)V
8: return
}
모든 객체는 Object상속
• Object를 통한 초기화
invokespecial <init>()v
http://cs.au.dk/~mis/dOvs/jvmspec/ref--
33.html
Main메소드처리#1
0 getstatic
앞에 0은 메소드의 offset을 나타내고 getstatic은데이터를 Operand stack에 밀어놓도록 알려줌
http://stuff.mit.edu/afs/sipb/user/marc/hotjava/doc/vmspec/vmspec_9.html
c++ 처럼 executable한 실행파일을 만드는 것이아니기 때문에 main 메소드 시그니처 자체가static
static 없으면 에러.
ldc
• ldc는 상수값을 로드하여 operand stack에
넣는 것을 의미합니다.
http://cs.au.dk/~mis/dOvs/jvmspec/ref-
_ldc.html
invokevirtual
인스턴스 메소드를 호출하기 위한 지시자입
니다.
여기에서는 println을 쓰기 위해서 사용됩니
다.(Hello World 출력)
사실 println의 아규먼트는 Value, Type
입니다만 뒤에 String type은 무시되어 사용
되지 않습니다.
Top Related