464

像这样使用时:

import static com.showboy.Myclass;

public class Anotherclass{}

import static com.showboy.Myclass和有什么区别import com.showboy.Myclass

4

9 回答 9

408

查看文档

静态导入声明类似于正常的导入声明。正常导入声明从包中导入类,允许它们在没有包限定的情况下使用,静态导入声明从类导入静态成员,允许它们在没有类限定的情况下使用。

那么什么时候应该使用静态导入呢?非常节俭!仅当您想要声明常量的本地副本或滥用继承(常量接口反模式)时才使用它。换句话说,当您需要频繁访问一个或两个类的静态成员时使用它。如果你过度使用静态导入功能,它会使你的程序不可读和不可维护,你导入的所有静态成员都会污染它的命名空间。您的代码的读者(包括您,在您编写代码几个月后)将不知道静态成员来自哪个类。从一个类中导入所有的静态成员对可读性尤其有害;如果您只需要一两个成员,请单独导入它们。使用得当,静态导入可以让你的程序更具可读性,

于 2008-10-02T13:14:33.857 回答
242

你说的这两个进口没有区别。但是,您可以使用静态导入来允许对其他类的静态成员进行非限定访问。我曾经必须这样做的地方:

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

我可以做这个:

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

您可以在文档中查看更多信息。

于 2008-10-02T13:42:39.767 回答
59

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

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 用于类的静态成员。

于 2008-10-02T13:18:10.230 回答
40

静态导入的基本思想是,每当您使用静态类、静态变量或枚举时,您都可以导入它们并省去一些输入。

我将举例说明我的观点。

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

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

于 2012-09-19T12:37:26.257 回答
24

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

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

我想你的意思是

import static com.showboy.MyClass.*;

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

于 2009-10-14T11:00:53.820 回答
15

允许 java 程序员在import没有包限定的情况下访问包的类。

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

 }   
} 

See also : What is static import in Java 5

于 2016-01-31T14:07:58.413 回答
2

MyClass假设您在被调用的包中调用的类中有静态字段和方法,并且您希望通过每次键入或不键入myPackage直接访问它们 或。myStaticFieldmyStaticMethodMyClass.myStaticFieldMyClass.myStaticMethod

注意:您需要执行 import myPackage.MyClass ormyPackage.* 才能访问其他资源

于 2015-12-22T11:27:42.057 回答
1

The static modifier after import is for retrieving/using static fields of a class. One area in which I use import static is for retrieving constants from a class. We can also apply import static on static methods. Make sure to type import static because static import is wrong.

What is static import in Java - JavaRevisited - A very good resource to know more about import static.

于 2016-06-09T10:44:34.817 回答
-1

Very good exaple. npt tipical with MAth in wwww....

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

in onother file inlude

import static com.java2novice.stat.imp.pac1.MyStaticMembClass.*;
于 2020-07-01T12:16:27.190 回答