我实操的结果与《深入理解JVM》书中给出的结果不一致

Lavau 2020-12-02 09:11:52
·
package chapter7;

import java.io.IOException;
import java.io.InputStream;

/**
* description P280 代码清单 7-8
*
* @author Leet
* @date 2020-12-02 20:51
**/
public class ClassLoaderTest {
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
ClassLoader myLoader = new ClassLoader() {
@Override
public Class<?> loadClass(String name) throws ClassNotFoundException {
System.out.println("MINE");
String fileName = name.substring(name.lastIndexOf(".") + 1) + ".calss";
InputStream is = getClass().getResourceAsStream(fileName);
if (is == null) {
return super.loadClass(name);
}
try {
byte[] b = new byte[is.available()];
is.read(b);
return defineClass(name, b, 0, b.length);
} catch (IOException e) {
throw new ClassNotFoundException(name);
}
}
};

Object obj = myLoader.loadClass("chapter7.ClassLoaderTest").newInstance();
System.out.println(obj.getClass());
System.out.println(obj instanceof chapter7.ClassLoaderTest);
}
}


《深入理解Java虚拟机》第三版 P 281 代码清单 7-8 除了包名不一致,其他全部一致

书上说,最后一行输出:false
但我实操输出的是:true

请问为什么呢?
...全文
2324 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
冰思雨 2020-12-03
  • 打赏
  • 举报
回复
是不是 class-path 设置的有问题。
冰思雨 2020-12-03
  • 打赏
  • 举报
回复
ClassLoaderTest.class 这个文件的路径问题。 你的程序无法找到这个class文件。 InputStream is 这个是 null 你自己想想办法,当 InputStream is 不为空时,就是自定义加载器价值类。
KeepSayingNo 2020-12-03
  • 打赏
  • 举报
回复
答案应该是true,关键看你导入的.class文件是不是ClassLoaderTest这个类型

51,411

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