22、包的定義與使用

包的定義

1、包指的是程序的目錄。早期開發一個程序是將所有類寫在一個java文件中,編譯後程序將直接保存在根目錄下。利用包可以實現程序拆分,將不同的類根據要求保存在不同目錄中。
包的定義通過關鍵字package完成。
範例:定義包

package com.java.demo;

public class Demo {
    public static void main(String[] args) {
    }
}

2、定義包時用.表示子目錄。如果類中有包的定義,就必須使其保存在對應的目錄下,而這些目錄不需要手動創建,可以使用命令自動生成:
(1)打包編譯:java -d . Demo.java
|- -d: 根據package定義生成目錄;
|-.:設置保存路徑。.表示在當前路徑下生成。
(2)解釋程序時不要進入包中解釋程序,而是在包外輸入類的完整名稱包.類
|- java com.java.demo.Demo

包的導入

1、使用包可以將一個完整的程序拆分爲不同文件,從而分別保存。這存在問題:不同包間可能要進行互相訪問,就需要進行導包操作,使用import語句完成。
範例:定義com.java.util.Message

package com.java.util;

class Message{
    public static void print(){
        System.out.println("Hello World !");
    }
}

定義com.java.test.TestMessage

package com.java.test;

import com.java..util.Message;

public class TestMessage {
    public static void print() {
        Message msg = new Message();
        msg.print();
    }
}

編譯時,應先編譯Message,再編譯TestMessage:
|- javac -d . Message.java
|- javac -d . TestMessage.java
此時報錯:Message在com.java.util中不是公共的; 無法從外部程序包中對其進行訪問
出現上述問題是因爲public class定義的類可以被不同的包訪問;而class定義的類只能被本包所訪問。因此我們要修改Message.java:

package com.java.util;

public class Message{
    public static void print(){
        System.out.println("Hello World !");
    }
}

Java編譯器考慮到大型程序開發,因此可以使用通配符*java -d . *.java編譯當前目錄下所有java文件。
2、當要導入一個包中多個類時,可以使用import 包.*

package com.java.test;

import com.java..util.*;

public class TestMessage {
    public static void print() {
        Message msg = new Message();
        msg.print();
    }
}

import 包.*並不是導入包中所有的類,而是隻導入程序所需的類,因此不用擔心性能問題。
3、一個Java文件可能導入多個包,而不同包中可能存在同名的類。現假設:
·com.java.util.Message;
·com.java.demo.Message.

package com.java.demo;

public class Message {
    public static void print() {
        System.out.println("世界你好!");
    }
}

由於需要,要同時導入上述兩個類:

package com.java.test;

import com.java.demo.Message;
import com.java.util.Message;

public class TestMessage {
    public static void main(String[] args) {
        Message msg = new Message();
        msg.print();
    }
}

系統報錯:Error:(4, 1) java: com.java.demo.Message的 single-type-import 已定義具有相同簡名的類型。爲了避免該錯誤,在使用類時,應加上包名:

package com.java.test;

import com.java.demo.Message;
import com.java.util.Message;

public class TestMessage {
    public static void main(String[] args) {
        com.java.demo.Message msg = new com.java.demo.Message();
        Message.print();
    }
}

系統常用包

Java提供了許多程序開發包,此外還有許多第三方包。Java自帶的常見系統包如下:

(1)java.lang:包含了String、Object、Integer等類,此包系統自動導入;
(2)java.lang.reflect:反射開發包;
(3)java.util:Java的工具包,提供了大量的工具類,像鏈表;
(4)java.util.regex:正則工具包;
(5)java.text:國際化處理程序包;
(6)java.io:進行輸入、輸出處理以及文件操作;
(7)java.net:網絡編程開發包;
(8)java.sql:數據庫程序開發包;
(9)java.applet:Applet程序開發包(已經不用了);
|-Applet指的是在網頁上嵌套的程序,可以使用Applet做一些動態效果,是採用繪圖的方式完成的顯示。隨着時間的發展,Applet程序已經不再使用了(如果要再實現同樣的功能,都是用Canvas繪圖)。
(10)java.awt、javax.swing:圖形界面的開發包,主要功能是開發單機程序界面。
|-JDK1.0時推出了awt開發包,但是這個開發包使用了大量的windows圖形函數,使Java喪失了可移植性;
|-JDK1.2時推出了javax.swing開發包,是一個輕量級(Java自己開發的,不再使用windows),所以Java更名爲Java2;

jar命令

使用jar命令壓縮class文件,壓縮的單位爲包。
在這裏插入圖片描述
範例:定義Message.java文件

package com.java.util;

class Message{
    public static void print(){
        System.out.println("Hello World !");
    }
}

編譯後會生成class文件,此時要交付給用戶使用,將改包的代碼壓縮:jar -cvf my.jar com。生成的jar文件不能直接使用,必須配置CLASSPATH才能使用:SET CLASSPATH = .;jar包所在路徑。開發中需要使用大量的第三方jar文件,都需要配置CLASSPATH,最簡單的配置就是在環境變量中配置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章