自定义类加载器
来源:互联网 发布:张无忌武功排名知乎 编辑:程序博客网 时间:2024/05/22 02:24
package com.zkn.newlearn.classloader;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;/** * * @author zkn * */public class ClassLoaderTest01 extends ClassLoader {/** * 路径 */private String path = "";/** * 后缀名 */private String className = ".class";private String name = "";private ClassLoader loader = null;@Overrideprotected Class<?> findClass(String name) {byte[] b =loadClassData(name);if(b != null && b.length > 0)return defineClass(name, b, 0, b.length);
return this.getClass(); }@SuppressWarnings("null")private byte[] loadClassData(String names) {names = names.replace(".", "\\");String clazzName = path + names + className;InputStream is = null;ByteArrayOutputStream baos = null;byte[] bytes = new byte[0];int i = 0;try{is = new FileInputStream(new File(clazzName));baos = new ByteArrayOutputStream();while(-1!=(i = is.read())){baos.write(i);}bytes = baos.toByteArray();}catch(Exception e){e.printStackTrace();}finally{try{if(is != null)is.close();if(baos != null)baos.close();}catch(Exception ee){ee.printStackTrace();}}return bytes;}public ClassLoaderTest01(String name) {super();this.name = name;}public String getPath() {return path;}public void setPath(String path) {this.path = path;}public String getClassName() {return className;}public void setClassName(String className) {this.className = className;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return " "+name;}public ClassLoaderTest01(String name, ClassLoader loader) {super(loader);this.name = name;this.loader = loader;}public static void main(String[] args) throws Exception{ClassLoaderTest01 loader1 = new ClassLoaderTest01("loader1");loader1.setPath("D:\\log4j\\sys\\");ClassLoaderTest01 loader2 = new ClassLoaderTest01("loader2",loader1);loader2.setPath("D:\\log4j\\common\\");ClassLoaderTest01 loader3 = new ClassLoaderTest01("loader3",null);loader3.setPath("D:\\log4j\\common\\");try{test(loader2,"com.zkn.newlearn.classloader.Parent");}catch(Exception e){loader2 = new ClassLoaderTest01("loader02");loader2.setPath("D:\\log4j\\common\\");test(loader2,"com.zkn.newlearn.classloader.Parent");}test(loader3,"com.zkn.newlearn.classloader.Parent");}private static void test(ClassLoader loader,String name)throws ClassNotFoundException, InstantiationException,IllegalAccessException {Class clazz = null;try{clazz = loader.loadClass(name);}catch(Exception e){e.printStackTrace();}clazz.newInstance();}}
package com.zkn.newlearn.classloader;/** * * @author zkn * */public class Parent {public static int i = 1;public Parent(){new Dog();System.out.println("Parent类加载器为:"+Parent.class.getClassLoader());}}
package com.zkn.newlearn.classloader;/** * * @author pc * */public class Dog {public Dog(){System.out.println("Dog 类 : 类加载器为--"+ Dog.class.getClassLoader());}}
ClassLoaderTest01在sys下面:
1、如果Parent类在common下面,由子类加载,即loader2来加载。
<img src="http://img.blog.csdn.net/20160122230640800?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
2、如果Parent类在sys下面
由父类加载器加载,即loader1来加载。
<img src="http://img.blog.csdn.net/20160122230703769?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
如果Parent在系统目录下
<img src="http://img.blog.csdn.net/20160122230726426?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
对于loader3,无论Parent类在哪目录下,Parent类始终由loader3来加载。
0 0
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- android常见的颜色代码
- leetcode222---Count Complete Tree Nodes(求完全二叉树节点数)
- Mac上的matlab出现mex error解决
- sequelize常见操作使用方法(增删改查,手把手教学)
- 利用block从前后一个页面到前一个页面传值
- 自定义类加载器
- JavaSE012_数组之常用工具类封装一
- LaTex 数学公式
- 五种进程调度算法的总结;
- 字符串奇偶位分别排序后输出
- 店铺与品牌的关键字搜索——wand(wead and)算法简介与改造
- Android WebView中那些不得不解决的坑~~
- x265-1.7版本-common/lowres.h注释
- UICollectionView