JAVA基础进阶(十三)

一、反射概述

反射是指对于任何一个Class类,在"运行的时候"都可以直接得到这个类全部成分。

在运行时,可以直接得到这个类的构造器对象:Constructor

在运行时,可以直接得到这个类的成员变量对象:Field

在运行时,可以直接得到这个类的成员方法对象:Method

这种运行时动态获取类信息以及动态调用类中成分的能力称为Java语言的反射机制。

反射的第一步都是先得到编译后的Class类对象,然后就可以得到Class的全部成分。

总结:

  1. 反射是在运行时获取类的字节码文件对象,然后可以解析类中的全部成分。
  2. 反射的核心思想和关键就是得到编译以后的class文件对象。

二、获取Class类对象的三种方式

方式一:通过全限定名获取Class类对象:

Class c1 = Class.forName(“全限定名”);

方式二:Class c2 = 类名.class

方式三:Class c3 = 对象.getClass();

获取Class类的对象的三种方式:

二、通过反射获取构造器对象

通过反射获取构造器对象的第一步是先得到类对象,然后从类对象中获取构造器对象。

代码中演示获取无参构造器对象:

通过构造器对象创建对象:

declaredConstructor.newInstance()

在代码中使用无参构造器对象创建对象:

值得注意的是当类中的无参构造方法用private修饰时,需要使用declaredConstructor.setAccessible(true);方法进行暴力反射才能创建对象。

总结:

  1. 反射构造器对象的作用依然是创建对象。
  2. 如果是非public的构造器,需要打开权限(暴力反射),然后再创建对象。setAccessible(boolean)

三、反射获取成员变量对象

通过反射获取成员变量对象的第一步是先得到类对象,然后从类对象中获取成员变量对象。

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

Field类中用于取值、赋值的方法:

代码中演示获取成员变量对象并赋值

总结:

四、反射获取方法对象

反射的第一步是先得到类对象,然后从类对象中获取类的成分对象。

Method类中用于触发执行的方法:invoke

代码中演示获取成分对象并执行:

创建Dog对象,其中eat方法用private修饰的

获取成分对象并执行:

总结:

  1. 反射得到成员方法依然是在某个对象中触发该方法执行。
  2. 如果某成员方法是非public的,需要打开权限(暴力反射),然后再触发执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值