概述
今天看《深入理解Java虚拟机》的7.4.1节时,实现一个书本上的代码,与书本结果不一致,不知道是因为JDK版本问题(本人JDK1.8)还是其他原因。
先给出代码:
package com.bjtu.ClassLoader;
import java.io.IOException;
import java.io.InputStream;
/**
* created by LMR on 2019/5/30
*/
public class ClassLoaderTest {
public static void main(String[] args) throws Exception{
ClassLoader myLoader = new ClassLoader() {
@Override
public Class<?> loadClass(String name) throws ClassNotFoundException {
try {
String fileName = name.substring(name.lastIndexOf(".") + 1) + "class";
InputStream resourceAsStream = getClass().getResourceAsStream(fileName);
if (resourceAsStream == null)
return super.loadClass(name);
byte[] b = new byte[resourceAsStream.available()];
resourceAsStream.read(b);
return defineClass(name, b, 0, b.length);
}catch (IOException e)
{
throw new ClassNotFoundException();
}
}
};
Object obj = myLoader.loadClass("com.bjtu.ClassLoader.ClassLoaderTest").newInstance();
System.out.println(obj.getClass());
System.out.println(obj instanceof com.bjtu.ClassLoader.ClassLoaderTest);
}
}
书本上的结果是:
class com.bjtu.ClassLoader.ClassLoaderTest
false
第二句输出false,其原因是虚拟机中存在了两个ClassLoaderTest类,一个是由系统程序类加载器加载的,一个是由我们自己定义的类加载器加载的,所以属于两个独立的类。也就是说类的唯一性由类加载器和类本身决定。但是在本机上的实际结果确返回的是true。
最后
以上就是无聊流沙为你收集整理的类加载器不同的类相同的全部内容,希望文章能够帮你解决类加载器不同的类相同所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复