Java 反射

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);
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、概述 1、Java反射机制(Java-Reflect): 在运行状态中,对于任意一个类,都能够知道这个类中的所...
    年少懵懂丶流年梦阅读 9,951评论 0 5
  • 一、概述 Java反射机制定义 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法...
    CoderZS阅读 5,529评论 0 26
  • 问题: 在运行时,对一个JAVA类,能否知道属性和方法;能否调用它的任意方法? 答案是可以的,JAVA提供一种反射...
    糖宝_阅读 4,066评论 0 1
  • 开学了,各个兴趣班也开始报名。 豆子今年读中班了,老师在班级群里发兴趣班报名的信息,有的是班级老师的,比如手工绘...
    简单足迹阅读 1,885评论 0 0
  • (本来想设成私密的,想想应该没人认识我她也应该看不到的就算了) 今天于我来说是悲伤的一天。就在傍晚知道了喜欢很久的...
    shmily12345阅读 4,028评论 0 1