14. Reflexión

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Proceso de carga de clases

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Class<?> c1 = Class.forName("com.zyf.dao.User");
Field[] fields = c1.getFields();//获取public 修饰的属性
for (int i = 0; i < fields.length; i++) {
    
    
    System.out.println(fields[i]);
}
System.out.println("11111111111111");
fields = c1.getDeclaredFields();//获取所有属性
for (int i = 0; i < fields.length; i++) {
    
    
    System.out.println(fields[i]);
}

Method[] methods = c1.getMethods();//获取所有本类+父类的publc公开的方法
for (int i = 0; i < methods.length; i++) {
    
    
    System.out.println(methods[i]);
}
System.out.println("=============");
methods = c1.getDeclaredMethods();//获取本类中的所有方法
for (int i = 0; i < methods.length; i++) {
    
    
    System.out.println(methods[i]);
}

Inserte la descripción de la imagen aquí

//1.通过 Class.forName() 获取类
Class c1 = Class.forName("com.zyf.dao.User");
//2.通过newInstance()方法 获取具体的对象
Object user = c1.newInstance();
System.out.println(user);
//3.通过getDeclaredMethod 得到具体的方法
Method getName = c1.getDeclaredMethod("getName");
Method setName = c1.getDeclaredMethod("setName", String.class);
//4.通过invoke进行赋值和获取信息
setName.invoke(user,"zhangsan");
Object invoke = getName.invoke(user);
System.out.println(invoke);
System.out.println(user);
//5.通过getDeclaredConstructor(参数类型) 得到构造方法
Constructor<?> constructor = c1.getDeclaredConstructor(String.class, String.class);
//6.通过newInstance 得到对象 可以无参
Object s = constructor.newInstance("张飞", "11234");
//invoke(对象名,方法的参数值)
setName.invoke(s,"张云飞");
System.out.println(s);
//7.getDeclaredField获取属性
Field name = c1.getDeclaredField("name");//name属性是私有的 获取不到
//不能直接操作私有的属性,我们要关闭程序的安全监测,属性或者方法的setAccessible(true)
name.setAccessible(true);
name.set(s,"ppt");
System.out.println(s);
//8.getDeclaredMethod获取方法
Method setlalala = c1.getDeclaredMethod("setlalala", String.class);
//不能直接操作私有的属性,我们要关闭程序的安全监测,属性或者方法的setAccessible(true)
setlalala.setAccessible(true);
setlalala.invoke(s,"woshishui");
System.out.println(s);

 Field[] fields = c1.getFields();//获取public 修饰的属性
//        for (int i = 0; i < fields.length; i++) {
    
    
//            System.out.println(fields[i]);
//        }
//        System.out.println("11111111111111");
//        fields = c1.getDeclaredFields();//获取所有属性
//        for (int i = 0; i < fields.length; i++) {
    
    
//            System.out.println(fields[i]);
//        }
//
//        Method[] methods = c1.getMethods();//获取所有本类+父类的publc公开的方法
//        for (int i = 0; i < methods.length; i++) {
    
    
//            System.out.println(methods[i]);
//        }
//        System.out.println("=============");
//        methods = c1.getDeclaredMethods();//获取本类中的所有方法
//        for (int i = 0; i < methods.length; i++) {
    
    
//            System.out.println(methods[i]);
//        }

Inserte la descripción de la imagen aquí

Desactivar la supervisión puede mejorar la eficiencia de la ejecución

Supongo que te gusta

Origin blog.csdn.net/zyf_fly66/article/details/113943867
Recomendado
Clasificación