`

java 类加载器学习

 
阅读更多
引用
1.自定义类加载器

public interface InterfaceTest {
	public void test();
}


public class IntefaceImpl implements InterfaceTest {
	@Override
	public void test() {
		// TODO Auto-generated method stub
        System.out.println("------------");
	}
}


public class MyClassLoader extends ClassLoader{

	private String path = "/home/kevin/";  
	/**
	 * 加载本地class
	 */
    @Override  
    protected Class<?> findClass(String name) throws ClassNotFoundException {  
        String namePath = name.replace(".", "/");  
        String classPath = path + namePath + ".class";  
        InputStream is = null;  
        ByteArrayOutputStream os = null;  
        try {  
            is = new FileInputStream(new File(classPath));  
            os = new ByteArrayOutputStream();  
            int b = 0;  
            while ((b = is.read()) != -1) {  
                os.write(b);  
            }  
            byte[] bytes = os.toByteArray();  
            os.flush();  
            return defineClass(name, bytes, 0, bytes.length);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }finally{  
            try {  
                if(os!=null)  
                    os.close();  
                if(is!=null)  
                    is.close();  
            } catch (IOException e1) {  
                os=null;  
               is = null;  
            }         
        }  
        return null;  
    }
    /**
     * 此种方式加载的两个jar中的类无法相互访问,因为new URLClassLoader出来的类加载器是兄弟关系
     * 调用URLClassloader的protected方法addURL即可实现在需要时加载jar到loader中。
     * @throws Exception
     */
    public void test()throws Exception{
    	//加载jar包
    	File file = new File("/home/kevin/workspace/eclipsespace/JavaTest/bin/com/a.jar");
		URL uri = file.toURI().toURL();
		System.out.println(uri);
		
		//或者加载网络jar包
		uri = new URL("http://xxx.xxx.com/resources/ebook/a.zip");
		
		URLClassLoader load = new URLClassLoader(new URL[]{uri});
		System.out.println(load.loadClass("IntefaceImpl"));
	    
		((InterfaceTest)(load.loadClass("IntefaceImpl").newInstance())).test();
    }
    public static void main(String[] args) {  
        MyClassLoader myLoader = new MyClassLoader();  
        try {  
                 Class myClass = myLoader.loadClass("IntefaceImpl");  
                 Object obj = myClass.newInstance();
                 ((InterfaceTest)obj).test();
//                 Method method = myClass.getMethod("say", null);  
//                 method.invoke(obj, null);  
        } catch (Exception e) {  
             e.printStackTrace();  
        }  
    }  
}
分享到:
评论

相关推荐

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

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

    java类加载器学习二、自定义类加载器

    java类加载器学习二、自定义类加载器

    Java类加载器学习总结.pdf

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

    java 类加载器学习笔记1

    Java 类加载器是Java虚拟机(JVM)的重要组成部分,它负责将类的.class文件从文件系统或网络中加载到内存中,并将其转换为运行时的类对象。类加载器的这种动态加载机制为Java提供了极高的灵活性,使得程序可以在运行...

    java类装载器学习一、类加载器的基本概念

    类装载器学习一、类加载器的基本概念 类装载器学习一、类加载器的基本概念 类装载器学习一、类加载器的基本概念

    类加载器(java)

    Java中的类加载器是JVM(Java虚拟机)的核心组件之一,它们负责将.java源代码编译成的.class字节码文件加载到JVM中,从而使得程序能够运行。类加载器不仅涉及到程序的正常执行,还与Java的动态加载、模块化系统以及...

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

    关于Java类加载器的探讨 Java类加载器是Java技术系统中核心的部分,它们之间存在继承关系。引导类加载器负责加载jdk中的系统类,扩展类加载器负责加载标准...因此,学习和理解Java类加载器对Java开发人员非常重要。

    java应用程序类加载器,ClassLoader for java Application

    理解类加载器的工作原理对于深入学习Java编程至关重要。在Java中,类加载器按照层次结构进行组织,包括引导类加载器、扩展类加载器和应用程序类加载器,每个都有特定的职责。 1. **引导类加载器(Bootstrap ...

    Java类加载器的详解

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

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

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

    Java类加载原理解析

    本文主要解析Java类加载的原理,分为三个部分:基础的类加载原理解析、插件环境下的类加载和线程上下文类加载器。 首先,Java虚拟机(JVM)内置了三种预定义的类加载器: 1. 启动(Bootstrap)类加载器:这是最基础的...

    Java类加载机制学习1

    线程上下文类加载器(Thread Context ClassLoader)是Java提供的一种机制,允许线程在运行时指定一个类加载器,确保类由同一个类加载器加载。这对于应用程序服务器和插件系统尤其有用,因为它允许组件使用自己的类...

    深入Java虚拟机_002_深入详解JVM之类加载器深度剖析、根、扩展及系统类加载器

    在Java编程中,类加载器(Class Loader)扮演着至关重要的角色,它负责查找并加载Java类到JVM内存中。本部分我们将深入探讨JVM中的类加载器,特别是根类加载器、扩展类加载器和系统类加载器。 首先,让我们了解类...

    java class loader(JAVA类加载器)

    理解类加载器的工作原理对于深入学习Java平台、优化应用程序性能以及实现自定义加载器至关重要。 1. **类加载器层次结构** Java中的类加载器分为三个主要层次:启动类加载器(Bootstrap ClassLoader)、扩展类加载...

    JAVA ClassLoader 讲解 (类加载器)

    * 学习如何将自定义类加载器集成到Java应用中。 * 修改类加载器以适应Java 2版本。 为了更好地理解本教程,你需要具备以下基础: * 基本的Java编程能力,包括能够创建、编译和执行简单的命令行Java程序。 * 对类...

    Java类重新加载101对象类和类加载器Java开发Jav

    Java的类加载机制遵循双亲委派模型,即当一个类加载器接收到加载类的请求时,它会首先将这个任务委托给父类加载器,只有当父类加载器无法找到对应的类时,才会尝试自己去加载。这种设计有助于保持类的唯一性和避免...

    黑马程序员------类加载器学习注意点

    本文将主要围绕“黑马程序员------类加载器学习注意点”展开,探讨一些关键知识点。 首先,我们需要理解类加载器的基本工作原理。在Java中,类加载过程包括加载(Loading)、验证(Verification)、准备...

Global site tag (gtag.js) - Google Analytics