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의 서명 정보만 출력합니다.
읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.