首页 > 编程语言 >Java类加载器

Java类加载器

时间:2023-10-20 23:34:16浏览次数:43  
标签:Java jdk class 父类 目录 加载

Java中的类加载器

Java 中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由Java 应用开发人员编写的。系统提供的类加载器主要有下面三个:


引导类加载器(bootstrap class loader):

它用来加载 Java 的核心库,是用原生代码来实现的,并不继承自 java.lang.ClassLoader。主要负责jdk_home/lib目录下的核心api 或 -Xbootclasspath 选项指定的jar包装入工作(其中的jdk_home是指配置jdk环境变量是java_home的配置路径,一般是jdk/jre所在目录)。

扩展类加载器(extensions class loader):

它用来加载 Java 的扩展库。Java虚拟机的实现会提供一个扩展库目录,扩展类加载器在此目录里面查找并加载 Java 类,主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作。

系统类加载器(system class loader):

它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。可以通过 ClassLoader.getSystemClassLoader()来获取它。主要负责CLASSPATH/-Djava.class.path所指的目录下的类与jar包装入工作.


除了系统提供的类加载器以外,开发人员可以通过继承java.lang.ClassLoader类的方式实现自己的类加载器,从而进行动态加载class文件,以满足一些特殊的需求,这体现java动态实时类装入特性。

除了引导类加载器之外,所有的类加载器都有一个父类加载器,通过getParent()方法可以得到。对于系统提供的类加载器来说,系统类加载器的父类加载器是扩展类加载器,而扩展类加载器的父类加载器是引导类加载器;对于开发人员编写的类加载器来说,其父类加载器是加载此类加载器 Java 类的类加载器。因为类加载器 Java 类如同其它的 Java 类一样,也是要由类加载器来加载的。一般来说,开发人员编写的类加载器的父类加载器是系统类加载器。类加载器通过这种方式组织起来,形成树状结构。树的根节点就是引导类加载器。下图中给出了一个典型的类加载器树状组织结构示意图,其中的箭头指向的是父类加载器。

Java类加载器_虚拟机

Java类加载器_虚拟机_02

标签:Java,jdk,class,父类,目录,加载
From: https://blog.51cto.com/AmbitionGarden/7960359

相关文章

  • 关于JAVA项目中的常用的异常处理情况
    JAVA项目中的常用的异常处理情况总结   在Java应用程序开发中,异常处理是至关重要的,因为它可以帮助您的程序应对各种不可预测的情况和错误。无论是在开发新项目还是在维护现有项目时,了解如何有效地处理异常是确保您的应用程序稳定性和可靠性的关键。本文将深入探讨Java项......
  • ArcGIS工具 - 为源工具箱加载与授权
    ArcToobox工具箱是ArcGIS软件的精髓,它包括了分析、编辑、管理、转化、制图等多个类别成百上千个工具,熟悉常见工具的使用也就掌握ArcGIS软件的一大半。但是,实际工作和项目中,有问题批量性、流程性、复杂性问题依然无法解决,因此,为源GIS结合经验开发了以ArcPy为主的自定义工具箱,并不......
  • Java拾贝第七天——断言
    Java拾贝不建议作为0基础学习,都是本人想到什么写什么断言就是肯定,判断一个的结果。assert布尔表达式;assert布尔表达式:想要附带的信息断言一般是调试使用publicstaticvoidmain(String[]args){intx=10/2;assertx==5;assertx......
  • JAVA
    importjavax.swing.*;classAboutException{publicstaticvoidmain(String[]a){inti=1,j=0,k;k=i/j;try{k=i/j;//Causesdivision-by-zeroexception//thrownewException("Hello.Exce......
  • Java拾贝第七天——throws和throw、自定义异常
    Java拾贝不建议作为0基础学习,都是本人想到什么写什么throws在定义一个方法时可以使用throws,表示此方法不处理异常,转而交给方法的调用处进行处理。publicclassTest7{publicstaticvoidmain(String[]args){Mathmath=newMath();try{......
  • JAVA项目中的常用的异常处理情况总结
    在Java项目开发中,异常处理是至关重要的一部分。良好的异常处理能够提高程序的稳定性和可靠性,使得程序在面对意外情况时能够有所作为,而不至于因为一些小错误而导致整个系统崩溃。以下是Java项目中常见的异常处理情况及其处理方法的详细总结:1.空指针异常(NullPointerException)空指......
  • java基础补习继承、抽象和接口
    之前java都是快速入手,很多的基础知识不牢固。没有系统学过。但是现在系统学也有点费时间,我就是碰到那些基础知识不懂或者不太明白时去找对应课程那一小节去学习那些知识。今天就小小学习了下java的继承、抽象还有接口等基础知识。 ......
  • Java学习之路(一)
    Java学习之路(一)Java基础语法1、注释注释是对代码的解释和说明的文字,可以提高程序的可读性。Java的注释分为三种:单行注释。//这是单行注释多行注释。/* 这是多行注释*/注意:多行注释不能嵌套使用。文档注释。/** 文档注释以/**开始, 以*/结束*/2、关键字关键字是......
  • Java拾贝第七天——异常
    Java拾贝不建议作为0基础学习,都是本人想到什么写什么在程序实际运行过程中,可能存在大量的未知问题,所以在程序中对错误的处理是极其重要的。Java提供的异常处理机制可以更好地解决这方面的问题。认识异常publicstaticvoidmain(String[]args){System.out.prin......
  • distributed-programming-in-java
    WEEK11MAP-REDUCEHADOOP K-VpairSparkResilientdistributeddatasetPageRankRank(B)=sum(Rank(A)/DEST_COUNT(A)) Week2SocketJVM_A->JVM_Bb:serversocketa: bSocket.accept().a.getInputStream()a,getOutputStream a:Socketa.getInputs......