栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java类加载器和双亲委派机制

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java类加载器和双亲委派机制

类加载器

作用:加载Class文件

1 虚拟机自带的加载器
2 启动类(根)加载器
3 扩展类加载器
4 应用程序(系统类)加载器
Bootstrap classLoader:主要负责加载核心的类库(java.lang.*等),构造ExtClassLoader和APPClassLoader。
ExtClassLoader:主要负责加载jre/lib/ext目录下的一些扩展的jar。
AppClassLoader:主要负责加载应用程序的主函数类

public class Car {
    public static void main(String[] args) {
        Car car = new Car();
        Class aClass = car.getClass();
        ClassLoader classLoader = aClass.getClassLoader();
        System.out.println(classLoader);
        System.out.println(classLoader.getParent());
        System.out.println(classLoader.getParent().getParent());
    }
}
运行结果
sun.misc.Launcher$AppClassLoader@18b4aac2
sun.misc.Launcher$ExtClassLoader@1b6d3586
null
双亲委派机制

思路基本理解:当类加载器收到我们加载的类的请求后,它不直接加载指定的类,而是把这个请求委托给自己的父类加载器,最终所有的加载器都会委托给(Bootstrap classLoader)根加载器,只有父类加载器无法加载的时候子类加载器才会加载,如果说子类加载器都无法加载的话就会抛出异常

public class String {
    public java.lang.String toString() {
        return "Hello";
    }

    public static void main(String[] args) {
        String s = new String();
        System.out.println(s.getClass().getClassLoader());
        s.toString();
    }
}
错误: 在类 com.tong.jvm.Car 中找不到 main 方法, 请将 main 方法定义为:
   public static void main(String[] args)
否则 JavaFX 应用程序类必须扩展javafx.application.Application

这里报错说没有找到main方法的原因是:因为在Bootstrap classLoade根加载器,rt.jar包中有String方法,这里就会执行根加载器加载的String,不会执行这里定义的,根加载器下String方法里面没有mian方法。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/872602.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号