打包的意義: ① 標準Java庫是由一系列包組成,包括java.lang,java.util,java.net等。標準Java包就是層次型包結構,就如同硬碟上嵌套的子目錄一樣,我們可以使用嵌套層次結構來組成包; ② Java的包是為了更好地規劃代碼,防止命名衝突和混亂。所以Java出現了打包
打包的意義:
① 標準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
就可以完成包的創建及其調用