反射

一.反射的概述

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());
        
 }

 控制台

 

原文地址:https://www.cnblogs.com/cw1886/p/9437441.html