JAVA基础 反射

JAVA基础 反射

我们都知道自然界中光可以进行反射,JAVA有着一个非常突出的动态相关机制:Reflection。java中的反射也同光的反射有一样的原理的。是通过溯源到Class类,然后利用Class类的属性和方法就可以进一步利用到其他具体类的属性和方法。就像光通过湖面反射到各个地方。因此,获取源头Class也是重难点。

实现功能

​ ①在运行时判断任意一个对象所属的类;
​ ②在运行时构造任意一个类的对象;
​ ③在运行时判断任意一个类所具有的成员变量和方法;
​ ④在运行时调用任意一个对象的方法;
​ ⑤生成动态代理;

获取源头Class

	   1.类名.class
        2.Class.forName(权限定名)  -->推荐
        3.对象.getClass()

​ 4.根据一个子类获取父类的Class对象.

​ Class objClass = cls1.getSuperclass();
​ System.out.println(Object.class == objClass);

获取构造器

1>构造器 getConstructor(类<?>… parameterTypes) 返回一个 构造器对象,该对象反映此 类对象所表示的类的指定公共构造函数。

2>构造器<?>[] getConstructors() 返回一个包含 构造器对象的数组, 构造器对象反映了此 类对象所表示的类的所有公共构造函数。

3>构造器 getDeclaredConstructor(类<?>… parameterTypes) 返回一个 构造器对象,该对象反映此 类对象所表示的类或接口的指定构造函数。

4>构造器<?>[] getDeclaredConstructors() 返回 构造器对象的数组, 构造器对象反映由此 类对象表示的类声明的所有构造函数。

创建对象

1.通过Class类的newInstance调用某一个类型的空构造为对象出现初始化信息创建对象 -->弃用

2.调用构造器类型的newInstance方法,创建对象的时候指定调用当前的 构造器为对象初始化信息

setAccessible(true); //忽略权限

反射的操作属性和方法

操作属性

字段 getField(String name) 返回 字段对象,该对象反映此 类对象表示的类或接口的指定公共成员字段。
字段[] getFields() 返回一个包含 字段对象的数组, 字段对象反映此 类对象所表示的类或接口的所有可访问公共字段。
字段 getDeclaredField(String name) 返回 字段对象,该对象反映此 类对象表示的类或接口的指定声明字段。
字段[] getDeclaredFields() 返回 字段对象的数组, 字段对象反映由此 类对象表示的类或接口声明的所有字段。

Object get(Object obj) 返回指定对象上此 字段表示的字段的值。
void set(Object obj, Object value) 将指定对象参数上此 字段对象表示的字段设置为指定的新值。

操作方法

getDeclaredMethod(String name, 类<?>… parameterTypes) 返回 方法对象,该对象反映此 类对象表示的类或接口的指定声明方法。
方法[] getDeclaredMethods()
方法 getMethod(String name, 类<?>… parameterTypes) 返回 方法对象,该对象反映此 类对象表示的类或接口的指定公共成员方法。
方法[] getMethods() 返回一个包含 方法对象的数组, 方法对象反映此 类对象所表示的类或接口的所有公共方法,包括由类或接口声明的那些以及从超类和超接口继承的那些。

Object invoke(Object obj, Object… args) 在具有指定参数的指定对象上调用此 方法对象表示的基础方法。

操作数组

public static void main(String[] args) {
        //反射操作数组
        //构建数组
        int[] arr = (int[]) Array.newInstance(int.class,7);

        //static void set​(Object array, int index, Object value) 将指定数组对象的索引组件的值设置为指定的新值。
        Array.set(arr,0,5);

        System.out.println(Arrays.toString(arr));
        //static Object get(Object array, int index) 返回指定数组对象中索引组件的值。
        System.out.println(Array.get(arr,2));

        System.out.println(arr.getClass().isArray());
        System.out.println("".getClass().isArray());
        

    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值