以前讀過某本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的執行目錄開始.
沒有留言:
張貼留言