【简洁版:My类加载器】
来源:互联网 发布:音乐作曲软件 编辑:程序博客网 时间:2024/06/06 20:33
MyClassLoader.java
package com.xiaozhi.myclassloader;import java.io.ByteArrayOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;public class MyClassLoader extends ClassLoader{private String classDir;public MyClassLoader(){}public MyClassLoader(String classDir){this.classDir=classDir;}@Overrideprotected Class<?> findClass(String name) throws ClassNotFoundException {String classFileName =classDir+"\\"+name.substring(name.lastIndexOf('.')+1)+".class";try {FileInputStream fileInputStream = new FileInputStream(classFileName);ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();int length = 0;byte [] bs = new byte[1024];while((length=fileInputStream.read(bs)) != -1){arrayOutputStream.write(bs,0,length);}fileInputStream.close();byte[] bytes = arrayOutputStream.toByteArray();return defineClass(bytes, 0, bytes.length);} catch (Exception e) {e.printStackTrace();}return super.findClass(name);}}ClassLoaderAttachment.java
package com.xiaozhi.myclassloader;import java.util.Date;public class ClassLoaderAttachment extends Date{@Overridepublic String toString() {return "hello heima";}}Test.java
package com.xiaozhi.testmyclassloader;import java.util.Date;import com.xiaozhi.myclassloader.MyClassLoader;public class Test {public static void main(String[] args) throws Exception{Class clazz=new MyClassLoader("mylib").loadClass("com.xiaozhi.myclassloader.ClassLoaderAttachment");//ClassLoaderAttachment loaderAttachment= (ClassLoaderAttachment) clazz.newInstance();//这里不能这样写,因为ClassLoaderAttachment.class文件已经删除,编译器找不到Class文件。Date date=(Date) clazz.newInstance();System.out.println(date);}}
运行程序(这里用的是父类AppClassLoader类加载器加载的)
在项目下新建一个mylib包
找到ClassLoaderAttachment.class文件,将其剪贴到桌面上!
再次运行程序,报没有找到class文件异常
将桌面上的class文件复制到mylib目录下
再次运行程序(这里是使用自己的类加载器加载的)
0 0
- 【简洁版:My类加载器】
- 简洁版string类
- ESL:更简洁、更高效的标准加载器
- 分页加载my
- string类的简洁版实现
- string类和智能指针(简洁版)和shareptr简洁版代码实现
- Jquery 实现简洁的加载动画
- ansj词典加载及简洁分词过程
- 简洁实现RecyclerView上拉加载
- jquery 倒计时 简洁版
- hdu 1035(简洁版)
- hdu 1690(简洁版)
- css笔记简洁版
- artTemplate 简洁语法版
- OC地图简洁版
- 罗马数字--简洁版
- git常用命令--简洁版
- 银行家算法简洁版
- LabView 求整数N以内的所有素数
- Unity3d NGUI的使用(八)(NGUI 2DUI与3DObjects共存)
- nyoj-228(士兵杀敌五)&& hdu-1556 Color the ball
- DOS常用使用方法和命令
- 【LeetCode】Minimum Path Sum
- 【简洁版:My类加载器】
- 研【生活】【Paper】计算机视觉会议投稿日历+RSS订阅
- 理解 JVM 如何使用 Windows 和 Linux 上的本机内存
- 决胜千里之外(解题报告)
- mysql 5.5 配置异步复制
- 详细介绍在windows系统中配置 cocos2d-x 开发环境及简单使用(VS2012+Cocos2d-x 3.0rc1)
- A - Knight Moves
- 【servlet】servletContext / servletRequest/servletResponse
- hdu 1219