Java 反射机制

一、Java反射机制定义

运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。运行状态,如下图红框所示。

反射的实质:在运行状态下,通过类的class字节码,获取类的实例、成员变量和方法

图1 Java编译运行过程

说明1:Java有两种状态。1.编译时:通过 javac 命令,生成一个或多个.class字节码文件(每个.class字节码文件对应一个类);2.运行时:通过 java 命令,将一个或多个.class字节码文件加载到内存中(由JVM提供的类加载器完成)。

说明2:对比正常实例化对象和反射机制实例化对象

图2 实例化对象

二、Java反射机制的功能及API

2.1 Java反射机制的功能

1. 在运行时判断任意一个对象所属的类

2. 在运行时构造任意一个类的对象

3. 在运行时判断任意一个类所具有的成员变量和方法

4. 在运行时调用任意一个对象的成员变量和方法

2.2 Java反射机制的API

java.lang.Class:代表一个类

java.lang.reflect.Method:代表类的方法

java.lang.reflect.Field:代表类的成员变量

java.lang.reflect.Constructor:代表类的构造方法

三、Java反射机制的实例化对象

实例化Class类对象的四种方法:

1. Class clazz = String.class;   

// 若已知具体的类,通过类的class属性获取,该方法最为安全可靠,程序性能最高

2. Person person = new Person();Class clazz = person.getClass();

// 已知某个类的实例,调用该实例的getClass()方法获取Class对象

3. String className = “java.lang.String”;Class clazz = Class.forName(className);

// 已知一个类的全类名,且该类在类路径下,可通过Class类的静态方法forName()获取,可能抛ClassNotFoundException

4. ClassLoader cl = this.getClass().getClassLoader();Class clazz = cl.loadClass(“类的全类名”);

// 通过类加载器来获取

图3 类加载全过程
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 什么是java反射: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一...
    乐百事52淑熙阅读 370评论 0 0
  • 不论是 Java 开发 还是 Android 开发,反射、泛型、注解 都是架构设计中很重要的一个知识点。 为了更好...
    JamFF阅读 576评论 0 4
  • 问题: 在运行时,对一个JAVA类,能否知道属性和方法;能否调用它的任意方法? 答案是可以的,JAVA提供一种反射...
    糖宝_阅读 788评论 0 1
  • 1、概念 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能...
    Specime阅读 495评论 0 0
  • 一切成功的事情都是有迹可循的,就像很多“100000+”的文章,一定是有很突出的地方——如果我们仔细研究这些文章,...
    长安行动派阅读 989评论 6 18

友情链接更多精彩内容