说明:一般情况下,我们使用某个类时必定知道它是什么类,是用来做什么的,并且能够获得此类的引用。于是我们直接对这个类进行实例化,之后使用这个类对象进行操作。<br><br>反射则是一开始并不知道我要初始化的类对象是什么,自然也无法使用 new 关键字来创建对象了。这时候,我们使用 JDK 提供的反射 API 进行反射调用。反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。是Java被视为动态语言的关键
知识点
反射
.java -> .class 编译<br>
.class -> .java 反编译<br>
获取类的对象
类名.class
对象.getClass()<br>
Class.forName("全限定名")
类.getClassLoader.loadClass("全限定名")<br>
子类.class.getSuperClass()
包装类.class<br>
根据类得到类名(全限定名)
getName()全限定名
getSimpleName()类名
getPackage()包名
Filed类(属性)
getField("属性名")获取公共属性
getName()属性名
getModifiers()修饰符
getType()数据类型
set(对象名属性值) = 对象名.set属性名 属性赋值<br>
get(对象名) = 对象名.get属性名 属性取值<br>
getDeclareField("属性名") 获取属性<br>
setAccessible(true)设置私有属性能访问
getDeclareFields()所有属性
Method(方法)
getMethod(方法名,参数数据类型(无参数传null)) 获取公共方法<br>
getDeclareMethod(方法名,参数数据类型(无参数传null)) 获取私有方法<br>
incoke(对象名,参数列表) = 对象名.方法名 执行方法<br>
getParameterTypes() 得到放回参数列表<br>
getDeclareMethods() 得到类的所有方法<br>
getReturnType() 得到返回值方法的数据类型<br>
构造方法<br>
Class对象.getConstructor() 得到构造方法<br>
Class对象.getConstructors() 得到所有的构造方法<br>