Java反射原理

Java编译过程

一个java文件编译生成.class字节码文件然后进入解释阶段 ,编译器将这个class字节码文件加载到内存中 ,会生成一个 Class类对象

Class类对象和对象形成的过程

Class类对象

在java中,一切都是对象。 在某种意义上,java有两种对象 :实例对象和Class类对象。class类对象有以下特征:

  • class类对象只能由JVM创建。
  • 在JVM中,一个类只能有一个class类对象。
  • 类的每个实例都通过class类对象所描述。

Class类对象描述了以下信息:

  • 成员i变量
  • 内部方法
  • 构造方法
  • 实现,继承哪个接口或类

下面是java文件到JVM大致过程:

Class类对象是由类加载器装(ClassLoader)加载到JVM的,并通过调用ClassLoader的defineClass方法自动构造,因此不能显式声明Class类对象。

在类装载阶段,类加载器(ClassLoader)首先检查类的类是否装入了Class对象。 如果还没有装入,默认的类加载器将根据类的限定名.class文件查找类。 当这个类的字节码被加载时,它们将被验证,以确保它没有被损坏,并且不包括恶意的的java代码。 一旦某个类Class对象被加载到内存中,我们就可以用它来创建这个类的所有实例。


反射理解

举个例子

如果我们有两个程序员,其中一个程序员在写程序的时候需要使用第二个程序员写的类,但是第二个程序员还没有完成他写的类。 那么第一个程序员的代码可以被编译吗? 无法编译。 使用Java反射机制,第一个程序员可以编译自己的代码,而不需要第二个程序员编写类。

上面原理中描述了Class对象包含了类的成员,方法等详细信息,知道类的基本结构。 反射的这种检测Java类结构的能力称为Java类的“自检”。

每个人都使用过eclipse,ideal等。 构造对象时,调用对象的方法和属性。 只要点击一下,编译器工具就会自动列出对象可以使用的所有方法和属性,供用户选择。 这是使用Java反射的原则,它是对我们创建的对象的检测和自我检查。

要正确使用Java反射机制,必须使用Java .lang. class类。 它是Java反射机制的起源。 当装入类时,Java虚拟机将自动生成class对象。 通过这个Class对象,我们可以获得装入虚拟机的Class对象的相应方法、成员和构造方法的声明和定义等信息。


反射基本使用以及使用案例:

罗政:Java 如何用反射+实用案例



反射Method的invoke源码分析:

罗政:java 反射 Method invoke 源码分析


强力推荐一个Java架构师修炼博客,全是干货

JAVA架构师修炼

支付宝打赏 微信打赏

如果文章对您有帮助,您可以鼓励一下作者