为了账号安全,请及时绑定邮箱和手机立即绑定

到底哪个class里面的代码会执行呢?

到底哪个class里面的代码会执行呢?

繁星coding 2022-10-02 14:10:20
背景1:我们知道java中类加载机制采用双亲委托制机制,一个classloader要加载一个类,首先会委托他的上级加载器尝试加载,如果上级加载不成功才会自己加载。背景2:我们自己的类的加载器是AppClassLoader,它的上级是ExtClassLoader。ExtClassLoader会在%JAVA_HONME%/jre/lib/ext目录中寻找、加载类。背景3:我自己写了一个Test.java,编译后为Test.class。按背景2,Test的加载器是AppClassLoader,再根据背景1,它会首先委托ExtClassLoader去尝试加载。ExtClassLoader在%JAVA_HONME%/jre/lib/ext中找不到该类,故加载失败,所以最终还是会由AppClassLoader来加载Test.class。问题:可是,如果我把编译好的Test.class打成jar包,放到%JAVA_HONME%/jre/lib/ext目录中,那么当AppClassLoader委托给ExtClassLoader加载时,ExtClassLoader会加载成功吗?这个问题困扰我的地方在于,按照背景2,貌似的确应该由ExtClassLoader去加载Test。但我感觉这违反直觉,我要运行的是本地的Test.class,但是JVM却加载了另一个Test.class(%JAVA_HONME%/jre/lib/ext下),那么本地这个Test.class还有什么意义?
查看完整描述

1 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

ext下面的类会被优先加载,这没什么违背直觉的啊,或者说是你把Test拷到ext里面是违背直觉的,反过来想如果你在自己的工程里面写个java.lang.String,jvm也会优先加载上级loader下面的String.class,要不怎么保证jvm的安全性

查看完整回答
反对 回复 2022-10-06
  • 1 回答
  • 0 关注
  • 96 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信