JAVA反射
一、反射的概述
1.反射机制
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制
2.作用
是用来编写一些通过性较高的代码或则框架的时候使用
3.反射常用对象
3.1Class
class类的实例表示正在运行的java应用程序中的类和接口
3.2Constructor
关于类的单个构造方法的信息以及对它的访问权限
3.3Fileld
提供有关类或接口的单个字段的信息,以及对它的动态访问权限
3.4Method
提供关于类或接口桑单独某个方法的信息。
二、反射常用的API
1.Class类
1.1java中java.lang.Class类用于表示一个类的字节码(.class)文件
1.2如何得到某个class文件对于的calss对象:
---已知类和对象的情况下
类名.class
对象.getClass()
---未知类和对象的情况下:
Class.forName("包名.类名")
1.3 Class类代表某个类的字节码,并提供了加载字节码的方法:forName("包名.类名"),forName方法用于加载类字节码到内存中,并封装成一个class对象
2.Constructor类
2.1Constructor类的实例对象代表类的一个构造方法
2.2得到某个类所有的构造方法
Constructor[] cons=Class.forName("java.lang.String").getConstructors();
2.3得到指定的构造方法并调用
String str=(String) cons.newInstace("abc");
3.Class类的newInstance()方法用来调用类的默认构造方法
String obj=(String)class.forName("java.lang.String").newInstance();
3.Field类
3.1Field类代表某个类中的一个成员变量,并提供动态的访问权限
3.2Field对象的获取
----得到所有的成员变量
Field[] fields=c.getFields();//得到所有public属性,包括父类继承
Field[] fields=c.getDeclaredFields();//取得所有的声明的属性
---得到指定的成员变量
Field name=c.getField("name');
Field name=c.getDeclaredField("name");
3.设置Field变量是否可以访问
field.setAccessible(boolean);
4.Field变量值的读取、设置
field.get(obj);
field.set(ojb,value);
4.Method类
4.1Method类代表某个类中的一个成员方法
4.2Method对象的获得
---获得所有方法
getDeclaredMethods()
getMethods() //得到所有public属性,包括父类继承
---获得指定的方法
getDeclaredMethod(String name,Class<?> ...parameterTypes);
getMethod(String name,Class<?> ...parameterTypes);
4.3通过反射执行方法
invoke(Object obj,Object...args);