java-使用package分类管理

一個應用程式中會有多個類別彼此合作,也有可能由多個團隊共同分工,完成應用程式的某些功能塊,再組合在一起。

現在你所撰寫的類別,編譯出來的.class都放置在同一個資料夾下,這不是個很好的管理方式。就如同你會分不同的資料夾來放置不同作用的檔案,你的類別也應該分門別類加以放置。

如果你的應用程式是多個團隊共同合作,若不分門別類放置.class,那麼若A部門寫了個Util類別並編譯為Util.class,
B部門寫了個Util類別並編譯為Util.class,當他們要將檔案整合時,就會發生檔案覆蓋的問題。

就算你使用A資料夾放置A部門的Util.class,B資料夾放置B部門的Util.class,避開了實體檔案覆蓋的問題,那麼在程式中,若要用到Util類別,那如何確定現在用到的是A資料夾中的
Util,還是B資料夾中的Util?設Classpath不能解決問題,如果Classpath中順序是先找到A資料夾,程式中直接撰寫Util,所用到的都只會是A資料夾中的Util.class,如果Classpath中順序是先找到B資料夾,程式中直接撰寫Util,所用到的都只會是B資料夾中的
Util.class(先找到先載入,記得嗎?)。

所以,你要有個分門別類管理類別的方式,無論是實體檔案上的分類管理,或是程式邏輯上的分類管理!

在Java中有個package關鍵字,可以讓你作類別的分類管理,例如若你想將Main放置cc分類下的openhome分類,則可以如下撰寫:
  • Main.java
package cc.openhome;

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

如此,這個類別的名稱不再是Main,而是cc.openhome.Main,一般稱這為完全吻合名稱(Fully Qualified Name),這個名稱表示Main是放在cc分類下的openhome分類,也就是先前所謂程式邏輯上的分類管理。接下來你直接使用javac編譯並執行:


這個錯誤的訊息是指,你指定要執行Main類別,但當JVM載入編譯出來的Main.class時,發現它的名稱是cc.openhome. Main類別,而不是你指定的Main類別。java.lang.NoClassDefFoundError: Main表示找不到你指定的Main類別, wrong name: cc/openhome/Main表示載入的Main.class,完整名稱其實是cc.openhome.Main,JVM找入的Main.class是錯的。

但是如果你執行以下指令:


這次你指定的是完整的名稱cc.openhome.Main,JVM仍然報錯!java.lang.NoClassDefFoundError: cc/openhome/Main的意思,是說JVM在cc資料夾下openhome資料夾下找不到完整名稱為cc.openhome.Main的Main.class。

所以你要建立
cc資料夾,而其中還有個openhome子資料夾,將Main.class放到其中:



然後執行一次:


一個完整名稱為cc.openhome.Main的類別,其編譯出來的Main.class,也必須放在實體的cc資料夾下openhome資料夾下,這就是
先前所謂實體檔案上的分類管理

當然,每次都得這麼手動建立資料夾並置放.class實在太麻煩了,你可以在編譯時加上-d引數,這可以讓你指定編譯出來的.class檔案要放置的資料夾,如果類別包括了package分類,則在你指定的資料夾下,就會建立起對應package階層的資料夾,並將.class放進去。例如:
javac -d c:\workspace Main.java

上面的指令執行過後,如果Main.java中package設定為cc.openhome,則c:\workspace下會建立cc資料夾與子資料夾openhome,並將Main.class放進去openhome資料夾。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的包(package)是一种用于组织和管理类和接口的机制。它提供了一种将相关类组织在一起的方式,以便于在不同项目使用和管理。 包的主要作用是: 1. 命名空间管理:包可以避免不同类之间的命名冲突。它通过将不同包中的类放在不同的命名空间中,确保每个类都有唯一的标识符。 2. 类的分类和管理:包可以将类按照功能或者类型进行分类和管理。例如,一个项目的GUI界面类可以放在同一个包中,数据库操作类可以放在另一个包中。这样可以提高代码的可读性和可维护性,方便团队协作和代码复用。 3. 访问控制:包可以定义类的可见性和访问权限。Java提供了四个访问修饰符(private、default、protected和public),在包内部和包外部定义的可见性不同。这种访问控制能够帮助我们保护数据的安全性,并控制类的使用范围。 4. 组织和分层:包可以帮助我们将类按照不同的层次进行组织。例如,将界面层、业务逻辑层和数据访问层放在不同的包中,可以提高代码的可维护性和可扩展性。 使用包的步骤: 1. 定义包名:在Java程序的源代码文件中,通过使用package关键字来定义包名。例如,package com.example.myproject; 2. 将类放在包中:将类文件放在对应包的目录下。例如,将com.example.myproject中的类放在com/example/myproject目录下。 3. 导入包:在需要使用某个包中的类时,可以使用import关键字导入包。例如,import com.example.myproject.MyClass; 总的来说,Java的包机制提供了一种组织和管理类的机制,可以避免命名冲突,方便类的管理和分类,控制访问权限,以及提供代码的可读性和可维护性。通过使用包,我们可以更好地组织和管理我们的Java项目

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值