Firma del método Java. Los amigos que desean hacer el desarrollo de Java también saben que la importancia de la firma del método es una mejor explicación de la sobrecarga de métodos, especialmente en la optimización posterior. Aquí hay un registro. Los amigos que lo han visto también pueden leerlo.
El significado de la firma del método
Para los métodos con diferentes nombres y diferentes nombres del mismo nombre, la firma del método no es muy significativa, pero para los métodos sobrecargados, la firma del método es muy significativa. Dado que los nombres de métodos entre los métodos sobrecargados son los mismos, debemos encontrar otro elemento de los otros elementos que constituyen el método y la composición del nombre del método que puede indicar de manera exclusiva el método, y el cuerpo del método no se considerará. Entonces es la lista de parámetros formales y el valor de retorno. Sin embargo, para aquellos que llaman al método, la importancia de la lista de tipos de datos de parámetros formales del método es mucho más alta que el valor de retorno, por lo que la firma del método está compuesta por el nombre del método + la lista de parámetros formales. Es decir, el nombre del método y la lista de tipos de datos de parámetros formales pueden determinar de manera única un método y no tener una relación con el valor de retorno del método. Esta es una base importante para juzgar la sobrecarga, por lo que no está permitido el siguiente código.
public Long aaaa () {} public int aaaa () {}Formato de firma de método
Primero, veamos varios métodos y sus firmas de métodos:
public void test1 () {} test1 () vpublic void test2 (string str) test2 (ljava/lang/string;) vpublic int test3 () {} test3 () i De los tres ejemplos anteriores, simplemente podemos ver algunas pequeñas reglas:
La firma del método proporcionada por JVM en realidad está compuesta por tres partes: Nombre del método (el ejemplo anterior no escribió el nombre de clase completa para simplificar), lista de parámetros formales y valor de retorno. La forma básica es:
Nombre de clase completa. Nombre del método (Lista de datos de datos de parámetros formales) Tipo de datos de valor de retorno
Significados de caracteres especiales/cartas en la firma del método Java
| Personajes especiales | Tipo de datos | Instrucciones especiales |
|---|---|---|
| V | vacío | Generalmente se usa para representar el valor de retorno del método |
| Z | booleano | |
| B | byte | |
| do | carbonizarse | |
| S | Corto | |
| I | intencionalmente | |
| J | largo | |
| F | flotar | |
| D | doble | |
| [ | Formación | Comience con [, y combinado con otros caracteres especiales, representan una matriz de los tipos de datos correspondientes, y varios [representan algunas matrices de pocas dimensiones |
| L | Nombre de categoría completo; | El tipo de referencia comienza con L; termina con todo el nombre de clase del tipo de referencia en el medio |
Cabe señalar que cuando el método está sobrecargado, el valor de retorno del método no tiene significado, se determina por el nombre del método y la lista de parámetros.
Generar firma de método usando Javap
Clase de biblioteca de clases
$ javap -s java.lang.string compilado de "string.java" pública clase final java.lang.string extiende java.lang.object implementa java.io.serializable, java.lang.comparable, java.lang.charSequence {public estatic final java.util.comparator case_insensitive_order; Firma: ljava/util/comparador; público java.lang.string (); Firma: () v Public java.lang.string (java.lang.string); Firma: (ljava/lang/string;) v public java.lang.string (char []); Firma: ([c) v Public java.lang.string (char [], int, int); Firma: ([Cii) v Public java.lang.string (int [], int, int); Firma: ([iii) v Public java.lang.string (byte [], int, int); Firma: ([biii) v público java.lang.string (byte [], int); Firma: ([biii) v público java.lang.string (byte [], int); Firma: ([BI) v Public java.lang.string (byte [], int, int, java.lang.string) lanza java.io.unsupportedencodingException; Firma: ([biiljava/lang/string;) v public java.lang.string (byte [], int, int, java.nio.charset.charset); Firma: ([BiilJava/Nio/Charset/Charset;) v Public java.lang.string (byte [], java.lang.string) lanza java.io.unsupportedEncodingException; Firma: ([bljava/lang/string;) v public java.lang.string (byte [], java.nio.charset.charset); Firma: ([bljava/nio/charset/charset;) v public java.lang.string (byte [], int, int); Firma: ([Bii) V ...Clases personalizadas
paquete com.demo; clase pública SigTest {public static static final string name = null; public int getName (int [] datos, índice largo) {return 0; }} Producción
$ javac sigtest.java $ javap -s -p com.demo.sigtestcompiled de "Sigtest.java" clase pública com.demo.sigtest extiende java.lang.object {public static final java.lang.string nombre; Firma: ljava/lang/string; public com.demo.sigTest (); Firma: () vpublic int getName (int [], long); Firma: ([ij) istatic {}; Firma: () V}-s significa imprimir información de firma
-P significa imprimir la información de la firma de todas las funciones y miembros. Por defecto, solo se imprime información de firma pública
Gracias por leer, espero que pueda ayudarte. ¡Gracias por su apoyo para este sitio!