目錄
以下講解的內容,概念清除即可,實際上現在使用的IDE開發工具,很多操作不需要我們手動去完成了。
1、包的定義
任何操作系統中,都有一個統一的共識:同一個目錄下不能存在相同的文件名稱,但是,實際開發中又很難避免命名衝突矛盾的問題,爲此,項目中往往會引入包的概念,所謂的包,存儲時就是一個文件夾,在不同目錄中可以存放相同的文件。
要想在Java中定義包,直接使用package關鍵字即可。
【舉例】:定義包
package com.example.myapplication;
一旦程序中聲明瞭包,就必須將生成的*.class文件保存在包裏面,這個包並不是手工創建的,Java中專門提供了打包編譯的操作:
如 javac -d . Hello.java
命令中的參數:
- -d 生成目錄,默認情況下是根據package定義的內容生成;
- . 生成程序的保存路徑,設置爲 . 表示當前目錄下保存;
此時若程序有包了,解釋程序是必須加上包名稱,eg: java 包名稱.Hello
Java項目開發中,程序類必須要有包的定義纔可以使用,沒有包的類不存在,類的完整名稱就是”包.類“。
2、包的導入
利用程序包可以將很多的*.class類歸類保存,這樣一來,可能存在包與包間進行類的互相調用問題,可以利用import語句解決。
【舉例】:定義一個com.example.myapplication.util.Message類
package com.example.myapplication.util;
class Message {
public void getInfo(){
System.out.println("hello");
}
}
【舉例】:定義一個com.example.myapplication.test.TestMessage類
package com.example.myapplication.test;
import com.example.myapplication.util.Message;
public class TestMessage {
public void printInfo(){
Message msg = new Message();
msg.getInfo();
}
}
此時編譯,出現如下錯誤: Message在com.example.myapplication.util中不是公共的; 無法從外部程序包中對其進行訪問.
出錯的原因是,Message類的定義中使用的是默認的訪問控制權限,其特點是隻能被同一包中的類所訪問,不能被外包所訪問,所以,學習包的定義後,對於代碼有一些規範化要求:後續寫的類都要求寫在包中,且*.java文件中智只會有一個public class聲明。
【小結】:
- public class定義要求文件名與類名稱保持一致,而在*.java文件之中只允許有一個public class定義,如果該類要被不同的包所使用,必須使用public class聲明;
- class定義的類文件名稱可以與類名稱不一致,但那是編譯之後每個class聲明的類都會生成一個*.class文件,此類只能在一個包中使用。
【舉例】:修改Message類的定義
package com.example.myapplication.util;
publi class Message {
public void getInfo(){
System.out.println("hello");
}
}
3、系統常見包
Java開發類庫非常龐大,開發中也很多,比較常見的開發包如下:
- java.lang:Object、String、Integer、Number都是這個包中定義的,從JDK1.1開始都是自動導入的;
- java.lang.reflect:反射開發包,直接與框架開發有關係;
- java.util:Java的工具包;
- java.util.regex:正則表達式的開發包;
- java.text:國際化程序支持包;
- java.io包:數據流的開發包(Input、Output),前提:抽象類;
- java.net:網絡編程包,基本不用了;
- java.sql:數據庫的編程包;
- java.awt、javax.swing:圖形界面開發,現在基本也不用了;
--最初JDK1.0時,只提供有java.awt開發包,可以實現圖形界面的開發,但是最初的設計需要大量使用windows的系統函數;
--JDK1.2(Java2)推出了輕量化的組件,有了swing開發組件;
J# Java代碼改了,變成了VB的形式-》C#-》MFC,VC的圖形界面。 - java.applet.*:網頁上嵌入的java程序,是Java發展的標記,現在基本也不用了;
4、總結
1)以後的程序都要寫上package打包;
2)import語句往往不需要編寫,前提是:使用開發工具;