一类的加载连接和初始化1JVM的启动和终止 2类的加载 3类的连接4类的初始化1目的2方式3初始化步骤6初始化时机当java程序首次通过下面6种方式来使用某个类或接口时系统就会初始化该类或接口二类加载器1类加载器简介2加载器层次结构1Bootstrap根引导或原始类加载器2Extension Classloader扩展类加载器3 System ClassLoader系统应用类加载器3类加载机制1三种类加载机制2父子关系3实现类4加载步骤5创建并使用自定义的类加载器classLoader的一些方法
当类被加载之后,系统为之生成一个对应的class对象,接着会进入连接阶段
连接阶段负责把类的二进制数据合并到JRE中
类的连接又可分为如下三个阶段
(1)验证:验证阶段用于检验被加载的类是否有正确的内部结构(2)准备:类准备阶段则负责为类的静态Field分配内存,并设置默认初始值(3)解析:将类的二进制数据中的符号引用替换成直接引用主要是对静态Field进行初始化
类加载器负责加载所有的类,系统为所有被载入内存中的类生成一个java.lang.Class实例 一旦一个类被载入JVM中,同一个类就不会被再次载入了 在JVM中,一个类用其全限定名和其类加载器作为其唯一标识(类名,包名,类加载器实例),如(Person,pg,k1)
负责加载Java的和核心类
file:/D:/Java/jdk1.7.0/jre/lib/resources.jarfile:/D:/Java/jdk1.7.0/jre/lib/rt.jarfile:/D:/Java/jdk1.7.0/jre/lib/sunrsasign.jarfile:/D:/Java/jdk1.7.0/jre/lib/jsse.jarfile:/D:/Java/jdk1.7.0/jre/lib/jce.jarfile:/D:/Java/jdk1.7.0/jre/lib/charsets.jarfile:/D:/Java/jdk1.7.0/jre/lib/classes.jar指定加载附加类
java.exe -Xbootclasspathjava.exe -D(sun.boot.class.path)根类加载器不是ClassLoader的子类 获取根类加载器所加载的全部URL数组
URL[] urls=aun.misc.Launcher.getBootstrapClassPath().getURLs();for(int i=0;i<urls.length;i++){ System.out.PRintln(urls[i].toExternalForm());}负责加载JRE的扩展目录
./jre/ib/extjava.ext.dirs负责加载以下命令或属性指定的
java -classpathjava.class.pathCLASSPATH 获取系统类加载器ClassLoader.getSystemLoader系统类加载器是AppClassLoader的实例,扩展类加载器是ExtClassLoader的实例。实际上,这两个类都是URLClassLoader类的实例。 JVM的根类加载器并不是Java实现的,而且由于程序通常无需访问访问根类加载器,因此访问扩展类加载器的父类加载器时返回null。
新闻热点
疑难解答