Java 这些语句是什么意思?建议使用这种样式吗?

Java 这些语句是什么意思?建议使用这种样式吗?,java,static-import,Java,Static Import,最近,我偶然发现了一种说法: import static java.lang.System.out; import static java.lang.System.exit; 我在一些教程中读到了这些陈述。这些声明行吗 如果这些语句是正确的,那么它们是什么意思?在编写代码时应该经常使用它们吗 它们称为静态导入。其效果是允许您在程序中使用名称out和exit,就好像它们是在当前范围中定义的一样;因此,您可以编写exit(0)而不是System.exit(0) 现在,这是个好主意吗?有时,如果使用

最近,我偶然发现了一种说法:

import static java.lang.System.out;
import static java.lang.System.exit;
我在一些教程中读到了这些陈述。这些声明行吗

如果这些语句是正确的,那么它们是什么意思?在编写代码时应该经常使用它们吗

它们称为静态导入。其效果是允许您在程序中使用名称
out
exit
,就好像它们是在当前范围中定义的一样;因此,您可以编写
exit(0)
而不是
System.exit(0)

现在,这是个好主意吗?有时,如果使用得当,它们是减少混乱的好方法。但大多数时候,它们实际上只是使代码更难理解。读者会问“这个
out
定义在哪里?”和“exit()从哪里来?”通常,您应该避免使用它们


但是,如果您编写的类都是关于处理
SomeReallyLongName
对象的,并且
SomeReallyLongName
定义了一组
FINAL_常量
,那么使用静态导入将节省大量键入和大量混乱,并且这些常量的来源将非常清楚。

是的,完全可以

这称为
静态导入
。这允许在类中定义为
静态
的成员,以及
public
在不指定定义字段的类的情况下使用。 此功能是在
J2SE 5.0
中定义的。 例如:

import static java.lang.Math.*;
import static java.lang.System.out; 
// in main
out.print( max(100,200) ); // prints 200.You didn't have to use Math.max(.,.) 

我认为使用静态导入可能不是一个好主意,因为它会使代码难以阅读。

它们是静态导入。它允许您执行类似于
exit(0)
的操作,而不是
System.exit(0)

我不建议对众所周知的Java类使用这种方法,因为它可能会让一些人感到困惑。但有时,它对于像这样的实用程序类很有用

非常详细,但您可以通过静态导入使其更易于阅读:
filter(list,SomeClass.class)

您应该与您的团队核实,看看他们的代码指南是什么,并尽量保持一致

静态导入构造允许对静态成员进行非限定访问,而无需继承包含静态成员的类型。相反,程序会单独导入成员


如果您希望方便地访问
out
exit
以便直接调用它们,例如
out.println()。虽然有些人可能会认为它“令人困惑”,很难弄清楚
out
从何而来,但任何现代IDE都可以帮助他们弄清楚这一点。

是的,这些语句被称为
静态导入
,完全有效。有关更多信息,请参阅

关于用法,《指南》规定:

那么什么时候应该使用静态导入呢?非常节俭!只有在需要时才使用它 否则,您可能会试图声明常量的本地副本,或者 滥用继承(常量接口反模式)。换句话说 换句话说,当您需要频繁访问来自的静态成员时,请使用它 一两节课。如果过度使用静态导入功能,它可能会 使您的程序无法读取和维护,从而污染其性能 包含您导入的所有静态成员的命名空间。代码的读者 (包括你,在你写了几个月后)不会知道 类a静态成员来自。导入所有静态成员 从一个类中删除对可读性特别有害;如果你需要 仅一个或两个成员,分别导入它们。使用得当,, 静态导入可以通过删除 重复类名的样板


这些是静态导入概念。它们类似于简单的导入,但具有不同类型的概念。请参见此处,您导入一个函数exit()和一个字段out,并且在其相应的类中都是静态的(如果此处的Systen都是其类)。在此之后,您可以不编写System.out.println()你可以简单地写出out.println()。同样地,你可以写出exit(),而不是System.exit(),你说这很好,但你说这可能不是个好主意。:)我觉得这听起来很混乱。@Amir Raminfar在一个问题上被问到,这些陈述是否正确,所以我说是的,完全正确。使用这些进口产品可能不是一个好主意,但它们是完全有效的。
Iterables.filter(list, SomeClass.class)