打包的意義:
① 標准Java庫是由一系列包組成,包括java.lang,java.util,java.net等。標准Java包就是層次型包結構,就如同硬盤上嵌套的子目錄一樣,我們可以使用嵌套層次結構來組成包;
② Java的包是為了更好地規劃代碼,防止命名沖突和混亂。所以Java出現了打包機制;
③ 當把類組織起來放進一個包內之時,也就給包中的成員賦予了相互訪問的權限,就“擁有”了該包內的程序代碼;
④ 包訪問權限為把類聚集在一個包中這一做法提供了意義和理由;
package----聲明包
package com.iotek.ch09;
public class lotekTeacher{
private String name;//教師的姓名
private int age;//教師的年齡
/**
*包訪問權限
*@return 自我介紹的內容
*/
String introduction(){
return “大家好我是”+name+”,今年”+age+”歲”;
}
}
① 包名由小寫單詞組成;
② Java程序員都可以編寫屬於自己的Java包,為了保障每個Java包命名的唯一性,編程規范要求程序員在自己定義包的名稱之前加上唯一前綴;
③ 由於互聯網上的域名名稱是不會重復的,所以一般推薦采用公司在互聯網上的域名的倒置作為包的唯一前綴;
一個類可以使用同一包中所有類以及其它包中的所有公開類
我們可以通過兩種方式訪問其它包中的公開類
① 簡單在每個類前面加上完整包名,例如java.util.Date today=new java.util.Date();
② 更簡潔更通用的方式是:使用import語句來導包
import java.util.Date;
…
Date today=new Date();
可以import特定類,也可以導入整個包。通過在源代碼文件的頂部(在打包語句後)使用import導入語句來實現。
步驟:
在d盤下的javastudy文件夾中創建一個package文件夾,在其內編寫Dog.java名稱的程序
源程序
1 package com.iotek.entity; 2 public class Dog{ 3 String name; 4 public int age; 5 public void show(){ 6 System.out.println(name+"------"+age); 7 } 8 } View Code上面的打包路徑為com下的iotek下的entity中
編譯方法:進入程序路徑後 javac –d . Dog.java
編譯成功後,會在包路徑下產生編譯好的文件
同一個包中
在編寫一個DogTest的源程序
1 package com.iotek.entity; 2 public class DogTest{ 3 public static void main(String [] args){ 4 Dog dog=new Dog(); 5 dog.name="旺財"; 6 dog.age=5; 7 dog.show(); 8 } 9 } View Code編譯通過之後
運行方法:java com.iotek.entity.DogTest
前面Dog.java中的name屬性在同個包中的其它類是可以訪問的。
不同包中
先將com文件夾刪除
DogTest.java中包路徑更改為package com.iotek.test;
如下
1 package com.iotek.test; 2 public class DogTest{ 3 public static void main(String [] args){ 4 Dog dog=new Dog(); 5 dog.name="旺財"; 6 dog.age=5; 7 dog.show(); 8 } 9 } View Code同樣先編譯Dog.java程序,在編譯DogTest.java程序,此時編譯不通過
然後將DogTest.java程序再次更改
1 package com.iotek.test; 2 public class DogTest{ 3 public static void main(String [] args){ 4 com.iotek.entity .Dog dog=new com.iotek.entity . Dog(); 5 dog.name="旺財"; 6 dog.age=5; 7 dog.show(); 8 } 9 } View Code此時編譯還是不通過
原因是Dog.java中的name屬性引起的錯誤,應該將其更改為public String name;
源程序如下
1 package com.iotek.entity; 2 public class Dog{ 3 //String name;//同個包中的其它類是可以訪問的, 4 //不同包中的其它類不能訪問使用默認訪問修飾符的屬性和方法 5 public String name; 6 public int age; 7 public void show(){ 8 System.out.println(name+"------"+age); 9 } 10 } View Code更改後重新編譯Dog.java,再次編譯DogTest.java,此次未報錯,成功生成
然後運行java com.iotek.test.DogTest
但DogTest.java中的全局包名太過麻煩,每次使用都要寫
再更改為用import導入的方法,package必須寫第一句
1 package com.iotek.test; 2 import com.iotek.entity.Dog; 3 public class DogTest{ 4 public static void main(String [] args){ 5 Dog dog=new Dog(); 6 dog.name="旺財"; 7 dog.age=5; 8 dog.show(); 9 } 10 } View Code再次編譯也能夠執行。
綜上:
Dog.java和DogTest.java的最終代碼如下
1 package com.iotek.entity; 2 public class Dog{ 3 //String name;//同個包中的其它類是可以訪問的, 4 //不同包中的其它類不能訪問使用默認訪問修飾符的屬性和方法 5 public String name; 6 public int age; 7 public void show(){ 8 System.out.println(name+"------"+age); 9 } 10 } Dog.java 1 package com.iotek.test; 2 import com.iotek.entity.Dog; 3 public class DogTest{ 4 public static void main(String [] args){ 5 Dog dog=new Dog(); 6 dog.name="旺財"; 7 dog.age=5; 8 dog.show(); 9 } 10 } DogTest.java然後依次
javac –d . Dog.java
javac –d . DogTest.java
java com.iotek.test.DogTest
就可以完成包的創建及其調用