类加载器

java.lang.Class 代表了Java应用程序在运行时所加载的类或接口,当一个类被加载时,JVM就自动为器生成一个Class对象。

可以通过对象的getClass()方法获得Class实例,也可以通过类的静态常量class获得该Class对象。Class.getName()可以获得该类的名字(带命名空间)

可以通过Class.forName()加载类或ClassLoader的loadClass()加载类;

声明一个类并不导致类被加载,只有类的对象生成时(非显示加载:loadClass,Class.forName() )

forName()可以指定静态块代码是否执行;

通过Class对象的接口,可以使用反射机制,探索对象的内部结构;

java程序 找到jre中的jvm(bin目录中),启动并初始化环境,陈升Bootstrap(启动带,引导程序,C编写) Loader->Extended Loader(parent是Bootstrap),Bootstrap->SystemLoader(SystemLoader的parent是Extended);

加载类时,有SystemLoader开始加载,不过每个类加载器都交给他的上层;

Bootstrap(JVM中没有类代表他)加载JVM参数sun.boot.class.path目录下的类(jre/Classes,jre/lib/某些.jar),

没找到后,Extend加载jre/lib/ext/classes, /usr/java/packages/lib/ext,可以查看java.ext.dirs参数;可以通过-Djava.extdirs覆盖该参数;

SystemLoader查看 cp下的(默认是当前工作目录);cp使用*匹配多个jar,使用:分割目录;

启动后路径不可变;如果要变,只能新增类加载器;新增的classLoader的父类是AppClassLoader(=SystemLoader)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值