当这样使用时:

import static com.showboy.Myclass;

public class Anotherclass{}

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


当前回答

假设你在一个叫做MyClass的包里有静态字段和方法,你想通过键入myStaticField或myStaticMethod直接访问它们,而不是每次键入MyClass。myStaticField或MyClass.myStaticMethod。

注意:你需要做一个 进口myPackage。MyClass或myPackage.* 用于访问其他资源

其他回答

import之后的静态修饰符用于检索/使用类的静态字段。我使用import static的一个地方是从类中检索常量。 我们也可以在静态方法上应用import static。确保输入import static,因为静态导入是错误的。

什么是Java中的静态导入- JavaRevisited -了解更多关于静态导入的很好的资源。

你说的这两个进口之间没有区别。但是,您可以使用静态导入来允许对其他类的静态成员进行无限制的访问。我以前不得不这样做:

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

我可以这样做:

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

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

“import static com.showboy.”Myclass"和"import com.showboy.Myclass"?

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

我想你的意思是

import static com.showboy.MyClass.*;

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

静态导入的基本思想是,无论何时使用静态类、静态变量或枚举,都可以导入它们,从而避免键入。

我将举例说明我的观点。

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

注意:静态导入会使你的代码读起来很混乱。

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

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是针对类的静态成员的。