JAVA学习笔记之 反射

反射:通过一个class文件对象来使用该class文件中的构造方法,成员变量,成员方法。

  • 如何获取Class类文件的对象呢?

  • A:Object类中的getClass()。

  • B:通过数据类型的一个静态的class属性。

  • C:通过Class类的一个静态方法forName()。

  • 为什么开发中使用第三种格式呢?

  •  因为我们可以通过配置文件来提供类的路径或者方法供我们使用。
    

相关方法:

  1. 方法:public static Class<?> forName(String className)
    意思:通过Class类的一个静态方法获得这个类的字节码对象
    使用:Class class = Class.forName("路径");

2.方法:public T newInstance()
意思:通过字节码对象获取Class的类的对象
使用:Object obj = class.newInstance(); // 其实调用的是类的无参构造方法。

  1. 方法:public Constructor<?>[] getConstructors()
    意思:通过字节码文件对象去获取所有公共的构造方法对象
    使用:Constructor[] cons = class.getConstructors();

4.方法:public Constructor<?>[] getDeclaredConstructors()
意思:通过字节码文件对象去获取所有的构造方法对象
使用:Constructor[] cons = class.getDeclaredConstructors();

5.方法:public Constructor getConstructor(Class<?>... parameterTypes)
意思:通过字节码文件对象去获取构造方法
使用:Constructor cons = class.getConstructor();//单个构造
Constructor con = c.getConstructor(String.class, int.class,
String.class);//多个构造

6.方法:public T newInstance(Object ... initargs)
意思:通过构造方法对象获取此对象
使用:Object obj = cons.newInstance();

7.方法:public void setAccessible(boolean flag)
意思:取消 Java 语言访问检查
使用:cons.setAccessible(true);

8.方法:public Field[] getFields()
意思:通过反射获取所有公共的成员变量
使用:Field[] fields = class.getFields();

9.方法:public Field getField(String name)
意思:通过反射获取获取单个成员变量
使用:Field addressField = class.getField("address");

10.方法:public void set(Object obj,Object value) 针对所有引用类型的成员变量而言
意思:给obj对象的address成员变量赋值为香港
使用:addressField.set(obj, "香港");

11.方法:public Field[] getDeclaredFields()
意思:通过反射获取所有成员变量
使用:Field[] fields = class.getDeclaredFields();

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

推荐阅读更多精彩内容

  • 1.在java语言中,静态的成员变量,普通数据类型类等等都是对象,类也是对象,是java.lang.Class类的...
    HelloWorldLJF阅读 1,235评论 0 0
  • 一、概述 Java反射机制定义 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法...
    CoderZS阅读 5,527评论 0 26
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,314评论 19 139
  • 学习Android的同学注意了!!!学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Android学习交流群...
    kingZXY2009阅读 2,578评论 0 0
  • 今儿我没有规规矩的喝满3000毫升 昨晚睡得晚,今早起的晚,又看了会手机,从中午才开始喝水,也很容易喝的也很好,到...
    无媚阅读 1,683评论 0 0