"package中的javac,java用法" && "製作可執行jar檔案"
最後更新:2017-02-28
來源:互聯網
上載者:User
執行
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看看就知道了.