您的位置:首页 > 编程语言 > Java开发

Java 反射

2016-05-03 20:27 309 查看
反射:通过全类名获取该类的对象

Class是一个描述类的类,在该类中封装了描述方法的Method,描述字段的Field,描述构造器的Constructor等属性。

jvm在加载类时会为每一个类创建唯一的一个Class对象,这个Class对象保存了对应的类的基本信息,比如属性、方法等
获取该类对应的Class对象的三种方法(假设该类为Person):
1、通过类直接获取
Class clazz = Person.class;
2、通过实例的getClass()方法获取
Person person = new Person();
Class clazz = person.getClass();
3、通过全类名获取
Class clazz = Class.forNanme("要获取的类的全类名");

获取Class对象后
1、可以创建类的对象
Person person = clazz.newInstance()
2、可以获取对象的方法和属性
1)Method[] method = clazz.getMethods()//获取该类中的public的所有方法,包括基类中的方法
1)Method[] method = clazz.getDeclaredMethods();//获取该类中声明的所有方法,包括private方法
2)Method method = clazz.getDeclaredMethod("方法名",参数对应的class对象)//只能获取该类自身声明的方法,不能获取基类中声明的方法
例如:clazz.getDeclaredMethod("setName",String.class)

通过Method对象执行方法
method.invoke(对象,参数)//method.invoke(person,name);
//若通过method的invoke调用方法时访问权限不足(比如是private方法时),应该在调用前使被调用的方法变为可访问的
method.setAccessible(true);

例如调用Person类的setName()方法
1、获取Class对象
Class clazz = Class.forName("全类名");
2、创建类的实例
Object object = clazz.newInstance();
3、获取Method对象
Method method = clazz.getDeclaredMethod("setName",String.class);
4、调用方法
String name = "Dunk";
method.invoke(object,name);

如果要获取基类中的私有方法,则需要先获取基类Class对象
Class clazz1 = clazz.getSuperClass()//获取基类Class对象
接下来的就是获取method对象。。。

参考:http://azrael6619.iteye.com/blog/429797
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: