실례 분석 Class 바이트 파일 (2)

2737 단어 자바 깊이 이해
전편 필수: 실례 분석 Class 바이트 파일 (1)
4. 필드 테이블 집합
필드 테이블(field info) 컬렉션은 인터페이스나 클래스에 선언된 변수를 설명합니다.
포함: 클래스 변수 + 실례 변수 (국부 변수 포함하지 않음)
주: ①클래스 변수 = 클래스 변수 = 정적 변수 [static int a;]는 방법 구역에 저장됩니다.② 실례급 변수: static 수식자가 없으면 실례 대상을 통해서만 접근할 수 있다.대상에 저장하기;
설명 필드에는 다음이 포함됩니다.
① 필드의 역할 영역: public, private,protected ② 실례급 변수인지 클래스급 변수(static으로 수식되었는지) ③ 가변성(final으로 수식되었는지) ④ 병발 가시성(volatile으로 수식되었는지) ⑤ 서열화되었는지(transient으로 수식되었는지) ⑥ 필드 데이터 형식(기본 유형, 대상, 수조) ⑥ 필드 이름
필드 테이블 구조는 다음과 같습니다.
access_flags 구조는 다음과 같습니다.
그래서 access_flags은 0x0002이어야 한다.바이트 파일을 열람하는데 문제가 없습니다
name_index: 필드의 간단한 이름, 값은 상수에 대한 인용입니다
다섯 번째 상수 가리키기:--> m
descriptor_index: 필드와 방법의 설명자, 값은 상수에 대한 인용입니다
여섯 번째 상수를 가리킨다: > I. 이 느낌을 보면 약간 문제가 있다. 각 묘사부호는 다음과 같은 특수한 의미를 대표한다.
descriptor_index는 위 표와 같은 필드 유형을 묘사할 수 있다.다른 한편, 매개 변수 목록(수량, 유형, 순서 포함)과 되돌아오는 값을 설명할 수 있다.
주: ① 대상 유형에 대해: 문자 L과 대상의 전체 한정명으로 표시하기(Ljava/lang/Object)②수조에 대해: 각 차원마다'['로 java.lang.String[][]-->[[Ljava/lang/String int[]-->[I ③ 방법을 설명할 때 매개 변수 목록에 따라 값을 되돌려 주고 매개 변수 목록은 매개 변수의 엄격한 순서에 따라 작은 괄호'()내부 void inc()--->()Vint indexOf(char[] source, int sourceOff, int sourceCount, int targetOffset, int targetCount,int fromIndex) -->([CII[CIII)I
attributes_count: 추가 정보를 저장하는 데 사용되며, 필드는 속성표에서 >=0개의 추가 정보를 설명할 수 있습니다.속성표 카운터가 0이면attributeinfo는 공간을 차지하지 않습니다.
이 예에서 attributes_count은 0x0000입니다.
주: ① 필드 집합에는 슈퍼클래스나 부류에서 계승(또는 인터페이스 계승)된 필드가 열거되지 않으며, 원래 자바에 존재하지 않았던 필드(내부 클래스)만 열거할 수 있습니다.
② 필드는 다시 불러올 수 없습니다. 두 필드의 데이터 형식, 수식자는 같든 그렇지 않든 서로 다른 이름을 사용해야 합니다. 그러나 바이트 코드의 경우 두 필드의 설명자가 다르면 필드의 이름이 합법적입니다.
5. 방법표 집합
메소드 테이블 구조를 먼저 살펴보면 다음과 같습니다.
이 구조는 필드 테이블과 비슷하며 access_flags은 다음과 같습니다.
위 표를 통해 알 수 있듯이 방법의 코드가 바이트 코드 파일에 어떻게 저장되는지 구체적으로 설명하지 않았다. 사실은 방법 속성표 집합의'코드'라는 속성에 저장된 것이다.
주: 방법표가 집합된 앞에 u2 유형이 하나 더 있는데 모두 몇 가지 방법이 있음을 나타낸다.
이전의 예에서 값: 0x0002는 두 가지 방법이 있음을 의미합니다 (inc (),)
그리고 나서야 방법표에 집합했다.access_flags:0x0001을 보십시오.Acc_PUBLIC: 0x0007, 7번째 상수를 가리키는 name_index: 0x0008, 8번째 상수()Vdescriptor_index: 0x0001, 이 방법의 속성표 집합에 하나의 속성이 있음을 나타낸다attributes_count: 0x0009, 9번째 상수 코드를 가리키며 이 속성이 방법의 바이트 코드임을 설명합니다
참고: 상위 클래스 메서드가 하위 클래스에서 다시 작성되지 않은 경우 메서드 테이블 컬렉션에 상위 클래스에서 메서드 정보가 표시되지 않습니다.마찬가지로 컴파일러가 자동으로 추가하는 방법이 나타날 수 있다. 가장 고전적인 것은 바로 클래스 구조기''와 실례 구조기''방법이다.

좋은 웹페이지 즐겨찾기