• 【java基础】- java双亲委派机制


    在了解双亲委派机制之前,你应当知道classloader(如果不了解,可以现在去恶补一下哈)

    四种classloader

    image.png

    1. 虚拟机自带
    • 引导类加载器(Bootstrap ClassLoader)
    • 扩展类加载器(Extension ClassLoader)
    • 系统类加载器(Application ClassLoader)
    1. 用户自定义
    • 用户自定义类加载器,需要继java.lang.ClassLoader
    package java.lang;
    
    public abstract class ClassLoader {
        ...
    }
    

    双亲委派机制

    当类加载器加载某个类时,自己先不会加载,而是委托给父类加载器,如果父类加载向上还有父类加载器那么依次向上委托,直到最顶层加载器。如果该加载器能够加载该类,那么就由该类加载加载,如果不能则由子类加载加载。如果所有类加载都不能加载则会抛出异常

    双亲委派机制的优点

    1. 加载类带有优先级关系,通过这种关系可以避免重复加载
    2. 避免源代码被污染 比如: 用户自定了java.lang.String类
    package java.lang;
    class String {
        public static void main(String[] args) {
            System.out.println("........")
        }
    }
    

    用户期望的是能够加载自定义的java.lang.String,但实际上的结果:

    错误: 在类 java.lang.String 中找不到 main 方法, 请将 main 方法定义为:
       public static void main(String[] args)
    否则 JavaFX 应用程序类必须扩展javafx.application.Application
    

    没有找到main方法???那么证明jvm没有加载自定义String,而是找到了java core中的java.lang.String. 这样就防止了对java核心代码的污染

  • 相关阅读:
    CA证书申请、认证原理
    流量异常监控
    排查和处理一台被攻击的linux系统及其事后分析
    day39---mysql基础三
    一次专利讲座的笔记
    HBase MVCC 代码阅读(一)
    [翻译]HBase 中的 ACID
    [翻译]HBase 的 MVCC 和内建的原子操作
    HBase Maven 工程模块梳理
    关于 MVCC 的基础
  • 原文地址:https://www.cnblogs.com/amberbar/p/11711024.html
Copyright © 2020-2023  润新知