爲何Java包導入的類會產生上述的差異呢?

首先,感謝你的閱讀,本人觀點:學習編程是個漫長的過程並不是一時就會很厲害的,關鍵是堅持,快樂地學習,在這裏分享我的一些筆記給你;(本文由廣州達內http://www.jvtarena.com/zhiyeqianjing/爲你分享;)
  問題:

  請問爲何會出現Step6中的錯誤呢?使用 “import a.*;”導入a下所有類和接口,和使用“import a.World;”導入a包中具體的類,爲何會產生上述的差異呢?

  回答

  當你導入一個包中所有的類時,javac在編譯時並不確定你要使用的World類是a包中的類,還是其他包中的類,它會根據你機器上的CLASSPATH環境變量的值去查找類,通常我們在CLASSPATH中會設置一個點(.),表示當前目錄,如果沒有CLASSPATH環境變量,那麼在JDK1.4之後,默認也是查找當前目錄。javac在按照文件名(不包括後綴)來查找類,於是找到World.java,而這個文件根本不是字節碼文件,當然就報錯了。當你導入一個具體的類時,javac在分析源文件時就知道了你程序中用的類是a.World,那麼它就在CLASSPATH環境變量下查找a目錄下的World類,正好有,於是正確執行。

  爲了幫助讀者對這個問題加深理解,我給大家設計了下面的操作步驟(本文是在D盤上操作):

  (1)將a目錄剪切到C:\下;

  (2)再次執行javac Hello.java,你會看到同樣的錯誤。也就是證實了在出錯之前,javac還沒有去查找a包中的類(對於包是否存在的驗證已經進行)。

  (3)執行set classpath=c:\。由於你明確地設置了CLASSPATH環境變量的值,並且沒有包含點(.),因此javac不會再查找當前的目錄。

  (4)再次執行javac Hello.java,你會發現成功執行。

  這裏面還有一個有趣的現象,如果我們將a目錄下的World.class刪除,替換爲World.java,那麼在編譯Hello.java時,World也會被自動編譯。
從基礎的學習到後面應用提高都非常的系統,無論你是本專業的還是跨專業的,都能有所收穫,參加4個月的達內時光轉眼已逝,伴隨着喜悅,達內給你一個新的平臺,一個嶄新的開始。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章