2008-10-02 77 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的很好的资源。

相关问题