1. 程式人生 > >如何使用 java 命令執行含有包的程式

如何使用 java 命令執行含有包的程式

有時候我們會嘗試使用 javac 和 java 命令來讓我們的程式執行起來,一般情況下這是不會出現什麼問題的。但是一旦我們新增包之後,事情就變得有些不可捉摸了,這時候命令不對的話,往往就會出現 “錯誤:找不到或無法載入主類” 這個惱人的錯誤。我們先來簡單復現一下上述連結中使用包時出現的錯誤。

錯誤復現

我們或多或少會注意到 Eclipse、Netbeans 等 IDE 都是將程式原始碼放到 src 資料夾下的。現在我們在 E:\test 資料夾下就有一個 src 子資料夾。在 src 中我們編寫了如下 HelloWorld.java 程式:

package pers.admin.test;

public
class HelloWorld { public static void main (String[] args) { System.out.println("Hello World!"); } }

專案樹形圖如下: 在這裡插入圖片描述

然後我們很自然的想到使用 javac 來編譯此 java 類,當然我們此時也不忘指定 java 類的路徑: 在這裡插入圖片描述

從樹狀圖中我們可以得知我們編譯成功了,此時,依照慣性我們就會仿照上述命令寫出如下命令執行 java 位元組碼檔案: 在這裡插入圖片描述

怎麼會找不到主類!一臉茫然的我們可能會進行下面三種無用的掙扎: 在這裡插入圖片描述

此時,我們應該反省上述程式的 HelloWorld.java 的類名真的只是叫 HelloWorld 麼? 根據結果當然不是,事實是:一個類的全名應該是包名 + 類名

。類 HelloWorld 的全名:pers.admin.test.HelloWorld。

好了,有了類全名的定義,我們進行如下嘗試: 在這裡插入圖片描述

可以看到果然不出所料的成功了。

問題進一步延伸

當觀察 IDE 檔案結構的時候,我們會發現 src 目錄下其實並沒有那些雜亂的 .class 檔案。反而 .class 檔案多集中在 bin 這個資料夾下。這是為什麼呢?因為 IDE 在用 javac 命令的時候指定了 .class 檔案輸出的路徑。我們要怎麼指定呢?很簡單,就是使用 -d 引數:在這裡插入圖片描述

我們來試試,不過我們得手動建好 bin 資料夾。 在這裡插入圖片描述

可以看到這裡 .class 檔案的確是在另一個資料夾裡了。那麼此時我們應該怎麼用 java 命令執行這個位元組碼檔案呢?其實上面已經劇透了一點,就是使用 java 的 -cp 引數: 在這裡插入圖片描述

這裡就沒什麼好說了。 在這裡插入圖片描述

另外說一句,原來之前自己碰到過這個問題,結果現在遇到還是像是沒長記性一樣…