分類  >  編程 >

java下令和javac命令

tags:    時間:2013-12-23 08:48:56
java命令和javac命令

在命令行中使用java來運行java程序,搜索類的過程分為以下3步:

1 搜索系統類,大部分都位於JAVA_HOME/jre/lib/rt.jar中

2 搜索擴展類,即那些位於JAVA_HOME/jre/lib/ext下的.jar文件中的類

3 搜索用戶類路徑 即環境變數CLASSPATH或者在命令行中由java指令的-cp選項指定,如果不指定-cp,那麼CLASSPAT環境變數起作用;如果指定了-cp,那麼只有-cp指定的類路徑起作用。

注意:搜索系統類和擴展類是java虛擬機自動進行的,換句話說,即使環境變數CLASSPATH和java指令的-cp選項沒有指定這兩個路徑,java虛擬機也會自動搜索。

 

下面以一個具體例子來說明,結合import語句,某一個類是如何被找到的。

假設在d:example\src文件夾下存放著java程序的源文件,文件層次結構如下:

d:\example\src\test\A.java

d:\example\src\test\B.java

這兩個源文件的代碼如下:

 

package test;  import java.util.*; public class A { 	 	public static void main(String[] args) { 		Date date = new Date(); 		B.say(); 	} }

 

package test;  public class B { 	public static void say() { 		System.out.println("Hello"); 	} }

 

 

假設已經編譯好了,在d:\example\classes文件下存放著要運行的類文件,其中A.class和B.class都位於test包中,文件層次結構

如下:

d:\example\classes\test\A.class

d:\example\classes\test\B.class

要運行這個程序,在命令行中切換到d:\example目錄,即

 


 
 然後,鍵入如下命令:



 運行程序后就會輸出Hello字元串。

其中類的搜尋過程如下:

1 為了找到A.class,虛擬機首先搜索系統類路徑和擴展類路徑但是找不到,接著搜索用戶類路徑,由於在java指令中使用了-cp選項,因此,虛擬機以當前工作目錄(即命令行調用java指令時所在目錄d:\example) + -cp指定的路徑(classes) + 包名(test)構成的路徑下搜索,d:\example\classes\test下搜索A.class,結果能夠找到A.class(-cp所給的相對路徑是相對於當前工作目錄的,也可以指定絕對路徑)

2 A.class引用了Date類,由於在使用Date類時沒有指定Date類所在包,那麼,虛擬機搜索時會結合所有的import語句,這裡import語句java.util.*。

虛擬機在搜索系統類路徑時,根據import語句,在JAVA_HOME/jre/lib/rt.jar/java/util文件夾下找到Date類

3 A.class引用了B.class,由於在使用B類時沒有指定B類所在包,那麼虛擬機搜索時會結合所有的import語句,這裡import語句為java.util.*。但是虛擬機無論是結合import語句搜索系統類路徑和擴展類路徑,還是結合import語句搜索

用戶類路徑都找不到B.class,這時虛擬機會根據A.class所在的包(test)來構造路徑搜索,在d:\example\classes\test中找到B.class文件。

注意:在第3步搜索B.class時,如果在A.java源文件中添加import test.*;語句也是可以的。

 

在命令行中用javac編譯java源文件,javac既搜索類文件(過程和java指令一樣),也搜索java源文件。以在命令行中編譯d:\example\src\test\A.java

為例,只要鍵入以下命令即可:



 javac會進行如下搜索,

1 搜索源文件A.java,首先從當前工作目錄(即運行javac指令時命令行所處的

目錄,即d:\example),結合指定的源文件路徑(src/test)搜索A.java,結果

在d:\example\src\test下發現A.java

2 搜索Date類,搜索Date類和java指令中搜索一樣,結合import語句,最終

在系統類路徑JAVA_HOME/jre/lib/rt.jar/java/util下找到Date.class

3 搜索B.java源文件,源文件的搜索路徑由-sourcepath指定,具體搜索過程為,結合所有import語句搜索,即搜索d:\example\src\java\util,不能搜索到B.java,在結合A.java聲明的包(test)進行搜索,即搜索d:\example\src\test,結果找到B.java(-sourcepath指定的相對路徑也是相對於當前目錄的,也可以指定絕對路徑)

注意:

1 javac也可以有-cp選項,作用和java指令中的一樣

2 如果javac指定了-cp沒有指定-sourcepath,那麼-cp既起到指定用戶類路徑的作用,也起到指定源文件搜索路徑的作用;但是如果javac既指定了-cp,又指定了-sourcepaht,那麼-cp只起到指定用戶類路徑的作用,-sourcepath只起到指定源文件搜索路徑的作用

3 javac的-d選項指定生成的類文件存放位置,這裡存放於(d:\example\classes)


 

 

 

 

推薦閱讀文章

Bookmark the permalink ,來源:互聯網