Java中的反射和类加载机制

  1. 反射机制
    当我们拿到一个.class文档对它一无所知,但文档本身就记录了许多信息。Java在需要使用到某个类时才会将.class文档载入,在JVM产生java.lang.Class实例代表该文档,从Class实例开始,就可以获得到类的许多类型信息。.class文档反映了类基本信息,因而从Class等API取得类信息的方式就称为反射。
    Java.lang.Class类没有公开的构造函数,实例是由JVM自动产生的,每个.class文档加载时,JVM会自动生成对应的Class对象,在取得Class对象后,就可以操作Claas对象的公开方法取得类基本信息,但是也可以通过以下三种方式来获取到每个对象对应的Class对象:
    1.1 通过Object的getClass()方法
    在这里插入图片描述
    1.2 通过.class常量
    在这里插入图片描述
    1.3 通过Class.forName()动态加载类,事先不知道类的名称,可以利用这个方法来动态加载.class文档,取得Class对象后,利用newInstance()方法建立类的实例。
    在这里插入图片描述
    那么,获取到了Class的对象,就可以获取类的信息,动态的操作对象的方法和成员
    列如,有一个Student类:
    在这里插入图片描述
    如何运用反射动态获取到Student的类信息呢?以下代码是动态生成Student实例,并且调用了Student类的私有方法setVuale ()的方法,其中要注意的地方,对应私有的成员要用setAccessible(true)方法打破权限:
    在这里插入图片描述
  2. ClassLoader类加载器
    类加载器都是继承自抽象类java.lang.ClassLoader,每个.class文档加载后,都会有个Class实例来代表。可以由Class的getClassLoader()取得加载对应.class文档的ClassLoader实例,而ClassLoader类加载器的作用就是将.class文件加载到JVM中去。
    以下是常用的三种加载类的方式:
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值