类加载子系统作用
类的加载过程
类的加载过程一:Loading
类的加载过程二:Linking
类的加载过程三:Initialization
tips:
1、如果当前的类中没有声明静态变量和没有静态代码块,则不会存在<clinit>类构造器方法
2、任何一个类声明以后,内部至少存在一个类的构造器
例子:为什么能直接给number赋值 因为它再linking的prepare阶段已经被初始化为0
tips:
1、对用户自定义类来说:默认使用系统类加载器进行加载
2、Java的核心类库都是使用引导类加载器进行加载的
3、在程序中获取不到引导类加载器,因为它是由c/c++进行编写的
启动类加载器
扩展类加载器
在idea中打印时它的简写是ExtClassLoader
应用程序类加载器
自定义加载器
什么时候使用自定义加载器
用户自定义类加载器 实现步骤
ClassLoader的常用方法即获取方法
(简单了解下)
什么是双亲委派机制
双亲委派机制工作原理
例子1:
执行main方法时候 向上加载ClassLoader 然后引导类加载器加载后发现 string是没有main方法的 因为这是加载不到当前类
例子2:
在java.lang包下面根本没有这个类 所以 引导类加载器加载时抛出安全异常 这个lang包是有访问权限的 它是组织我们在这个包下自定义类(起到保护作用)
沙箱安全机制
上面这个例子1、2就是沙箱安全机制起了作用
双亲委派机制的优势
1、避免类的重复加载
2、保护程序安全,防止核心API被随意修改(看例子1、例子2)
1、在JVM中表示两个class对象是否为同一个类存在两个必要条件:
2、对类加载器的引用
3、类的主动使用和被动使用