【笔记】Java的反射

前言

Java的反射学习笔记
拿到class文件,分析里面的所有数据,操作数据

获取类对象

用类名获取

<Class>:类名

1
<Class>.class

用对象名获取

<class>:引用类型变量名

1
<class>.getClass()

用类的全名获取

<package.class>:类全名

1
Class<?> c = Class.forName("<package.class>");

获得包名类名

获得包名

1
c.getPackage().getName()

获得完整类名

1
c.getName()

获得类名

1
c.getSimpleName()

获得成员变量的定义信息

得到可见的所有成员变量

  • 包括继承的变量
1
getFields()

获得包括不可见的所有变量

  • 包括私有变量,不包括继承的变量
1
getDeclaredFields()

获得可见的一个变量

<name>:变量名

1
getField(<name>)

获得包括不可见的一个变量

1
getDeclaredField(<name>)

获得构造方法的定义信息

获得可见的构造方法

1
getConstructors()

获得包括不可见的构造方法

1
getDeclaredConstructors()

获得可见的一个构造方法

<int>.class:基本类型的类对象

1
getConstructor(<int>.class)

获得包括不可见的一个构造方法

1
getDeclaredConstructor(<int>.class)

获得方法的定义信息

获得可见的方法

  • 包括继承的方法
1
getMethods()

获得本类定义的方法

  • 包括私有方法,不包括继承的方法
1
getDeclearedMethods()

获得可见的一个方法

<method>:方法名

1
getMethod(<method>, <int>.class)

获得本类定义的一个方法

1
getDeclearedMethod(<method>, <int>.class)

创建对象

利用无参构造创建

1
newInstance()

利用有参构造创建

<str>:以字符串为例利用有参构造创建对象

1
2
c.getConstaructor(String.class);
c.newInstance("<str>");

执行方法

1
invoke()

暴力反射

暴力反射关键字

  • Decleared

设置权限

  • 访问私有属性时,需要先设置访问权限,才可以访问
1
c.setAccessible(true);

完成