Assinatura do método Java. Amigos que desejam fazer o desenvolvimento de Java também sabem que a importância da assinatura do método é uma melhor explicação da sobrecarga de métodos, especialmente na otimização subsequente. Aqui está um registro. Amigos que viram isso também podem lê -lo.
O significado da assinatura do método
Para métodos com nomes diferentes e nomes diferentes de mesmo nome, a assinatura do método não é muito significativa, mas para métodos sobrecarregados, a assinatura do método é muito significativa. Como os nomes dos métodos entre os métodos sobrecarregados são os mesmos, devemos encontrar outro elemento dos outros elementos que constituem o método e a composição do nome do método que podem indicar exclusivamente o método, e o corpo do método não será considerado. Em seguida, é a lista de parâmetros formais e o valor de retorno. No entanto, para aqueles que chamam o método, a importância da lista de tipos de dados de parâmetros formais do método é muito maior que o valor de retorno, portanto a assinatura do método é composta pelo nome do método + a lista formal de parâmetros. Ou seja, o nome do método e a lista formal de tipo de dados do parâmetro podem determinar exclusivamente um método e não ter relação com o valor de retorno do método. Essa é uma base importante para julgar a sobrecarga, portanto o código a seguir não é permitido.
public Long aaaa () {} public int aaaa () {}Formato de assinatura do método
Primeiro, vejamos vários métodos e suas assinaturas de método:
public void test1 () {} test1 () vpublic void test2 (string str) test2 (ljava/lang/string;) vpublic int test3 () {} test3 () i Dos três exemplos acima, podemos simplesmente ver algumas pequenas regras:
A assinatura do método fornecida pela JVM é na verdade composta por três partes: nome do método (o exemplo acima não escreveu o nome completo da classe por simplicidade), lista de parâmetros formais e valor de retorno. A forma básica é:
Nome completo da classe. Nome do método (lista de dados de dados de parâmetro formal) Tipo de dados de valor de retorno
Personagens/significados especiais de caracteres na assinatura do método java
| Personagens especiais | Tipo de dados | Instruções especiais |
|---|---|---|
| V | vazio | Geralmente usado para representar o valor de retorno do método |
| Z | booleano | |
| B | byte | |
| C | char | |
| S | Curto | |
| EU | int | |
| J | longo | |
| F | flutuador | |
| D | dobro | |
| [[ | Variedade | Comece com [e combinado com outros caracteres especiais, representa uma variedade de tipos de dados correspondentes e vários [representam algumas matrizes de poucos dimensões |
| L | Nome completo da categoria; | O tipo de referência começa com L; termina com todo o nome da classe do tipo de referência no meio |
Deve -se notar que, quando o método é sobrecarregado, o valor de retorno do método não tem significado, é determinado pelo nome do método e pela lista de parâmetros.
Gerar assinatura do método usando javap
Classe de biblioteca de classes
$ javap -s java.lang.string Compilado de "String.java" Classe final pública java.lang.string estende java.lang.Object implementa java.io.seriizable, java.lang.comparable, java.lang.charinsence {public STATTIC STATIC..util.comparable, java.lang.charinsence {public STATTIC STATIC, STATION.CHENGATER, Assinatura: ljava/util/comparador; public java.lang.string (); Assinatura: () v public java.lang.string (java.lang.string); Assinatura: (ljava/lang/string;) v public java.lang.string (char []); Assinatura: ([c) v public java.lang.string (char [], int, int); Assinatura: ([cii) v public java.lang.string (int [], int, int); Assinatura: ([iii) v public java.lang.string (byte [], int, int); Assinatura: ([biii) v public java.lang.string (byte [], int); Assinatura: ([biii) v public java.lang.string (byte [], int); Assinatura: ([bi) v public java.lang.string (byte [], int, int, java.lang.string) lança java.io.unsupportEncodingException; Assinatura: ([biiljava/lang/string;) v public java.lang.string (byte [], int, int, java.nio.charset.charset); Assinatura: ([biiljava/nio/charset/charset;) v public java.lang.string (byte [], java.lang.string) lança java.io.unsupportEdEnCodingException; Assinatura: ([bljava/lang/string;) v public java.lang.string (byte [], java.nio.charset.charset); Assinatura: ([Bljava/nio/charset/charset;) v public java.lang.string (byte [], int, int); Assinatura: ([bii) v ...Classes personalizadas
pacote com.demo; classe pública sigtest {public static final string nome = null; public int getName (int [] dados, índice longo) {return 0; }} Saída
$ javac sigtest.java $ javap -s -p com.demo.sigtestcompilado de "sigtest.java" classe pública com.demo.sigtest estende java.lang.object {public static final java.lang.string name; Assinatura: ljava/lang/string; public com.demo.sigTest (); Assinatura: () vpublic int getName (int [], longo); Assinatura: ([ij) istatic {}; Assinatura: () v}-s significa imprimir informações de assinatura
-P significa imprimir as informações de assinatura de todas as funções e membros. Por padrão, apenas informações de assinatura pública são impressas
Obrigado pela leitura, espero que isso possa ajudá -lo. Obrigado pelo seu apoio a este site!