课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
Java编程开发语言是目前使用范围和学习人数都非常多的一种编程开发语言,今天我们就简单来了解一下,Java编程双亲委派机制分享。
一、类加载器
类加载器就是根据指定全限定名称将class文件加载到JVM内存,转为Class对象。
主要有一下四种类加载器:
(1)启动类加载器(BootstrapClassLoader)用来加载java核心类库,无法被java程序直接引用,由C++语言实现(针对HotSpot),负责将存放在\lib目录或-Xbootclasspath参数指定的路径中的类库加载到内存中。。
(2)扩展类加载器(extensionsclassloader):它用来加载Java的扩展库。Java虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载Java类,负责加载\lib\ext目录或java.ext.dirs系统变量指定的路径中的所有类库。。
(3)系统类加载器(systemclassloader)也叫应用类加载器:它根据Java应用的类路径(CLASSPATH)来加载Java类。一般来说,Java应用的类都是由它来完成加载的。可以通过ClassLoader.getSystemClassLoader()来获取它。负责加载用户类路径(classpath)上的指定类库,我们可以直接使用这个类加载器。一般情况,如果我们没有自定义类加载器默认就是用这个加载器。
(4)用户自定义类加载器,通过继承java.lang.ClassLoader类的方式实现。
二、双亲委派机制
如果一个类加载器收到类加载的请求,它先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器完成。每个类加载器都是如此,只有当父加载器在自己的搜索范围内找不到指定的类时(即ClassNotFoundException),子加载器才会尝试自己去加载。
为什么需要双亲委派模型?
在这里,先想一下,如果没有双亲委派,那么用户是不是可以自己定义一个java.lang.Object的同名类,java.lang.String的同名类,并把它放到ClassPath中,那么类之间的比较结果及类的性将无法保证,因此,为什么需要双亲委派模型?防止内存中出现多份同样的字节码。
怎么打破双亲委派模型?
打破双亲委派机制则不仅要继承ClassLoader类,还要重写loadClass和findClass方法。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。