什么是“静态”;“import”后的修饰语;的意思吗?

当这样使用时:

import static com.showboy.Myclass;


public class Anotherclass{}

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

149369 次浏览

看到文档

静态导入声明为 类似于正常的导入 声明。其中,正常导入 声明从 包,允许使用它们 没有包装资格,该 静态导入声明导入 类的静态成员,允许 它们可以不加区分地使用 资格。< / p > 什么时候使用静态导入? 非常少!只有在你想用的时候才用 否则,请尝试声明为本地的 复制常量,还是要滥用 继承(常量接口 反模式)。换句话说,使用它 当您需要频繁访问时 来自一个或两个的静态成员 类。如果你过度使用静电 导入功能,它可以使您 程序不可读且不可维护, 元素污染其名称空间 您导入的静态成员。的读者 你的代码(包括你,几个月 你写完之后)就不会知道了 静态成员来自哪个类 从。导入所有的静态 一个类的成员可以是 尤其对可读性有害; 如果你只需要一两个成员, 分别导入它们。使用 适当地,静态导入可以使 您的程序更可读,由 去掉重复的样板

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

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

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

假设你在一个名为myPackage的包中有一个名为MyClass的类中有静态字段和方法,你想通过输入myStaticFieldmyStaticMethod直接访问它们,而不是每次都输入MyClass.myStaticFieldMyClass.myStaticMethod

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

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

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

import提供对类和接口的可访问性,而static import提供对类的静态成员的可访问性。

例子:

< em > < / em >进口

import java.lang.System.*;
class StaticImportExample{
public static void main(String args[]){


System.out.println("Hello");
System.out.println("Java");


}
}

静态导入< em > < / em >

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后面的static修饰符用于检索/使用类的静态字段。我使用import static的一个地方是从类中检索常量。 我们也可以在静态方法上应用import static。确保输入import static,因为static import是错误的。< / p >

Java中的static import是什么- JavaRevisited -一个非常好的资源,了解更多关于import static