關於Java源檔案中public類的問題

來源:互聯網
上載者:User

標籤:ssl   misc   could not   exce   產生   通過   dex   void   lang   

結論:

一個Java源檔案中最多隻能有一個public類,當有一個public類時,源檔案名稱必須與之一致,否則無法編譯;

如果源檔案中沒有一個public類,則檔案名稱與類中沒有一致性要求;

至於main()不是必須要放在public類中才能運行程式。

 

實驗如下:
Test3.java源檔案:
class Test1
{
     int i = 1;

}

class Test2
{
     int i = 2;
     public static void main(String[] args)
    {
         System.out.println("main method");
    }
}

C:/javatest>javac Test3.java

C:/javatest>java Test2
main method

註:編譯不會出錯,注意是啟動並執行Test2 因為沒有Test3.class檔案產生。如果運行Test3則報錯

找不到該類
C:/javatest>java Test3
Exception in thread "main" java.lang.NoClassDefFoundError: Test3
Caused by: java.lang.ClassNotFoundException: Test3
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: Test3.  Program will exit.
這個錯誤原因很簡單:JVM中的類載入器找不到Test3.class ,同時這裡也說明了包含main()的類如果想運行則不一定要是public的。

《深入jvm第二版》中有這樣一句話:
java虛擬機器執行個體通過調用某個類的main()來運行一個Java程式,而這個main()必須是public static void 並接收一個字串數組作為參數,任何擁有這樣一個main()的類都可以作為java程式的起點。
並沒有說擁有main()方法的類一定要是public類。

Test7.java源檔案:
class Test5
{
     int i = 1;

}

public class Test6
{
     int i = 2;
     public static void main(String[] args)
    {
          System.out.println("main method");
    }
}

如果運行Test7.java 報錯:
C:/javatest>javac Test7.java
Test7.java:8: 類 Test6 是公用的,應在名為 Test6.java 的檔案中聲明
public class Test6
        ^1 錯誤
這裡說明了檔案名稱必須與public類的類名一致,(如果檔案中有public類)

這裡可以看出如果有多個public類,那麼檔案名稱應該是哪個public類的呢?顯然一個java源檔案只能有一個public類。

通過上述實驗,故能得出開始的結論!

參考:http://blog.csdn.net/bareheadzzq/article/details/6562211

關於Java源檔案中public類的問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.