給定一個類遮蔽一個內置類(如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 –