给定一个类阴影内置类,如String:
class String {
public static void main(String[] args) {
}
}
String不是关键字,但上述程序仍会产生运行时错误。那是为什么?
答案 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类...