2013-02-09 42 views
5

我正在查看某人的其他代碼,並使用包名稱對其進行編碼。使用包名稱在Java中創建對象

String filename = ""; 

java.io.PrintWriter writer; 

writer = new java.io.PrintWriter(new java.io.FileWriter(filename)); 

語法相當於沒有用包名稱編碼嗎?自從Java允許它使用包名稱編碼嗎?

回答

8

您必須使用包名(或「完全合格的名稱」 - 這是指包名和類名一起),如果:

  1. 您需要使用兩個類同名在同一個源文件中。
  2. 你沒有import你正在使用的類,無論哪個原因。 (通常是精神錯亂)
  3. import編輯類,但仍然使用包名,因爲我不知道。
+1

+1爲可疑原因:)# – fvu 2013-02-09 23:05:53

+0

同一個源文件中同名的類。所以可以像這樣編碼(仍然看起來像瘋狂)。謝謝! – Nicholas 2013-02-09 23:08:26

+0

@Nicholas這是一種完全有效的編寫Java的方式,根據我的經驗,它非常非常少有必要*,而且對於熟悉JDK的任何人使用'import's的可讀性要低得多。因此,「瘋狂」評論。 – millimoose 2013-02-09 23:12:30

3

你可以使用包名和密碼仍然是完全一樣的,你只需要在你的程序的頂部導入從包java.io類:

import java.io.PrintWriter; 
import java.io.FileWriter; 

String filename = ""; 
PrintWriter writer; 

writer = new PrintWriter(new FileWriter(filename)); 
+0

+1表示做同樣事情的另一種語法 – Nicholas 2013-02-09 23:11:13

3

你可以編寫包含它的包的類名作爲避免歧義的一種方式,例如在程序中有兩個名爲PrintWriter的類,書寫java.io.PrintWriter將採用來自java.io的一個類。

即使在「標準」類中有相當多的重複名稱也沒有什麼意外 - 例如Date存在於java.util和java.sql中,Queue存在於java.util和javax.jms中 - 所以你會不時遇到這種構造。

+0

哦,我明白了!這是非常整潔的Java! – Nicholas 2013-02-09 23:09:17

7

使用fully-qualified names是語義上是一樣的,如果給定類是進口

FQN的一種可能的用法是如果您需要使用兩個具有相同名稱的類,但使用不同的 包。

import java.util.Date; 

Date date = new Date(); 
java.sql.Date sqlDate = new java.sql.Date(date); 
+0

+1不錯的例子! – Nicholas 2013-02-09 23:10:36