java - 在我的项目中使用预定义的类名 String

标签 java jvm classloader

我有下面的代码,它抛出下面给出的错误。当“String[] args”替换为“java.lang.String[] args”时,它不会抛出错误并运行方法 s1.method1()。

问题:为什么本地 String 优先于 java.lang.String ? 根据委托(delegate)模型,Bootstrap 类加载器会在加载 Test 类之前获得优先权并加载 java.lang.String。我在这里错过了什么吗?请指出此行为的任何引用。

测试.java:

package diff;
class String {

    public void method1(){
    System.out.println("in my method");
    }
}

class Test {
    public static void main(String[] args){
        String s1 = new String();
        s1.method1();
    }
}

错误:在类 diff.Test 中找不到 Main 方法,请将 main 方法定义为: 公共(public)静态无效主(字符串[]参数) 或者 JavaFX 应用程序类必须扩展 javafx.application.Application

最佳答案

问题:为什么本地 String 优先于 java.lang.String ?

本地name masks java.lang 中的那个。 java.lang 包由编译器为每个程序隐式导入,但是您不能将 java.lang.String 用作 String,因为您屏蔽名称String。正如您所指出的,您可以使用 java.lang.String 或重命名您的 String 类(简而言之,不要添加与其他类冲突的自定义类)类名来自java.lang)。这不是类加载器问题,因为编译后所有类都在字节码中完全限定。

关于java - 在我的项目中使用预定义的类名 String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49241212/

相关文章:

java - 为什么Java ClassLoader加载这个类

java - java中Byte的宽度是8位是什么意思?

java - DDD - 存储库和多对多关系

java - 在 Spring Framework (Mockito) 中模拟一个 void 方法

java - JVM/JLS 中是否指定永远不会加载未使用代码路径中的类?

java - 在加载之前检测编译代码的缺点

java - Python属性错误 'Map'对象没有属性 'cells'

java - 为什么JAVA在Install之后不直接把它的IL编译成Native代码?

java - 是否可以获得用于在 java 中启动 jvm 的命令?

performance - Scala 动态类管理