欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java 方法簽名詳解及實例代碼

 更新時間:2016年10月26日 10:31:54   作者:戎碼人生  
這篇文章主要介紹了 Java 方法簽名詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下

java 方法簽名,我想做java 開發(fā)的朋友也知道,方法簽名的重要性,是方法重載的一個比較好的解釋,尤其是在后續(xù)優(yōu)化方面,這里記錄下,有看到的朋友也可看下,

方法簽名的意義

對于同名不同類、同類不同名的方法,方法簽名的意義并不是很大,但是對于重載方法來說,方法簽名的意義就十分巨大了。由于重載方法之間的方法名是相同的,那么我們勢必要從構(gòu)成方法的其他幾個要素中找到另一個要素與方法名組成能夠唯一標(biāo)示方法的簽名,方法體當(dāng)然不予考慮。那么就是形參列表和返回值了,但是由于對于調(diào)用方法的人來說,方法的形參數(shù)據(jù)類型列表的重要程度要遠(yuǎn)遠(yuǎn)高于返回值,所以方法簽名就由方法名+形參列表構(gòu)成,也就是說,方法名和形參數(shù)據(jù)類型列表可以唯一的確定一個方法,與方法的返回值一點關(guān)系都沒有,這是判斷重載重要依據(jù),所以,以下的代碼是不允許的

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

從以上三個例子,我們就可以很簡單的看出一些小小的規(guī)律:

JVM為我們提供的方法簽名實際上是由方法名(上文的例子為了簡單沒有寫出全類名)、形參列表、返回值三部分構(gòu)成的,基本形式就是:

全類名.方法名(形參數(shù)據(jù)類型列表)返回值數(shù)據(jù)類型

Java方法簽名中特殊字符/字母含義

特殊字符 數(shù)據(jù)類型 特殊說明
V void 一般用于表示方法的返回值
Z boolean
B byte
C char
S short
I int
J long
F float
D double
[ 數(shù)組 以[開頭,配合其他的特殊字符,表示對應(yīng)數(shù)據(jù)類型的數(shù)組,幾個[表示幾維數(shù)組
L 全類名; 引用類型 以 L 開頭 ; 結(jié)尾,中間是引用類型的全類名

一定要注意的是方法重載時,方法返回值沒有什么意義,是由方法名和參數(shù)列表決定的

利用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 表示打印所有函數(shù)和成員的簽名信息,默認(rèn)只打印public的簽名信息

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

最新評論