java能不能自己写一个类叫java.lang.System/String正确答案
首先,摘抄网上错误答案的详细解释 但是,我们可以自己定义一个类加载器来达到这个目的,为了避免双亲委托机制,这个类加载器也必须是特殊的。由于系统自带的三个类加载器都加载特定目录下的类,如果我们自己的类加载器放在一个特殊的目录,那么系统的加载器就无法加载,也就是最终还是由我们自己的加载器加载。" 然后,说明下上面解释中提到的一些概念 类加载器是有层次的 再回去看下解释内容,我相信前面的部分大家应该很看懂了,也没什么大问题。最后的如果部分"如果我们自己的类加载器放在一个特殊的目录,那么系统的加载器就无法加载,也就是最终还是由我们自己的加载器加载。" 我就不明白所以了,逻辑完全不通。我想它的本意可能是,将自己的java.lang.System类放置在特殊目录,然后系统自带的加载器无法加载,这样最终还是由我们自己的加载器加载(因为我们自己的加载器知道其所在的特殊目录)。这种说法好像逻辑上没有问题,那么我们就来实验下了。 代码验证 测试类结构及内容如下: public class ClassLoaderTest { public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException { ClassLoader myLoader = new MyClassLoader(); Object obj = myLoader.loadClass("java.lang.Math").newInstance(); System.out.println(obj); } } public final class Math { public static void main(String[] args) { System.out.println("hello world"); } } public class MyMath { public static void main(String[] args) { System.out.println("hello world"); } } 上面的测试代码没用自定义java.lang.Read full article from java能不能自己写一个类叫java.lang.System/String正确答案
No comments:
Post a Comment