反射思想总结

本文详细介绍了Java反射机制的三种获取Class对象的方式:类名.class、对象名.getClass()和Class.forName()。接着讲解了如何通过Class对象获取构造器、成员变量和方法,包括公共和私有的,并展示了如何实例化对象、设置成员变量和调用方法。示例代码演示了如何动态调用指定类的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过反射获取Class对象的三种方式:

1. 类名.class属性 

        Class<Student> c1 = Student.class;

2. 对象名.getClass()方法

        Student s = new Student();
        Class<? extends Student> c2 = s.getClass();

3. Class.forName(全类名)方法

        Class<?> c3 = Class.forName("路径");

通过Class类获取构造方法:

Class<?> c = Class.forName("路径");

Constructor<?>[] cons = c.getConstructors();//返回所有公共构造方法对象的数组
        for(Constructor con : cons) {
            System.out.println(con);
        }

Constructor<?>[] cons2 = c.getDeclaredConstructors();//返回所有构造方法对象的数组
        for(Constructor con2 : cons2) {
            System.out.println(con2);
        }

Constructor<?> con = c.getConstructor();//返回单个公共构造方法对象

Object obj = con.newInstance();

Constructor<?> con2 = c.getDeclaredConstructor ();//返回单个构造方法对象

Object obj = con2.newInstance();

通过Class对象获取成员变量对象的方法:

Field[] fields = c.getDeclaredFields();//返回所有成员变量对象的数组
        for(Field field : fields) {
            System.out.println(field);
        }

Field[] fields2 = c.getFields();//返回所有公共成员变量对象的数组
        for(Field field2 : fields2) {
            System.out.println(field2);
        }

Constructor<?> con = c.getConstructor();
        Object obj = con.newInstance();

addressField.set(obj,"西安");//返回单个公共成员变量对象

addressField.DeclaredField (obj,"西安");//返回单个成员变量对象

Class类获取成员方法对象的方法:

 Method[] methods = c.getDeclaredMethods(); //返回所有成员方法对象的数组,不包括继承的
        for(Method method : methods) {
            System.out.println(method);
        }

 Method[] methods2 = c.getMethods();//返回所有公共成员方法对象的数组,包括继承的
        for(Method method2 : methods2) {
            System.out.println(method2);
        }

Method m = c.getMethod("method1");//返回单个公共成员方法对象

Method m2 = c.getDeclaredMethod("method1");//返回单个成员方法对象

 Constructor<?> con = c.getConstructor();
        Object obj = con.newInstance();

m.invoke(obj);

代码实现:

public static void main(String[] args) throws Exception {
        //加载数据
        Properties prop = new Properties();
        FileReader fr = new FileReader("myReflect\\class.txt");
        prop.load(fr);
        fr.close();

        /*
            className=com.itheima_06.Student
            methodName=study
         */
        String className = prop.getProperty("className");
        String methodName = prop.getProperty("methodName");

        //通过反射来使用
        Class<?> c = Class.forName(className);//com.itheima_06.Student

        Constructor<?> con = c.getConstructor();
        Object obj = con.newInstance();

        Method m = c.getMethod(methodName);//study
        m.invoke(obj);
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值