前言
反射学习笔记
拿到class文件,分析里面的所有数据,操作数据
获取类对象
用类名获取
<Class>
:类名
用对象名获取
<class>
:引用类型变量名
用类的全名获取
<package.class>
:类全名
1
| Class<?> c = Class.forName("<package.class>");
|
获得包名类名
获得包名
1
| c.getPackage().getName()
|
获得完整类名
获得类名
获得成员变量的定义信息
得到可见的所有成员变量
获得包括不可见的所有变量
获得可见的一个变量
<name>
:变量名
获得包括不可见的一个变量
1
| getDeclaredField(<name>)
|
获得构造方法的定义信息
获得可见的构造方法
获得包括不可见的构造方法
1
| getDeclaredConstructors()
|
获得可见的一个构造方法
<int>.class
:基本类型的类对象
1
| getConstructor(<int>.class)
|
获得包括不可见的一个构造方法
1
| getDeclaredConstructor(<int>.class)
|
获得方法的定义信息
获得可见的方法
获得本类定义的方法
获得可见的一个方法
<method>
:方法名
1
| getMethod(<method>, <int>.class)
|
获得本类定义的一个方法
1
| getDeclearedMethod(<method>, <int>.class)
|
创建对象
利用无参构造创建
利用有参构造创建
<str>
:以字符串为例利用有参构造创建对象
1 2
| c.getConstaructor(String.class); c.newInstance("<str>");
|
执行方法
暴力反射
暴力反射关键字
设置权限
完成