【发布时间】:2019-11-21 02:13:58
【问题描述】:
我在一次采访中被问到这个问题——“是否可以编写和加载您自己版本的核心 Java 类(如字符串、对象等)”。我说不,但面试官想知道 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 中已经存在 String 以及 Java 如何阻止开发人员加载核心类,为什么编译成功?
【问题讨论】:
-
你能写你自己版本的核心 java 类吗? 通常可以,只要你不扩展最终类或做其他编译器禁止的事情. 您能否在核心 java 运行时环境中包含这些类? 我不知道,不。此外,当我将
java.lang指定为不在核心 JRE 中的文件中的包时,编译失败,您确定您的 Eclipse 配置正确吗?
标签: java class classloader