ClassLoader类加载器 _JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > ClassLoader类加载器

ClassLoader类加载器

 2019/1/8 15:37:38  zw7534313  程序员俱乐部  我要评论(0)
  • 摘要:ClassLoader类加载器JAVA类装载方式,有两种:1.隐式装载,程序在运行过程中当碰到通过new等方式生成对象时,隐式调用类装载器加载对应的类到jvm中。2.显式装载,通过class.forname()等方法,显式加载需要的类java类装载器1.BootstrploaderBootstrp加载器是用C++语言写的,它是在Java虚拟机启动后初始化的,它主要负责加载%JAVA_HOME%/jre/lib,
  • 标签:
ClassLoader类加载器

JAVA类装载方式,有两种:
1.隐式装载, 程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加载对应的类到jvm中。
2.显式装载, 通过class.forname()等方法,显式加载需要的类

java类装载器
1.Bootstrp loader
Bootstrp加载器是用C++语言写的,它是在Java虚拟机启动后初始化的,它主要负责加载
%JAVA_HOME%/jre/lib,-Xbootclasspath参数指定的路径以及%JAVA_HOME%/jre/classes中的类。

2.ExtClassLoader 
Bootstrp loader加载ExtClassLoader,并且将ExtClassLoader的父加载器
设置为Bootstrp loader.ExtClassLoader是用Java写的,具体来说就是
sun.misc.Launcher$ExtClassLoader,ExtClassLoader主要加载%JAVA_HOME%/jre/lib/ext,
此路径下的所有classes目录以及java.ext.dirs系统变量指定的路径中类库。

3.AppClassLoader
Bootstrp loader加载完ExtClassLoader后,就会加载AppClassLoader,
并且将AppClassLoader的父加载器指定为 ExtClassLoader。AppClassLoader
也是用Java写成的,它的实现类是 sun.misc.Launcher$AppClassLoader,
另外我们知道ClassLoader中有个getSystemClassLoader方法,
此方法返回的正是AppclassLoader.AppClassLoader主要负责
加载classpath所指定的位置的类或者是jar文档,它也是Java程序默认的类加载器。

描述一下JVM加载class文件的原理机制
1、装载:查找和导入Class文件
2、链接:其中解析步骤是可以选择的 (a)检查:检查载入的class文件数据的正确性 (b)准备:给类的静态变量分配存储空间 (c)解析:将符号引用转成直接引用
3、初始化:对静态变量,静态代码块执行初始化工作

NoClassDefFoundError异常
ClassNotFoundException

//类加载
public class Loading {
private static Loading obj = new Loading();
//private static Loading obj = null;
private static int value1;
private static int value2 = 0; //初始化阶段又赋值了

public Loading() {
value1 = 8;
value2 = value1;
System.out.println("before value1="+value1);
System.out.println("before value2="+value2);
}

public static void main(String[] args) {
//obj = new Loading();
System.out.println("after value1="+value1);
System.out.println("after value2="+value2); //初始化阶段又赋值了
}

static {
System.out.println("static {}..");
}

{
System.out.println("instance {}..");
}
}

  • 相关文章
发表评论
用户名: 匿名