Signature de la méthode Java. Les amis qui veulent faire du développement de Java savent également que l'importance de la signature de la méthode est une meilleure explication de la surcharge de méthode, en particulier dans l'optimisation ultérieure. Voici un record. Des amis qui l'ont vu peuvent également le lire.
La signification de la signature de la méthode
Pour les méthodes avec des noms différents et différents noms du même nom, la signature de la méthode n'est pas très significative, mais pour les méthodes surchargées, la signature de la méthode est très significative. Étant donné que les noms de méthode entre les méthodes surchargés sont les mêmes, nous devons trouver un autre élément des autres éléments qui constituent la méthode et la composition du nom de la méthode qui peut indiquer de manière unique la méthode, et le corps de la méthode ne sera pas pris en compte. Il s'agit alors de la liste formelle des paramètres et de la valeur de retour. Cependant, pour ceux qui appellent la méthode, l'importance de la liste formelle des types de données de paramètres de la méthode est beaucoup plus élevée que la valeur de retour, de sorte que la signature de la méthode est composée du nom de la méthode + la liste des paramètres formels. C'est-à-dire que le nom de la méthode et la liste formelle des types de données des paramètres peuvent déterminer de manière unique une méthode et n'ont aucune relation avec la valeur de retour de la méthode. Il s'agit d'une base importante pour juger la surcharge, donc le code suivant n'est pas autorisé.
public long aaaa () {} public int aaaa () {}Format de signature de la méthode
Tout d'abord, examinons plusieurs méthodes et leurs signatures de méthode:
public void test1 () {} test1 () vpublic void test2 (string str) test2 (ljava / lang / string;) vpublic int test3 () {} test3 () i À partir des trois exemples ci-dessus, nous pouvons simplement voir quelques petites règles:
La signature de la méthode fournie par JVM est en fait composée de trois parties: le nom de la méthode (l'exemple ci-dessus n'a pas écrit le nom complet de la classe pour simplicité), la liste des paramètres formels et la valeur de retour. Le formulaire de base est:
Nom complet de la classe. Nom de la méthode (liste de données de paramètres formels) Type de données de valeur de retour
Significations de caractères / lettres spéciales dans la signature de la méthode Java
| Caractères spéciaux | Type de données | Instructions spéciales |
|---|---|---|
| V | vide | Généralement utilisé pour représenter la valeur de retour de la méthode |
| Z | booléen | |
| B | octet | |
| C | carboniser | |
| S | Court | |
| je | int | |
| J | long | |
| F | flotter | |
| D | double | |
| [ | Tableau | Commencez par [, et combiné avec d'autres caractères spéciaux, représentent un tableau de types de données correspondants, et plusieurs [représentent quelques tableaux à quelques dimensions |
| L | Nom complet de la catégorie; | Le type de référence commence par L; se termine avec le nom de classe entier du type de référence au milieu |
Il faut noter que lorsque la méthode est surchargée, la valeur de retour de la méthode n'a pas de sens, il est déterminé par le nom de la méthode et la liste des paramètres.
Générer la signature de la méthode à l'aide de Javap
Classe de bibliothèque de classe
$ javap -s java.lang.string compilé à partir de la classe finale "string.java" java.lang.string étend java.lang.object implémente java.io.serializable, java.lang.comparable, java.lang.charsence {public static final java.util ..Parator Case_INSENSITIONITIVE_ORDORD; Signature: ljava / util / comparateur; 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); Signature: ([BIII) V public java.lang.string (byte [], int); Signature: ([BIII) V public java.lang.string (byte [], int); Signature: ([Bi) V public java.lang.string (byte [], int, int, java.lang.string) lève java.io.unsupportEncodingException; 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) lève java.io.unsuppordencodingException; 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 ...Cours personnalisés
package com.demo; classe publique Sigtest {public static final string name = null; public int getName (int [] data, long index) {return 0; }} Sortir
$ javac sigtest.java $ javap -s -p com.demo.sigtestCompile de "Sigtest.java" classe publique com.demo.sigtest étend java.lang.object {public statique final java.lang.string nom; Signature: ljava / lang / string; public com.demo.sigtest (); Signature: () vpublic int getName (int [], long); Signature: ([ij) istatic {}; Signature: () v}-s signifie imprimer des informations de signature
-P signifie imprimer les informations de signature de toutes les fonctions et membres. Par défaut, seules les informations de signature publique sont imprimées
Merci d'avoir lu, j'espère que cela peut vous aider. Merci pour votre soutien à ce site!