今天遇到一個開心事,在eclipse編寫的程式碼在命令視窗中編譯後無法執行,提示 “錯誤: 找不到或無法載入主類”
java中帶package和不帶package的編譯執行方式是不同的。
首先來了解一下package的概念:簡單定義為,package是一個為了方便管理組織java檔案的目錄結構,並防止不同java檔案之間發生命名衝突而存在的一個java特性。不同package中的類的名字可以相同,只是在使用時要帶上package的名稱加以區分
package debug; class Demo {
1、帶package執行方法
我的程式碼目錄結構為:D:\WorkSpace-Java\java_excise\src\debug\HelloWorld.java
1 packagedebug; 2 3 class HelloWorld { 4 public static void main(String[] args){ 5 System.out.println("hi"); 6 } 7 }
在eclipse中執行能正常打印出內容,此時我想在命令視窗中去重新編輯並執行該檔案時,即提示錯誤 找不到或無法載入主類
操作步驟如下:
1、win + R 調出執行視窗並輸入 cmd 開啟命令視窗
2、切換碟符 輸入: e: 然後回車
3、進入到程式碼目錄: cd D:\WorkSpace-Java\java_excise\src\debug
4、編譯檔案: javac HelloWorld.java
5、執行該檔案: java HelloWorld,報錯了,如下圖:
原因:報這個錯原因是在當前目錄下,然後根據程式碼檔案中引用的包名會在當前debug目錄下再去找debug目錄(這個目錄肯定不存在,如果你想驗證是不是這樣,可以手動在當前debug目錄下再新建一個debug目錄,然後把HelloWorld.class檔案拷過去重新執行),所以就會報找不到或者無法載入主類,那麼要如何才能正常執行呢,想到了這個程式碼執行的流程要先找到該debug路徑,那是不是我只要返回到當前debug目錄的上一級目錄,然後重新執行該java檔案不就可以找得到debug目錄了
2、不帶package執行方法
1 //package debug; 2 3 class HelloWorld { 4 public static void main(String[] args){ 5 System.out.println("hi"); 6 } 7 }
操作步驟如下:
1、win + R 調出執行視窗並輸入 cmd 開啟命令視窗
2、切換碟符 輸入: e: 然後回車
3、進入到程式碼目錄: cd D:\WorkSpace-Java\java_excise\src\debug
4、編譯檔案: javac HelloWorld.java
5、執行該檔案: java HelloWorld,直接就得出正確的結果了,如下截圖:
總結:
1、一般通過IDE開發的程式碼,在新建class檔案時,會預設在檔案首行產生一個 package xxx;的程式碼,這樣的程式碼是可以直接在IDE進行編譯並正常執行的(前提是程式碼無基本的語法錯誤),如果想要在DOS命令視窗中編譯並執行的話,此時就需要將檔案目錄切換至程式碼所在目錄的上一級目錄,然後用 java xxx進行執行,否則會報錯,簡單做法為:編譯檔案時javac xxx.java在當前程式碼路徑下,執行檔案時需要返回到程式碼所在目錄上一級目錄執行,執行時同時要帶上包名 java xx.xxx (xx代表包名,xxx代表java類名)。
2、如果是通過Notepad++建立的java檔案,一般首行都不會帶上package,這樣在命令視窗中編譯和執行就不需要額外去切換目錄了,可以在當前目錄直接執行。