Java中反射的简单使用
2018-11-30 本文已影响0人
王魔王
1、获取Class对象
获取Class对象有三种方式,如下:
//获取Class对象
Class<Person> personClass = Person.class;
Person personFirst = new Person();
Class aClass = personFirst.getClass();
//要使用类的全路径类名
Class person = Class.forName("com.bawie.jingba.Person");
2、获取属性
//获取属性
//获取所有的属性(只能获取public的,包括父类的)
Field[] fields = personClass.getFields();
//获取某个属性(只能获取public的,不包括父类的)
Field nikeName = personClass.getField("nikeName");
//获取所有属性(获取所有声明出的,包括私有的,不包括父类的)
Field[] declaredFields = personClass.getDeclaredFields();
//可以获取私有的某个属性
//参数解释:idNum为属性的名字
Field idNum = personClass.getDeclaredField("idNum");
// 更改public属性值
nikeName.set(personFirst, "王祖贤");
//更改私有属性值
idNum.setAccessible(true);
idNum.set(personFirst, "18");
3、获取构造方法
//获取public无参构造方法(不包括父类)
Constructor[] constructors = personClass.getConstructors();
//获取全部无参构造方法(包括私有的,不包括父类)
Constructor[] declaredConstructors = personClass.getDeclaredConstructors();
//只能获取public有参构造方法
Constructor constructor = personClass.getConstructor(String.class, String.class);
//可以获取private有参数构造方法
Constructor declaredConstructor = personClass.getDeclaredConstructor(String.class);
4、实利化对象
//通过反射示例化对象
Person person1 = personClass.newInstance();
Person o = (Person) constructor.newInstance("林青霞", "东方不败");
5、获取方法
//获取父类的public方法,以及自身的所有方法
Method[] methods = personClass.getMethods();
//获取本类中声明的方法(public和private),不包括父类的方法
Method[] declaredMethods = personClass.getDeclaredMethods();
//获取单个public方法
Method eatMethod = personClass.getMethod("eat");
Method hitMethod = personClass.getMethod("hit", int.class);
//获取单个私有方法
//参数解释:sleep为方法的名字
Method sleepMethod = personClass.getDeclaredMethod("sleep");
//调用方法
eatMethod.invoke(personFirst);
hitMethod.invoke(personFirst, 10);
//调用私有方法
sleepMethod.setAccessible(true);
sleepMethod.invoke(personFirst);
有关调用方法的解释:
通过反射调用方法的时候,传递的第一个参数是要调用的对象,例如personFirst,而后面的参数,就根据方法本身的参数传递即可。
例如:sleep方法、eat方法、hit方法是这样定义的
private void sleep() {
LogUtil.d( "睡觉");
}
public void eat() {
LogUtil.d( "吃饭");
}
public void hit(int count) {
LogUtil.d( "打豆豆" + count + "次");
}