[英]Why can't we define main function in static inner classes?
我有以下簡單的代碼
public class Tester {
static class TesterChild {
public static void main(String args[]) {
System.out.println("Test");
}
}
}
它編譯良好。 但是當我運行它時,出現以下錯誤
[aniket@localhost src]$ java Tester
Error: Could not find or load main class Tester
問題是為什么我們不能在靜態內部類中定義main方法?
更新1:
如答案/評論中所指定,我已將代碼更改為以下代碼
public class Tester {
public static class TesterChild {
public static void main(String args[]) {
System.out.println("Test");
}
}
}
我對其進行了編譯,並制作了兩個類文件Tester.class
和Tester$TesterChild.class
。 但是我仍然出錯
[aniket@localhost Desktop]$ java Tester$TesterChild
Error: Could not find or load main class Test
更新2:
好的,現在我將當前目錄包含在類路徑中,並且仍然執行時出錯
[aniket@localhost Desktop]$ java -cp . Tester$TesterChild
Error: Main method not found in class Tester, please define the main method as:
public static void main(String[] args
它可以作為main
運行,但是您沒有使用正確的類。 您的主類不是Tester
而是Tester.TesterChild
。
在Eclipse中,它無需任何設置即可運行,但是您必須從命令行使用java 'yourpackage.Tester$TesterChild'
語法,如上文所述。
您需要將類的名稱包裝在''
因為在linux / unix上,shell可能認為$TesterChild
是變量。 如果你嘗試一下的提示,如果你省略了,你會得到這樣的''
S:
錯誤:找不到或加載主類測試器
如果需要顯式設置類路徑,則可以使用-cp
或-classpath
選項,也可以set CLASSPATH=/somedir
: set CLASSPATH=/somedir
由於您已經在內部類中定義了main()
方法。
運行內部類以獲取要執行的main()
。
使用命令行java Tester$TesterChild
。
更新
我認為您正在將Java文件放在某個包中。
java -cp . yourPackageName.Tester$TesterChild
例如我將文件放在名為test
的包中,然后我的命令是這樣的
java -cp . test.Tester$TesterChild
請注意,美元符號對大多數貝殼都有特殊的含義。 即,如果您編寫java -cp . Tester$TesterChild
java -cp . Tester$TesterChild
您的shell可以用具有該名稱的環境變量的內容替換$TesterChild
,或者如果不存在,則將其靜默替換為任何內容。 嘗試java -cp . 'Tester$TesterChild'
java -cp . 'Tester$TesterChild'
或java -cp . Tester\\$TesterChild
java -cp . Tester\\$TesterChild
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.