傻大方


首页 > 学习 >

classLoader|classLoader-加载器



按关键词阅读: 加载 ClassLoader

1、c1assLoader-力臣;器java虚拟机与程序的生命周期下列情况将结束虚拟机:执行了 System.exit()方法程序正常执行结束程序非正常终止(异常或错误)由于操作系统导致虚拟机进程终止 。
类的加载连接与初始化 。
加载:查找加载二进制数据(class文件) 。
连接:验证:确保被加载类的正确准备:为类的静态变量分配内存 , 并被其初始化为默认值 。
解析:把类中的符号引用转换为直接引用 。
初始化:为静态变量赋予正确的初始化值 。
举例说明在连接中为静态变量分配默认值和在初始化中为静态变量赋予正确的初始化值的区别 。
package thinkmorecb;
class Singletonprivate sta 。

2、tic Singleton singleton = new Singleton();
public static int counterl;
public static int counter2 = 0;
private Singleton()counterl+;
counter2+;
return singleton;
public class MyTest public static void main(String args)Singleton singleton = Singleton.getInstance();
Systeme outprintin(Hcounterl = + singleton 。

3、.counterl);
System, out.printin (f,counter2 = + singleton. counter2);
)类初始化的时机与加载步骤: 时机:java虚拟机会在每一个类或者是接口 “首次主动使用”时才初始化它们 。
主动使用的六种情况: 创建类的实例 。
访问某个类或接口的静态变量 , 或者对该静态变量附值 。
调用类的静态方法 。
反射(Class . forName ()初始化一个类的子类 虚拟机启动时被标明为启动类的类 。
被动使用:除了以上六种情况 , 其他情况都属于被动使用 , 都不会导致 类的初始化 。
注:Class只有JAVA虚拟机才能创建他的对象 。
加载步骤: 如果这个类还没有 。

4、被加载和连接 , 那就先进行加教和连接 。
如果这个类存在直接的父类 , 并且这个父类还没有被初始化 , 那就先初始化直接的父类 。
如果这个类中存在初始化语句 , 那么就依次执行这些初始化语句 。
举例证明加载步骤 例一、package thinkmorecb;
class Parent static int a = 3;
staticSystem, out .printin (H Parent static block11);
class Child extends Parent static int b = 4;
static System, out .printin (nChild static block11) 。

【classLoader|classLoader-加载器】5、;
)public class Test4(static System, out .printin (HTest4 static block11);
public static void main(String args) System.out.printin(Child.b);
例二、 package thinkmore.cb;
class Parent2 static int a = 3;
static System.out.printin(nParent2 static block);
class Child2 extends Parent2 static int b = 4;
static S 。

6、ystem, out .printin (HChild2 static block11);
)public class Test5(static System, out .printin (nTest5 static block11);
Parent2 parent;
System, out .printin (nparent = new Parent2();
System.out.printin(Parent2.a);
System.out.printin(Child2.b);
例三、 package thinkmorecb;
class Parents ( static int a = 3;
st 。

7、atic System, out .printin (HParents static block11);
static void doSomething() System, out .printin (ndo something11);
class Child3 extends Parents static System, out .printin (nChild3 static block11);
) public class Test6 public static void main(String args) System.out.printin(Child3.a);
Child3.doSo 。

8、mething();
类加载器的类型java虚拟机自带的加载器;器出0015在呼)C+实现:器(Extension)java实现系统类加载器(System,java实现用户自定义的类加载器java.lang.ClassLoader 的子类 例:jdk所提供的类是根类加三器(Bootstrap)加载的 , 而根类加:器是由C+实现的 , 所以在java中没有任何一个类可以代 表根类加载器 , 如果尝试获得根类加载器就会返回NULLo而我们自己定义的类是由AppClassLoader类加载器加载的 。
public class Singleton public static void main(String ar 。

9、gs) throws Exception Class c = Class . forNeime (H java . util. List*);
System.out,printin(c getClassLoader();
Class c2 = Class . forNune ( thinkmore . cc . AH );
System.out.printin(c2.getClassLoader();
)class A类加载器的顺序(层次结构)当命令模式下执行java. xxx. class指令后 , java运行程序会尝试找到jre安装的所在目录 , 然后寻找 jvm.dll (binclien七目录中) ,。

10、接着启动jvm并进行初始化动作 , 产生Bootstrap Loader zBootstrap Loader 会加载 Extended Loader 3f设置 Ex七ended Loader parent Bootstrap LoaderBootstrap Loader 还会加载 Sy stem Loader,并将 System Loader 的 paren 七 设置为 Ex 七 ended Loader Bootstrap Loader 通常由C 语言编写而成 , Extended Loader 由java 编写而成,对应于 sun .misc . launcher$ExtClassLoader ( 。

11、Launcher 中的内部类) 。
System Loader 也是 java 编写而成 , 对 应于 sun . misc . Launcher$AppClassLoader (Launcher 中的内 部类) 。
java程序启动或加载类的顺序图 , 也就是类加载器层次结构java XXX class找到JRE目录2Ilf 找到3JVM初始化载入XXX.class根类加载器(Boots七rap Loader)的加载路径:该加载器没有父加载器 。
它负责加载虚拟机的核心类库 , 如java. lang. *等 。
Bootstrap Loader会搜索系统 参数sun .boot.class.path中指定位置的类 , 默 。

12、认是JRE所在目录的classes下的.class文件,或lib目录 下的.jar文件中(例入:r七.jar)的类并加载 , 可以使用System. getProperty (sun . boot. class . pathz,) 句语来显示sun. boo .class . path中指定的目录 , 例如在我们计算机中显示的以下路径 。
D:Javajrel, 5 , 0_02librt.jar;
D:Javajrel, 5 , 0_02libil8n.jar;
D:Javajrel.5 0_02libsunrsasign.jar;
D:Javajrel, 5 , 0_02libjsse , jar;
D:Ja 。

13、vajrel.5 , 0_02libjce.jar;
D:Javajrel.5 , 0_02libcharsets jar;
D:Javajrel.5 , 0_02classes扩展类加载器(ExtClassLoader)的加载路径它的父类加载器为根类加载器 , 是由java编写而成 , 会搜索系统参数java.ext.dirs中指定位置的类并加载, 使用System.getProperty( java.ext.dirs)语句来显示java.ext.dirs中指定的路 , 或者从JDK的安装 目录的jrelibext子目录(扩展目录)下加载类库 , 如果把用户创建的JAR文件放在这个目录下 , 也会自动由扩 展类加载 。

14、器加载 。
扩展类加载器是JAVA编写 , 是ClassLoader类的子类 。
系统类加载器(AppClassLoader):System. Loader是由java编写而成 , 会搜索系统参数java. class .path中指定位置的类,也就是Classpath 所指定的路径 , 默认是当前工作路径下的.class文件 。
可以使用Sys tem. getProperty (java, class .path) 语句来显示java. class. pa th中指定的路径 。
(如果要使用该加载器加载jar文件 , 那么jar文件必须在 JDK-jre-lib-ext与jre-lib-ext这二个目录中 , 因为我们如果安装了 JRE那么默认会使用我们安装的JRE进 行运行 , 但是我们编译的时候会使用JDK中的JRE) 。



    稿源:(未知)

    【傻大方】网址:/a/2021/0905/0024106871.html

    标题:classLoader|classLoader-加载器


    上一篇:CFG|CFG桩在高速公路中的应用汇总

    下一篇:BEC|BEC二级模拟试题4