1.简单的来说,反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字, 那么就可以通过反射机制来获得类的所有信息。
2. 通过类的class文件获取类或者类对象
常用方法:
获取类的class文件:①peopleClass = Class.forName(People);
②peopleClass = People.class;
通过类文件创建一个实例:(底层调用的是这个类的无参构造器)
People people = peopleClass.newInstance();
%%%%%获取构造器
获取所有的可访问构造器:
Constructor[] ctr = peopleClass.getConstructors();
Constructor<?>[] getConstructors()
获取指定参数的可访问构造器:
Constructor ctr = peopleClass.getConstructor(Long.class,String.class);
Constructor getConstructor(Class<?>… parameterTypes)
获得输入参数为String类型的构造方法:
Constructor ctr = peopleClass.getDeclaredConstructor(String.class)
ctr.setAccessible(true);//强制取消Java的权限检测
ctr.newInstance(“张三”)
Constructor getDeclaredConstructor(Class<?>… parameterTypes)
%%%%%获取成员变量
获取所有的可访问成员变量
Field[] fields = peopleClass.getFields()
Field[] getFields()
获取指定名称的可访问成员变量
Field field = peopleClass.getField(“name”);
Field getField(String name)
获取所有的成员变量
Field[] field = peopleClass.getDeclaredFields();
Field[] getDeclaredFields()
%%%%%获取类方法
获取所有的可访问方法:
Method[] methods = peopleClass.getMethods();
Method[] getMethods()
获取指定名称的可访问方法
Method method = people.getMethod(“toString”);
Method getMethod(String name, Class<?>… parameterTypes)
获取所有的方法
Method[] methods = peopleClass.getDeclaredMethods();
Method[] getDeclaredMethods()
%%%%
获取类加载器:peopleClass.getClassLoader();
获取类的直接父类:peopleClass.getGenericSuperclass();
Type[] getGenericInterfaces()
获取people类实现的接口:Class[] interface = peopleClass.getInterfaces();
Class<?>[] getInterfaces()
获取给定名称的资源:(以/代表classpath下,不以/开头从当前类的包下查找)
personClass.getResourceAsStream("/log4j.properties")
InputStream getResourceAsStream(String name)