Ява -метод подпись. Друзья, которые хотят сделать разработку 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. | пустота | Обычно используется для представления возвращаемого значения метода |
| Z. | логический | |
| Беременный | байт | |
| В | девчонка | |
| С | Короткий | |
| я | инт | |
| Дж | длинный | |
| Фон | плавать | |
| Дюймовый | двойной | |
| [ | Множество | Начните с [, и в сочетании с другими особыми символами представляют собой массив соответствующих типов данных и несколько [представляют собой несколько измерных массивов |
| Л | Полное название категории; | Справочный тип начинается с L; заканчивается всеми названием класса типа в середине |
Следует отметить, что, когда метод перегружен, возвращаемое значение метода не имеет значения, оно определяется именем метода и списком параметров.
Генерировать подпись метода с использованием javap
Класс библиотека класс
$ javap -s java.lang.string, скомпилированный из "string.java" public final Class java.lang.string расширяет java.lang.object реализует java.io.serializable, java.lang.comparabable, java.lang.chare. Подпись: 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; открытый класс 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 {public Static Final Final. Подпись: ljava/lang/string; public com.demo.sigtest (); Подпись: () Vpublic int getName (int [], long); Подпись: ([ij) Istatic {}; Подпись: () V}-s означает печатать информацию о подписи
-p означает печатать информацию о подписи всех функций и участников. По умолчанию печатается только публичная информация о подписи
Спасибо за чтение, я надеюсь, что это поможет вам. Спасибо за поддержку этого сайта!