“导入”后的“静态”修饰符是什么意思?

时间:2008-10-02 13:13:04

标签: java modifier static-import

当像这样使用时:

import static com.showboy.Myclass;

public class Anotherclass{}

import static com.showboy.Myclassimport com.showboy.Myclass之间有什么区别?

9 个答案:

答案 0 :(得分:368)

请参阅Documentation

  

静态导入声明是   类似于正常导入   宣言。哪里正常进口   声明从中导入类   包,允许它们被使用   没有包裹资格,   静态进口报关进口   来自类的静态成员,允许   他们没有上课就可以使用   资格。

     

那么什么时候应该使用静态导入?   非常谨慎!只有在你使用时才使用它   否则很想宣布当地   常量的副本,或滥用   继承(Constant Interface   反模式)。换句话说,使用它   当你需要经常访问   静态成员来自一个或两个   类。如果你过度使用静态   导入功能,它可以使你的   程序难以理解且不可维护,   用所有的东西污染它的命名空间   您导入的静态成员。读者   你的代码(包括你,几个月   在你写完之后)不会知道   哪个类是静态成员来的   从。导入所有静态   一个班级的成员都可以   对可读性特别有害;   如果你只需要一两个成员,   单独导入它们。用过的   适当的,静态导入可以   你的程序更具可读性   删除重复的样板   班级名称。

答案 1 :(得分:215)

您声明的这两种进口产品没有区别。但是,您可以使用静态导入来允许对其他类的静态成员进行非限定访问。以前我必须这样做:

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

我可以这样做:

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

您可以在documentation中看到更多内容。

答案 2 :(得分:56)

静态导入用于导入类的静态字段/方法,而不是:

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;”不起作用:import用于类,import static用于类的静态成员。

答案 3 :(得分:35)

静态导入的基本思想是,无论何时使用静态类,静态变量或枚举,都可以导入它们并保存自己的输入。

我将用例子阐述我的观点。

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));
  }
}

注意:静态导入可能会使您的代码难以阅读。

答案 4 :(得分:23)

  

“import static com.showboy.Myclass”和“import com.showboy.Myclass”之间的区别?

第一个应该生成编译器错误,因为静态导入仅适用于导入字段或成员类型。 (假设MyClass不是showboy的内部类或成员)

我认为你的意思是

import static com.showboy.MyClass.*;

使得MyClass中的所有静态字段和成员都可以在实际编译单元中使用而无需限定它们......如上所述

答案 5 :(得分:14)

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

答案 6 :(得分:2)

假设您在名为MyClass的包中名为myPackage的类中包含静态字段和方法,并且您希望通过键入myStaticFieldmyStaticMethod直接访问它们而无需键入每次MyClass.myStaticFieldMyClass.myStaticMethod

注意:你需要做一个    import myPackage.MyClassmyPackage.*     用于访问其他资源

答案 7 :(得分:1)

static之后的import修饰符用于检索/使用类的静态字段。我使用import static的一个方面是从类中检索常量。 我们也可以对静态方法应用import static。请务必键入import static,因为static import错误。

What is static import in Java - JavaRevisited - 了解有关import static的更多信息的非常好的资源。

答案 8 :(得分:0)

很好的例子。 npt在wwww中具有MAth的特征。...

https://www.java2novice.com/java-fundamentals/static-import/

public class MyStaticMembClass {
 
    public static final int INCREMENT = 2;
     
    public static int incrementNumber(int number){
        return number+INCREMENT;
    }
}

在其他文件中包含

import static com.java2novice.stat.imp.pac1.MyStaticMembClass.*;