“导入”后的“静态”修饰符是什么意思?
当使用像这样:
import static com.showboy.Myclass; public class Anotherclass{}
import static com.showboy.Myclass
和import com.showboy.Myclass
之间有什么区别?
见文档
静态导入声明类似于正常的导入声明。 如果正常的import声明从包装中导入类别,允许它们在没有包装资格的情况下使用,静态导入声明从类别导入静态成员,允许它们在没有类别资格的情况下使用。
那么什么时候应该使用静态导入? 非常谨慎! 只有当你想要声明本地副本的常量或滥用inheritance(Constant Interface Antipattern)时才使用它。 换句话说,当你需要频繁访问一个或两个类的静态成员时使用它。 如果您过度使用静态导入function,则可能导致您的程序无法读取且无法维护,从而导致您导入的所有静态成员污染其名称空间。 你的代码的读者(包括你,在你写了几个月后)不会知道静态成员来自哪个类。 从类中导入所有静态成员对可读性尤其有害; 如果您只需要一个或两个成员,请单独导入它们。 使用适当的,静态导入可以使您的程序更具可读性,通过删除重复类名称的样板。
这两个import你没有区别。 但是,您可以使用静态导入来允许对其他类的静态成员进行非限定的访问。 我曾经这样做的地方:
import org.apache.commons.lang.StringUtils; . . . if (StringUtils.isBlank(aString)) { . . .
我可以做这个:
import static org.apache.commons.lang.StringUtils.isBlank; . . . if (isBlank(aString)) { . . .
静态导入用于导入类的静态字段/方法,而不是:
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;” 将无法正常工作:导入是为类,导入静态是为一个类的静态成员。
静态导入的基本思想是,无论什么时候使用静态类,静态variables或枚举,都可以导入它们并保存一些input。
我将用例子来阐述我的观点。
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)); } }
注意 :静态导入可能会让您的代码感到困惑,无法阅读。
“导入静态com.showboy.Myclass”和“导入com.showboy.Myclass”之间的区别?
第一个应该生成一个编译器错误,因为静态导入只适用于导入字段或成员types。 (假设MyClass不是来自showboy的内部类或成员)
我想你的意思
import static com.showboy.MyClass.*;
这使得MyClass中的所有静态字段和成员都可以在实际的编译单元中使用,而不必限定它们……如上所述
该import
允许Java程序员访问包的类没有包资格。
static import
function允许访问类的静态成员没有类的资格。
import
为类和接口提供了可访问性,而static import
则为类的静态成员提供了可访问性。
例如:
随着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"); } }
另请参阅: 什么是Java 5中的静态导入
假设你在名为myPackage的包里有一个名为myClass的类中有静态的字段和方法,并且你希望直接通过inputmyStaticField或myStaticMethod来访问它们,而不用每次inputmyClass.myStaticField或myClass.myStaticMethod。
注意:您需要导入myPackage.MyClass或myPackage。*来访问其他资源
import
后的static
修改器用于检索/使用类的静态字段。 我使用import static
一个领域是从类中检索常量。 我们也可以在静态方法上应用import static
。 确保键入import static
因为static import
是错误的。 了解import static
一个很好的链接是http://javarevisited.blogspot.com/2012/10/what-is-static-import-in-java-5-example-tutorial.html