当这样使用时:

import static com.showboy.Myclass;

public class Anotherclass{}

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


看文档

The static import declaration is analogous to the normal import declaration. Where the normal import declaration imports classes from packages, allowing them to be used without package qualification, the static import declaration imports static members from classes, allowing them to be used without class qualification. So when should you use static import? Very sparingly! Only use it when you'd otherwise be tempted to declare local copies of constants, or to abuse inheritance (the Constant Interface Antipattern). In other words, use it when you require frequent access to static members from one or two classes. If you overuse the static import feature, it can make your program unreadable and unmaintainable, polluting its namespace with all the static members you import. Readers of your code (including you, a few months after you wrote it) will not know which class a static member comes from. Importing all of the static members from a class can be particularly harmful to readability; if you need only one or two members, import them individually. Used appropriately, static import can make your program more readable, by removing the boilerplate of repetition of class names.


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

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


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

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

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


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

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


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

静态导入特性允许在没有类限定的情况下访问类的静态成员。

导入提供了对类和接口的可访问性,而静态导入提供了对类的静态成员的可访问性。

例子:

与进口

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

 }   
} 

请参见:什么是Java 5中的静态导入


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

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