首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以编写和加载您自己版本的核心Java类吗?

可以编写和加载您自己版本的核心Java类吗?
EN

Stack Overflow用户
提问于 2019-07-11 19:08:48
回答 1查看 73关注 0票数 1

在一次面试中,我被问到了这个问题--“是不是可以编写和加载自己版本的核心Java类(如String、Object等)”。我说没有,但面试官想知道Java有什么检查来防止这种情况发生。为了理解这一点,我用eclipse编写了下面这段代码。

代码语言:javascript
复制
package java.lang;
public final class String {
    public static void main(String[] args) {
        String s = new String();
    }

}

我预计编译会失败,因为Java在java.lang包中已经有了一个String类。但是编译成功了,当我运行程序时,我得到了下面的错误--

代码语言:javascript
复制
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中,以及开发人员如何加载核心类,编译为什么会成功?

EN

回答 1

Stack Overflow用户

发布于 2019-07-11 19:10:14

javac必须编译核心类。

在运行时会进行检查,以防止您加载重复的类。

  • 你不能加载任何以java.开头的类。我相信,这样做是为了阻止微软做不兼容的事情。
  • 你不能用相同的类加载器实例加载两个同名的类。
  • 默认情况下,类加载器在加载一个类之前会检查父加载器。这是可重写的(具有相关的安全权限)。

您可以使用不同的核心类启动JVM,尽管这将是特定于实现的。在JDK8之前,您可以使用-Xbootclass/p:选择性替换类。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56987849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档