美文网首页
java类加载器和类反射使用示例

java类加载器和类反射使用示例

作者: 尚学先生 | 来源:发表于2017-04-21 15:16 被阅读0次

一、一个命令对应一个进程。

当我们启动一个Java程序,即启动一个main方法时,都将启动一个Java虚拟机进程,不管这个进程有多么复杂。而不同的JVM进程之间是不会相互影响的。这也就是为什么说,Java程序只有一个入口——main方法,让虚拟机调用。而两个mian方法,对应的是2个JVM进程,启动的是两个不同的类加载器,操作的实际上是不同的类。故而不会互相影响。【免费Java编程开发资料分享:tangniu520666,备注“4”。此学习资料适合Java小白和想加强Java技术的朋友】

二、类加载。

当我们使用一个类,如果这个类还未加载到内存中,系统会通过加载、连接、初始化对类进行初始化。

1、类加载:指的是将类的class文件读入JVM,并为之创建一个Class对象。

2、类连接:指的是把类的二进制数据合并到JRE中,这又分为3个阶段:

a)、校验:检查载入Class文件数据的正确性。

b)、准备:给类的静态变量分配存储空间,并进行默认初始化。

c)、解析:将类的二进制数据中的符号引用替换成直接引用。

3、初始化:对类的静态变量、静态初始化块进行初始化。

(注意:一个final类型的静态属性,如果在编译时已经得到了属性值,那么调用该属性时,不会导致该类初始化,因为这个相当于使用常量;

使用ClassLoader()方法,只是加载该类,并未初始化。)

三、类加载器。

类加载器就是负责将.class文件加载到内存中,并为之生成对应的java.lang.Class对象,它负责加载所有的类,而一旦一个类被加载入JVM中,就不会被再次载入了。

在Java中,一个类用其全限定类名(即包名+类名)作为标识。

而在JVM中,一个类用其全限定类名和其类加载器作为标识。

JVM运行时会产生3个ClassLoader,分别为:BootstrapClassLoader(根类加载器)、ExtClassLoader(扩展类加载器)和AppClassLoader(系统类加载器)。UML结构如下:

其中,BootstrapClassLoader负责加载JRE的核心类库,它不是ClassLoader的子类,使用C++编写,因此我们在Java中看不到它,通过其子类的getParent()方法获取时,将返回null。BootstrapClassLoader负责装载JRE目标下的rt.jar、charsets.jar等Java核心类库。

如图可知,ExtClassLoader和AppClassLoader为ClassLoader的子类。在API中看不到它们,他们位于rt.jar文件中。全限定类名分别为:

sun.misc.Launcher$ExtClassLoader 和 sun.misc.Launcher$AppClassLoader.

其中,ExtClassLoader负责装载JRE扩展目录ext中JAR包,而AppClassLoader负责装载Classpath路径下的类包。

测试如下:

控制台输出:

相关文章

  • java类加载器和类反射使用示例

    一、一个命令对应一个进程。 当我们启动一个Java程序,即启动一个main方法时,都将启动一个Java虚拟机进程,...

  • 玩转java反射

    原文 类加载器什么是类加载器类加载器的职责类加载器的组成 反射什么是反射如何使用反射反射在Android中的应用 ...

  • 2020-07-04【反射】

    类加载 类加载器 反射概述 获取Class类的对象 反射获取构造方法并使用 反射获取成员遍历并使用 反射获取成员方...

  • 在Java的反射中,Class.forName和ClassLoa

    在Java反射中Class.forName()加载类和使用ClassLoader加载类的区别。解释 在java中C...

  • Java基础之反射

    Java-Reflect Class类的使用 方法的反射 成员变量的反射 构造函数的反射 Java类加载机制 一、...

  • b04-2 spring容器相关java知识-反射(精通Spri

    本篇内容: 1、java反射实现 2、java类加载器ClassLoader 3、java反射机制 一、java反...

  • java关于反射 example

    在之前的时候第一次知道了java的反射的概念。 其应用的是java的类加载器, java的类加载器在加载一个类文件...

  • Java基础:反射

    反射注解动态代理相关阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 ...

  • JAVA-Reflect

    一、Class类的使用 二、Java动态加载类 三、Java获取方法信息 四、Java方法的反射

  • java类加载器及其原理

    java类加载器 : java中默认有三种类加载器:引导类加载器,扩展类加载器,系统类加载器(也叫应用类加载器) ...

网友评论

      本文标题:java类加载器和类反射使用示例

      本文链接:https://www.haomeiwen.com/subject/acmdzttx.html