反射
1、什么是反射?
Java中的一种机制!
作用:* 通过反射可以动态的实例化对象,动态的读写属性,动态的调用方法*
2、▲类对象
一句话:一切反射相关的代码都是由“类对象”开始的,即获取Class
牵扯一个问题——>怎么获得类对象?
三种:获取类对象(Class c)
2.1 Class.forName(“对应类的全路径名”);
Class c = Class.forName("com.entity.Person");
2.2 类名.class
Class c = Person.class
2.3 对象.getClass()
Person person = new Person();
Class c = Person.getClass();
注:同一个类的类对象只能创建一个
3、▲三大作用 (以下 c 皆为获取的类对象)
3.1 动态实例化对象
3.2 动态调用方法
3.3 动态读写属性
Class c = Class.forName(path); //path是对应类的全路径名
c.getField(String) //返回某个公开的属性
c.getDeclaredFields() //返回所有属性(任意访问权限,得到一个Field数组)
Field field = c.getDeclaredField(String) //返回指定私有化属性
//如果给此属性赋值,因为私有化的,要设置权限
field.setAccessible(true);
field.set(Object, value);
//object要与类对象对应的类,也可以通过类对象动态实例化,例如c.new Instance();
//value是对这个属性赋的值
4、访问修饰符
//先获取类对象 c ,再获得所有或者单个属性或方法
//例如:
Field field = c.getDeclaredField("uid");
int result = field.getModifiers()); //获取修饰符对应值
//通过Modifier的toString方法
Modifier m = new Modifier();
String m.toString(result); //获取修饰符
修饰符 对应值
默认友好的 0
Public 1
private 2
protected 4
----------------------------
static 8
final 16
----------------------------
synchronized: 32
volatile: 64
transient: 128
native: 256
interface: 512
abstract: 1024
strict: 2048