加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Java 类加载机制概括

发布时间:2021-11-13 11:17:30 所属栏目:PHP教程 来源:互联网
导读:Java程序的运行,离不开class的加载,所谓类加载就是将编译好的class文件加载的jvm并形成class对象,只有class正确加载才能被实例化和调用。 public class test { public static void main(String[] args) { System.out.println(new test().getClass().getCl

Java程序的运行,离不开class的加载,所谓类加载就是将编译好的class文件加载的jvm并形成class对象,只有class正确加载才能被实例化和调用。
 
public class test {
 
    public static void main(String[] args) {
        System.out.println(new test().getClass().getClassLoader());
        System.out.println(new test().getClass().getClassLoader().getParent());
        System.out.println(new test().getClass().getClassLoader().getParent().getParent());
 
    }
}
 
  调用此方法会显示如下结果:
 
  sun.misc.Launcher$AppClassLoader@232204a1
  sun.misc.Launcher$ExtClassLoader@74a14482
  null
 
  最后一个null是因为这个加载器是由c++方法实现的,所以在代码中获取不到这个类,除了这个有c++实现的类加载之外,其他的类加载器都有parent加载器,基本上呈树形结构,类加载的时候为了尽量保证calss所有的classloader只加载一次,加载时会先从appClassLoader加载,如果加载不到再从ExtClassLoader加载。从上到下,第一个加载类用于加载我们平常自己写的类和classPath中引入的jar,第二个加载类用于加载jdk中的一些扩展类,工具类等。第三个c++实现的加载类用于加载java规范定义的接口和实现,也就是在我们在path中配置的rt.jar文件
 
  在实际应用中我们也可以自定义自己的classLoader,主要继承classLoder这个类就可以,classLoder接口中有一些主要方法:
 
  loadClass ,此方法用来返回已经加载到jvm的class,如果没有则调用findClass加载,如果没有在整个加载过程中都没有加载上则会抛出classNotFoundException
 
  findClass,此方法用来加载class到jvm,如果自定义加载方式的话主要就是重写这个方法
 
  findSystemClass,此方法调用ExtClassLoader加载类,加载不到就继续调用c++实现的那个加载器来加载。
 
  dfineClass,此方法用于将二进制文件转化为class对象,也是类加载过程是十分重要的一个方法

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读