在說package、import機制前咱們先來了解下java的CLASSPATH。java
CLASSPATH顧名思義就是class的路徑,當咱們在系統中運行某個java程序時,它就會告訴系統在這些地方尋找這個class文件函數
CLASSPATH=.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar; 這是咱們java默認環境變量設置。
「.」的意思是在當前這個文件夾找;%JAVA_HOME%\lib是在java安裝路徑的lib文件夾找;%JAVA_HOME%\lib\tools.jar是在java安裝路徑的lib文件夾的tools壓縮包中找。
如今讓咱們來測試下吧:
在C:\DOM中新建HelloWorld.java測試
//: HelloWorld.java public class HelloWorld{ public static void main(String[] args){ System.out.println(「Hello World!」); } }
首先javac HelloWorld.java,系統會在這個目錄中找到HelloWorld.java文件,編譯出HelloWorld.class文件。Java HelloWorld,系統會先調用CLASSPATH路徑,咱們設置了「.」這個目錄,因此會在當前目錄中找到HelloWorld.class。運行成功。spa
**換個地方運行這個程序
咱們在C盤運行java HelloWorld**
3d
系統會如今CLASSPATH路徑尋找HelloWorld.class。可是在」.」(如今是C盤)找不到這個文件。
咱們如今把C:\DOM路徑加入到CLASSPATHcode
爲了更新系統環境變量咱們須要從新啓動dos窗口blog
系統會在CLASSPATH中找到C:\DOM這個路徑,再找到HelloWorld.class這個文件。運行成功。
如今咱們明白了CLASSPATH的做用了^^編譯
關於PACKAGE
咱們來改寫這個程序,加入packageclass
//: HelloWorld.java package a.b; public class HelloWorld{ public static void main(String[] args){ System.out.println(「Hello Wolrd!」); } }
編譯成功,可是不能運行。
系統在找到HelloWorld.class時就會讀取到package a.b;這個信息,這個告訴系統這個HelloWorld.class是要放在a文件夾的b文件夾中。可是如今咱們的HelloWorld.class是在DOM這個文件夾。文件路徑和package不能對應,沒法運行。
如今咱們來新建a/b這個兩個文件夾,而後把HelloWorld.class複製到b文件夾中。而後再運行java HelloWorld
import
對不起!仍是沒有運行成功。系統在CLASSPATH中尋找HelloWorld.class文件,可是這個文件被隱藏在a文件夾中的b文件夾。
咱們來試試java a.b.HelloWorld
運行成功了,系統在CLASSPATH中的「.」文件夾找到a文件夾,而後b文件夾,找到HelloWorld.class文件。
如今明白package的做用了,它是必定要符合從CLASSPATH出發的目錄結構的。
關於IMPORT
Import的做用是當你調用另外一個class的時候,告訴系統,要找哪裏才能找到這個class。
咱們在C:\DOM的目錄下寫一個調用a\b\HelloWorld.class的程序。
//: TestHelloWorld.java import a.b.HelloWorld; public class TestHelloWorld{ public static void main(String[] args){ HelloWorld hw=new HelloWorld(); hw.main(args); //調用HelloWorld中的main()函數,args是引數,會打印出HelloWorld! } }
編譯運行成功!編譯:系統在個這個文件夾中找到TestHelloWorld.java文件,檢查import a.b.HelloWorld; 找CLASSPATH中找到a\b\HelloWorld.class。編譯經過完成!運行:系統如今CLASSPATH中找到TestHelloWorld.class,而後讀取import a.b.HelloWorld; 導入HelloWorld.class,運行成功!到此爲止,你應該明白package 和 import的做用了。