最近我发表声明:
import static java.lang.System.out;
import static java.lang.System.exit;
我在一些教程中阅读了这些陈述。这些陈述是O.K吗?
如果陈述是正确的,它们是什么意思,在编写代码时是否应该定期使用?
答案 0 :(得分:4)
它们被称为静态导入。这样做的结果是允许您在程序中使用名称out
和exit
,就好像它们是在当前作用域中定义的一样;所以你可以写exit(0)
而不是System.exit(0)
。
现在,他们是个好主意吗?有时,在谨慎使用时,它们是减少混乱的好方法。但大多数时候,它们实际上只是让你的代码更难理解。读者会问“这个out
定义在哪里?”和“exit()
来自哪里?”一般来说,你应该避免它们。
但是如果你正在编写一个关于处理SomeReallyLongName
对象的类,并且SomeReallyLongName
定义了一堆FINAL_CONSTANTS
,那么使用静态导入导入它们将节省大量的输入和很多混乱,很明显这些常数来自何处。
答案 1 :(得分:3)
它们是静态导入。它允许您执行exit(0)
而不是System.exit(0)
之类的操作。
我不建议将它用于众所周知的Java类,因为它可能会让一些人感到困惑。但有时它对像Guava这样的实用程序类很有用。
Iterables.filter(list, SomeClass.class)
非常详细,但您可以使用静态导入更轻松地阅读:filter(list, SomeClass.class)
您应该与您的团队核实,看看他们的代码指南是什么,并尝试保持一致。
答案 2 :(得分:1)
是的,它完全没问题。
这称为static import
。这允许在课堂上定义的成员为static
和
使用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(.,.)
我认为使用静态导入可能不是一个好主意,因为它会使您的代码难以阅读。
答案 3 :(得分:1)
是的,这些陈述称为static imports
,完全有效。有关详细信息,请查看javase guide on static imports。
关于使用情况,指南指出:
那么什么时候应该使用静态导入?非常谨慎!只在使用时才使用它 否则你会想要声明常量的本地副本,或者 滥用继承(Constant Interface Antipattern)。其他 单词,当您需要频繁访问静态成员时使用它 一两节课。如果过度使用静态导入功能,则可以 使你的程序不可读和不可维护,污染它 包含您导入的所有静态成员的命名空间。您的代码的读者 (包括你,在你写完几个月后)将不知道哪个 class一个静态成员来自。导入所有静态成员 从一个班级可以特别有害于可读性;如果你需要 只有一两个成员,单独导入它们。适当使用, 通过删除,静态导入可以使您的程序更具可读性 重复类名的样板。
答案 4 :(得分:0)
Static imports are a new feature added in Java 1.5
静态导入构造允许对静态成员进行非限定访问,而不从包含静态成员的类型继承。相反,程序会单独导入成员
如果您希望轻松访问out
和exit
,那么您的示例没有任何问题,以便您可以直接将其称为out.println()
。虽然有些人可能认为它“混乱”并且很难弄清out
来自哪里,但是在语法方面没有任何语法错误,但是任何现代IDE都可以帮助他们解决这个问题。
答案 5 :(得分:0)
这些是静态导入概念。这些是简单的导入,但具有不同类型的概念。请参见此处导入一个函数 exit()和一个字段 out 在相应的类中是静态的(如果这里的Systen都是他们的类)。在此之后而不是编写 System.out.println(),你可以简单地写 out.println()强>。而不是 System.exit(),你可以写 exit()。