java方法签名,主要作用在于区分两个方法,即唯一确定一个方法,用于确定两个方法是否可以重载。
在java中,确定一个方法需要三个要素:
1. 调用者,也就是方法所属者,既可以是类,也可以是变量;
2. 方法名,方法的标识;
3. 形参列表,当调用方法时,系统将会根据传入的实参列表匹配。
方法重载的要求就是两同一不同:同一个类中方法名相同,参数列表不同。所以方法签名就由方法名+形参列表构成。
我们先看几个方法以及他们的方法签名:
public void test1(){} test1()V
public void test2(String str) test2(Ljava/lang/String;)V
public int test3(){} test3()I
JVM为我们提供的方法签名实际上是由方法名(上下文的例子简单没有写出全类名)、形参列表、返回值三部分构成,基本形式就是:
全类名.方法名(形参数据类型列表)返回值数据类型
其中,签名中的特殊字符/字母含义:
特殊字符 | 数据类型 | 特殊说明 |
---|---|---|
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
将会打印出String类里所有方法的方法签名。
C:\Users\T>javap -s java.lang.String
Compiled from "String.java"
public final class java.lang.String implements java.io.Serializable, java.lang.Comparable, java.lang.CharSequence {
public static final java.util.Comparator CASE_INSENSITIVE_ORDER;
descriptor: Ljava/util/Comparator;
public java.lang.String();
descriptor: ()V
public java.lang.String(java.lang.String);
descriptor: (Ljava/lang/String;)V
public java.lang.String(char[]);
descriptor: ([C)V
public java.lang.String(char[], int, int);
descriptor: ([CII)V
public java.lang.String(int[], int, int);
descriptor: ([III)V
public java.lang.String(byte[], int, int, int);
descriptor: ([BIII)V
public java.lang.String(byte[], int);
descriptor: ([BI)V
public java.lang.String(byte[], int, int, java.lang.String) throws java.io.UnsupportedEncodingException;
descriptor: ([BIILjava/lang/String;)V
public java.lang.String(byte[], int, int, java.nio.charset.Charset);
descriptor: ([BIILjava/nio/charset/Charset;)V
public java.lang.String(byte[], java.lang.String) throws java.io.UnsupportedEncodingException;
descriptor: ([BLjava/lang/String;)V
public java.lang.String(byte[], java.nio.charset.Charset);
descriptor: ([BLjava/nio/charset/Charset;)V
public java.lang.String(byte[], int, int);
descriptor: ([BII)V
public java.lang.String(byte[]);
descriptor: ([B)V
public java.lang.String(java.lang.StringBuffer);
descriptor: (Ljava/lang/StringBuffer;)V
public java.lang.String(java.lang.StringBuilder);
descriptor: (Ljava/lang/StringBuilder;)V
java.lang.String(char[], boolean);
descriptor: ([CZ)V
public int length();
descriptor: ()I
public boolean isEmpty();
descriptor: ()Z
public char charAt(int);
descriptor: (I)C
public int codePointAt(int);
descriptor: (I)I
public int codePointBefore(int);
descriptor: (I)I
public int codePointCount(int, int);
descriptor: (II)I
public int offsetByCodePoints(int, int);
descriptor: (II)I
void getChars(char[], int);
descriptor: ([CI)V
public void getChars(int, int, char[], int);
descriptor: (II[CI)V
public void getBytes(int, int, byte[], int);
descriptor: (II[BI)V
public byte[] getBytes(java.lang.String) throws java.io.UnsupportedEncodingException;
descriptor: (Ljava/lang/String;)[B
public byte[] getBytes(java.nio.charset.Charset);
descriptor: (Ljava/nio/charset/Charset;)[B
public byte[] getBytes();
descriptor: ()[B
public boolean equals(java.lang.Object);
descriptor: (Ljava/lang/Object;)Z
public boolean contentEquals(java.lang.StringBuffer);
descriptor: (Ljava/lang/StringBuffer;)Z
public boolean contentEquals(java.lang.CharSequence);
descriptor: (Ljava/lang/CharSequence;)Z
public boolean equalsIgnoreCase(java.lang.String);
descriptor: (Ljava/lang/String;)Z
public int compareTo(java.lang.String);
descriptor: (Ljava/lang/String;)I
public int compareToIgnoreCase(java.lang.String);
descriptor: (Ljava/lang/String;)I
public boolean regionMatches(int, java.lang.String, int, int);
descriptor: (ILjava/lang/String;II)Z
public boolean regionMatches(boolean, int, java.lang.String, int, int);
descriptor: (ZILjava/lang/String;II)Z
public boolean startsWith(java.lang.String, int);
descriptor: (Ljava/lang/String;I)Z
public boolean startsWith(java.lang.String);
descriptor: (Ljava/lang/String;)Z
public boolean endsWith(java.lang.String);
descriptor: (Ljava/lang/String;)Z
public int hashCode();
descriptor: ()I
public int indexOf(int);
descriptor: (I)I
public int indexOf(int, int);
descriptor: (II)I
public int lastIndexOf(int);
descriptor: (I)I
public int lastIndexOf(int, int);
descriptor: (II)I
public int indexOf(java.lang.String);
descriptor: (Ljava/lang/String;)I
public int indexOf(java.lang.String, int);
descriptor: (Ljava/lang/String;I)I
static int indexOf(char[], int, int, java.lang.String, int);
descriptor: ([CIILjava/lang/String;I)I
static int indexOf(char[], int, int, char[], int, int, int);
descriptor: ([CII[CIII)I
public int lastIndexOf(java.lang.String);
descriptor: (Ljava/lang/String;)I
public int lastIndexOf(java.lang.String, int);
descriptor: (Ljava/lang/String;I)I
static int lastIndexOf(char[], int, int, java.lang.String, int);
descriptor: ([CIILjava/lang/String;I)I
static int lastIndexOf(char[], int, int, char[], int, int, int);
descriptor: ([CII[CIII)I
public java.lang.String substring(int);
descriptor: (I)Ljava/lang/String;
public java.lang.String substring(int, int);
descriptor: (II)Ljava/lang/String;
public java.lang.CharSequence subSequence(int, int);
descriptor: (II)Ljava/lang/CharSequence;
public java.lang.String concat(java.lang.String);
descriptor: (Ljava/lang/String;)Ljava/lang/String;
public java.lang.String replace(char, char);
descriptor: (CC)Ljava/lang/String;
public boolean matches(java.lang.String);
descriptor: (Ljava/lang/String;)Z
public boolean contains(java.lang.CharSequence);
descriptor: (Ljava/lang/CharSequence;)Z
public java.lang.String replaceFirst(java.lang.String, java.lang.String);
descriptor: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
public java.lang.String replaceAll(java.lang.String, java.lang.String);
descriptor: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
public java.lang.String replace(java.lang.CharSequence, java.lang.CharSequence);
descriptor: (Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
public java.lang.String[] split(java.lang.String, int);
descriptor: (Ljava/lang/String;I)[Ljava/lang/String;
public java.lang.String[] split(java.lang.String);
descriptor: (Ljava/lang/String;)[Ljava/lang/String;
public static java.lang.String join(java.lang.CharSequence, java.lang.CharSequence...);
descriptor: (Ljava/lang/CharSequence;[Ljava/lang/CharSequence;)Ljava/lang/String;
public static java.lang.String join(java.lang.CharSequence, java.lang.Iterable extends java.lang.CharSequence>);
descriptor: (Ljava/lang/CharSequence;Ljava/lang/Iterable;)Ljava/lang/String;
public java.lang.String toLowerCase(java.util.Locale);
descriptor: (Ljava/util/Locale;)Ljava/lang/String;
public java.lang.String toLowerCase();
descriptor: ()Ljava/lang/String;
public java.lang.String toUpperCase(java.util.Locale);
descriptor: (Ljava/util/Locale;)Ljava/lang/String;
public java.lang.String toUpperCase();
descriptor: ()Ljava/lang/String;
public java.lang.String trim();
descriptor: ()Ljava/lang/String;
public java.lang.String toString();
descriptor: ()Ljava/lang/String;
public char[] toCharArray();
descriptor: ()[C
public static java.lang.String format(java.lang.String, java.lang.Object...);
descriptor: (Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
public static java.lang.String format(java.util.Locale, java.lang.String, java.lang.Object...);
descriptor: (Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
public static java.lang.String valueOf(java.lang.Object);
descriptor: (Ljava/lang/Object;)Ljava/lang/String;
public static java.lang.String valueOf(char[]);
descriptor: ([C)Ljava/lang/String;
public static java.lang.String valueOf(char[], int, int);
descriptor: ([CII)Ljava/lang/String;
public static java.lang.String copyValueOf(char[], int, int);
descriptor: ([CII)Ljava/lang/String;
public static java.lang.String copyValueOf(char[]);
descriptor: ([C)Ljava/lang/String;
public static java.lang.String valueOf(boolean);
descriptor: (Z)Ljava/lang/String;
public static java.lang.String valueOf(char);
descriptor: (C)Ljava/lang/String;
public static java.lang.String valueOf(int);
descriptor: (I)Ljava/lang/String;
public static java.lang.String valueOf(long);
descriptor: (J)Ljava/lang/String;
public static java.lang.String valueOf(float);
descriptor: (F)Ljava/lang/String;
public static java.lang.String valueOf(double);
descriptor: (D)Ljava/lang/String;
public native java.lang.String intern();
descriptor: ()Ljava/lang/String;
public int compareTo(java.lang.Object);
descriptor: (Ljava/lang/Object;)I
static {};
descriptor: ()V
}