实现自己的类加载器(简单类加载器)
2011-03-21 22:23
211 查看
import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; public class MyClassLoader extends ClassLoader { protected Class findClass(String name) throws ClassNotFoundException { byte[] classData = getClassData(name); if (classData == null) { throw new ClassNotFoundException(); } else { return defineClass(name, classData, 0, classData.length); } } private byte[] getClassData(String className) { String path = classNameToPath(className); try { InputStream ins = new FileInputStream(path); ByteArrayOutputStream baos = new ByteArrayOutputStream(); int bufferSize = 4096; byte[] buffer = new byte[bufferSize]; int bytesNumRead = 0; while ((bytesNumRead = ins.read(buffer)) != -1) { baos.write(buffer, 0, bytesNumRead); } return baos.toByteArray(); } catch (IOException e) { e.printStackTrace(); } return null; } private String classNameToPath(String className) { return MyClassLoader.class.getResource("/").getFile() + File.separatorChar + className.replace('.', File.separatorChar) + ".class"; } public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException { MyClassLoader myclassLoader = new MyClassLoader(); Class s = myclassLoader.findClass("com.whs.tttt"); Class s2 = myclassLoader.loadClass("com.whs.tttt"); System.out.println(s.getClassLoader()); System.out.println(s2.getClassLoader()); } }
打印结果完全不一样,loadclass方法会发现,其实本事classpath下的东西,myclassloader是不会去加载的,会委托父类加载。
findclass会自己去加载,所以如果把s cast 为com.whs.tttt就会出错,但是s2是不会的。
相关文章推荐
- 自己实现一个简单的读写锁
- 《小白兔到大黑牛》第二篇基于源码自己实现简单的ArrayList中简单方法
- 自己动手简单实现CountDownLatch
- 自己写的实现数据库事务的简单方法ExecuteSqlTran()
- 用AsyncTask来实现自己定义的观察者类(加载器)Loader(17)
- 自己开发简单web服务器二(Node.js实现)
- python装饰器,自己实现一个简单的装饰器
- 自己实现简单RPC功能
- 自己实现的简单的Vector代码
- 自己实现简单的天气预报应用(4)
- 自己动手写CPU之第七阶段(3)——简单算术操作指令实现过程(续)
- 前端和算法实现:给网站上加上自己的水印(简单+复杂)
- 自己实现简单Web服务器,支持GET POST请求
- 自己实现简单对象关系库之缓存类SQLField,SQLClass,SQLCache
- [置顶] 网站浏览统计功能的简单实现-- vb2005xu自己动手系列(2)
- html制作简单框架网页 实现自己的音乐驿站 操作步骤及源文件下载 (播放功能限mp3文件)
- 自己实现的简单的Complex类
- 构建自己的npm包 简单实现
- java自己实现的简单map
- 自己如何实现简单的http服务器