Class 파일 기본 구조

15063 단어 Java직장Class
하나.

Java Class
파일 이 뭐 예요?

JVM Spec

(Second Edtion)
설명 이 있 습 니 다:
Java Class
파일
8
비트 바이트 흐름 구성,모든
16
위치
32
평화
64
자리 수 는 각각 읽 기 를 통과 한다.
2
개,
4
개 와
8
바이트 로 구성 되 어 있 으 며,다 바이트 데 이 터 는 항상...
Big-endian
순서대로 저장 합 니 다.즉,높 은 바이트 가 낮은 주소 에 놓 여 있 습 니 다.매 개
Class
파일 이 모두 포함 되 어 있 고 하나만 포함 되 어 있 습 니 다.
Java
유형
(
클래스 또는 인터페이스
)

혹시
JVM Spec
>의 표현 이 명확 하지 않 으 니,우 리 는 을 참고 할 수 있다."tl="kr send">
Inside JVM

(Second Edtion)
설명:
Java Class
특별히
.Class
접미사
Java
가상 컴퓨터 에서 불 러 올 수 있 는 파일.이 표현 은 비교적 명확 해 야 한다.만약 아직도 명확 하지 않다 고 생각한다 면,나 는 네가 이 문장 을 다 읽 은 후에 다시 돌아 와 서 이해 해 보 는 것 을 건의 할 수 밖 에 없다.
J
둘째,
Java Class 파일 형식
《JVM Spec
》(Second Edtion)
자바 클래스
파일 형식 은 C 와 유사 합 니 다.
구조의 기호 가 작 성 된 위조 구 조 를 나타 낸다.Java 클래스 설명
파일 형식 구조의 내용 을 항목 이 라 고 합 니 다(items)
。항목 의 크기 는 가 변 적 이 며,항목 마다 순서대로 Class 에 저 장 됩 니 다.
파일 에 인접 한 항목 사이 에 어떠한 간격 도 없 으 면 Class 를 사용 할 수 있 습 니 다.
서류 가 치밀 하 다.그렇다면 이 항목 은 구체 적 으로 무엇 을 가리 키 는 것 일 까?을 보십시오.
에서 제시 한 ClassFile
구조의 그림:
이 그림 은 순서대로 열거 되 었 다.
ClassFile
모든 항목 은 그 유형 과 이름 을 포함한다.항목 의 유형 은 u1,u2,u4 또는 표 이름 일 수 있 습 니 다.그 중에서 u1,u2 와 u4 는 자바 Class 파일 의 기본 데이터 형식 으로 각각 기호 가 없 는 유형,1,2,4 바이트 의 데 이 터 를 나타 낸다.예 를 들 어"u4 magic;"ClassFile 항목 을 표시 합 니 다.이 항목 의 이름 은 magic,즉 마수 입 니 다.이 항목 은 모두 4 개의 바이트 를 차지 합 니 다.기호 유형 이 없 는 4 개의 바이트 의 바 이 너 리 수의 구체 적 인 값 은 바로 이 magic 항목 의 구체 적 인 내용 입 니 다.항목 형식 이 표 이름 일 때 표 이름 에 따라 관련 표를 찾 아 볼 수 있 습 니 다.이 표 들 의 항목 도 자바 Class 파일 의 기본 데이터 형식 과 항목 의 이름 으로 구성 되 어 있 습 니 다.ClassFile 구조 중의 각 항목 은 다음 과 같이 간략하게 분석 할 수 있다.
ClassFile 표 구조
     ClassFile {
        u4 magic;
        u2 minor_version;
        u2 major_version;
        u2 constant_pool_count;
        cp_info constant_pool[constant_pool_count-1];
        u2 access_flags;
        u2 this_Class;
        u2 super_Class;
        u2 interfaces_count;
        u2 interfaces[interfaces_count];
        u2 fields_count;
        field_info fields[fields_count];
        u2 methods_count;
        method_info methods[methods_count];
        u2 attributes_count;
        attribute_info attributes[attributes_count];
     }
