一、什么是包?
為了更好地組織類,防止在一個空間下出現類重名,Java提供了包機制。包是類的容器,用於分隔類名空間(類型於C++中的命名空間)。如果沒有指定包名,所有的示例都屬於一個默認的無名包(又稱缺省包,缺省,
可理解為“省略的值為默認值”,故而應讀“shěng ”。)
package語句必須是文件中的第一條語句。也就是說,在package語句之前除了空白和注釋之外不能有任何語句。所以一個文件只允許一個包存在,看代碼:
1 package aa; //聲明一個包(如果不聲明就為一個缺省包(也就是默認包)) 2 package ccc; 3 public class a 4 { 5 public static void main(String[] args){ 6 bb.cc.dd.b dog = new bb.cc.dd.b(); 7 dog.fun(); 8 } 9 }
編譯:
二、命令行需要用到的命令
編譯:javac -d . 文件名.java
解析:
-d 的命令是:該選項用於指定生成的class目標文件的目錄。如果某個類是一個包的組成部分,則 javac 編譯時會將把該類文件放入指定包名的子目錄中,如果沒有就創建目錄。若未指定 -d 選項, javac 將把類文件放到與源文件相同的目錄中(也就是默認目錄)。
. 的命令是表示把生成的.class文件放在當前目錄(注意前后都有空格),從JDK5.0開始,如果classpath環境變量沒有進行設置,Java虛擬機會自動將其設置為“.”,也就是當前目錄。比如前面是C:\> 那么你所輸入的命令就代表在c盤根目錄下進行操作.如果你想要把生成的.class文件放在其他位置比如d盤根目錄,那么命令就變為javac -d d:\ hello.java。
三、代碼 整體思路:先創建一個b.java文件里面有類b,然后聲明一個包的路徑bb.cc.dd,意思是把編譯好的.class文件放在bb的子目錄里的cc的子目錄里的dd中,然后創建一個a.java的文件里面有類a,聲明一個aa的包,然后在aa.java中引用b.java里面的b類(注意:之所以先創建b類,是因為b類里面要先編譯a類里面才能引用) 創建b類的代碼:
1 package bb.cc.dd; 2 public class b 3 { 4 public void fun(){ 5 System.out.println("哈哈哈哈"); 6 } 7 }
編譯:javac -d . b.java
然后就在bb->cc->dd-> b.class 如:
再創建a類中的代碼(如果不導入包的話就用 . 來訪問):
1 package aa; //聲明一個包(如果不聲明就為一個缺省包(也就是默認包)) 2 public class a 3 { 4 public static void main(String[] args){ 5 bb.cc.dd.b dog = new bb.cc.dd.b(); 6 dog.fun(); 7 } 8 }
在使用import 的時候就方便點,效果和上面一樣,如:
1 package aa; //聲明一個包(如果不聲明就為一個缺省包(也就是默認包)) 2 import bb.cc.dd.b; // 全部導入:bb.cc.dd.* 3 public class a 4 { 5 public static void main(String[] args){ 6 b dog = new b(); 7 dog.fun(); 8 } 9 }
編譯:javac -d . a.java
運行 java 包名.類名 如: java aa.a
圖: