1. 程式人生 > >Java包機制package之間呼叫問題-cmd執行視窗編譯執行

Java包機制package之間呼叫問題-cmd執行視窗編譯執行

問題:在使用了java包機制(package)後,編譯出現錯誤:找不到或無法載入主類 xxx 的錯誤提示資訊(各種編譯不通過)

先給演示結果:

編譯:javac -d classes src/a/HelloTest.java

-d classes :指定存放class檔案的路徑
src/a/HelloTest.java :在專案路徑:D:\javacode\Hello的基礎上指定原始檔的路徑
此時D:\javacode\Hello\classes路徑下已經按照package路徑結構生成了class檔案

執行:java -cp classes src.a.HelloTest

-cp classes :指定所要呼叫的.class檔案所在路徑(包所在的路徑)
src.a.HelloTest :原始檔中所設定的package路徑(即:包名.類名)

我的本地專案路徑:D:\javacode\Hello

原始檔HelloTest路徑:D:\javacode\Hello\src\a\HelloTest.java

原始檔Hello路徑:D:\javacode\Hello\src\a\b\Hello.java

注意:Java的package機制非常強調路徑,所以路徑值指定搞清楚了就不會出問題(可能會有很多人會告訴你是CLASSPATH環境變數配置問題,然而它也只是起一個指定路徑的作用,告訴java虛擬機器你的class檔案所在路徑然後執行;所以你自己指定是一樣的,沒有關係。)

擴充套件

Java的package機制的使用關鍵在於對路徑的設定容易出錯;

  • 先了解Java編譯執行過程

    原始檔.java--使用javac編譯-->位元組碼檔案.class--使用java解釋執行-->特定平臺的機器碼

  • 包(package)機制:
    為解決眾多的類庫出現類重名的問題Java引入了package機制,提供了類的多層名稱空間(類似Windows中的資料夾),將一組功能相關的類放在同一個package下,從而組成邏輯上的類庫單元;
    • 使用規則:
      1.package語句必須為原始檔的第一條語句(註釋除外);
      2.一個原始檔中只能有一條package語句;

      結論:

      在原始檔有package語句時,無論是編譯還是執行首先要確定自己作為呼叫者所在的路徑,即cmd視窗所顯示的路徑(cd指令轉換路徑),然後以這個路徑為基礎設定原始檔或者class檔案的路徑(問過一些網友和搜尋一些結果,大部分回覆什麼CLASSPATH環境變數配置,但並不是這樣,環境配置終究也是指定class檔案的儲存目錄,方便java命令能直接找到,和我們指定一樣,所以環境變數不是關鍵,要自己理解路徑之間的結構關係);

      補充:cmd相關指令:../ 匹配上一層目錄(../../為上兩層);* 匹配檔名(如目錄下有Hello和HlloTest兩個原始檔 編譯javac Hello*.java會自動匹配到HelloTest);. 表示當前路徑