Advertisement

Java反射原理与简单源代码分析

阅读量:

前言

首先,需要理解Java类的初始化流程:

编程:将Java源文件编译生成.class字节码文件

加载:由类加载器根据类的全限定名称读取对应的二进制字节流,并将其载入JVM内部,随后将该字节流存储于运行时内存区域的方法区,并生成一个与目标类型相对应的java.lang.Class对象实例

连接:该阶段细分为三个步骤

验证:检查格式是否符合class文件规范、语义是否合理(如final类是否存在子类)以及操作是否合法

准备:为静态变量分配内存空间并赋予初始值;对于被final修饰的变量,其内存空间直接赋以原始值,而非用户设定的初始值

解析:将符号引用转换为直接引用,并为其分配具体内存地址

初始化:若存在父类,则优先完成父类的初始化;随后执行自身的静态代码块。对于静态变量,使用用户指定的值替换原有初始值;若为静态代码块,则执行其中的操作。

原理

Java的反射机制是通过将上述第二步中加载至JVM的.class文件进行操作实现的。此类文件中存储了Java类的全部信息,当无法确定某个类的具体细节时,可以通过反射获取对应的class对象,并执行多种相关操作。

复制代码
    package com.hpsyche.wangyi;
    ​
    /** * @author Hpsyche
     */
    public class

全部评论 (0)

还没有任何评论哟~