黑马程序员--类加载器

 

---------------------- <a href="http://edu.youkuaiyun.com"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.youkuaiyun.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

 

 

                                            类加载器

 

Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负责加载特定位置的类:
                  Bootstrap,ExtClassLoader,AppClassLoader

类加载器也是Java类,因为其它是Java类的类加载器本身也要被类加载器加载,显然也要被加载器加载,
显然必须有第一个类加载器不是Java类,这正是Bootstrap。

Bootstrap类加载器,它不是一个类,他不需要被别人加载他是嵌套在Java虚拟机的内核中

Java虚拟机中的所有类装载器采用具有父子关系的属性结构进行组织,在实例化每个类装载器对象时,需要为
其制定一个父级类装载器对象或者默认采用系统类装载器为其父类加载


System是由Bootstrap来加载的

 

 

 

 


有一道面试,能不能自己写个类叫Java.lang.System?
 答,通常是不可以的,因为,当我写完java.lang.system之后放在Classpath指定的所有jar或目录下之后,类加载器最后要让Bootstrap 来加载,由于委托机制Bootstrap会在jre/lib/rt.jar找到System.lang.System,但这个并不是我们写的那个,所以,写了也是白写,不会加载我们写的那个


自定义类加载器的编写原理:

ClassLoader  有个方法loadClass(String name)name指定类名就会返回一个Class


模版方法设计模式

父类--〉loadclass/findClass/得到Class文件的内容转换成字节码--〉definClass()


 自定义的类加载器必须继承ClassLoader
 loadClass方法与findClass方法
 defineClass方法

编程步骤:  
 编写一个对文件内容进行简单加密的程序。
 编写了一个自己的类装载器,可实现对加密过的类进行装载和解密
 编写一个程序调用类加载器加载类,在源程序中不能用该类名定义引用变量,因为编译器无法识别这个类,程序中可以除了使用ClassLoader。load方法之外,还可以使用设置县城的上下文类
 加载器或者系统类加载器,然后再使用Class。forName。

实现步骤:
 对不带包名的Class文件进行加密,加密结果存放到另外一个目录,例如:java MyClassLoader MyTest。class F:\itcast
 运行加载类的程序,结果能够被正常加载,但打印出来的类装载器名称为AppClassLoader:java MyClassLoader MyTest f:\itcast
 用加密后的类文件替换CLASSPATH环境下的类文件,在执行上一步操作就出问题

 

加密函数:

public static void cypher(InputStream istream,OutputStream ostream) throws Exception{
  //下面这段代码可能遇到255的字节,当成byte就成了-1
  /*
  byte b=0;
  while ((b=(byte)istream.read())!=-1) {
   ostream.write(b ^ 0xff);
  }
  */
  int b=-1;
  while ((b=istream.read())!=-1) {
   ostream.write(((byte)b)^0xff);
  }
 }

 

 

 

 

 ---------------------- <a href="http://edu.youkuaiyun.com"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.youkuaiyun.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

 

 

 

 

关于 阿里云盘CLI。仿 Linux shell 文件处理命令的阿里云盘命令行客户端,支持JavaScript插件,支持同步备份功能,支持相册批量下载。 特色 多平台支持, 支持 Windows, macOS, linux(x86/x64/arm), android, iOS 等 阿里云盘多用户支持 支持备份盘,资源库无缝切换 下载网盘内文件, 支持多个文件或目录下载, 支持断点续传和单文件并行下载。支持软链接(符号链接)文件。 上传本地文件, 支持多个文件或目录上传,支持排除指定文件夹/文件(正则表达式)功能。支持软链接(符号链接)文件。 同步备份功能支持备份本地文件到云盘,备份云盘文件到本地,双向同步备份保持本地文件和网盘文件同步。常用于嵌入式或者NAS等设备,支持docker镜像部署。 命令和文件路径输入支持Tab键自动补全,路径支持通配符匹配模式 支持JavaScript插件,你可以按照自己的需要定制上传/下载中关键步骤的行为,最大程度满足自己的个性化需求 支持共享相册的相关操作,支持批量下载相册所有普通照片、实况照片文件到本地 支持多用户联合下载功能,对下载速度有极致追求的用户可以尝试使用该选项。详情请查看文档多用户联合下载 如果大家有打算开通阿里云盘VIP会员,可以使用阿里云盘APP扫描下面的优惠推荐码进行开通。 注意:您需要开通【三方应用权益包】,这样使用本程序下载才能加速,否则下载无法提速。 Windows不第二步打开aliyunpan命令行程序,任何云盘命令都有类似如下日志输出 如何登出和下线客户端 阿里云盘单账户最多只允许同时登录 10 台设备 当出现这个提示:你账号已超出最大登录设备数量,请先下线一台设备,然后重启本应用,才可以继续使用 说明你的账号登录客户端已经超过数量,你需要先登出其他客户端才能继续使用,如下所示
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值