1. 程式人生 > 其它 >Java 包、包的編譯

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指定我們存放類檔案的路徑,再在後面選擇你要執行的類檔案