日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件下載最安全的下載網(wǎng)站、值得信賴的軟件下載站!

      首頁編程開發(fā)java → 新手初學JAVA, 動手編譯、運行Java程序

      新手初學JAVA, 動手編譯、運行Java程序

      相關軟件相關文章發(fā)表評論 來源:西西整理時間:2013/3/2 11:41:34字體大。A-A+

      作者:haolujun點擊:0次評論:0次標簽: 編譯

      • 類型:安裝制作大小:1.7M語言:英文 評分:5.3
      • 標簽:
      立即下載

      本人初學Java,看到別人都說學Java先不要用EcliPSe、NetBeans這些開發(fā)工具,所以索性就自己試試。過程犯的錯誤極多,參照著李剛老師那本瘋狂Java一點一點的實驗.由于自己使用過Makefile,所以就用Makefile做了實驗,總算是可以不用eclipse、NetBeans就能自己編譯運行一些小的程序了,下面就是我自己總結(jié)的心得,如有錯誤,請大家指正,謝謝。

      本文分四小節(jié):

      第一節(jié):配置Java運行時環(huán)境
      第二節(jié):代碼的編譯以及運行
      第三節(jié):如何打jar包以及使用jar包
      第四節(jié):利用Makefile自動編譯運行Java程序

      第一節(jié):配置Java運行時環(huán)境

      本節(jié)以Windows XP為例,來配置Java運行環(huán)境。這節(jié)很簡單,我就長話短說。

      1:下載JDK開發(fā)包,解壓安裝。
      2:在用戶環(huán)境變量中增加PATH變量(在系統(tǒng)的環(huán)境變量中增加也行,但是可能需要重新啟動操作系統(tǒng)),并設置其值。

      例如我把JDK安裝在F:\program\java目錄下,則把PATH變量設置成F:\program\java\jdk\bin,因為這個路徑下有我們要編譯、運行Java程序所需要的所有工具,比如javac.exe,java.exe,jar.exe....。之后我們就可以在cmd下使用javac、java、jar等命令了。

      例如有一下Java源文件test.java,執(zhí)行javac Test.java就會在當前目錄下生成Test.class文件。之后我們運行java Test即可運行程序。當然也可以人為指定class文件的生成位置,利用-d選項。比如 javac -d D:\ Test.java,那么就可以在D:\目錄下看到Test.class了。

      第二節(jié):代碼的編譯以及運行

      對于寫Java程序而言,我們主張源文件與class文件都有相同的目錄結(jié)構(gòu),這樣不僅會方便代碼的組織管理,也使得在編譯以及運行Java程序時少犯錯誤。

      1:位于默認包下的文件的編譯以及運行

      //D:\src\A.java
      class A{

          private int value;
         
          public A(){
              value = 0;
          }
         
          public void setValue(int var){
              value = var;
          }
         
          public int getValue(){
              return value;
          }

      }

      //D:\src\Test.java
      public class Test{
          public void static void main(String[] args){
              A a = new A();
              a.setValue(10);
              System.out.println(a.getValue());
          }
      }

      我們運行javac Test.java,會發(fā)現(xiàn)D:\src目錄下多了A.class和Test.class兩個文件。運行java Test則可以在Dos中看到輸出為10。我們發(fā)現(xiàn)這兩個Java文件中并沒有package語句,所以這兩個文件同屬于一個默認包中(沒有顯示寫package的文件都是屬于默認包的)。

      2: Java類發(fā)現(xiàn)規(guī)則

      要想成功編譯java文件,需要有classpath和包名的共同配合。

      類發(fā)現(xiàn)規(guī)則:class文件所在目錄 = classpath + '\' + 包名中的'.'全變成'\'

      這個規(guī)則大家一定要記住,保證萬事OK!Java就是靠這個規(guī)則來尋找需要的class文件的。

      例如:classpath=D:

      //D:\src\A.java
      package src;
      public class A{

          private int value;
         
          public A(){
              value = 0;
          }
         
          public void setValue(int var){
              value = var;
          }
         
          public int getValue(){
              return value;
          }

      }

      //D:\Test.java
      import src.*;
      public class Test{
          public void static void main(String[] args){
              A a = new A();
              a.setValue(10);
              System.out.println(a.getValue());
          }
      }

      如果想要javac Test.java成功,則需要在D:\src(D:\src = D:\ + src)路徑下能夠找到A.class,否則編譯出錯。如果不存在D:\src目錄,則會返回包名不存在的錯誤信息。如果D:\src存在,但是該路徑下不存在A.class時,則報告沒有找到class文件。如果java文件存放目錄正確,并且也正確的指定了其所在的包,則javac會自動編譯A.java來生成A.class。

      例如:上例就能夠正確的生成所有需要的class文件。但是如果把A.java中package語句去掉。之后編譯A.java生成A.class文件,之后在D:\下運行javac Test.java并不會成功,雖然在D:\src下存在A.class文件。

      所以綜上所述,package語句中包名必須與生成的class文件所在的目錄保持一個關系,使得javac能夠找到相應的class文件并且驗證一個文件是否處于正確的包中。

      那么classpath是什么呢?從名字也能猜得到,classpath代表class文件的存放路徑。這是個環(huán)境變量,可以添加到用戶的環(huán)境變量中,其值則根據(jù)編程時具體包名、以及類的存放路徑來設定。如果不想用環(huán)境變量,也可在編譯時用-classpath來設置。

      classpath可以設置多個路徑,路徑之間利用';'相隔。編譯時,javac會逐個嘗試classpath的每個路徑和文件的包名的組合,直到找到相應的class文件為止。但是如果通過classpath與包名的組合在多個不同的路徑下都找到了同名類,則會返回錯誤信息。

      由于javac默認情況下在java文件的當前目錄生成class文件,所以人們經(jīng)常把'.'添加到classpath中,代表當前文件所在的路徑。高版本的Java編譯以及運行程序可能會自動把'.'添加到classpath中。上面的例子中由于Test.java位于A.java的上一級目錄中,所以把classpath設置成'.'時,也能編譯成功。

      現(xiàn)在說說把classpath設置成'.',它代表當前運行目錄。那么什么是這個當前運行目錄呢?其實就是運行javac時所在的目錄,注意:切不可認為是當前編譯的那個java文件所在的目錄。

      如果java文件中顯示的寫了package packagename 則為class文件指定了包,那么這個class文件也必須應在packagename轉(zhuǎn)換后的相應子目錄下。如果不寫,則表示該class文件在默認包中。

      現(xiàn)在來說說如運行java程序。
      例如:classpath=D:

      /D:\src\A.java
      package src;
      public class A{

          private int value;
         
          public A(){
              value = 0;
          }
         
          public void setValue(int var){
              value = var;
          }
         
          public int getValue(){
              return value;
          }

      }

      //D:\src\Test.java
      package src;
      import src.*;
      public class Test{
          public void static void main(String[] args){
              A a = new A();
              a.setValue(10);
              System.out.println(a.getValue());
          }
      }

      我們?nèi)绾芜\行這個程序呢?

      首先在src目錄下運行: javac Test.java

      之后在任意目錄下運行:java  src.Test

      注意:切不可運行java Test命令,會提示找不到類的錯誤(即使在Test.class文件所在目錄也不行)。所以運行指定了package程序時,需要顯示的寫出其包名,即:java packagename.classname,其遵循與class文件一樣的尋找規(guī)則,即在classpath+packagename中'.'變成'\' 所表示的路徑下能夠找到相應的classname所指的class文件。

      第三節(jié):如何打jar包以及使用jar包

      打jar包使用jar命令。

      //D:\src\A.java
      package src;
      public class A{

          private int value;
         
          public A(){
              value = 0;
          }
         
          public void setValue(int var){
              value = var;
          }
         
          public int getValue(){
              return value;
          }

      }

      首先在src目錄下運行javac A.java生成A.class。之后在D:\目錄下運行jar -cvf test.jar src就會在D:\這個目錄下生成test.jar,即我們打的jar包。那么我們?nèi)绾问褂眠@個jar包呢?首先必須把test.jar的路徑加入到classpath中。之后我們有如下的測試程序。

      import src.*; //必須得有此import,因為A.class位于src包中。如果不寫則編譯不通過。

      public class B{

          public static void main(String[] args){
              A a = new A();
          }
      }

      jar文件其實是一個壓縮包,可以很容易的用解壓軟件進行解壓。解壓后有如下目錄關系:

      test.jar
         |--src---|--A.java
                  |--A.class

      這里可以把test.jar當成目錄來處理,javac會自動在classpath中解壓這個test.jar并根據(jù)B.java中的import找到其中的src文件夾下的A.class文件并使用。

      現(xiàn)在看看我們的打包命令 jar -cvf test.jar src  //意思是把src文件夾整個打包

      如果我們這么打包: 在src目錄下運行jar -cvf test.jar A.java A.class,行嗎?答案是不行。因為這樣打包后路徑關系為:

      test.jar
         |--A.java
         |--A.class

      javac尋找A.class時發(fā)現(xiàn)test.jar下不存在src目錄,則會報不存在包的錯誤。所以大家一定要注意打包時應該把那個目錄打進去,不應把哪個目錄打進去。如果對屬于默認包的class文件打包,則只要把jar包路徑添加到classpath中即可使用,無需再在程序中使用import。當然jar命令還有很多參數(shù)可選,來滿足各種不同需要的打包需求,這些就不說了。

      4:利用Makefile自動編譯運行Java程序

      下面給出一個簡單的例子:這個例子中,沒有手動設置Windows的環(huán)境變量,而是用-classpath指定,這樣方便在不同機器之間移植。

      如下目錄結(jié)構(gòu):

      project---|---src---|---main---|---Test.java
                |         |---package1---|---A.java
                |            |              |---B.java
                |         |
                |         |---package2---|---C.java
                |         |---Makefile
                |
                |---classes---|---main---|---Test.class
                              |---package1---|---A.class
                              |              |---B.class
                              |
                              |---package2---|---C.class

      代碼如下:

      //A.java
      package package1;
      public class A{
      
          private int value;
          
          public A(){ value = 0; }
          
          public void setValue(int var){
              value = var;
          }
          
          public int getValue(){
              return value;
          }
      }
      
      //B.java
      package package1;
      public class B{
      
          private String name;
          
          public B(){ name = null; }
          
          public void setName(String name){
              this.name = name;
          }
          
          public String getName(){
              return name;
          }
      
      }
      
      //C.java
      package package2;
      public class C{
      
          private String name;
          
          public C(){ name = null; }
          
          public void setName(String name){
              this.name = name;
          }
          
          public String getName(){
              return name;
          }
      
      }
      
      //Test.java
      import java.util.*;
      import package1.*;
      import package2.*;
      public class Test{
      
          public static void main(String[] args){
      
              A a = new A();
              B b = new B();
              C c = new C();
              
              a.setValue(3);
              b.setName("Java");
              c.setName("Test");
              
              System.out.println(a.getValue());
              System.out.println(b.getName());
              System.out.println(c.getName());
          }
      }

      Makefile如下:

      //Makefile
      target:
          javac ./package1/A.java -d ../classes
          javac ./package1/B.java -d ../classes
          javac ./package2/C.java -d ../classes
          javac ./main/Test.java  -d ../classes/main/ -classpath ../classes
      run:
          java -classpath ../classes/main;../classes Test
      clean:
          rm -rf ../classes/package1/*.class
          rm -rf ../classes/package2/*.class
          rm -rf ../classes/main/*.class

      運行:make
      D:\Java\project\src>make
      javac ./package1/A.java -d ../classes
      javac ./package1/B.java -d ../classes
      javac ./package2/C.java -d ../classes
      javac ./main/Test.java -d ../classes/main/ -classpath ../classes

      運行:make run
      D:\Java\project\src>make run
      java -classpath ../classes/main;../classes Test
      3
      Java
      Test

      這樣,其實我們完全可以不用Eclipse、Netbeans等開發(fā)工具就能自己編譯運行自己的系統(tǒng)了。

        相關評論

        閱讀本文后您有什么感想? 已有人給出評價!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過難過
        • 5 囧
        • 3 圍觀圍觀
        • 2 無聊無聊

        熱門評論

        最新評論

        發(fā)表評論 查看所有評論(0)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)
        推薦文章

        沒有數(shù)據(jù)