標籤:java package import
一些人用了一陣子的Java,可是對於 Java 的 package 跟 import 還是不太瞭解。很多人以為原始碼 .java 檔案中的 import 會讓編譯器把所 import 的程式通通寫到編譯好的 .class 檔案中,或是認為 import 跟 C/C++ 的 #include 相似,實際上,這是錯誤的觀念。
import的作用
如果沒有import
,我們在使用java類庫時就需要書寫該類的全路徑名,例如下面代碼:
java.util.ArrayList<Integer> list = new java.util.ArrayList<Integer>();
每次這樣寫要多敲很多字元,程式員都是很懶的,自然有人辦法偷懶了,於是有了import
,只需要在java檔案開頭部分匯入相應的類的全名一次,之後就只需要寫類名就可以引用該類了,例如:
import java.util.ArrayList; ... ArrayList<Integer> list = new ArrayList<Integer>();
上面的java.util
就是一個包,ArrayList
是該包裡面的一個類,
也可以使用萬用字元來表示引用某個包,這樣可以偷懶不少,但是盡量少這樣用了。
import java.util.*;
編譯時間所有類名都會被替換成相應的完全路徑名,如ArrayList
比替換成java.util.ArrayList
,這與我們自己書寫完全路徑名是一樣的效果。
尋找import
的類時,按照環境變數CLASSPATH
中指定的路徑(如有多個,依此執行下面操作),將該路徑作為根目錄,然後將import
後面的完全路徑名中的.
換成路徑分隔字元並添加.java
尾碼,將根目錄與替換後的路徑拼接成完全路徑定位要引用的類檔案。例如上面的匯入的java.util.ArrayList
類檔案路徑為$CLASSPATH/java/util/ArrayList.java
。
package的作用
包用來將一組相互具有聯絡並組合起來完成某一功能的類聚集到一起,比如java中的工具庫,通常一個庫是由多個class所組成,為了方便組織我們把這組class放在同一個目錄下,這個目錄就是看作是一個java包(當然還需要在java檔案開頭用package聲明一下)。
打個比方,package 名稱就像是我們的姓,而 class 名稱就像是我們的名字。package 名稱有很多.
的,就好像是複姓。比如說 java.lang.String,就是複姓 java.lang,名字為 String 的類別;java.io.InputStream 則是複姓java.io,名字為 InputStream 的類別。
但是實際中經常會出現重名的情況,這時候就需要用不同的姓作區分,例如A寫了一個String
類,B也寫了個String
類,為了區分,可以通過A.String
和B.String
分別表示他們各自的String
類。按照慣例,java中習慣使用Internet網域名稱的反序作為包名,例如我有一個網域名稱java.oracle.com
,那麼我寫的String
類的包名就是com.oracle.java
。
package com.oracle.java; public class String{ ... }
使用Internet網域名稱反序作為包名,並非強制性,也可以使用其他名稱,只要盡量保證包名唯一即可,所以常用的就是使用路徑名作為包名,利用作業系統的目錄階層作區分。例如,我寫了一個String
類,放在$CLASSPATH/java/util/
目錄下,那麼包名就是java/util
。
package java.util; public class String{ ... }
實戰代碼
CLASSPATH
環境變數包含了F:/WorkDirectory/
全路徑為F:/WorkDirectory/net/wuhui/util/MyString.java
的類檔案,其包名應為net.wuhui.util
,這樣編譯器可以準確定位到MyString
這個類。
package net.wuhui.util; public class MyString{ System.out.println("MyString"); }
測試類別F:/WorkDirectory/test/Test.java
,匯入上面自訂的MyString
類,並使用他它。
import net.wuhui.util.MyString; public class Test{ public static void main(String [] args){ MyString s = new MyString(); } }
有不正確地方,歡迎指出,萬分感謝!
Java package 和 import