Java的反射机制
java的反射机制就是在运行环境中可以通过class文件动态的获取某个类的属性,方法,注解等.用的时候就把类的各个成分映射成相应的类去用.
常用用法
1.获取类的实例
- 首先创建一个简单的类POJOUser
package pojo;
public class POJOUser {
private String name;
private String sex;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "POJOUser[name="+name+",sex="+sex+",age="+age+"]";
}
}
- 然后代码演示如何获取这个类的实例
package test;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import pojo.POJOUser;
public class ReflectTest {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
/*
* (1)获取class对象
* 方法1.通过要获取的类的class属性
* 方法2.通过已有此类的对象的getClass()方法
* 方法3.通过Class类的静态forName()方法
*/
Class<POJOUser> clazz = (Class<POJOUser>) Class.forName("pojo.POJOUser");
Class<POJOUser> clazz2 = POJOUser.class;
Class<POJOUser> clazz3 = (Class<POJOUser>) new POJOUser().getClass();
/*
* (2)通过class对象获取类的实例
* 方法1.通过class对象的newInstance()方法
* 方法2.通过class对象获取constructor对象,再由此对象的newInstance()方法
*/
Constructor<POJOUser> constructor = clazz.getConstructor(null);
POJOUser pojoUser = constructor.newInstance(null);
POJOUser pojoUser2 = clazz2.newInstance();
pojoUser.setAge(8);
pojoUser2.setName("xiaoming");
System.out.println("pojoUser.age="+pojoUser.getAge());
System.out.println("pojoUser2.name="+pojoUser2.getName());
}
}