JDK中ClassLoader的分类以及ClassLoader间的层次关系

几个常见的ClassLoader:

bootstrap  class  loader:

最早启动的class  loader,一般使用C语言,汇编语言,或是c++写的,用操作系统本地语言写的。这个class  loader你动不了,也没有名字,打印出来是空值。

  1,负责先把其他的class loader   load进来,然后其他class  loader再load其他class

  2,load  jre最核心的类,最核心的rt.jar拿出来把里边的class load进来。

extension  class  loader:

  扩展,负责JDK的一些扩展类,扩展类在jre/bin/ext包里。

application class  loader:

  load我们自己定义的class。

还有很多其他的class  loader:

SecureClassLoader安全的classloader,抽象类。

java.net的URLClassLoader继承自SecureClassLoader,会帮我们检查安全性,load从网上下载的类,如applet等。

我们也可以自己写自己的classloader,检查他的安全性,如检查名字。

代码:

public class TestJDKClassLoader {

    public static void main(String[] args) {

        //最核心的classloader,管理着最核心的类。打印不出来名字
        System.out.println(String.class.getClassLoader());  //null
        //拿到自己定义的类的classloader--->AppClassLoader
        System.out.println(TestJDKClassLoader.class.getClassLoader().getClass().getName());
        //拿到系统的classloader,就是--->AppClassLoader
        System.out.println(ClassLoader.getSystemClassLoader().getClass().getName());

    }

}

运行结果:

null
sun.misc.Launcher$AppClassLoader
sun.misc.Launcher$AppClassLoader

ClassLoader之间的层次关系:

这里说的是对象和对象的关系,不是类之间的关系,不是继承。如app  class loader有一个引用,叫parent,指向他的上一层的class loader。用ClassLoader的getParent()方法可以做到。

ClassLoader c = TestJDKClassLoader.class.getClassLoader();
        while(c!=null){
            System.out.println(c.getClass().getName());
            c = c.getParent();

        }

输出:

sun.misc.Launcher$AppClassLoader
sun.misc.Launcher$ExtClassLoader
时间: 2024-08-05 02:25:27

JDK中ClassLoader的分类以及ClassLoader间的层次关系的相关文章

JavaScript---网络编程(7)-Dom模型(节点间的层次关系,节点的增、删、改)

利用节点间的层次关系获取节点: 上一节讲了3中获取的方式: * ※※一.绝对获取,获取元素的3种方式:-Element * 1.getElementById(): 通过标签中的id属性值获来取该标签对象 * 2.getElementsByName(): 通过标签中的name属性值来获取该标签对象集合 * 3.getElementsByTagName(): 通过标签名来获取该标签对象集合 现在来看看相对获取的方式: ※※二.相对获取(利用节点之间的层次关系),获取节点:-Node 1.父节点:pa

(转载)JDK中的设计模式

写的很好,学习道路更轻松一些 原文地址:http://blog.csdn.net/gtuu0123/article/details/6114197 JDK中设计模式 分类: Java相关 设计模式 2011-01-03 20:42 3550人阅读 评论(6) 收藏 举报 jdk设计模式swingclassloaderdocumentationiterator 本文主要是归纳了JDK中所包含的设计模式,包括作用和其设计类图. 首先来个总结,具体的某个模式可以一个一个慢慢写,希望能对研究JDK和设计

Jdk中的设计模式

转自:http://blog.csdn.net/gtuu0123/article/details/6114197 本文主要是归纳了JDK中所包含的设计模式,包括作用和其设计类图.首先来个总结,具体的某个模式可以一个一个慢慢写,希望能对研究JDK和设计模式有所帮助. 一.设计模式是什么(1)反复出现问题的解决方案(2)增强软件的灵活性(3)适应软件不断变化 二.学习JDK中设计模式的好处(1)借鉴优秀代码的设计,有助于提高代码设计能力(2)JDK的设计中体现了大多数设计模式,是学习设计模式的较好的

初探Java设计模式4:JDK中的设计模式

JDK中设计模式 本文主要是归纳了JDK中所包含的设计模式,包括作用和其设计类图.首先来个总结,具体的某个模式可以一个一个慢慢写,希望能对研究JDK和设计模式有所帮助.一.设计模式是什么(1)反复出现问题的解决方案(2)增强软件的灵活性(3)适应软件不断变化二.学习JDK中设计模式的好处(1)借鉴优秀代码的设计,有助于提高代码设计能力(2)JDK的设计中体现了大多数设计模式,是学习设计模式的较好的方式(3)可以更加深入的了解JDK三.类间关系继承.委托.依赖.聚合.组合?四.介绍方式(1)作用:

浅析JDK中ServiceLoader的源码

前提 紧接着上一篇<通过源码浅析JDK中的资源加载>,ServiceLoader是SPI(Service Provider Interface)中的服务类加载的核心类,也就是,这篇文章先介绍ServiceLoader的使用方式,再分析它的源码. ServiceLoader的使用 这里先列举一个经典的例子,MySQL的Java驱动就是通过ServiceLoader加载的,先引入mysql-connector-java的依赖: <dependency> <groupId>m

【搞定面试官】谈谈你对JDK中Executor的理解?

前言 随着当今处理器计算能力愈发强大,可用的核心数量越来越多,各个应用对其实现更高吞吐量的需求的不断增长,多线程 API 变得非常流行.在此背景下,Java自JDK1.5 提供了自己的多线程框架,称为 Executor 框架. 1. Executor 框架是什么? 1.1 简介 Java Doc中是这么描述的 An object that executes submitted Runnable tasks. This interface provides a way of decoupling

深入理解JDK中的Reference原理和源码实现

前提 这篇文章主要基于JDK11的源码和最近翻看的<深入理解Java虚拟机-2nd>一书的部分内容,对JDK11中的Reference(引用)做一些总结.值得注意的是,通过笔者对比一下JDK11和JDK8对于java.lang.ref包的相关实现,发现代码变化比较大,因此本文的源码分析可能并不适合于JDK11之外的JDK版本. Reference的简介和分类 在JDK1.2之前,Java中的引用的定义是十分传统的:如果reference类型的数据中存储的数值代表的是另一块内存的起始地址,就称这

Objective-C中的Category(分类)

1 Category概念:动态的为已经存在的类添加新的行为(方法) 2 Category(分类)创建的方法 (1)通过Xcode生成分类 (2)可以手动生成分类,在头文件里面生成2个@interface 例如: 在Student.h文件中 @interface Student:NSObject -(void)test1; @end 下面是Student的分类,test为分类的名称 @interface Student(test) -(void)test2; @end 在Student.m文件中

jdk 中Runtime之单例模式 学习

这段代码是我从源码中截取的,大家很容易看到currentRuntime是一个静态变量,getRunTime对应的就是getInstacne.不是说这种方法不好吗? 1 public class Runtime { 2 45 private static Runtime currentRuntime = new Runtime(); 3 4 5 Returns the runtime object associated with the current Java application. Most