Mecanismo de carga de clases
- Carga de clases: una vez que se carga una clase en la JVM, la misma clase no se volverá a cargar
Definición de reflexión
- La tecnología de reflexión de Java es una de las características del programa Java, ya que permite que el programa Java en ejecución se inspeccione a sí mismo, o se "auto-revise", y manipule directamente las propiedades internas del programa.
- Utilice la reflexión para obtener el nombre de cada miembro de la clase Java y mostrarlo. En pocas palabras, la reflexión es una tecnología que le permite obtener objetos (clases, propiedades, métodos) por nombre.
- —Sentence: Explore y use clases desconocidas en tiempo de compilación en tiempo de ejecución.
Principio de reflexión
Proceso de creación de objetos: por ejemplo, para crear tres objetos de la clase Perro
Perro d1 = perro nuevo ();
Perro d2 = perro nuevo ();
Perro d3 = perro nuevo ();
En este proceso, el proceso de implementación subyacente de JVM es el siguiente:
1. JVM usa DogClassLoader para cargar la clase Dog en la memoria primero, y luego genera inmediatamente un objeto de tipo Class, que puede considerarse como un modelo, y no importa cuántas instancias de la clase Dog se creen en el futuro, el modelo es utilizado para generarlo.
Por lo tanto, solo hay un objeto de tipo Class correspondiente a una clase.
2. Según este modelo, se generan tres instancias d1, d2 y d3 de la clase Dog. Reflection utiliza este método de carga de Java para completar activamente la creación y el uso de objetos.
Cómo utilizar la reflexión
- Tres tipos de acceso a los objetos de la clase:
- Object.getclass ();
- Nombre de clase clase
- Class.forName ("nombre del paquete. Nombre de la clase")
- Solicitar información
- Una clase generalmente consta de tres atributos de partes, métodos comunes y métodos de construcción.
- Clase archivada
- field.setAccessible (false) Habilitar verificación de sintaxis
- field.set ();
- Clase de método
- Clase constructora
- Clase de método
- Clase constructora
- La clase de modificador devuelve modificadores
Class cla; //创建Class对象
cla.getField(""); //获取指定名称的公共属性
cla.getFields(); //获取指定名称的所有公共属性
cla.getDeclaredField(""); //获取指定名称的任意属性
cla.getDeclaredFields(); //获取所有属性
cla.getMethod(""); //获取指定名称的公共方法
cla.getMethods(); //读出对象的所有方法,包括继承object类和父类的所有方法
cla.getDeclaredMethod(""); //获取指定名称的任意方法
cla.getDeclaredMethods(); //获取所有方法时,只会获取当前类中显式出现的方法
cla.getConstructor(); //获取指定名称的公共构造函数
cla.getConstructors(); //获取指定名称的所有公共构造函数
cla.getDeclaredConstructor(); //获取指定名称的任意构造函数
cla.getDeclaredConstructors(); //获取所有构造函数*/
5. field.set();//反射机制中只要给定指定包名下的类名,无论对象的属性是私有还是公共的 都可以访问并修改,属于暴力破解。所以不能轻易使用 ,有很大隐患。
Espero que todos puedan aprender unos de otros, ¡gracias!