自定义类加载器
来源:互联网 发布:电脑摄像头录像软件 编辑:程序博客网 时间:2024/06/02 02:31
/** * */package com.bzu.csh;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;/** * * 项目名称:Test1 类名称:Test2 类描述: 创建人:admin 创建时间:2017年1月7日 下午9:41:36 修改人:admin * 修改时间:2017年1月7日 下午9:41:36 修改备注: * * @version * */public class MyClassLoader extends ClassLoader {private String name;private String path = "d:\\";private final String fileType = ".class";public MyClassLoader(String name) {super();// system加载器为父加载器this.name = name;}public MyClassLoader(ClassLoader parent, String name) {super(parent);// 显示指定该类加载器的父加载器this.name = name;}/** * ClassLoader API中找到的 */public Class<?> findClass(String name) {byte[] b = loadClassData(name);return defineClass("com.bzu.csh." + name, b, 0, b.length);}private byte[] loadClassData(String name) {InputStream is = null;byte[] data = null;ByteArrayOutputStream baos = null;try {// 转换. --> /this.name = this.name.replace(".", "/");is = new FileInputStream(new File(path + name + fileType));baos = new ByteArrayOutputStream();int ch = 0;while (-1 != (ch = is.read())) {baos.write(ch);}data = baos.toByteArray();} catch (Exception e) {} finally {try {is.close();baos.close();} catch (Exception e2) {// TODO: handle exception}}return data;}public static void main(String[] args) throws Exception {MyClassLoader loader = new MyClassLoader("loader1");// 父加载器为sysout加载器loader.setPath("d:\\myapp\\myclass\\");MyClassLoader loader1 = new MyClassLoader(loader, "loader1");// 父加载器器为loaderloader1.setPath("d:\\myapp\\myclass\\");MyClassLoader loader2 = new MyClassLoader(null, "loader2");// 父加载器为bootstrap加载器loader2.setPath("d:\\myapp\\myclass\\");// test(loader);// test(loader1);test(loader2);}public static void test(ClassLoader loader) throws InstantiationException,IllegalAccessException, ClassNotFoundException {Class clazz = loader.loadClass("Sample");Object instance = clazz.newInstance();}@Overridepublic String toString() {return this.name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPath() {return path;}public void setPath(String path) {this.path = path;}public String getFileType() {return fileType;}}
/** * */package com.bzu.csh;/** * * 项目名称:Test1 类名称:Sample 类描述: 创建人:admin 创建时间:2017年1月8日 下午3:31:16 修改人:admin * 修改时间:2017年1月8日 下午3:31:16 修改备注: * * @version * */public class Sample {public int v1 = 1;public Sample() {System.out.println("Sample is loading"+ this.getClass().getClassLoader());}}
0 0
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 自定义类加载器
- 个人理解的循环!
- 【模板引擎】Velocity教程(一)简介
- iOS[地图定位问题]:求解地图定位问题!!!
- android开发如何用file读出sdcard中含图片的文件夹,并将文件夹显示到listview上????
- Android SDK 1.6到4.4全部离线包
- 自定义类加载器
- android 短信群发长短信问题,求教
- android webview 下拉刷新
- S2第一本书第三章上机
- Target runtime Apache Tomcat v6.0 is not defined.错误解决方法
- ObjectAnimator动画放大的问题
- MySQL 小结(一)
- startx报错xinit: No such file or directory (errno 2): unable to connect to X server xinit: No such pr
- expandablelistview子item的按钮怎么获取