Resumen de reflexión de Java

Mecanismo de carga de clases

imagen-20201130142038371

  • 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

  1. Tres tipos de acceso a los objetos de la clase:
    1. Object.getclass ();
    2. Nombre de clase clase
    3. Class.forName ("nombre del paquete. Nombre de la clase")
  2. 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!

Supongo que te gusta

Origin blog.csdn.net/qq_42039952/article/details/115058297
Recomendado
Clasificación