【jvm】---classLoader 双亲委派模型

来源:互联网 发布:u盘 知乎 编辑:程序博客网 时间:2024/05/17 21:55


构造器(jvm加载class文件):
1 static 变量 2 static{}语句 顺序执行; 
注意: static{} 在前面不能提前引用变量,读取不行,但是可以写。

类加载器:双亲委派模型;父类加载器先加载;(是一种组合的关系 , 防止类重复加载,否则可以随便定义如String类 Object类)
这种必须使用根类加载器。

双亲委派: 1 原因:防止类重复加载;

                  2 顺序:从父类到子类的加载顺序 从上到下

JDK已有的 类加载器:
BootStrap ClassLoader :jvm自己启动 C++ ---> rt.jar resource.jar等String.class.getClassLoader() = null
Extension ClassLoader extends Classloader : Java编写 --> %JAVA_HOME%/lib/ext/*.jar
AppClassLoader extends Classloader : Java编写 --->classpathDemo2.class.getClassLoader() = sun.misc.Launcher$AppClassLoader@77556fd
自定义类加载器 extends ClassLoader : java 编写 ----> 自定义加载路径

public class Demo2 {    public static void main(String[] args) {        System.out.println(Demo2.class.getClassLoader());        System.out.println(String.class.getClassLoader());        System.out.println(DocFlavor.URL.class.getClassLoader());        ClassLoader l = Demo2.class.getClassLoader();        while(l!=null){            System.out.println(l);            l = l.getParent();        }    }

}

输出结果:

sun.misc.Launcher$AppClassLoader@77556fdnullnullsun.misc.Launcher$AppClassLoader@77556fdsun.misc.Launcher$ExtClassLoader@707f7052

原创粉丝点击