`

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类加载器学习总结.pdf

    java 类加载器学习笔记1

    /** * java类加载器 * 类加载器负责加载与连接,这个过程是在运行时进行的,这种机制为java提供极大的灵活性 * * 类的生命周期 * class文件

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

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

    java类加载器和反射学习要点ppt

    本学习讲义是关于java类加载和反射机制需要注意的要点学习,内容详细

    Java类加载机制学习1

    (1)双亲模型类加载器的作用:从class文件定义出class对象通过defineClass()方法进行定义类加载器 初始类加载器关系:该类的定义类加载器是该类

    java 类加载调试

    学习类装入的工作方式以及 JVM 如何帮助找出类装入问题 Lakshmi Shankar, Java 技术中心开収团队, IBM Hursley 实验室 Simon Burns (simon_burns@uk.ibm.com), Java 技术中心开収团队, IBM Hursley 实验室 简介: 类...

    深入理解java类加载机制

    此外,我们还会探讨Java程序的类加载器和双亲委派机制,以及自定义类加载器和类卸载的实现原理和应用方法。 总的来说,本资源将为Java程序员提供全面的Java字节码和类加载原理和实践经验。通过学习本资源,开发人员将...

    Java基础加强之类加载器

    学习概述:本模块深入讲解了Java类加载方面的知识,Java类加载器和类加载机制以及类加载原理  学习目标:掌握类加载机制和原理,能够独立开发自己的类加载器。  1.类的加载  什么是类加载? 类加载是指将类的...

    java基础学习笔记之类加载器

    java中的类加载器:java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap, ExtClassLoader,AppClassLoader类加载器也是一个java类,因此类加载器也需要被加载,所以...

    Java类加载器加载类顺序

    java ClassLoader的学习  java是一门解释执行的语言,由开发人员编写好的java源文件先编译成字节码文件.class...  一个类如果要被JVM所调度执行,必须先把这个类加载到JVM内存里,java.lang下有个很重要的类ClassL

    【Java面试题】类加载器

    【Java面试题】类加载器

    Java基于自定义类加载器实现热部署过程解析

    主要介绍了Java基于自定义类加载器实现热部署过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Java类加载器层次结构原理解析

    主要介绍了Java类加载器层次结构原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    举例讲解Java的内部类与类的加载器

    主要介绍了Java的内部类与类的加载器,是Java入门学习中的基础知识,需要的朋友可以参考下

    java类的加载过程以及类加载器的分析

    给大家详细讲述了java类的加载过程以及类加载器的相关知识点内容,有需要的朋友可以学习下。

Global site tag (gtag.js) - Google Analytics