2、类的加载过程3、自定义ClassLoader4、总结作为一名Java开发者,它又是如何实现对于Java代码中所用到的各种不同类型资源进行装载和初始化呢?
作为一名Java开发者,我们都知道类是Java语言的基本组成部分之一。而在程序运行时,这些类需要被动态地载入内存中才能被使用。这里就要引出一个重要概念——“类加载器”。那么什么是类加载器?它又是如何实现对于Java代码中所用到的各种不同类型资源进行装载和初始化呢?
在Java虚拟机(JVM)启动后,系统会创建三个主要的class loader:Bootstrap ClassLoader、Extension ClassLoader和Application ClassLoader。
1. Bootstrap ClassLoader
Bootstrap ClassLoader 是最顶层的ClassLoader,负责将核心库(JAVA_HOME/lib下面)或 -Xbootclasspath 选项指定路径下面所有jar包或者目录 加载到内存当中。
2. Extension ClassLoader
Extension 类加载器又称为扩展类加载器,它负责将 JAVA_HOME/jre/lib/ext 或者由 java.ext.dirs 系统变量指定位置 中 的 jar 包读取并加入 classpath 中。
3. Application(Class) Loader
Application(Class) Loader 又称为系统级应用程序(应用)Class 加载器,在 JVM 启动时会构造该ClassLoader, 它从环境变量 CLASSPATH 或 -cp 指定的目录或 jar 包中加载 Class。
了解了类加载器之后,我们就可以来看一下类的加载过程。在Java虚拟机内部,一个Class被载入内存时需要经历以下三个步骤:
1. 加载
这是类加载过程中的第一个阶段。在该阶段,JVM 会通过ClassLoader读取.class文件,并创建对应Class对象实例。注意:此处仅仅是将.class文件中保存的内容读取到内存当中,并不包含其他操作(如链接和初始化等)。
2. 链接
在链接阶段,JVM 将已经生成好的字节码进行验证、准备以及解析等处理工作。其中“验证”主要用于检查代码是否符合规范,“准备”则是为变量分配空间并设置默认值,“解析”则是将常量池引用转换成直接引用等操作。
3. 初始化
初始化即为执行
除了系统提供的三种ClassLoader外,我们还可以自己定义ClassLoader来完成特定需求下对资源文件(比如properties)或者class文件(比如插件化开发)动态装载到程序运行环境当中去。
```java
public class MyCustomLoader extends ClassLoader {
@Override
public Class> loadClass(String name) throws ClassNotFoundException {
if(name.startsWith("com.example.")) { // 判断需要自己加载的类名前缀
return findClass(name);
}
return super.loadClass(name);
}
protected Class> findClass(String name) throws ClassNotFoundException {
byte[] classData = getClassDataFromCustomPath();
if (classData == null) {
throw new ClassNotFoundException();
} else {
return defineClass(name, classData, 0, classData.length);
private byte[] getClassDataFromCustomPath() {...} // 根据路径获取对应的二进制流数据
}
```
在Java中,类加载器是非常重要且基础的概念之一。了解其实现原理以及使用方法对于我们编写高质量代码和优化程序性能都有很大帮助。
同时,自定义ClassLoader也为我们提供了更多灵活性,在某些特定场景下可以用来进行动态装载资源文件或者插件化开发等操作。
最后,通过本篇文章的阅读与学习,相信各位读者已经掌握了Java中类加载器相关知识,并能够更好地运用到实际开发当中去。
分享文章:Java中类加载器的分析与理解!详细解析类的加载过程
当前路径:http://www.csdahua.cn/qtweb/news40/380740.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网