zoukankan      html  css  js  c++  java
  • 反射

    一.反射的概述

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

     控制台

     

  • 相关阅读:
    jQuery 选择器
    jQuery 语法
    jQuery 简介
    JSON 使用
    JSON 语法
    Android——Activity跳转
    Activity
    Activity2.java
    Android——Activity练习
    Andriod——手机尺寸相关的概念 +尺寸单位+关于颜色
  • 原文地址:https://www.cnblogs.com/cw1886/p/9437441.html
Copyright © 2011-2022 走看看