簡體   English   中英

為什么我們不能在靜態內部類中定義main函數?

[英]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.classTester$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=/somedirset 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM