反射篇

反射的原理

当我们编写好一个“.java”文件,通过javac编译器编译后会形成一个“.class”文件。当我们运行该文件时,Java虚拟机就通过类加载器(类加载器本质就是一段程序)把“.class”文件加载到内存,在方法区形成该类各方法的代码段和描述该类细节信息的常量池,同时在堆区形成一个表示该类的Class对象(一个java.lang.Class类的实例)。Class对象中存储了指向了该类所有属性和方法的详细信息的指针(同时,还存储了指向该类的父类的Class对象的指针)。我们能够通过Class对象直接创建该类的实例,并调用该类的所有方法,这就是我们所说的反射
类加载器不仅仅可以加载本地文件系统中的“.class”文件,还可以通过各种形式进行加载,比如通过网络上的获取的数据流作为 “.class”。
类加载器本质上实现一个解析的工作,把表示该类的字节数据变成方法区中的字节码和并在堆区产生表示该类的Class对象。


 
 代码实现

反射具体功能方法很多,也很简单易用,详情请查询javadoc。

public class Reflex {

    public static void main(String[] args) {
        Class clazz1 = ReflexClass.class;
        ReflexClass reflexClass = new ReflexClass();
        Class clazz2 = reflexClass.getClass();
        try {
            Class clazz3 = ClassLoader.getSystemClassLoader().loadClass("com.osp.test.common.ReflexClass");
            Class clazz4 = Class.forName("com.osp.test.common.ReflexClass");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class ReflexClass {
    private String field_1;
    private int field_2;

    public String getFunction() {
        return field_1;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值