将类名定义为String时会发生什么?

时间:2016-09-18 17:46:51

标签: java string class

给定一个类阴影内置类,如String:

class String {
public static void main(String[] args) {

}
}

String不是关键字,但上述程序仍会产生运行时错误。那是为什么?

2 个答案:

答案 0 :(得分:2)

原因是因为main方法是特殊的'因为它是该计划的切入点。程序的参数被指定为具有可变数量的 Java java.lang.String,而不是您的String类。您的字符串类是最接近该类的字符串,因为它是当前类,因此当JVM需要Java的字符串时,Java在main参数中使用您的String类,从而导致错误。您可以使用Java的字符串:

的完全限定名称来防止这种情况
public static void main(java.lang.String[] args) {
    ...
}

答案 1 :(得分:2)

当您定义名为 String 的类时,您会隐藏muduleId类 这意味着每个声明的对象必须使用完全限定名称java.lang.String,如果它引用的是“普通字符串”,那么它将指向您定义的名称。

示例是您编写的代码:

java.lang.String

如果这是你唯一的类,那么编译器会抱怨,因为永远不会找到应用程序的入口点......

您需要通过执行

来定义显式参数
public static void main(String[] args) {

}

这是一个非常好的陷阱,会破坏你的脖子,因为java lang中的类不需要导入,你的代码必须仔细写,并且非常容易出错..

该代码将编译,但在任何体面的代码分析器中,您将获得大量抱怨并重命名建议..

我也会按照这种方式进行操作,并且建议不要将类命名为标准java类...