月归档:2014年06月

学习ClassLoader和自定义ClassLoader的使用

这几天在看ClassLoader,推荐一篇讲ClassLoader的文章,地址:http://longdick.iteye.com/blog/442213,然后又看了下《深入java虚拟机》里的ClassLoader章节,下面就随便说点,主要还是以练习代码为主。 1.对于任意一个类,由加载它的ClassLoader和它本身决定了在java虚拟机中的唯一性。 也就是说比较2个类,只有它们都是由同一个ClassLoader加载,那么比较才有意义。否则,即使是同一个类文件,如果加载它们的ClassLoader不同,那么这2个类必定不相等。 2.类加载的双亲委派机制是可以破坏的,通过改变CallClassLoader和ContextClassLoader。 被当前类引用的类的加载也是由加载当前类的ClassLoader加载,子线程的ContextClassLoader是由父线程的ContextClassLoader派生出来。 3.扩展ClassLoader一般应该建议重写findClass(String)方法。 原因是自定义的ClassLoader只专注于加载自己的Class,在加载自己的Class的过程中,又会先加载父类Object,Object类是由启动类加载器加载的,默认可以直接由loadClass(String)执行,这么做可以用ClassLoader来选择性加载某一些类做隔离。 贴代码 自定义ClassLoader,重写loadClass()。 测试类 执行结果: sun.misc.Launcher$AppClassLoader@addbf1 ==> 当前上下文类加载器是应用类加载器 sun.misc.Launcher$ExtClassLoader@42e816 ==> 应用类加载器的父类加载器是扩展类加载器 null ==> 扩展类加载器的父类加载器是启动类加载器,因为启动类加载器是C++编写,java里获取不到 class com.zoo.classloader.ClassLoaderTest ==> 自定义类加载器加载进行加载 com.zoo.classloader.MyClassLoader@1fb8ee3 ==> 通过Class对象获取它的类加载器 false ==> 同一个Class,不同的类加载器加载,那么Class不相等 hello world ==> 被自定义类加载器加载的Class在程序中执行 sun.misc.Launcher$AppClassLoader@addbf1 ==> 获取当前上下文类加载器 com.zoo.classloader.MyClassLoader@1fb8ee3 ==> 设置上下文类加载器 … 继续阅读

发表在 编程语言 | 标签为 | Comments Off on 学习ClassLoader和自定义ClassLoader的使用

记博客重新搭建

近几天博客重新搭建完毕,在此做个时间戳,过程中,我只想说一句话,勤于备份真的是个好习惯。

发表在 生活笔记 | Comments Off on 记博客重新搭建