java初學者最早會用的命令無非是就是javac和java,但即使這麼簡單命令也還會把我們弄得頭皮發麻 -__- .Roger下面就"package中的javac,Java用法"和"制作可執行jar文件"做點簡單的解釋。
最基礎的東西就不廢話了,至於package先講講我的理解,因為我覺得知道這點對於開發還是很有幫助的。舉個例子說:有兩個類Tom和Jerry同屬於一個package--Partners
//Tom.Javapackage Partners;public class Tom{ public String toString() { return "It's Tom"; }}
//Jerry.Javapackage Partners;public class Jerry{ public static void main(String[] args) { tom = new Tom(); System.out.println(tom + " and I am Jerry."); }}
下面Roger要編譯它們為字節碼了,@_@,可用如下命令:Tom先,這很明顯,而且必須:javac Tom.java 或 javac -d .\Partners Tom.Java
(這裡應該先設好path,如Roger機子上就是C:\j2sdk1.4.2\bin,因為javac.exe和java.exe都在這個目錄下,它們可是javac和Java的源泉;同理classpath也要設好了,Roger的機子上是.,C:\j2sdk1.4.2\lib\dt.jar和C:\j2sdk1.4.2\lib\tools.jar...,tools.jar是jar命令的源泉,不過除了.,其他兩個都是默認的,不設也行;如果有其他的東東也要設上去,如機子上裝了tomcat就應該加上Tomcat 5.0\common\lib下的jar文件,反正第三方類庫都加上去,以便jvm找到著.如果用eclipse就要在eclipse裡也設一下tomcat,這個以後在說吧.)
這兩條命令的區別在於後者執行完後在當前目錄下生成一個Partners文件夾,裡面有生成的Tom.class. -d 表示指定在哪個目錄下生成class文件,即使寫一長竄嵌套的之前沒有的目錄,命令執行完之後也會生成的,這點不用擔心的。至於前者執行完之後,還要人工創建一個Partners文件夾,並把Tom.class移進去。為什麼一定要這個Partners文件夾呢?這就看你對package的理解了。我們知道這裡Tom的全稱是Partners.Tom,而jvm在處理它時把它轉化為Partners\Tom或Partners/Tom(看不同的system了)。當你要運行它時,就應該在Partners文件夾上一層目錄用以下命令:java Partners.Tom。(在Partners目錄下用這個命令不行的:Java Tom,不然會出現一個error說類名找不到,只有Partners\Tom這個類名)於是jvm會循著這個線索對目錄層層解析才能找到Tom.class並執行它.如果你的package更長點也一樣,比如:com.blogdriver.bubbletea, 不信就試試吧.Jerry也是一樣的道理.所有工作結束之後,我們有以下目錄結構:
.--Partners --Tom.class --Jerry.class
看到這裡肯定有老兄會說為什麼要這麼復雜,干脆不要用package算了。package還是有很多好處的,主要是使類之間的訪問有了限制,便於控制和管理。舉個例子,在develop和production版本之間進行控制就很有好處了,當然如果你用eclipse之類的IDE的話,就用不著上面這麼復雜了,按下Run按鈕就行了。
下面要把它們打成可執行的jar文件.先自己動手創建一個.mf文件,裡面寫"Main-Class: Partners.Jerry\n",之後的目錄結構如下:.--Partners --Tom.class --Jerry.class--MANIFEST.mf
MANIFEST相當於一個貨單,裡面存了諸如執行的主類是哪個等信息,取其他名字也行。
然後運行下面命令: jar cvfm test.jar MANIFEST.mf Partners(至於cvfm是什麼就看這個吧:jar -help,help很有用的啊)這其實是個壓縮的過程.之後就生成可執行的jar文件了,如果是applet之類的文件雙擊即可執行,而本例雙擊之後結果很快顯現並消失了,正常的人眼估計是看不到了,就用下面命令吧:Java -jar test.jar.看到結果了吧.下面Roger再給一個applet的例子,按照上面步驟弄一下,雙擊jar文件就可以看到很明顯的結果了.
import javax.swing.*;import Java.awt.*;public class myApplet extends JApplet { public void init() { getContentPane().add(new JLabel("Applet!")); } public static void main(String[] args) { JApplet applet = new myApplet(); JFrame frame = new JFrame("Applet"); frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(applet); frame.setSize(100,50); applet.init(); applet.start(); frame.setVisible(true); }}
命令如下:javac myapplet.Javajar cvfm test2.jar ANOTHERMF.mf myApplet.class
注意這樣做一定要有main函數,有的applet沒有的就自己加一個吧,跟上面的例子差不多,主要是JApplet.init()和JApplet.start()方法.jar的其他用法就不用Roger說了吧,自己用-help看看就知道了.