美文网首页
Java 反射

Java 反射

作者: Auncle_ | 来源:发表于2019-05-22 18:16 被阅读0次

    1.反射的概述

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
    要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.

    2.获取反射中的Class对象

    在 Java API 中,获取 Class 类对象有三种方法:

    1. 第一种,使用 Class.forName 静态方法。当你知道该类的全路径名时,你可以使用该方法获取 Class 类对象。
    Class clz = Class.forName("java.lang.String");
    
    1. 第二种,使用 .class 方法。这种方法只适合在编译前就知道操作的 Class。
    Class clz = String.class;
    
    1. 第三种,使用类对象的 getClass() 方法。
    String str = new String("Hello");
    Class clz = str.getClass();
    

    3.方法说明

    public class AuncleB {
        public static void main(String[] args) throws Exception {
            Class<? extends UserBean> userBean = new UserBean().getClass();
            //获得所有的构造器(包括私有的,共有的..)
            userBean.getDeclaredAnnotations();
            //获得所有共有的构造器
            userBean.getAnnotations();
            //获得所有的字段(包括私有的,共有的..)
            userBean.getDeclaredFields();
            //获得所有的共有字段
            userBean.getFields();
            //获得指定的字段
            userBean.getField("name");
            //获得所有的方法 (包括私有的,共有的..)
            userBean.getDeclaredMethods();
            //获得所有的共有的方法
            userBean.getMethods();
            //获得指定的方法
            userBean.getMethod("name",UserBean.class);
            //获得对象实例
            userBean.newInstance();
        }
    }
    

    4.调用

    
    public class AuncleB {
        public static void main(String[] args) throws Exception {
            Class<?> aClass = Class.forName("com.auncle.bean.UserBean");
            Object o = aClass.newInstance();
            Method method = aClass.getMethod("set" + "UserName", String.class);
            //调用Method invoke 赋值
            method.invoke(o, "auncle");
            Method method1 = aClass.getMethod("getUserName");
            //调用Method invoke 获得对象里面的值
            Object invoke = method1.invoke(o);
            System.out.println(invoke);
        }
    }
    

    相关文章

      网友评论

          本文标题:Java 反射

          本文链接:https://www.haomeiwen.com/subject/zbtpzqtx.html