API de reflexión de Java

Implementación de clases el mecanismo de reflexión de Java java.lang.reflect están en el paquete, clase java.lang.Class es una API de reflexión de Java en las clases básicas.

clase java.lang.Class

java.lang.Class clase es la clave para lograr la reflexión, una instancia de la clase de Java clase representa un tipo de datos, incluyendo clases, interfaces, enumeraciones, las anotaciones (la anotación), una gran variedad de tipos de datos básicos y vacío. Clase constructor sin público, las instancias de clase se crean automáticamente por la JVM en la carga de clase.

Ejemplos de Clase obtenidos en el código de programa se pueden implementar mediante el código siguiente:

// 1. 通过类型class静态变量
Class clz1 = String.class;
String str = "Hello";

// 2. 通过对象的getClass()方法
Class clz2 = str.getClass();

Cada tipo incluye clases e interfaces, hay una clase estática variable de instancia de clase disponible. Además, cada objeto tiene una instancia de método disponible Clase getClass (), el método es un ejemplo de un método proporcionado por la clase Object.

clase clase proporciona información sobre las muchas formas de obtener objetos en tiempo de ejecución, el código siguiente muestra algunos de estos métodos.

public class ReflectionTest01 {
    public static void main(String[] args) {
        // 获得Class实例
        // 1.通过类型class静态变量
        Class clz1 = String.class;
        String str = "Hello";
        // 2.通过对象的getClass()方法
        Class clz2 = str.getClass();
        // 获得int类型Class实例
        Class clz3 = int.class;
        // 获得Integer类型Class实例
        Class clz4 = Integer.class;
        System.out.println("clz2类名称:" + clz2.getName());
        System.out.println("clz2是否为接口:" + clz2.isInterface());
        System.out.println("clz2是否为数组对象:" + clz2.isArray());
        System.out.println("clz2父类名称:" + clz2.getSuperclass().getName());
        System.out.println("clz2是否为基本类型:" + clz2.isPrimitive());
        System.out.println("clz3是否为基本类型:" + clz3.isPrimitive());
        System.out.println("clz4是否为基本类型:" + clz4.isPrimitive());
    }
}

Los resultados son los siguientes:

clz2类名称:java.lang.String
clz2是否为接口:false
clz2是否为数组对象:false
clz2父类名称:java.lang.Object
clz2是否为基本类型:false
clz3是否为基本类型:true
clz4是否为基本类型:false

prestar atención: Diferencia entre el código anterior, la línea 10 y la línea 12. int es el tipo de datos de base, el resultado de salida es cierto; Entero es una clase, un tipo de datos de referencia, el resultado de salida es falsa.

java.lang.reflect 包

paquete java.lang.reflect ofrece clases utilizadas en la reflexión, las clases principales se describen como sigue:

	Constructor 类:提供类的构造方法信息。
	
	Field 类:提供类或接口中成员变量信息。
	
	Method 类:提供类或接口成员方法信息。
	
	Array 类:提供了动态创建和访问 Java 数组的方法。
	
	Modifier 类:提供类和成员访问修饰符信息。

Código es el siguiente:

public class ReflectionTest {
    public static void main(String[] args) {
        try {
            // 动态加载xx类的运行时对象
            Class c = Class.forName("java.lang.String");
            // 获取成员方法集合
            Method[] methods = c.getDeclaredMethods();
            // 遍历成员方法集合
            for (Method method : methods) {
                // 打印权限修饰符,如public、protected、private
                System.out.print(Modifier.toString(method.getModifiers()));
                // 打印返回值类型名称
                System.out.print(" " + method.getReturnType().getName() + " ");
                // 打印方法名称
                System.out.println(method.getName() + "();");
            }
        } catch (ClassNotFoundException e) {
            System.out.println("找不到指定类");
        }
    }
}

La línea de código 5 se ejecuta cuando se crea una clase con métodos estáticos forName objeto Class (cadena) que se escriba el nombre completo de la cadena de parámetros, si no puede encontrar la clase en la ruta de clase, entonces lanzar una ClassNotFoundException, 17 líneas de código.

Línea 7 vuelve el código es un miembro de una clase de objeto de método array getDeclaredMethods método instancia de clase (). La primera línea de miembro de código 9 está atravesando un conjunto de métodos, en el que el elemento es un tipo de método.

method.getModifiers línea de código 11 () devuelve el método código de acceso modificador constante, tipo int, tal como un representante de público, el significado de estos números se puede convertir en una cadena representada por el método Modifier.toString (int). La primera línea de código 13 para obtener el tipo del valor de retorno, a continuación, llamar getName () devuelve el nombre del tipo de getReturnType por el método () Método. La primera línea de código 15 method.getName () Devuelve el nombre del método.

Publicados 457 artículos originales · ganado elogios 94 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/weixin_45743799/article/details/104727945
Recomendado
Clasificación