`
85977328
  • 浏览: 1899613 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java的类加载器

 
阅读更多
java的类加载器顺序
    在每次创建一个Java类的实例时候,必须先将该类加载到内存中。Java虚拟机(JVM)使用类加载器来加载类。Java加载器在Java核心类库和CLASSPATH环境下面的所有类中查找类。如果需要的类找不到,会抛出java.lang.ClassNotFoundException异常。
    从J2SE1.2开始,JVM使用了三种类加载器:bootstrap类加载器、extension类加载器和systen类加载器。这三个加载器是父子关系,其中bootstrap类加载器在顶端,而system加载器在结构的最底层。
    其中bootstrap类加载器用于引导JVM,一旦调用java.exe程序,bootstrap类加载器就开始工作。因此,它必须使用本地代码实现,然后加载JVM需要的类到函数中。另外,它还负责加载所有的Java核心类,例如java.lang和java.io包。另外bootstrap类加载器还会查找核心类库如rt.jar、i18n.jar等,这些类库根据JVM和操作系统来查找。
    extension类加载器负责加载标准扩展目录下面的类。这样就可以使得编写程序变得简单,只需把JAR文件拷贝到扩展目录下面即可,类加载器会自动的在下面查找。不同的供应商提供的扩展类库是不同的,Sun公司的JVM的标准扩展目录是/jdk/jre/lib/ext。
    system加载器是默认的加载器,它在环境变量CLASSPATH目录下面查找相应的类。

示例代码
下面是一些简单的DEMO代码
有问题咱们可以交流
这些代码都是阅读tomcat的心得

package com.panguso.phl;

import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.net.URLStreamHandler;

import bin.IHandler;

public class TestClassLoader {

	public static void main(String[] args) throws Exception {
		/************ 添加repository(*.class) **************/
		URL[] urls = new URL[2];
		// repository = file:D:\workspaces\temp\test\repository\
		// 注意,repository必须使用file协议,同时结尾必须要有反斜杠"\"
		String repository = new URL("file", null, System.getProperty("user.dir") + File.separator + "repository" + File.separator).toString();
		URLStreamHandler streamHandler = null;
		//streamHandler这个参数的作用是区分url的构造方法,如果都传null,便无法区分
		urls[0] = new URL(null, repository, streamHandler);

		/************ 添加lib(*.jar) **************/
		// file:/D:/workspaces/temp/test/lib/test1.jar
		String jar = System.getProperty("user.dir") + File.separator + "lib" + File.separator + "test1.jar";
		urls[1] = new URL("file", null, jar);

		// 或者
//		File file = new File(jar);
//		urls[1] = file.toURL();

		/************ 使用类加载器 **************/
		URLClassLoader loader = new URLClassLoader(urls);

		// class反射方法1
		Class<IHandler> clazz = (Class<IHandler>) loader.loadClass("bin.HandlerImpl");
		IHandler ih = clazz.newInstance();
		ih.print("hello classLoader");

		// class反射方法2
		Class clazz2 = loader.loadClass("bin.HandlerImpl");
		Object o = clazz.newInstance();
		Method m = o.getClass().getMethod("print", new Class[] { String.class });
		m.invoke(o, new Object[] { "hello classLoader" });

		// jar反射方法
		Class clazz3 = loader.loadClass("com.panguso.phl.Test");
		Object test = clazz3.newInstance();
		Method m3 = test.getClass().getMethod("print", new Class[] {});
		m3.invoke(test, new Object[] {});
	}
}
3
4
分享到:
评论
1 楼 jianfeihit 2013-06-06  
好贴,猫头哥又出新作了

相关推荐

    java类加载器

    ### Java 类加载器详解 #### 一、类加载器概述 在Java中,类加载器(Class Loader)是一项核心机制,用于将字节码(.class文件)加载到JVM中,使其成为运行时的对象。类加载器不仅实现了类的加载功能,还确保了...

    Java类加载器原理

    Java 类加载器原理 Java 类加载器是Java虚拟机(JVM)的核心组成部分,它负责将类的字节码加载到内存中并转换为可执行的Java类。类加载器的作用不仅仅是加载类,还包括确保类的唯一性,避免重复加载,并且遵循特定...

    java 类加载器 加密

    Java 类加载器是Java运行时环境的一个重要组成部分,它的主要职责是将编译后的字节码(.class文件)加载到JVM中,使得程序能够运行。类加载器的机制保证了类的唯一性,同时也提供了灵活性,允许我们自定义加载逻辑。...

    Java类加载器.pdf

    ### Java类加载器详解 Java类加载器是Java运行时环境的一个关键组成部分,负责将类文件(.class)从各种来源加载到JVM中。它不仅管理类的生命周期,还确保了类的正确加载和初始化,是Java动态特性的基石。 #### 类...

    自定义Java类加载器

    Java类加载器是Java虚拟机(JVM)的关键组成部分,它负责查找并加载类到内存中,使得程序能够运行。自定义Java类加载器允许我们根据特定需求扩展默认的加载机制,例如,从非标准位置加载类或者实现动态加载。在Java...

    java类加载器-tomcat中的类加载器

    Java 类加载器是Java虚拟机(JVM)的核心组成部分,它负责将编译后的字节码文件(.class文件)加载到JVM中并转换为运行时的数据结构。Tomcat,作为广泛使用的Java Servlet容器,它自定义了一套类加载机制,以满足Web...

    深入解析Java类加载器及其工作机制

    Java 类加载器是 Java 运行时环境中不可或缺的组成部分,负责将 .class 文件加载到 JVM 中。理解类加载器的工作原理对于深入掌握 Java 语言及其运行机制至关重要。本文将详细探讨 Java 类加载器的概念、类型以及工作...

    深入探讨 Java 类加载器

    【深入探讨 Java 类加载器】 Java 类加载器是Java虚拟机(JVM)的核心组成部分,它的主要任务是将Java类的字节码加载到JVM中以便执行。类加载器的概念始于JDK 1.0,最初是为了解决Java Applet在浏览器中的运行需求...

    关于Java类加载器的探讨.pdf

    扩展类加载器是Java实现的,是一个真正的Java类加载器,负责加载ire/lib/ext目录下的类,并且可以通过Java程序获得这个类加载器。 3. 系统类加载器:负责加载classpath中的类,也就是执行Java MainClass时加载Main...

    java类加载器实例

    类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一。它使得 Java 类可以被动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 就出现了,最初是为了满足 Java Applet 的需要而开发出来的。Java ...

    java 类加载器 class loader

    Java 类加载器(ClassLoader)是Java虚拟机(JVM)的核心组成部分,负责在运行时查找并加载类的字节码。了解ClassLoader的工作机制对于优化应用性能、实现安全控制以及进行插件化开发至关重要。 首先,Java的...

    Java类加载器的详解

    Java类加载器是Java虚拟机(JVM)的重要组成部分,它的主要职责是将类的字节码文件(.class文件)从文件系统、网络或内存中读取,并转换为运行时的java.lang.Class对象。这个过程是Java动态加载机制的核心,使得Java...

    java类加载器1

    Java 类加载器是Java语言的核心特性之一,它允许程序在运行时动态地加载类到Java虚拟机(JVM)中。这一特性对于实现模块化、插件化和动态部署等功能至关重要。类加载器的设计遵循“分层加载”原则,形成了一个树状的...

    java类加载器学习三、类加载器的委托模式

    java类加载器学习三、类加载器的委托模式

    Java类加载器机制与模型.pdf

    Java类加载器采用了**双亲委派模型(Parent Delegation Model)**,这意味着当一个类加载器收到加载类的请求时,它首先会委托其父类加载器去尝试加载,只有当父类加载器无法加载时,当前类加载器才会尝试自己加载。...

    Java类加载器(ClassLoader)1

    Java类加载器分为三种主要类型:引导类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用程序类加载器(Application ClassLoader,也称为系统类加载器)。它们共同工作,确保了Java...

    Java类加载器学习总结.pdf

    Java类加载器是Java运行时环境(JRE)的一个重要组成部分,它负责将Java字节码加载到内存中,使其可以被Java虚拟机(JVM)执行。类加载器本身也是一个类,它的主要职责是从文件系统、网络或者JAR包中加载类文件到JVM...

    深入探讨 Java 类加载器.wps

    深入探讨 Java 类加载器.wps深入探讨 Java 类加载器.wps深入探讨 Java 类加载器.wps

    深入探讨 Java 类加载器.pdf

    ### 深入探讨Java类加载器 #### 类加载器基本概念 类加载器(Class Loader)是Java语言的关键组成部分之一,它负责将Java类的字节码加载到Java虚拟机(JVM)中,从而使得Java应用程序能够运行起来。自Java诞生以来...

Global site tag (gtag.js) - Google Analytics