类加载器的双亲委托模型的好处:
1、可以确保Java核心库的类型安全:所有的Java应用都至少会引用java.lang.Object类,也就是说在运行期,java.lang.Object这个类会被加载到Java虚拟机中;如果这个加载过程是由Java应用自己的类加载器所完成的,那么很可能会在JVM中存在多个版本的java.lang.Object类,而且这些类之间是不兼容的,相互不可见(正是命名空间在发挥作用)
借助于双亲委托机制,Java核心类库中的类的加载工作都是由启动类加载器来统一完成,从而确保了Java应用所使用的都是同一个版本的Java核心类库,他们之间是相互兼容的
2、可以确保Java核心类库所提供的类不会被定义的类所替代
3、不同的类加载器可以为相同名称(binary name)的类创建额外的命名空间。相同名称的类可以并存在Java虚拟机中,只需要用不同的类加载器来加载他们即可。不同类加载器所加载的类之间是不兼容,这就是相当于在Java虚拟机内部创建了一个又一个相互隔离的Java类空间,这类技术在很多框架中都得到了实际应用
public static ClassLoader getSystemClassLoader()
该方法的作用:
1、返回用于委派的系统类加载器
2、在运行期启动过程当中早期被调用,此时它将创建系统类加载器并将其设置为调用Thread的上下文类加载器。
3、如果在首次调用此方法时定义系统属性“ java.system.class.loader ”,那么该属性的值将被视为将作为系统类加载器返回的类的名称。 类使用默认的系统类加载器加载和必须定义一个公共构造,其被用作代理父ClassLoader类型的单个参数。 然后使用该构造函数创建一个实例,并使用默认的系统类加载器作为参数。 所生成的类加载器被定义为系统类加载器。
网友评论