標籤:direct idt 複雜 運行程式 int 變數 命令編譯 必須 應用程式
對於初學者來說,使用CMD命令(Unix以及類Unix系統採用Termial)來編譯和運行Java的好處是讓初學者直觀地體會到編譯(Compile)這一步驟,加深記憶。所謂編譯就是將文字檔xxx.java翻譯為Java虛擬機器可以識別的位元組碼檔案xxx.class,這部分原理暫且不做深究,直接介紹如何使用CMD命令執行Java程式。Unix/Linux或者Mac iOS等其它類Unix系統,方法都一樣,涉及到的一些操作CLASSPATH的命令與Windows系統不同,就此不再贅述。
寫一個Hello World程式
1 public class HelloWorld {2 public static void main(String[] args){3 System.out.println("Hello, World!");4 }5 }
因為規定java文字檔名稱,必須與檔案中public的類名相同,所以,我儲存上述代碼檔案名稱為HelloWorld.java,儲存在如下目錄:
1.編譯
E:\myJava\javaSrc>javac HelloWorld.java -d .
命令解析:
完整命令: javac [ options ] [ sourcefiles ] [ classes] [ @argfiles ]
- javac: java語言的編譯器,使用命令列編譯Java源檔案,輸出位元組碼檔案.class.
- sourcefiles: java源檔案的相對路徑。
- options: 這裡使用的是-d, 即directory簡寫,表示輸出位元組碼的位置,"."表示目前的目錄,".."表示上級目錄,"..\bin"表示在目前的目錄的兄弟目錄bin,以此類推。
所以HelloWorld.java編譯完成後在目前的目錄輸出了位元組嗎檔案HelloWorld.class.
2.運行
E:\myJava\javaSrc>java HelloWorld
Hello, World!
java運行程式的命令是:
java [options] classname [args]
- java: 執行程式命令。執行順序是啟動JRE->載入class->調用class的main()方法,main方法必須是public static void main(String[] args)的樣子。
- classname: 要執行的class檔案的名稱,要加包名,中間以‘.‘隔開,比如java.lang.String
- options: 一些選擇性參數[可參考Java文檔]
成功列印出字串: Hello, World!
將class輸出到指定package
package簡言之就是存放Java位元組碼檔案的包,jar檔案就是存放package的包,這樣區分檔案結構,使項目的層次更分明,便於維護,注意要在類聲明上方聲明package:
1 package hello; //聲明package2 3 public class HelloWorld {4 public static void main(String[] args){5 System.out.println("Hello, World!");6 }7 }1.編譯
E:\myJava\javaSrc>javac HelloWorld.java -d ..
注意存放路徑是".."即上級目錄,它表示"hello"這個package的產生路徑,class檔案會產生在hello包中,如果hello不存在,程式將自動建立之,在案頭上的結果,實際就是一個普通目錄而已:
2.運行
java運行程式的命令是:
E:\myJava\javaSrc>java ../hello.HelloWorld
錯誤:找不到或無法載入主類
結果卻是提示找不到class,如果我們現在將CMD開啟到hello包所在同級目錄下,即"myJava"目錄,運行:
E:\myJava>java hello.HelloWorld
Hello,World!
程式成功輸出了,也就是java解譯器定位到了class檔案。其實,java的解譯器只能找到當前路徑下和CLASSPATH變數儲存路徑中的包,所以我必須先把CMD的路徑切換到hello的同級目錄下,然後再運行java hello.HelloWorld。
那麼如果每次都這樣執行,豈不是很麻煩?
CLASSPATH
"The class path is the path that the Java Runtime Environment (JRE) searches for classes and other resource files."----官方文檔, 即CLASSPATH就是JRE尋找class檔案和其它資源檔的地方,因此,為了方便運行,就有必要把我們產生的包想辦法放到CLASSPATH變數中,WIn7環境下的操作方法 是:
右擊“電腦”->屬性->進階系統設定->環境變數->系統變數, 雙擊“CLASSPATH”, 在“變數值”最後輸入";路徑",其中";"是多個CLASSPATH的分隔字元號,:
好了,設定完成後,重新開啟CMD,在任何位置輸入命令:
C:\Windows>java hello.HelloWorld
Hello,World!
都可以成功運行啦!
當然,java命令中亦可以顯式地使用-classpath參數告訴JRE去哪裡找,不過這種方式的範圍是一次命令,也可以用命令列
set classpath = %classpath%;dir //dir是你需要設定的絕對路徑
在本CMD視窗開啟的期間生效一個臨時的CLASSPATH,其它的CMD視窗不生效(Linux 使用#export PATH=$PATH:dir )。你可以使用
set classpath
來查看當前生效的CLASSPATH中有沒有你設定的路徑(Linux使用echo $classpath查看)。
總結
- 啟動一個Java應用程式,需要經過編譯和運行兩個過程;
- 編譯就是將程式員編寫的Java源檔案翻譯為Java虛擬機器可執行檔位元組碼檔案;
- 運行位元組碼檔案的前提是虛擬機器通過JRE的環境變數CLASSPATH找到這些檔案;
- 可以設定CLASSPATH變數來將你的目錄加入到環境變數中以使JRE能找到位元組碼檔案;
- 找到檔案後虛擬機器將會載入位元組碼檔案以運行。
不積跬步,無以至千裡,不積小流,無以成江海。運行一個Java程式看似就是一小步,實際上其中包含有複雜的過程和邏輯,這些技術細節,需要在積累一定的實踐經驗和知識的基礎上,再繼續深究。
使用CMD命令編譯和運行Java程式