Java 메서드 서명 상세 정보 및 인스턴스 코드

3871 단어 Java메소드 서명
자바 방법 서명, 내가 자바 개발을 하고 싶은 친구도 알고 있다. 방법 서명의 중요성은 방법이 다시 불러오는 비교적 좋은 해석이다. 특히 후속 최적화에 있어 여기에 기록된 바와 같이 본 친구도 볼 수 있다.
방법 서명의 의미
동명이 다른 종류, 같은 종류가 다른 방법에 대해 방법 서명의 의미는 그리 크지 않지만 중재 방법에 있어 방법 서명의 의미는 매우 크다.중재 방법 간의 방법명이 같기 때문에 우리는 방법을 구성하는 다른 몇 가지 요소에서 다른 요소와 방법명 구성이 유일하게 방법을 표시할 수 있는 서명을 찾아야 한다. 방법체는 당연히 고려하지 않는다.그러면 형삼 목록과 반환 값이다. 그러나 방법을 호출하는 사람에게 방법의 형삼 데이터 형식 목록의 중요도는 반환 값보다 훨씬 높기 때문에 방법 서명은 방법명 + 형삼 목록으로 구성된다. 즉, 방법명과 형삼 파라미터는 유형 목록에 따라 유일하게 하나의 방법을 확정할 수 있고 방법의 반환 값과 아무런 관계가 없다. 이것은 중재를 판단하는 중요한 근거이다.다음 코드는 허용되지 않습니다.

public long aaaa(){ 

} 
public int aaaa(){ 

} 


메소드 서명 형식
우선 우리는 몇 가지 방법과 그들의 방법을 보고 서명한다.

public void test1(){}          test1()V
public void test2(String str)   test2(Ljava/lang/String;)V
public int test3(){}           test3()I
상기 세 가지 예에서 우리는 간단한 몇 가지 작은 규칙을 볼 수 있다.
JVM이 제공하는 메소드 서명은 실제로 메소드 이름(위의 예는 전체 클래스 이름을 간단히 쓰지 않기 위함), 인삼 목록, 반환값 세 부분으로 구성되어 있습니다. 기본적인 형식은 다음과 같습니다.
전류명.메서드 이름 (트리거 데이터 형식 목록) 반환값 데이터 형식
Java 메서드 서명의 특수 문자/문자 의미
특수 문자
데이터 유형
특수 설명
V
void
일반적으로 표현 방법의 반환값
Z
boolean
B
byte
C
char
S
short
I
int
J
long
F
float
D
double
[
수조
[로 시작하여 다른 특수 문자와 결합하여 데이터 유형에 대응하는 수조를 표시하고, 몇 개의 [몇 차원 수조를 나타냄]
L
전류명
참조 유형은 L로 시작합니다.끝, 중간은 인용 유형의 전류명이다
반드시 주의해야 할 것은 방법이 다시 불러올 때 방법 반환 값은 아무런 의미가 없고 방법 이름과 매개 변수 목록에 의해 결정된다
javap 생성 방법으로 서명
라이브러리 클래스

$ javap -s java.lang.String 
Compiled from "String.java" 
public final class java.lang.String extends java.lang.Object implements java.io.Serializable,java.lang.Comparable,java.lang.CharSequence{ 
public static final java.util.Comparator CASE_INSENSITIVE_ORDER; 
 Signature: Ljava/util/Comparator; 
public java.lang.String(); 
 Signature: ()V 
public java.lang.String(java.lang.String); 
 Signature: (Ljava/lang/String;)V 
public java.lang.String(char[]); 
 Signature: ([C)V 
public java.lang.String(char[], int, int); 
 Signature: ([CII)V 
public java.lang.String(int[], int, int); 
 Signature: ([III)V 
public java.lang.String(byte[], int, int, int); 
 Signature: ([BIII)V 
public java.lang.String(byte[], int); 
 Signature: ([BI)V 
public java.lang.String(byte[], int, int, java.lang.String)  throws java.io.UnsupportedEncodingException; 
 Signature: ([BIILjava/lang/String;)V 
public java.lang.String(byte[], int, int, java.nio.charset.Charset); 
 Signature: ([BIILjava/nio/charset/Charset;)V 
public java.lang.String(byte[], java.lang.String)  throws java.io.UnsupportedEncodingException; 
 Signature: ([BLjava/lang/String;)V 
public java.lang.String(byte[], java.nio.charset.Charset); 
 Signature: ([BLjava/nio/charset/Charset;)V 
public java.lang.String(byte[], int, int); 
 Signature: ([BII)V 
... 
사용자 정의 클래스

package com.demo; 
 public class SigTest { 
   public static final String name = null; 
   public int getName(int[] data,long index) { 
     return 0; 
   } 
 } 
출력

$ javac SigTest.java 
$ javap -s -p com.demo.SigTest
Compiled from "SigTest.java"
public class com.demo.SigTest extends java.lang.Object{
public static final java.lang.String name;
 Signature: Ljava/lang/String;
public com.demo.SigTest();
 Signature: ()V
public int getName(int[], long);
 Signature: ([IJ)I
static {};
 Signature: ()V
}
-s는 서명 정보 인쇄를 나타냅니다.
-p는 모든 함수와 구성원의 서명 정보를 출력하는 것을 표시하며, 기본적으로public의 서명 정보만 출력합니다.
읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기