国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java 中帶包的類的編譯與執行

2019-11-17 04:01:19
字體:
來源:轉載
供稿:網友
以HelloWorld.java 為例( 假設該文件的位置是/home/HelloWorld.java):
view plaincopy to clipboardPRint?
package a.b;   
public class HelloWorld{   
public static void main(String[] args){   
  System.out.println("Hello World!");   
}   
}  
package a.b;
public class HelloWorld{
public static void main(String[] args){
  System.out.println("Hello World!");
}
}

下面根據不同的編譯方法來討論:


第一種編譯方法( 編譯直接生成class 文件,執行需先創建包的路徑)
假設當前目錄為/src/java/ ,則編譯命令為:javac HelloWorld.java
假設當前目錄為/src/ ,則編譯命令為:javac /src/java/HelloWorld.java 或者使用相對路徑:javac java/HelloWorld.java 執行完該命令后, 在/src/java/ 目錄下生成一個HelloWorld.class 文件。執行文件(在java 目錄下新建目錄a ,在a 目錄下新建目錄b 將HelloWorld.class 至于b 目錄下;執行java a.b.HelloWorld ),必須要按照包的結構先創建目錄。



第二種編譯方法( 編譯直接生成包的路徑)
假設當前目錄為/src/java/ ,則編譯命令為:javac -d . HelloWorld.java
說明:"." 為指定編譯路徑為當前目錄;生成的HelloWorld.class 所有目錄為/src/java/a/b/HelloWorld.class 。
javac -d c/d HelloWorld.java
說明:c/d 為指定編譯路徑為/src/java/c/d ,同樣也可以寫成絕對路徑如javac -d d:/ HelloWorld.java ,前提是路徑必須先存在;生成的HelloWorld.class 所有目錄為/src/java/c/d/a/b /HelloWorld.class 。
假設當前目錄為/src/ ,則編譯命令為:javac -d . java/HelloWorld.java
說明:生成的HelloWorld.class 所有目錄為/src/a/b/HelloWorld.class 。
javac -d java/c/d java/HelloWorld.java
說明:生成的HelloWorld.class 所有目錄為/src/java/a/b/HelloWorld.class 。



第三種編譯方法(先把源文件按照包結構放到指定的目錄中,然后執行編譯命令)
假設當前目錄為/src/java/,先在目錄中創建目錄/a/b,然后編譯命令:
javac a/b/HelloWorld.java



下面總結一下對于帶包的類進行編譯和執行時的一些要點:
1、編譯時可以不考慮包結構的問題,不論用哪種方法,其實本質都是一樣的,只需要讓javac命令找到所需要編譯的原文件(*.java)即可。編譯時可以用相對或者絕對路徑來為javac命令提供源文件的位置信息。
2、初學者易混淆classpath的作用,對于java命令的-cp選項和javac命令的-classpath選項,以及配置環境變量時的 CLASSPATH.其作用是不變的:都是指定所需要的class文件的位置。所不同的是,執行javac編譯時的-classpath選項用于指定被編譯的源文件需要調用另外的用戶自定義類的位置.。執行java命令是根據classpath來尋找所需要執行的class文件的位置;而javac命令不能根據classpath來找源文件,只能根據classpath來尋找所需要用到的類。  

下面舉例來說明該問題:
假設以下代碼(位置:/src/java/code/a/b/TestT.java):
view plaincopy to clipboardprint?
package a.b;   
import c.d.T;   
public class TestT {   
   public static void main(String[] args) {   
    T t = new T();   
    t.p();   
  }   
}  
package a.b;
import c.d.T;
public class TestT {
   public static void main(String[] args) {
    T t = new T();
    t.p();
  }
}
引入的文件(位置:/src/java/code/tmp/c/d/T.java)
view plaincopy to clipboardprint?
package c.d;   
public class T {   
   public void p(){   
    System.out.println("class:T");   
   }   
}  
package c.d;
public class T {
   public void p(){
    System.out.println("class:T");
   }
}
假設現在編譯兩個文件(目錄:/src/java/),則編譯命令為:javac -classpath code/tmp code/a/b/TestT.java 執行命令為:java -cp code;code/tmp a/b/TestT

如果當前目錄為:/src/java/code/,則編譯命令為:javac -classpath tmp a/b/TestT.java執行命令為:java -cp .;tmp a/b/TestT     


假設現在編譯不同磁盤的三個文件(目錄:e:/src/java/),則編譯命令為:
假設以下代碼(位置:e:/src/java/code/a/b/TestT.java):
view plaincopy to clipboardprint?
package a.b;   
import c.d.T;   
import e.f.T1;   
public class TestT {   
  public static void main(String[] args) {   
   T t = new T();   
   t.p();   
   T1 t1 = new T1();   
   t1.p();   
  }   
}  
package a.b;
import c.d.T;
import e.f.T1;
public class TestT {
  public static void main(String[] args) {
   T t = new T();
   t.p();
   T1 t1 = new T1();
   t1.p();
  }
}
引入的文件1(位置:d:/java/code/tmp/c/d/T.java)

view plaincopy to clipboardprint?
package c.d;   
public class T {   
  public void p(){   
   System.out.println("class:T");   
  }   
}  
package c.d;
public class T {
  public void p(){
   System.out.println("class:T");
  }
}
引入的文件2(位置:c:/code/tmp/e/f/T1.java)
view plaincopy to clipboardprint?
package e.f;   
public class T1 {   
  public void p(){   
   System.out.println("class:T1");   
  }   
}  
package e.f;
public class T1 {
  public void p(){
   System.out.println("class:T1");
  }
}
如果當前目錄為:e:/src/java/
編譯命令為:javac -classpath d:/java/code/tmp;c:/code/tmp code/a/b/TestT.java執行命令為:java -cp code;d:/java/code/tmp;c:/code/tmp a/b/TestT



說明:javac命令中的classpath必須指定引入類的路徑;同樣java命令中的cp必須引入引入類的class的路徑也需指定執行類的路徑
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 金塔县| 河西区| 朝阳市| 普陀区| 昂仁县| 石台县| 鲜城| 化州市| 甘洛县| 长白| 邹平县| 婺源县| 游戏| 老河口市| 方正县| 栾城县| 三穗县| 平阴县| 毕节市| 乌兰县| 阜阳市| 封丘县| 金阳县| 谢通门县| 长子县| 砀山县| 承德县| 文昌市| 汕尾市| 东乌珠穆沁旗| 长岭县| 彭水| 平和县| 大安市| 赤壁市| 三原县| 富蕴县| 沅江市| 达日县| 弥渡县| 两当县|