反射

1.三种方式 Class获取对象
    1:(最好用) 使用类的 Class属性来获取该类对应的对象举例: Student.class将会返回类对应的对象
    Class<Student> c = Student.class;
    2:调用对象的getclass()方法,返回该对象所属类对应的 class对象
该方法是 object类中的方法,所有的java对象都可以调用该方法
    Class<Student> s = new Student();
    Class<? extends Studnent> c = s.getClass();
    3:(灵活性最高) 使用Cass类中的静 态方法( String className),该方法需要传入字符串参数,该字符串参数的值是某个类的全路径
    Class<?> c = Class.forName("com.Student");

2.反射获取构造方法
(1)Class类中用于获取构造方法的方法
         Constructor<?>[]getConstructors():
            返回所有公共构造方法对象的数组
         Constructor<?>[] getDeclaredConstructors():
            返回所有构造方法对象的数组
         Constructor<T> getConstructor(Class<?>... parameterTypes):
            返回单个公共构造方法对象
         Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes):
            返回单个构造方法对象
(2)Constructor类中用于创建对象的方法
         T newInstance(Object.. initargs):
            根据指定的构造方法创建对象
         暴力反射(初始化私有对象):con.setAccessible(true)
注:参数为要获取的构造方法的参数的个数和数据类型对应的字节码文件对象
    原理:
        1> 把字符串路径传到 forName() 方法中,然后获取到其字节码文件c,
        Class<?> c = Class.forName("com.Student");
        2> 通过c得到单个的构造方法对象con,
        Constructor<?> con = c.getConstructor(Class<?>... parameterTypes);
        3> 然后构造方法对象的newInstance() 方法创建对象
        Object obj = con.newInstance(Object... initargs);

例: Constructdr<?> con = c.getConstructor(String.class, int.class);
        //Constructor<T> getConstructor (Class<?>... parameterTypes)
注:传入Class类型为class字节码型,基本数据类型也可以通过 .class得到对应的Class类型

3.反射获取成员变量并使用
     Class类中用于获取成员变量的方法:
        Field[] getFields(): 返回所有公共成员变量对象的数组
        Field[] getDeclared Fields(): 返回所有成员变量对象的数组
        Field getField(String name):返回单个公共成员变量对象
        Field getDeclaredField(String name): 返回单个成员变量对象
    Field类中用于给成员变量赋值的方法:
        void set(Object obj, Object value):给obj对象的成员变量赋值为value
     // Field提供有关类或接口的单个字段的信息和动态访问

    例:    Field nameField = c.getDeclared("name");
            成员变量的暴力反射: nameField.setAccessible(true);
            赋值: nameField.set(obj,30);

4.反射获取成员方法并使用
     (1) class类中用于获取成员方法的方法
        Method getMethods():返回所有公共成员方法对象的数组,包括继承的
        Method getDeclaredMethods():返回所有成员方法对象的数组不包括继承的
        Method getMethod(String name, Class<?>... parameterTypes):返回单个公共成员方法对象
        Method getDeclaredMethod(String name, Class<?>... parameterTypes):返回单个成员方法对象
    (2) Method类中用于调用成员方法的方法
        Object invoke(Object obj, Object..args):调用obj对象的成员方法,参数是args返回值是 Object类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hvk_l

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值