黑马程序员--基础加强--第八篇--类加载器
来源:互联网 发布:算法与数据结构自测题 编辑:程序博客网 时间:2024/06/06 07:17
ASP.Net+Android+IOS开发.Net培训期待与您交流!
1类加载器的概念
Java虚拟机中可以安装多个类加载器,系统默认三个主要的类加载器为BootStrap,ExtClassLoader,AppClassLoader,每个类加载器管理特殊的位置。类加载器也是Java类,因为其它是Java类的类加载器本身也是被类加载器加载的,显然必须有第一个类加载器不是Java类,这正是BootStrap。
BootStrap ------------------------>JRE/Lib/rt.jar
ExtClassloader ------------------------>JRE/Lib/ext/x,jar
AppClassLoader ------------------------>CLASSPATH指定的所有jar或目录
MyClassLoader ------------------------->可以自定义目录
2类加载器的委托加载机制
---从自身到父类,祖宗,再从祖宗到父亲到自身。
---使用自定义的类加载器
3练习,自己编写一个加密文件的类加载器,然后在正常程序下运行,发现出现ClassFormatError错误,中间需要重启eclipse。
package ClassLoader;import java.util.Date;public class ClassLoaderTest {public static void main(String[] args) throws Exception{// TODO Auto-generated method stubSystem.out.println(ClassLoaderTest.class.getClassLoader().getClass().getName());System.out.println(System.class.getClassLoader());//输出为null,为特殊的类加载器System.out.println(new ClassLoaderAttachment().toString());;Class clazz = new MyClassLoader("itcastlib").loadClass("ClassLoaderAttachment");Date d1 = (Date)clazz.newInstance();System.out.println(d1);}}
package ClassLoader;import java.io.ByteArrayOutputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;public class MyClassLoader extends ClassLoader {public static void main(String[] args)throws IOException {String srcPath = args[0];String destDir = args[1];FileInputStream fis = new FileInputStream(srcPath);String destFilePath = srcPath.substring(srcPath.lastIndexOf('\\')+1);//目的路径String destPath = destDir+"\\"+destFilePath;FileOutputStream fos = new FileOutputStream(destPath);cypher(fis,fos);//加密文件fos.close();//关闭输入输出流fis.close();}private static void cypher(InputStream ips,OutputStream ops)throws IOException{int b = -1;while((b = ips.read())!=-1){ops.write(b ^ 0xff);//文件加密,0变1,1变0}}private String classDir;@Overrideprotected Class<?> findClass(String name) throws ClassNotFoundException {String classFileName = classDir+"/"+name+".class";try {FileInputStream fis = new FileInputStream(classFileName);ByteArrayOutputStream bos = new ByteArrayOutputStream();//new一个字节数组cypher(fis,bos);fis.close();byte[] bytes = bos.toByteArray();return defineClass(bytes,0,bytes.length);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return super.findClass(name);//该类不能编译的换为父类}public MyClassLoader(){}public MyClassLoader(String classDir){this.classDir = classDir;}}
package ClassLoader;import java.util.Date;public class ClassLoaderAttachment extends Date {public String toString(){//主要使用这里的toString()方法return "hello,itcast";}}
ASP.Net+Android+IOS开发.Net培训期待与您交流!
0 0
- 黑马程序员--基础加强--第八篇--类加载器
- 黑马程序员基础加强---类加载器
- 黑马程序员---基础加强:类加载器
- 黑马程序员--基础加强--第八篇--代理
- 黑马程序员_基础加强(6) 类加载器
- 黑马程序员:基础加强之注解和类加载器
- 黑马程序员----基础加强5类加载器等
- 黑马程序员-JAVA基础加强-类加载器
- 黑马程序员_基础加强(类加载器)
- 黑马程序员 java基础加强_类加载器
- 黑马程序员_<<基础加强---类加载器>>
- 【黑马程序员】java基础加强---------类加载器(classLoader)
- 黑马程序员--基础加强(6)--- 类加载器
- 【黑马程序员】Java基础加强17:类加载器ClassLoader
- 黑马程序员_基础加强_类加载器
- 黑马程序员--基础加强(类加载器)
- 黑马程序员_Java基础加强笔记:类加载器
- 黑马程序员—Java基础加强(类加载器)
- win7下安装oracle11G系列之三:设置PL/SQL Developer关联oracle11G
- rtsp协议详解
- windows创建SVN服务器之三---快速搭建版本控制环境
- Socket Layer
- C++指针链表分析
- 黑马程序员--基础加强--第八篇--类加载器
- 第4天 调整数组顺序使奇数和位于偶数前面
- 建立Qt+VS2010开发环境
- win7 32位 memcached安装
- 第4天 删除链表第K结点
- mysql命令行操作
- 抽象数据类型
- Java的Random总结
- 用My97扩充成的ExtJs日期时间插件