Java 方法簽名詳解及執行個體代碼_java

來源:互聯網
上載者:User

java 方法簽名,我想做java 開發的朋友也知道,方法簽名的重要性,是方法重載的一個比較好的解釋,尤其是在後續最佳化方面,這裡記錄下,有看到的朋友也可看下,

方法簽名的意義

對於同名不同類、同類不同名的方法,方法簽名的意義並不是很大,但是對於重載方法來說,方法簽名的意義就十分巨大了。由於重載方法之間的方法名是相同的,那麼我們勢必要從構成方法的其他幾個要素中找到另一個要素與方法名組成能夠唯一標示方法的簽名,方法體當然不予考慮。那麼就是形參列表和傳回值了,但是由於對於調用方法的人來說,方法的形參資料類型列表的重要程度要遠遠高於傳回值,所以方法簽名就由方法名+形參列表構成,也就是說,方法名和形參資料類型列表可以唯一的確定一個方法,與方法的傳回值一點關係都沒有,這是判斷重載重要依據,所以,以下的代碼是不允許的

public long aaaa(){ } public int aaaa(){ } 

方法簽名的格式

首先我們先看幾個方法以及他們的方法簽名:

public void test1(){}          test1()Vpublic void test2(String str)   test2(Ljava/lang/String;)Vpublic 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.SigTestCompiled 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: ()Vpublic int getName(int[], long); Signature: ([IJ)Istatic {}; Signature: ()V}

-s 表示列印簽名資訊

-p 表示列印所有函數和成員的簽名資訊,預設只列印public的簽名資訊

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.