java ----- 反射

    xiaoxiao2024-07-24  8

    v 反射就是把Java类中的各种成分映射成一个个的java对象。例如,一个类有:成员变量,方法,构造方法,包等等信息,利用反射技术可以对一个类进行解剖,把各个组成部分映射成一个个对象。 package com.qf.demo; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; public class Test { public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException { try {//得到对象 Class class1 = Class.forName("com.qf.demo.Person"); //通过对象得到构造方法 构造方法 //得到当前类的所有的构造方法 Constructor[] constructor = class1.getConstructors(); for (Constructor constructor2 : constructor) { System.out.println(constructor2); } //3 通过class得到指定的构造方法 //无参数的 Constructor constructor2 = class1.getConstructor(null); //根据无参数的构造方法创建对象 Object person = constructor2.newInstance(null); System.out.println(person); //有参数的构造方法 Constructor constructor3 = class1.getConstructor(String.class,int.class); Object person2 = constructor3.newInstance("张",23); System.out.println(person2); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } package com.qf.demo; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class Test3 { public static void main(String[] args) throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException { Class class1 = Class.forName("com.qf.demo.Person"); Method[] methods = class1.getMethods(); Method[] methods2 = class1.getDeclaredMethods(); // for (Method method : methods2) { // System.out.println(method); // } //得到单个的方法 无参数的方法 Method method = class1.getMethod("toString",null); Object ss = class1.getConstructor().newInstance(null); method.invoke(ss,null); //有参数的方法 Method method2 = class1.getMethod("setName", String.class); Object ss2 = class1.getConstructor().newInstance(null); method2.invoke(ss2, "你好"); //有返回值的方法 返回值是通过invoke方法得到的 Method method3 = class1.getMethod("getName", null); Object ss3 = class1.getConstructor().newInstance(null); Object object = method3.invoke(ss3, null); System.out.println(object); //调用静态的方法 Method method4 = class1.getMethod("getAge", null); Object object2 = method4.invoke(null, null); System.out.println(object2); //调用私有的方法 Method method5 = class1.getDeclaredMethod("test", null); Object ss4 = class1.getConstructor().newInstance(null); method5.setAccessible(true);//设置私有方法的可读性 method5.invoke(ss4, null); } } package com.qf.demo; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; public class Test4 { public static void main(String[] args) throws ClassNotFoundException, SecurityException, NoSuchFieldException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { // 调用属性 也要通过class对象 Class class1 = Class.forName("com.qf.demo.Person"); // 通过class对象得到属性 //得到所有非私有的属性名 Field[] fields = class1.getFields(); //得到你所有定义的属性名 Field[] fields2 = class1.getDeclaredFields(); for (Field field : fields2) { System.out.println(field); } //得到指定的属性名 Field field = class1.getDeclaredField("name"); //设置私有属性可以被读写 field.setAccessible(true); Object person = class1.getConstructor(null).newInstance(null); field.set(person,"李四");//给name属性赋值 Object object = field.get(person);//得到name属性值 System.out.println(object); } }
    转载请注明原文地址: https://ju.6miu.com/read-1291003.html
    最新回复(0)