(1) magic(
마수
각 클래스
파일 의 앞 4
바이트
): 0xCAFEBABE
。마수 의 역할 은 자바 클 라 스 를 쉽게 구분 할 수 있다 는 것 이다.
파일 과 자바 클래스
서류파일 이 0xCAFEBABE 가 아니라면
처음에는 자바 클래스 가 아 닐 것 이다.
서류자바
오 크
'할 때 이 마 수 는 이미 정 해 졌 고 자바 를 예시 했다.
그 이름 의 등장 은마수 의 내력 은 여러분 스스로 찾 아 보 세 요.
J
(2) minor_version
majorversion
Class
파일 아래
바이트 에는 주,차 버 전 번호 가 포함 되 어 있 습 니 다.보통 주 버 전 번호 와 일련의 버 전 번호 만 주어진 후 자바
가상 컴퓨터 에서 만 Class 를 읽 을 수 있 습 니 다.
서류하면,만약,만약...
파일 의 버 전 번호 가 자바 를 초과 하 였 습 니 다.
가상 컴퓨터 가 처리 할 수 있 는 유효한 범위,자바
가상 컴퓨터 는 이 Class 를 처리 하지 않 을 것 입 니 다.
서류
(3) constant_pool_count
버 전 번호 뒤에 있 는 항목 은 constantpool_count
즉,상수 탱크 계수 항목 입 니 다.이 항목 의 값 은 0 이상 이 어야 합 니 다.Class 를 드 립 니 다.
파일 중 constantpool
항목 의 개 수 는 색인 을 0 으로 포함 합 니 다.
의 constantpool
항목,그러나 이 항목 은 Class 에 나타 나 지 않 습 니 다.
파일 의 constantpool
리스트 constantpool [ ]
맞다
(4) constant_pool [ ]
constant_pool_count
항목 아래 는 constantpool [ ]
항목상수 탱크 는 constantpool_count-1
연속 적 이 고 가 변 적 인 길이 의 cpinfo
표 구성,문자 문자열,final 같은 것 이 저장 되 어 있 습 니 다.
변수 값,클래스 이름과 방법 이름 의 상수.

    
     cp_info     
     
cp_info {
         u1 tag;

         u1 info[];

    }

constant_pool constant_pool [0 ] Class Java 1 constant_pool_count-1 constant_pool cp_info cp_info tag byte cp_info cp_info tag ;
  
cp_info tag
                               
CONSTANT_Class                           7
CONSTANT_Fieldref                        9
CONSTANT_Methodref                       10
CONSTANT_InterfaceMethodref              11
CONSTANT_String                           8
CONSTANT_Integer                          3
CONSTANT_Float                            4
CONSTANT_Long                              5
CONSTANT_Double                            6
CONSTANT_NameAndType                      12
CONSTANT_Utf8                              1
cp_info Class , 、 CONSTANT_Xxxx_info constant_pool cp_info tag ( ) 。 , constant_pool_count 7 cp_info tag 7 constant_pool CONSTANT_Class_info onstant_pool[ ] constant_pool CONSTANT_Class_info , ( ) 。CONSTANT_Class_info JVM Spec (2nded) Inside JVM (2nded) 1 CONSTANT_Utf8_info , 。
cp_info cp_info tag( ) 1 CONSTANT_Utf8_info cp_info tag( ) 3 CONSTANT_Integer_info , 。 《JVM Spec (2nded) Inside JVM (2nded)
(5) access_flegs
access_flags Java access_flags
access_flags
                       
ACC_PUBLIC      0x0001 public
ACC_FINAL       0x0010 final
ACC_SUPER       0x0020 invokespecial
ACC_INTERFACE 0x0200
ACC_ABSTRACT   0x0400 abstract
access_flags 。 , ; , ; 。
(6) this_class
this_class , this_class CONSTANT_Class_info
(7) super_class
Class this_class super_class super_class 0 , 。 super_class 0 Class java.lang.Object super_class 0 , , Class super_class CONSTANT_Class_info final Class super_class java.lang.Object CONSTANT_Class_info
(8) interfaces_count interfaces [ ]
super_class interfaces_count , 。
interfaces_count interfaces , , interfaces_count interfaces
(9) fields_count fields [ ]
Class interfaces [ ] fields_count fields field_info Java
field_info , 、 、 。 field_info , ; field_info , 。
Java fields fields
(10) methods_count methods [ ]
Class fields methods_count , , 。methods_count methods methods_count method_info
method_info , ( )。 abstract native method_info 、 、 。
Java fields fields
(11) attributes_count attributes [ ]
Class attribute , attributes _count , , attributes attributes _info attributes _count attributes attributes _count attributes _info attributes _info CONSTANT_Utf8_info , 。 《JVM Spec (Second Edtion) ClassFile SourceFile
, , Class ClassFile attributes field_info attributes method_info attributes , , 。
Class Class , , , 。 blog---- Java Class

좋은 웹페이지 즐겨찾기