Java包機制package之間調用問題-cmd運行窗口編譯運行


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

先給演示結果:

編譯:javac -d classes src/a/HelloTest.java
編譯同路徑下的多個源文件:javac -d . 源文件1 源文件2 ...

-d classes :指定存放class文件的路徑
src/a/HelloTest.java :在項目路徑:D:\javacode\Hello的基礎上指定源文件的路徑
此時D:\javacode\Hello\classes路徑下已經按照package路徑結構生成了class文件

運行:java -cp classes src.a.HelloTest
帶包運行:java 包名.類名 命令行參數列表

-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語句;

注意:

  • 如要編譯的源文件存在父類等,編譯時出現“錯誤: 找不到符號”的問題是由於cmd窗口編譯都需要手動進行,可以直接在后面追加要編譯的源文件,如圖: ,用空格隔開即可(誤打誤撞試了一下,還真可以)

補充:用package機制實繼承時,出現 錯誤:找不到符號 時,可以使用*代替源文件進行編譯:javac *.java

結論:

**在源文件有package語句時,無論是編譯還是運行首先要確定自己作為調用者所在的路徑,即cmd窗口所顯示的路徑(cd指令轉換路徑),然后以這個路徑為基礎設置源文件或者class文件的路徑**(問過一些網友和搜索一些結果,大部分回復什么CLASSPATH環境變量配置,但並不是這樣,環境配置終究也是指定class文件的存儲目錄,方便java命令能直接找到,和我們指定一樣,所以環境變量不是關鍵,要自己理解路徑之間的結構關系);

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM