상수 풀은 "방법의 시작"과 "방법 끝"의 개념이 없습니다.
여기서 볼 수있는 것은 상수 풀에서 유형이 "Utf8"인 문자열 상수입니다. 풀의 관점에서 볼 때 이들은 단지 문자열 일뿐입니다. 그러나 여러 가지를 나타내는 컴파일러 생성 문자열입니다. 이 문자열은 필수이며 형식은 JVMS에 설명되어 있습니다. 몇 가지 유형이 있습니다. 당신의 람다 예에서 :
lambda$new$0
-이 4.3.4에 설명 된 서명이다.
(I)I
-이 4.3.3
I
에 기재된 방법 디스크립터 (서명과 동일하지 않음)이다 - 이것은 4.3.2에 기재된 필드 디스크립터이다.
I
항목은 단지 int
필드입니다.
(I) I
항목의 경우 (..)
사이의 문자열이 매개 변수 유형입니다. 목록 일 수 있습니다. I
은 기본 유형 int
입니다. (..)
외부의 문자열이 반환 형식입니다. 따라서 (I) I
은 int
을 허용하는 매개 변수 목록과 반환 유형 int
을 사용하는 방법을 설명합니다. 이러한 문자열은 여전히 있다는 것이
Character Type Interpretation
B byte signed byte
C char Unicode character code point in the Basic
Multilingual Plane, encoded with UTF-16
D double double-precision floating-point value
F float single-precision floating-point value
I int integer
J long long integer
L ClassName; reference an instance of class ClassName
S short signed short
Z boolean true or false
[ reference one array dimension
주 : (table 4.2)에서 FieldType가
MethodDescriptor:
(ParameterDescriptor*) ReturnDescriptor
ParameterDescriptor:
FieldType
ReturnDescriptor:
FieldType
VoidDescriptor
VoidDescriptor:
V
:
는 구체적 JVMS에서, 방법 디스크립터 문자열의 형식을 다른 것처럼. 실제로 이러한 메서드를 호출 할 때 다른 종류의 항목 - method reference - 상수 풀에 나타납니다.(문자열에 "UTF8"를 반대) javap
는 "NameAndType"유형이를 식별하고, 그들은 (첫 번째 예를 사용) 등의 형태를 취할 것입니다 : 그들은뿐만 아니라 메소드 이름 문자열을 참조
#123 = NameAndType #11:#12; // "foo":(I)I
을 설명자 문자열.
javap
설명서 자체는 드문 드문 하나 명령 줄 정보 만 포함되어 있습니다. JVMS는 javap
에있는 상세한 설명서에 가장 가까운 것입니다.
부끄럽습니다. 나는 int가되어야한다고 생각합니다. 감사. – gudge
@ JasonC 컴퓨터로 돌아 가면 정확한 의미를 확인해야 하겠지만 그게 그 의미입니다. –
@Jason 실제로 그는 맞습니다. 메소드가 참조하는 상수 풀 항목입니다. 이것은 디버깅 정보가 아닙니다. 모든 메소드에는 이름과 설명자가 있어야합니다. – Antimony