Javaメソッド署名。 Java Developmentを実行したい友人は、メソッド署名の重要性が、特にその後の最適化において、メソッドの過負荷のより良い説明であることも知っています。これがレコードです。それを見た友達もそれを読むことができます。
メソッド署名の意味
異なる名前と同じ名前の異なる名前を持つメソッドの場合、メソッドの署名はそれほど意味がありませんが、過負荷のメソッドの場合、メソッドの署名は非常に意味があります。オーバーロードされたメソッド間のメソッド名は同じであるため、メソッドを構成する他の要素から別の要素を見つけなければなりません。メソッドを一意に示すことができる方法とメソッド名の構成、およびメソッド本体は考慮されません。次に、正式なパラメーターリストと返品値です。ただし、メソッドを呼び出す人の場合、メソッドの正式なパラメーターデータ型リストの重要性は戻り値よりもはるかに高いため、メソッド署名はメソッド名 +正式なパラメーターリストで構成されます。つまり、メソッド名と正式なパラメーターデータ型リストは、メソッドを一意に決定することができ、メソッドの戻り値とは関係がありません。これは過負荷を判断するための重要な基盤であるため、次のコードは許可されていません。
public long aaaa(){} public int aaaa(){}メソッド署名形式
まず、いくつかの方法とその方法の署名を見てみましょう。
public void test1(){} test1()vpublic void test2(string str)test2(ljava/lang/string;)vpublic int test3(){} test3()i上記の3つの例から、いくつかの小さなルールを簡単に確認できます。
JVMによって提供されるメソッドの署名は、実際には3つの部分で構成されています。メソッド名(上記の例は、シンプルさのために完全なクラス名を書き留めませんでした)、正式なパラメーターリスト、および返品値。基本的な形式は次のとおりです。
フルクラス名。メソッド名(正式なパラメーターデータ型リスト)戻り値データ型
Javaメソッドの署名の特殊文字/文字の意味
| 特殊文字 | データ型 | 特別な指示 |
|---|---|---|
| v | 空所 | メソッドの返品値を表すために一般的に使用されます |
| z | ブール | |
| b | バイト | |
| c | char | |
| s | 短い | |
| 私 | int | |
| j | 長さ | |
| f | フロート | |
| d | ダブル | |
| [ | 配列 | [、そして他の特殊文字と組み合わせて、対応するデータ型の配列を表し、いくつかの[数]のアレイを表します。 |
| l | 完全なカテゴリ名。 | 参照タイプはLで始まります。中央の参照タイプのクラス名全体で終了します |
メソッドが過負荷になっている場合、メソッドリターン値には意味がなく、メソッド名とパラメーターリストによって決定されることに注意する必要があります。
Javapを使用してメソッド署名を生成します
クラスライブラリクラス
$ javap -s java.lang.string "string.java"からコンパイルされたパブリックファイナルクラスjava.lang.stringはjava.lang.objectを拡張します。署名:ljava/util/comparator; public java.lang.string();署名:()v public java.lang.string(java.lang.string);署名:(ljava/lang/string;)v public java.lang.string(char []);署名:([c)v public java.lang.string(char []、int、int);署名:([cii)v public java.lang.string(int []、int、int);署名:([iii)v public java.lang.string(byte []、int、int);署名:([biii)v public java.lang.string(byte []、int);署名:([biii)v public java.lang.string(byte []、int);署名:([bi)v public java.lang.string(byte []、int、int、java.lang.string)Java.io.unsupportedencodingexception;署名:([biiljava/lang/string;)v public java.lang.string(byte []、int、int、java.nio.charset.charset);署名:([biiljava/nio/charset/charset;)v public java.lang.string(byte []、java.lang.string)java.io.unsupportedencodingexception;署名:([bljava/lang/string;)v public java.lang.string(byte []、java.nio.charset.charset);署名:([bljava/nio/charset/charset;)v public java.lang.string(byte []、int、int);署名:([bii)v ...
カスタムクラス
パッケージ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 "sigtest.java" public class com.demo.sigtestはjava.lang.objectを拡張します。署名:ljava/lang/string; public com.demo.sigtest();署名:()vpublic int getName(int []、long);署名:([ij)istatic {};署名:()v}-sは、署名情報を印刷することを意味します
-Pとは、すべての機能とメンバーの署名情報を印刷することを意味します。デフォルトでは、公開署名情報のみが印刷されます
読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!