我們也許知道,Java引入包機制,提供了類的多層命名空間,解決了類的命名衝突、類文件管理等問題。但是總會出現一些問題。
問題一
E:\Demo\java 中的文件有:Zi.java、Test.java兩個文件
Zi.java中代碼如下:
public class Zi { public void print() { System.out.println("abc"); } }
Test.java中代碼如下:
import com.Zi; public class Test { public static void main(String[] args) { new Zi().print(); } }
在dos窗口中編譯Zi.java,【javac -d . Zi.java】,之後。發現Zi.class文件在當前目錄中,於是我新建了一個com文件夾並將該類文件放入其中
然後,編譯Test.java,【javac Test.java】,編譯出錯:
E:\Demo\java>javac Test.java
Test.java:2: 無法訪問 com.Zi
錯誤的類文件: .\com\Zi.class
類文件包含錯誤的類: Zi
請刪除該文件或確保該文件位於正確的類路徑子目錄中。
import com.Zi;
爲什麼會出現這樣的錯誤呢?查找資料後給出的是以下解釋:
很多初學者以爲只要把生成的class文件放在某個目錄下,這個目錄名就成了這個類的包名。這是一個錯誤的看法,不是有了目錄結構,就等於有了包名。爲Java類添加包必須在Java源文件中通過package語句指定,單靠目錄名是沒法指定的。因此,Java的包機制需要兩個方面保證:1、源文件裏使用package語句指定包名;2、class文件必須放在對應的路徑下。
問題二
import static 有何作用?
這是JDK1.5以後增加的一種靜態導入語法,它用於導入指定類的某個靜態field、方法或全部的靜態Field、方法。這裏所指的靜態field、方法就是類屬性、類方法。
import與import static的作用:使用import可以省略包名,而使用import static則可以連類名都省略。
import static java.lang.System.*; import static java.lang.Math.*; public class Test { public static void main(String[] args) { //out是java.lang.System類的靜態Field,代表標準輸出 //PI是java.lang.Math類的靜態Field,表示π常量 out.println(PI); //直接調用Math類的sqrt靜態方法 out.println(sqrt(256)); } }