2008-10-02 75 views

回答

306

Documentation

靜態進口報關是 類似於正常進口報關 。凡正常進口報關 進口類從 包,允許他們使用 不包資質,在 靜態進口報關 靜態成員類,允許 他們是沒有階級 資格使用。

那麼你什麼時候應該使用靜態導入? 非常謹慎! 否則會試圖聲明本地 副本常量,或者濫用 繼承(常量接口 反模式)。換句話說,當您需要頻繁訪問來自一個或兩個 類的 靜態成員時,請使用它 。如果您過度使用靜態的 導入功能,則可能導致您的 程序無法讀取且無法維護, 將導致您的導入的所有靜態成員都污染其名稱空間。 您的代碼的讀者(包括你,幾個月後 寫完之後)將不知道 哪一類靜態成員來自 。從類中導入所有靜態成員 可能是 對可讀性特別有害; 如果您只需要一個或兩個成員,則可以分別導入它們 。適當使用 ,靜態導入可以使 程序更具可讀性,由 刪除類名重複 的樣板。

+19

我完全同意@xsl上面的警告。對於所有的單元測試,junit的Assert:_import static org.junit.Assert。* _非常有用。 – 2014-01-18 11:58:53

+3

- 用於控制粘貼時間非常長且不是真正引人注目的文檔文件,而不是編寫簡單的說明。 – 2015-10-23 16:43:26

48

靜態導入用於導入靜態字段一類/方法代替:

package test; 

import org.example.Foo; 

class A { 

B b = Foo.B_INSTANCE; 

} 

你可以寫:

package test; 

import static org.example.Foo.B_INSTANCE; 

class A { 

B b = B_INSTANCE; 

} 

它是有用的,如果你經常使用的常數從你的代碼中的另一個類,如果靜態導入不明確。

順便說一句,在你的例子「import static org.example.Myclass;」將無法正常工作:導入是針對類的,導入靜態針對的是類的靜態成員。

182

這兩個進口你沒有區別。但是,您可以使用靜態導入來允許對其他類的靜態成員進行非限定訪問。我曾經有這樣做:

import org.apache.commons.lang.StringUtils; 
     . 
     . 
     . 
if (StringUtils.isBlank(aString)) { 
     . 
     . 
     . 

我可以這樣做:

21

「進口靜態com.showboy.Myclass」 和「進口com.showboy.Myclass之間的區別「?

第一個應該生成一個編譯器錯誤,因爲靜態導入只能用於導入字段或成員類型。 (假設MyClass的是不是從showboy一個內部類或成員)

我認爲你的意思

import static com.showboy.MyClass.*; 

,這使得在實際編譯單元提供MyClass的所有靜態字段和成員,而無需限定它們.. 。上述

32

的解釋靜態導入的基本思想是,只要您使用的是靜態類,靜態變量或枚舉,您可以將其導入並保存自己從一些打字。

我會用例子來闡述我的觀點。

import java.lang.Math; 

class WithoutStaticImports { 

public static void main(String [] args) { 
    System.out.println("round " + Math.round(1032.897)); 
    System.out.println("min " + Math.min(60,102)); 
} 
} 

相同的代碼,用靜態導入:

import static java.lang.System.out; 
import static java.lang.Math.*; 

class WithStaticImports { 
    public static void main(String [] args) { 
    out.println("round " + round(1032.897)); 
    out.println("min " + min(60,102)); 
    } 
} 

注意:靜態導入可以使你的代碼混淆閱讀。

2

假設您在名爲myPackage的包內的類myClass中有靜態字段和方法,並且您希望直接通過鍵入myStaticField或myStaticMethod來訪問它們,而無需每次鍵入myClass.myStaticField或myClass.myStaticMethod。

注意:你需要做的 進口myPackage.MyClass或mypackage的* 用於訪問其他資源

12

import允許Java程序員包的接入類,而包的資格。

static import功能允許訪問類的靜態成員沒有壹級資質。

import提供無障礙的類和接口而static import提供無障礙的類的靜態成員。

實施例:

隨着進口

import java.lang.System.*;  
class StaticImportExample{ 
    public static void main(String args[]){ 

     System.out.println("Hello"); 
     System.out.println("Java"); 

    } 
} 

隨着靜態導入

import static java.lang.System.*;  
class StaticImportExample{ 
    public static void main(String args[]){ 

    out.println("Hello");//Now no need of System.out 
    out.println("Java"); 

} 
} 

另請參閱:What is static import in Java 5

1

import之後的static修飾符用於檢索/使用類的靜態字段。我使用import static的一個領域是從類中檢索常量。 我們也可以在靜態方法上應用import static。請確保鍵入import static,因爲static import是錯誤的。

What is static import in Java - JavaRevisited - 瞭解更多關於import static的很好的資源。

相關問題