Java类加载器学习笔记
2018-04-17 15:36
197 查看
今后一段时间会全面读一下《深入理解Java虚拟机》
在这里先记一下在网上看到的几篇介绍 类加载器 的文章,等读到虚拟机类加载机制再详细介绍。
贴一个自己写的类加载器。
Hello类。 把编译后的class文件放到别的路径下。
package ww; public class Hello { public void say() { System.out.println("hello world"); } }
WwClassLoader类。 继承ClassLoader类 重写 findClass()方法
package ww; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; public class WwClassLoader extends ClassLoader { private String path; //路径 public WwClassLoader(String path) { this.path = path; } @Override protected Class<?> findClass(String name) throws ClassNotFoundException { String fileName = parseFileName(name); File file = new File(path,fileName); try { //读取class文件 FileInputStream fis = new FileInputStream(file); ByteArrayOutputStream baos = new ByteArrayOutputStream(); int lenth = 0; while((lenth = fis.read()) != -1) { baos.write(lenth); } byte[] buffer = baos.toByteArray(); baos.close(); fis.close(); //实例化class对象 return defineClass(name,buffer,0,buffer.length); } catch (Exception e) { e.printStackTrace(); } return super.findClass(name); } //解析文件路径 private String parseFileName(String name) { int index = name.lastIndexOf('.'); if(index == -1) { return name+".class"; } else { return name.substring(index+1)+".class"; } } }
WwTest类。 调用测试
package ww; import java.lang.reflect.Method; public class WwTest { public static void main(String[] args) { //我一直在找为什么自己定义的类的parent节点一定是AppClassLoader类的源码。要是知道的大佬可以告诉我一声 /*private static native void registerNatives(); static { registerNatives(); }*/ WwClassLoader ww = new WwClassLoader("E://lib"); try { Class hel = ww.findClass("ww.Hello"); //反射执行方法 if (hel != null) { Object obj = hel.newInstance(); Method method = hel.getDeclaredMethod("say", null); method.invoke(obj, null); } } catch (Exception e) { e.printStackTrace(); } } }
相关文章推荐
- java类加载器学习笔记
- java类加载器学习笔记
- 黑马程序员——学习笔记19.Java类加载器
- java类加载器与反射学习笔记
- c#学习笔记三 如何访问另一个页面的控件数据
- openldap学习笔记
- kvm虚拟化学习笔记(七)之kvm虚拟机克隆
- MySQL学习笔记1:初涉MySQL
- Linux学习笔记之(1):学习shell script
- 银行家算法学习笔记
- 学习笔记 ActionBar
- [学习笔记]Java正则表达式
- Activiti学习笔记
- 大数据学习笔记(一)
- CSDN 人工智能发展动态在线学习笔记
- git学习笔记2——常用命令2
- C++编程思想学习笔记---第15章 多态性和虚函数
- 孙鑫老师教学视频学习笔记――文字处理
- Android Animation学习笔记
- ASP.NET MVC5 学习笔记-5 测试