`

Java的类加载器初学习

    博客分类:
  • Java
阅读更多

      Java在需要使用类的时候,才会将类加载,Java的类加载是由类加载器来完成的。

      在加载类时,每个类加载器会先将类的加载任务交给其parent,如果parent找不到,再由自己负责加载。即在加载类时,会以Bootstrap Loader——>Extended Loader——>System Loader的顺序来寻找类,如果都找不到,就会丢出NoClassDefFoundError。需要注意到是,Bootstrap Loader通常由C编写而成,而Extended Loader和System Loader是由Java编写而成,下面的代码中某个输出语句打印出null就是这个原因。

      当在命令行模式下执行java XX.class指令后,java运行程序会尝试找到JRE安装目录,寻找jvm.dll,启动JVM并进行初始化,产生Bootstrap Loader,接着Bootstrap Loader加载Extended Loader和System Loader,并设置Extended Loader的parent为Bootstrap Loader,而System Loader定parent为Extended Loader,最后再载入XX.class。

 

public class classLoaderTest 
{
	public static void main(String[] args)
	{
		classLoaderTest test = new classLoaderTest();
		
		Class<?> c = test.getClass();
		
		ClassLoader loader = c.getClassLoader();
		
		System.out.println(loader);		
		System.out.println(loader.getParent());		
		System.out.println(loader.getParent().getParent());  //输出为:null
	
		System.out.println(System.getProperty("sun.boot.class.path"));
		System.out.println(System.getProperty("java.ext.dirs"));
		System.out.println(System.getProperty("java.class.path"));
	}
}

   

   我的机子中的运行结果如下:

  

sun.misc.Launcher$AppClassLoader@19821f
sun.misc.Launcher$ExtClassLoader@addbf1
null
D:\Program Files\Java\jdk1.6.0_02\jre\lib\resources.jar;D:\Program Files\Java\jdk1.6.0_02\jre\lib\rt.jar;D:\Program Files\Java\jdk1.6.0_02\jre\lib\sunrsasign.jar;D:\Program Files\Java\jdk1.6.0_02\jre\lib\jsse.jar;D:\Program Files\Java\jdk1.6.0_02\jre\lib\jce.jar;D:\Program Files\Java\jdk1.6.0_02\jre\lib\charsets.jar;D:\Program Files\Java\jdk1.6.0_02\jre\classes
D:\Program Files\Java\jdk1.6.0_02\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext
D:\workspace\Test\bin

 

    如果把classLoaderTest的.class文件放在其他的目录下,会有不同的运行结果。

 

6
1
分享到:
评论
1 楼 suifeng 2009-01-10  
昨天也用到了,classloader, 是url的loader, 从本地可以加载, 从网络就加载不成功, 可能是由于我那里使用的是代理上网。

代码是utf-8的, 一加载就类找不到, 从你的《获取本地操作系统的默认字符编码》获得了一些提示, 问题算解决了。

感觉classloader的好处就在于class不再受路径的限制了, 可以把class放到任何地方, 然后通过classloader去找。

相关推荐

    Java学习指南

    - **安全性**:Java具有内置的安全机制,包括沙箱模型、类加载器系统以及网络访问控制等,这些特性确保了在网络环境中运行Java程序的安全性。 - **面向对象**:Java是一种纯面向对象的语言,支持封装、继承和多态等...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

     《java jdk 7学习笔记》适合java的初中级读者,以及广大java应用开发人员。 作译者 林信良(网名:良葛格) 学历:台湾大学电机工程学系 经历:台湾升阳教育训练技术顾问、专业讲师,oracle授权训练中心讲师 ...

    一个计算机专业学生几年的JAVA 编程经验汇总

    在Java环境中,类文件(`.class`文件)的查找和加载是由类加载器(ClassLoader)完成的。类加载器负责将这些文件从文件系统或网络等资源中加载到JVM中。 类加载器按照优先级分为三个层级: 1. **Bootstrap ...

    java学习总结

    1. **Java编程基础**:Java是一门面向对象的编程语言,学习之初需掌握基本语法,包括变量、数据类型、运算符、流程控制(如if语句、for循环、while循环)、方法定义与调用等。 2. **面向对象编程**:理解类、对象、...

    Java程序员由菜鸟到笨鸟学习文档

    "Java程序员由菜鸟到笨鸟学习文档"就是这样一个旨在帮助初入Java世界的学习者逐步进阶的资源。它覆盖了从Java语言的基础知识到Web开发框架的关键概念,为读者提供了一个全面的学习路径。 首先,对于Java的基础部分...

    java学习笔记

    Java可以通过类加载器动态地加载类,这意味着可以在运行时动态地更新代码而无需重新编译整个应用。 #### 五、Java的简洁性 - **没有指针**:Java不支持指针,避免了许多由指针引起的复杂性和错误。 - **自动内存...

    良葛格 Java 学习笔记-JavaGossip全(v1+v2)

    这些知识点构成了一个完整的Java学习体系,无论你是初入Java殿堂的新手,还是寻求提升的老兵,都能从中受益。《良葛格 Java 学习笔记-JavaGossip全(v1+v2)》作为网络共享资源,不仅提供了丰富的学习材料,也体现了...

    Java初中级程序员面试宝典

    对于Java初、中级程序员来说,面试准备至关重要,下面将详细解释一些常见的Java面试知识点。 1. **逻辑运算符`&`与`&&`的区别** - `&`和`&&`都是逻辑运算符,它们都用于连接两个布尔表达式。然而,`&&`具有短路...

    JAVA 学习上课资料 幻灯片

    Java由Sun Microsystems的James Gosling领导的团队在1990年代初创建,最初是为了控制家用电器。1995年,Java在SunWorld会议上正式发布,Netscape宣布在其浏览器中支持Java,从而开启了Java的迅速推广。\n\nJava语言...

    Java学习总结

    - **类的加载顺序**:类加载器负责将类加载到JVM中,遵循特定的顺序,通常是从根类加载器开始,逐级向下查找。 - **异常处理**:Java提供了一套完整的异常处理机制,包括try-catch-finally语句块以及throw和throws...

    JAVA入门以及学习方式.doc

    运行时通过类加载器和字节码验证器保证代码安全;执行代码安全通过权限设置确保网络环境下的安全性。 4. **多线程**: Java支持多线程编程,允许程序同时执行多个任务。这使得Java在处理并发和实时系统方面表现...

    学习java 0-JAVA入门.ppt

    学习Java从基础开始,包括理解其基本语法、数据类型、控制结构、类与对象的概念、异常处理、集合框架、输入输出、网络编程、多线程以及Swing或JavaFX等GUI开发。随着学习的深入,可以掌握更高级的主题,如反射、注解...

    JAVA 理论知识

    - **类加载器:**负责将 Java 类加载到 JVM 中。 #### Java 核心概念 - **封装:**隐藏对象的具体实现细节,并提供公共接口进行访问。 - **继承:**允许一个类继承另一个类的属性和方法。 - `extends` 关键字用于...

    java入门ppt下载

    - **动态性**:Java允许程序在运行时加载新的类和资源。 - **丰富的类库**:Java拥有大量的标准库,涵盖各种功能。 2. Java的应用场景: - **Web Applet**:Java小程序,嵌入在网页中,提供互动体验。 - **...

    JAVA各章习题及答案.pdf

    2. 安全性:Java提供了安全机制,如类加载器、访问控制、异常处理等,以确保代码在执行时不会对系统造成威胁。 3. 面向对象:Java是一种纯面向对象的语言,所有的数据类型都是对象,支持封装、继承和多态等面向对象...

    2023年丰富的Java源码学习资料.pdf

    它包含了类加载器、安全管理器和异常处理机制,有助于防止潜在的安全漏洞和恶意攻击,为应用程序提供了额外的保护层。 阅读源码是提升编程技能的关键步骤。通过学习源码,我们可以了解设计模式的应用、框架的底层...

    研发中心Java初级技术笔试题

    12. **JVM**:理解Java虚拟机的工作原理,包括类加载机制、字节码执行、类加载器等。 以上内容仅是Java初级技术笔试可能涉及的一部分知识点。在实际的笔试题中,还可能包括对Java标准库的使用,如日期时间API、网络...

    java实例技术手册第二版,非常好的JAVA开发实例,是高级开发者必备的

    手册可能会涵盖JVM内存模型、垃圾收集机制、类加载器等内容,帮助开发者更好地理解和调试性能问题。 此外,书中还会介绍一些流行框架的使用,如Spring、MyBatis等,这些都是Java企业级开发的常用工具。通过实例,...

Global site tag (gtag.js) - Google Analytics