反射的概述
java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能成为java语言的反射机制。
java反射机制的作用
是用来编写一些通用性较高的代码或者框架的时候使用
Class类
java中java.lang.Class类用于表示一个类的字节码(.class)文件
如何得到某个class文件对应的Class对象
已知类和对象的情况下
- 类名.class
- 对象.getClass()-----Object类提供
未知类和对象的情况下
- Class.forName("包名.类名")
Constructor类
Constructor类的实例对象代表类的一个构造方法
得到某个类所有的构造方法
Constructor [] constructors = Class.forName("java.lang.String").getConstructors();
得到指定的构造方法并调用
Constructor constructor = Class.forName("java.lang.String").getConstructor(String.class);
String str = (String)constructor.newIanstance("abc");
Class类的newInstance()方法来调用类的默认构造方法
String obj = (String)Class.forName("java.lang.String").newInstance();
Field类
- Field类代表某个类中的一个成员变量,并提供动态的访问权限
- Field对象的获得
- 得到所有的成员变量
Field[] fields = c.getFields();//取得所有public属性(包括父类继承)
Field[] fields = c.getDeclaredFields();//取得所有声明的属性
得到指定的成员变量
Field name=c.getField("name");
Field name= c.getDeclaredField("name");
设置变量是否可以访问
- field.setAccessible(boolean);
Field变量值的读取,设置
- field.get(obj);
- field.set(obj,value);
Method类
Method类代表某个类中的一个成员方法
method对象的获得
获得所有方法
- getDeclaredMethods()
- getMethods()
获得指定的方法
- getDeclaredMethod(String name,Class<?>...parameterTypes)
- getMethod(String name,Class<?>...parametrTypes)
通过反射执行方法
- invoke(Object obj,Object...args)