2011年6月8日 星期三

java的Package觀念

以前讀過某本java教科書上說
package觀念對於初學者而言不容易懂
今天想試試看以下例子:

有兩個class, Flight和Boeing:

package Test123;
public class Flight{
 public static void main(String[] args){
  Boeing b = new Boeing();
 }
}


package Test123;
class Boeing{
}


這兩個class都位於Test123這個package底下.
目錄結構如下:
c:\jpractice\Test123\
以下測試各種情況, 看如何能順利編譯:

a.在c:\jpractice\Test123\執行javac Flight.java
結果:失敗..
Flight.java:5: cannot find symbol
symbol  : class Boeing
location: class Test123.Flight
                Boeing b = new Boeing();
                ^
Flight.java:5: cannot find symbol
symbol  : class Boeing
location: class Test123.Flight
                Boeing b = new Boeing();
                               ^
2 errors

出現以上錯誤訊息
這是因為在class Flight中,
沒有特別指定要import任何其它package
所以預設就是跟Flight一樣的package->Test123!
但此時因為javac的執行起始點是在c:\jpractice\Test123\
所以javac會嘗試從當前目錄
再一次尋找Test123
但是這個目錄c:\jpractice\Test123\Test123並不存在
所以丟出找不到class Boeing的錯誤

b.在c:\jpractice 執行javac ./Test123/Flight.java
結果: 成功!
把javac的執行目錄往上提了一層
所以會從c:\jpracitce開始去尋找 Test123.Boeing
c:\jpractice\Test123\Boeing.java <-真的有這個檔

總結:
1.尋找class的方式, 預設從本支程式的package開始找, 再從import宣告處的package由上往下找. 所以如果需要用到的其它類別, 跟目前程式在同一package, 可以偷懶不加import.
2.預設的尋找起點, 是從javac的執行目錄開始.

沒有留言:

張貼留言