给定一个类遮蔽一个内置类(如String):当我们将类名定义为字符串时会发生什么?
class String {
public static void main(String[] args) {
}
}
字符串不是一个关键字,不过,上面的程序给出了一个运行时错误。这是为什么?
给定一个类遮蔽一个内置类(如String):当我们将类名定义为字符串时会发生什么?
class String {
public static void main(String[] args) {
}
}
字符串不是一个关键字,不过,上面的程序给出了一个运行时错误。这是为什么?
不好的事情发生,当你定义一个名为字符串您阴影 一个java.lang.String
类的类,这意味着每一个声明的对象必须使用全限定名java.lang.String
如果它指的是一个“正常的字符串”比其他将指向你定义一个..
例子是你写的代码:
public static void main(String[] args) {
}
如果这是你有,那么编译器会抱怨,因为入口点的应用程序将永远不会被发现的唯一类...
你会需要做
public static void main(java.lang.String[] args) {
}
定义明确的说法
这是一个非常不错的陷阱,会打破你的脖子,所有的最大的原因是在java lang中的类不需要导入,你的代码必须仔细书写,并且非常容易出错..
那个代码将编译,但在任何体面的代码分析器,你会得到很多抱怨和重命名的建议s ..
我会遵循这种方式,并建议永远不要命名你的类像标准的java类...
原因是因为main
方法是'特殊的',因为它是程序的入口点。该程序的参数被指定为具有可变数量Java的java.lang.String
s,而不是您的String类。您的字符串类与类最接近,因为它是当前类,所以当JVM预期Java的字符串时,Java会在main
参数中使用您的String类,从而导致错误。您可以通过使用Java的字符串的完全合格的名称防止这种情况:
public static void main(java.lang.String[] args) {
...
}
那么,用户定义的String类将比Libraray String类更优先? –
是的,因为它是最接近的一个,因为它是当前类@NickSilicon – Li357
那么,什么是错误? – OldProgrammer
字符串已经是类的名称。 String类。这对我来说假设你想覆盖那个类。 –
@OldProgrammer错误是:错误:在类String中找不到主要方法,请将主要方法定义为: public static void main(String [] args) 或者JavaFX应用程序类必须扩展javafx.application.Application –