什么是java的反射机制?
java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制.
java反射机制的作用
是用来编写一些通用性较高的代码或者框架时使用。
反射常用对象
- Class:Class类的实例表示正在运行的Java应用程序中的类和接口
- Constructor:关于类的单个构造方法的信息以及对它的访问权限
- Field:Field提供有关于类和接口的单个字段的信息,以及对它的动态访问权限。
- Method:method提供关于类或接口上单独某个方法的信息。
Class类
Java中java.lang,Class类用于表示一个类的字节码(.class)文件
如何得到某个class文件对应的class对象?
1.已知类和对象的情况下
类名.class
对象.getclass() —object类提供
2.未知类和对象情况下
Class.forName(“包名.类名”)
Constructor类
Constructor类的实例对象代表了一个类的构造方法
得到某个类的所有构造方法:
Constructor [ ] constructor=class .forName("java.lang.String").getConstructors();
得到指定的构造方法并调用:
Constructor constructor =Class.forName("java.lang.String").getConstruct(string.class);
string str=(string)constructor.newInstantce("abc");
Field类
Field类代表某个类的一个成员变量,并提供动态的访问权限
field对象的获得:
得到所有的成员变量:
Field [ ] fields =a.getFields(); // 取得所有的public 属性,包括父类继承。
Field [ ] fields =a.getDeclaredFields(); // 取得所有的声明属性。
得到指定的成员变量:
Field name = a.getField("name");
Field name a.getDeclaredField("name");
设置Field变量是否而已访问:
field.setAccessible(boolean);
Method类
Method代表某个类中的成员方法
Method对象的获得:
1.获取所有方法:
getDeclaredMethods();
getMethods();
2.获取指定方法:
getDeckaredMethod(String name,Class<?>...parameterTypes)
getMethod(String name,Class<?>...parameterTypes)
通过反射执行方法
invoke(object obj,Object…args)