一.反射的概述
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
二.反射的使用
1.获取Class对象的三种方式
1.1 调用对象的getClass()方法。
1.2 通过类名的class属性
1.3 通过Class类的静态方法:forName(“类路径”)
2.反射常用类:Field,Constructor,Method......
定义一个UserPO类,如下:
public class UserPO { private int id; private String name; private String passWord; public UserPO (){ } public UserPO(int id,String name,String passWord){ this.id=id; this.name=name; this.passWord=passWord; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassWord() { return passWord; } public void setPassWord(String passWord) { this.passWord = passWord; } }
利用反射将UserPO类结构打印在控制台
import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; public class ReflectTest { public static void main(String[] args) throws Exception { //获取类的Class对象 Class<UserPO> userPOC=UserPO.class; StringBuilder sb=new StringBuilder(); //获取类修饰符 String classModifier=Modifier.toString(userPOC.getModifiers()); //获取类名 String className=userPOC.getSimpleName(); sb.append(classModifier+" class "+className+"{ "); //获取私有或者公有的属性,getFields()方法只能获取公有的属性 Field[] fields = userPOC.getDeclaredFields(); for (Field field : fields) { sb.append(" "+Modifier.toString(field.getModifiers()) +" "+field.getType().getSimpleName() +" "+field.getName()+"; "); } //获取userPO中所有方法 Method[] methods = userPOC.getDeclaredMethods(); for (Method method : methods) { //获取修饰符 sb.append(" "+Modifier.toString(method.getModifiers())); //获取返回类型 sb.append(" "+method.getReturnType().getSimpleName()); //获取方法名 sb.append(" "+method.getName()+"("); //获取参数列表 Class<?>[] pt = method.getParameterTypes(); for(int i=0;i<pt.length;i++){ Class<?> cl=pt[i]; sb.append(" "+cl.getSimpleName()); sb.append(" arg"+i); if(i<pt.length-1){ sb.append(","); } } sb.append("){} "); } sb.append(" }"); System.out.println(sb.toString()); }
控制台