我有下面的代码,它抛出下面给出的错误。当“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/