Java 包、包的編譯
Java 包
Java 採用包的概念來對相關的類進行管理。
包可以避免名稱衝突,並且通過包名進行分類後,程式碼的維護性會有所提高。
包本質上就是一個個資料夾
以上都是 Java
的內建包,除了內建包,Java還支援自定義包。
Import
import
可以從指定的包中匯入指定的類,如:
import java.util.Scanner;
或匯入指定的包內所有內容
import java.util.*;
同個包下的類直接訪問即可,無需匯入。
Package
package
用於宣告該程式碼存在於哪個包的那個位置,使用Javac
編譯時.class
就會放在相對應的位置
一個類中只能宣告一次package
└── root
└── pack_name
└── MyPackClass.java
如:
package pack_name;
public class MyPackClass {
String str = "This is My Package Class";
}
包的命名規則及規範
命名規則:
- 只能包含數字、字母、下劃線、
.
,不能以數字開頭,不能是關鍵字或保留字
命名規範:
-
一般是
com.公司名稱.專案名稱.業務模組名
如:-
com.sina.crm.user
使用者模組 -
com.sina.crm.order
-
com.sina.crm.utils
工具類
-
-
其檔案分佈格式是這樣的:
-
└── com └── sina └── crm └── user └── ***.java... └── order └── ***.java └── utils └── ***.java
-
編譯
發現很多教學,都是直接教使用IDE
進行編譯,並沒有對手動編譯進行說明,但是作為一名初學者,現階段不建議使用整合度過高的IDE
,你可以不使用手動編譯,但你必須知道如何手動編譯
對於使用了自建包的程式碼,有必要知道如何在不使用 IDE
編譯時需要 javac
從包開始直到原始檔位置 如:com/sina/user/***.java
如果不指定編譯後的位置那麼會將這個原始檔使用到的所有包都進行編譯,並存放到對應的原始檔路徑下,如下圖
如果使用 javac -d
指定了路徑這會在指定的路徑生成與原始檔一樣的包,裡面存放編譯好的 .class
檔案
使用java -d
編譯需要手動編譯每一個包裡的類如:
# CLASS_PATH 為你要將編譯好的 .class 檔案儲存的路徑
java -d CLASS_PATH com/user/Test.java com/xiaoming/Dog.java com/xiaoqiang/Dog.java
這樣有些麻煩
如果你是Linux
系統,可以使用find
命令,找出所有是.java
字尾的路徑,然後將輸出重定向到一個檔案,我們再使用javac -d CLASS_PATH @java_path.list
這是另外一種解決思路,如:
# 先進入到存放包的目錄
cd 存放包的上一級目錄
find ./ -name *.java > java_path.list
java -d CLASS_PATH @java_path.list
圖解:
進入到存放包的目錄
尋找.java
原始碼路徑
這就是我們找到的原始碼路徑
開始編譯
可以看到,編譯完成後在你指定存放類檔案的路徑下會生成一個目錄,我們檢視一下這個目錄
可以看到,它與我們原檔案的儲存樣式是一模一樣的
這是原檔案
嘗試執行
我們使用java -classpath
指定我們存放類檔案的路徑,再在後面選擇你要執行的類檔案