Este artículo analiza el mecanismo de reflexión de Java en un ejemplo. Compártelo para su referencia, como sigue:
Reflexión, a menudo los escuché decir que había leído algunos materiales y podría haberlos usado en el patrón de diseño, pero sentí que no tenía una comprensión más profunda de ello.
1. Echemos un vistazo al concepto de reflexión:
Se refiere principalmente a una capacidad a la que un programa puede acceder, detectar y modificar su propio estado o comportamiento, y puede ajustar o modificar el estado y la semántica relacionada del comportamiento descrito en función del estado y los resultados de su propio comportamiento.
La reflexión es una herramienta poderosa en Java que nos permite crear fácilmente un código flexible que se puede ensamblar cuando se ejecuta sin tener que vincular el código fuente entre los componentes. ¡Pero el uso inadecuado de la reflexión será muy costoso!
Es mareado ver el concepto, sigue leyendo.
2. El papel del mecanismo de reflexión:
1. Descompilar: .class->. Java
2. Acceda a las propiedades, métodos, constructores, etc. de objetos Java a través del mecanismo de reflexión;
Esto parece más fácil de entender.
3. Primero veamos las clases que Sun nos proporciona el mecanismo de reflexión:
java.lang.class; java.lang.reflect.constructor;
Podemos consultar muchos métodos, atributos y otras operaciones en la reflexión de estas cuatro clases. ¿O necesitas aprender a consultar constantemente la API?
4. Implementación de funciones específicas:
1. Hay tres formas de obtener la clase por mecanismo de reflexión.
// El primer método: classc1 = class.forname ("Empleado"); El objeto en el idioma Java tiene un método GetClass Empleado = nuevo Empleado ();2. Cree un objeto: después de obtener la clase, crearemos su objeto y usaremos NewInstance:
Clase C = Class.Forname ("Empleado"); // Cree una nueva instancia de la clase representada por esta clase ObjectO = C.NewinStance ();3. Obtenga atributos: divididos en todos los atributos y atributos especificados:
①.
// Obtener toda la clase de clase C = class.forname ("java.lang.integer"); // obtener todos los atributos? Campo [] fs = c.getDeClaredfields (); // Definir cadena de longitud variable, usar para almacenar para almacenar El atributo StringBuffer sb = new StringBuffer (); // divide cada atributo en esta cadena mediante el método de adjunta // la definición pública más externa sb.append (modifier.toString (c.getModifiers ()) + "clase" + c.getSimplename ( ) +"{/n"); // cada propiedad dentro para (campo campo: fs) {sb.append ("/t"); // space sb.append (modificador .ToString (field.getModifiers ()) + ""); // Obtenga los modificadores del atributo, como público, estático, etc. sb.append (field.gettype (). GetSimplename () + ""); // Obtener el nombre de tipo del atributo SB.Append ( field.getName () + ";/n"); // Nombre de la propiedad + Enter} sb.append ("}"); system.out.println (sb);②.
public static void main (string [] args) lanza la excepción {<span style = "white-space: pre"> </span> // formas anteriores:/* user u = new User (); // set System.out.println (U.AGE); ) ;/ // asigna el valor "110" al atributo de identificación del objeto O idf.set (o, "110");4. Obtenga métodos y métodos de construcción, ya no describa en detalle, solo mire las palabras clave:
Palabras clave del método
significado
getDeclaredMethods ()
Obtener todos los métodos
getReturnType ()
Obtenga el tipo de método de retorno
getParametertypes ()
Obtenga el tipo de parámetro entrante del método
getDeclaredMethod ("Nombre del método", parámetro tipo.class, ...)
Obtener un método específico
Palabras clave del constructor
significado
getDeclaredConstructors ()
Obtener todos los constructores
getDeclaredConstructor (parámetro tipo.class, ...)
Obtenga un constructor específico
Clase principal y interfaz principal
significado
getSuperClass ()
Obtenga la clase madre de una determinada clase
GetInterfaces ()
Obtener una interfaz para un cierto tipo de implementación
De esta manera, podemos obtener varios contenidos de la clase y descompilarlo. Para un lenguaje como Java que se compila primero y luego se ejecuta, el mecanismo de reflexión puede hacer que el código sea más flexible y más fácil de implementar orientado a objetos.
5. Los archivos de configuración de reflexión más hacen que nuestro programa sea más flexible:
En el estudio de los patrones de diseño, al aprender fábricas abstractas, la reflexión se usa para leer más convenientemente las cadenas de enlaces de bases de datos, etc., por lo que no lo entendí mucho en ese momento, por lo que lo copié en consecuencia. Eche un vistazo al uso de archivos de configuración de Reflection + en .NET:
El archivo de configuración utilizado en ese momento era el archivo App.config, y el contenido estaba en formato XML, y el contenido de la base de datos vinculada se completó:
<Configuration> <ppSettings> <add key = "" value = ""/> </appSettings> </figuration>
Cómo escribir reflexión:
ensamblaje.load ("El nombre del ensamblaje actual"). CreateInStance ("El nombre del espacio de nombres actual". El nombre de la clase se instancia);
Esta ventaja es que es fácil facilitarnos transformar la base de datos. Para seleccionarlo.
Por supuesto, lo mismo es cierto en Java, excepto que el archivo de configuración aquí es .properties, llamado archivo de propiedad. Lea el contenido en él a través de la reflexión. De esta manera, el código se soluciona, pero podemos cambiar el contenido del archivo de configuración, ¡lo que hace que nuestro código sea mucho más flexible!
Para resumir, aprender la reflexión de Java nuevamente y usarla de manera flexible puede hacer que nuestro código sea más flexible, pero también tiene sus desventajas, es decir, usarlo reducirá el rendimiento de nuestro software y aumentará la complejidad, por lo que también necesitamos usarlo. con cuidado.
Espero que este artículo sea útil para la programación Java de todos.