在一次面试中,我被问到了这个问题--“是不是可以编写和加载自己版本的核心Java类(如String、Object等)”。我说没有,但面试官想知道Java有什么检查来防止这种情况发生。为了理解这一点,我用eclipse编写了下面这段代码。
package java.lang;
public final class String {
public static void main(String[] args) {
String s = new String();
}
}我预计编译会失败,因为Java在java.lang包中已经有了一个String类。但是编译成功了,当我运行程序时,我得到了下面的错误--
Error: Main method not found in class java.lang.String, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application考虑到字符串已经存在于java.lang中,以及开发人员如何加载核心类,编译为什么会成功?
发布于 2019-07-11 19:10:14
javac必须编译核心类。
在运行时会进行检查,以防止您加载重复的类。
java.开头的类。我相信,这样做是为了阻止微软做不兼容的事情。您可以使用不同的核心类启动JVM,尽管这将是特定于实现的。在JDK8之前,您可以使用-Xbootclass/p:选择性替换类。
https://stackoverflow.com/questions/56987849
复制相似问题