其實對於同名不同類、同類不同名的方法,方法簽名的意義並不是很大,但是對於重載方法來說,方法簽名的意義就十分巨大了。由於重載方法之間的方法名是相同的,那麼我們勢必要從構成方法的其他幾個要素中找到另一個要素與方法名組成能夠唯一標示方法的簽名,方法體當然不予考慮。那麼就是形參列表和返回值了,但是由於對於調用方法的人來說,方法的形參數據類型列表的重要程度要遠遠高於返回值,所以方法簽名就由方法名+形參列表構成,也就是說,方法名和形參數據類型列表可以唯一的確定一個方法,與方法的返回值一點關係都沒有,這是判斷重載重要依據,所以,以下的代碼是不允許的。
public long aaaa(){
}
public int aaaa(){
}
接下來,就來解釋一下,當程序出現NoSuchMethodException時,JVM為我們提供的異常信息究竟是什麼意思。首先我們先看幾個方法以及他們的方法簽名:
public void test1(){} test1()V
public void test2(String str) test2(Ljava/lang/String;)V
public int test3(){} test3()I
從以上三個例子,我們就可以很簡單的看出一些小小的規律:
JVM為我們提供的方法簽名實際上是由方法名(上文的例子為了簡單沒有寫出全類名)、形參列表、返回值三部分構成的,基本形式就是:
全類名.方法名(形參數據類型列表)返回值數據類型
我們知道了JVM提供的方法簽名的結構之後還是不夠,因為JVM是並沒有特別明確的將數據類型寫出來,而是提供了特殊的表示法,下表就是對特殊表示字符、字母與對應數據類型的關係:
Java方法簽名中特殊字符/字母含義
特殊字符 數據類型 特殊說明
V void 一般用於表示方法的返回值
Z boolean
B byte
C char
S short
I int
J long
F float
D double
[ 數組 以[開頭,配合其他的特殊字符,表示對應數據類型的數組,幾個[表示幾維數組
L全類名; 引用類型 以L開頭、;結尾,中間是引用類型的全類名
用戶登錄
還沒有賬號?立即注冊
用戶注冊
投稿取消
文章分類: |
|
還能輸入300字
上傳中....