Java 방법 서명. Java 개발을 원하는 친구들은 메소드 서명의 중요성이 특히 후속 최적화에서 메소드 과부하에 대한 더 나은 설명이라는 것을 알고 있습니다. 여기에 기록이 있습니다. 그것을 본 친구들도 그것을 읽을 수 있습니다.
메소드 서명의 의미
이름이 다른 이름과 동일한 이름의 이름을 가진 메소드의 경우 메소드 서명은 그다지 의미가 없지만 과부하 된 메소드의 경우 메소드 서명이 매우 의미가 있습니다. 오버로드 된 메소드 사이의 메소드 이름은 동일하기 때문에 메소드와 메소드를 고유하게 표시 할 수있는 메소드 이름 구성을 구성하는 다른 요소에서 다른 요소를 찾아야하며 방법 본문은 고려되지 않습니다. 그런 다음 공식 매개 변수 목록과 리턴 값입니다. 그러나 메소드를 호출하는 사람들의 경우 메소드의 공식 매개 변수 데이터 유형 목록의 중요성이 리턴 값보다 훨씬 높으므로 메소드 서명은 메소드 이름 + 공식 매개 변수 목록으로 구성됩니다. 즉, 메소드 이름과 공식 매개 변수 데이터 유형 목록은 메소드를 고유하게 결정할 수 있으며 메소드의 리턴 값과 관계가 없습니다. 이것은 과부하를 판단하는 데 중요한 기초이므로 다음 코드는 허용되지 않습니다.
public long aaaa () {} public int aaaa () {}메소드 서명 형식
먼저 몇 가지 방법과 메소드 서명을 살펴 보겠습니다.
public void test1 () {} test1 () vpublic void test2 (string str) test2 (ljava/lang/string;) vpublic int test3 () {} test3 () i 위의 세 가지 예에서 단순히 몇 가지 작은 규칙을 볼 수 있습니다.
JVM이 제공하는 메소드 시그니처는 실제로 세 부분으로 구성됩니다. 메소드 이름 (위의 예는 단순성을위한 전체 클래스 이름을 기록하지 않았습니다), 공식 매개 변수 목록 및 리턴 값. 기본 형식은 다음과 같습니다.
풀 클래스 이름. 메소드 이름 (공식 매개 변수 데이터 유형 목록) 리턴 값 데이터 유형
Java Method Signature의 특수 문자/문자 의미
| 특수 문자 | 데이터 유형 | 특별 지침 |
|---|---|---|
| 다섯 | 무효의 | 일반적으로 메소드의 반환 값을 나타내는 데 사용됩니다. |
| 지 | 부울 | |
| 비 | 바이트 | |
| 기음 | 숯 | |
| 에스 | 짧은 | |
| 나 | int | |
| J. | 긴 | |
| 에프 | 뜨다 | |
| 디 | 더블 | |
| [의 뜻 | 정렬 | [로 시작하여 다른 특수 문자와 결합하여 해당 데이터 유형의 배열을 나타내며, 몇 차는 몇 차원 배열을 나타냅니다. |
| 엘 | 전체 카테고리 이름; | 기준 유형은 l로 시작합니다. 중간에있는 참조 유형의 전체 클래스 이름으로 끝납니다. |
메소드가 과부하되면 메소드 리턴 값은 의미가 없으며 메소드 이름 및 매개 변수 목록에 의해 결정됩니다.
Javap을 사용하여 메소드 서명을 생성합니다
수업 도서관 수업
"String.java"에서 컴파일 된 $ javap -s java.lang.string public final class java.lang.string은 java.lang.object empless java.io.serializable, java.lang.comparable, java.lang.charequence {public static final java.util.com.case_insensitive_; 서명 : ljava/util/비교기; public java.lang.string (); 서명 : () v public java.lang.string (java.lang.string); 서명 : (ljava/lang/string;) v public java.lang.string (char []); 서명 : ([c) v public java.lang.string (char [], int, int); 서명 : ([cii) v public java.lang.string (int [], int, int); 서명 : ([iii) v public java.lang.string (byte [], int, int); 서명 : ([biii) v public java.lang.string (byte [], int); 서명 : ([biii) v public java.lang.string (byte [], int); 서명 : ([bi) v public java.lang.string (byte [], int, int, java.lang.string)는 java.io.unsupportedencodingException을 던졌습니다. 서명 : ([biiljava/lang/string;) v public java.lang.string (byte [], int, int, java.nio.charset.charset); 서명 : ([biiljava/nio/charset/charset;) v public java.lang.string (byte [], java.lang.string) java.io.unsupportedencodingException; 서명 : ([bljava/lang/string;) v public java.lang.string (byte [], java.nio.charset.charset); 서명 : ([bljava/nio/charset/charset;) v public java.lang.string (byte [], int, int); 서명 : ([bii) v ...커스텀 클래스
패키지 com.demo; 공개 클래스 sigtest {public static final String name = null; public int getName (int [] data, long index) {return 0; }} 산출
$ javac sigtest.java $ javap -s -s com.demo.sigtestcompiled "sigtest.java"public class com.demo.sigtest actends java.lang.object {public static final java.lang.string name; 서명 : ljava/lang/string; public com.demo.sigtest (); 서명 : () vpublic int getName (int [], long); 서명 : ([ij) istatic {}; 서명 : () V}-S는 서명 정보를 인쇄하는 것을 의미합니다
-P는 모든 기능 및 멤버의 서명 정보를 인쇄하는 것을 의미합니다. 기본적으로 공개 서명 정보 만 인쇄됩니다
읽어 주셔서 감사합니다. 도움이되기를 바랍니다. 이 사이트를 지원 해주셔서 감사합니다!