关于 Java 加载两个具有相同描述符的类

问:java 能不能自己写个类也叫 java.lang.String 然后使用?

答:一般情况下不能,因为类加载采用双亲委托机制,这样可以保证 parent 类加载器优先,也就是总是使用 parent 类加载器能找到的类,这样总是使用 java 系统提供的 String 类,因为每个类加载器加载类时先委托给其上级类加载器,java.lang.String 在 BootStrap (启动类加载器)中最先加载,但是我们可以自己写一个类加载器(譬如 parent 设置 null 等)来加载我们自己写的 java.lang.String 类,当编写自己的类加载器时我们首先让自定义的类加载器继承 ClassLoader,然后重写 loadClass 方法与 findClass 方法,loadClass 中先调用父类的 loadClass,然后调用 findClass,通常情况下只重写覆盖 findClass 就可以了,当然我们还可以重写 defineClass 方法让自定义的类加载器用于解密自己写的已加密的 class 字节码,这样即使别人拥有该 class 文件也无法被系统的类加载器正常加载,切记类的包路径和类加载器决定类的唯一性。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。