Java类加载器(ClassLoader)1

preview
需积分: 0 0 下载量 36 浏览量 更新于2022-08-03 收藏 691KB PDF 举报
Java类加载器(ClassLoader)是Java虚拟机(JVM)的核心组成部分,负责将类的字节码转换为可运行的Java对象。Java类加载器分为三种主要类型:引导类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用程序类加载器(Application ClassLoader,也称为系统类加载器)。它们共同工作,确保了Java应用程序能够正确地找到并加载所需的类。 1. 引导类加载器(Bootstrap ClassLoader): - 由C/C++实现,内嵌于JVM中。 - 负责加载Java核心库,如rt.jar、resources.jar以及sun.boot.class.path路径下的类。 - 不继承自java.lang.ClassLoader,没有父加载器。 - 它仅加载以java、javax、sun等开头的基础包类。 2. 扩展类加载器(Extension ClassLoader): - 用Java编写,实现为sun.misc.Launcher$ExtClassLoader。 - 继承自ClassLoader,父类加载器为引导类加载器。 - 从java.ext.dirs系统属性指定的目录或JRE的lib/ext子目录加载类库。 - 如果用户将JAR文件放入此目录,将自动由扩展类加载器加载。 3. 应用程序类加载器(Application ClassLoader,System ClassLoader): - 用Java实现,实现为sun.misc.Launcher$AppClassLoader。 - 也是ClassLoader的子类,父类加载器为扩展类加载器。 - 负责加载环境变量classpath或系统属性java.class.path指定路径下的类库。 - 是默认的类加载器,一般Java应用的类由它加载。 **自定义类加载器**: - 用户可以通过继承java.lang.ClassLoader或URLClassLoader来自定义加载逻辑。 - 自定义加载器通常用于隔离加载类、改变加载方式、扩展加载源、防止源码泄露等场景。 - 实现自定义类加载器时,建议在JDK1.2后重写findClass()方法而非loadClass(),以避免复杂的操作。 **常用方法**: - `getParent()`:返回当前类加载器的父类加载器。 - `forName(String className)`:根据类名动态加载并初始化类。 - `loadClass(String name)`:根据类名加载类,但不初始化。 理解类加载器的工作机制对于进行JVM优化、插件开发、安全控制等高级Java应用至关重要。通过自定义类加载器,开发者可以控制类的加载过程,满足特定需求,比如模块化系统、热部署等。
今年也要加油呀
  • 粉丝: 26
  • 资源: 312
上传资源 快速赚钱
voice
center-task 前往需求广场,查看用户热搜