在以下来自Oracle OCA/OCP Java SE 7 Programmer I and II学习指南第16页的静态导入示例中:
import static java.lang.System.out; // 1
import static java.lang.Integer.*; // 2
public class TestStaticImport {
public static void main(String[] args) {
out.println(MAX_VALUE); // 3
out.println(toHexString(42)); // 4
}
}
书中说到标有3的那行:
"现在,我们终于看到了静态导入功能的好处!我们不必在System.out.println中键入系统!哇!其次,我们不必在 Integer.MAX_VALUE 中键入 Integer。因此,在这一行代码中,我们能够使用静态方法和常量的快捷方式。
在这里将println称为静态方法是否错误?
上面的程序如文中所示给出。
对于标记为 4 的行,书中说:"最后,我们再做一个快捷方式,这次是 Integer 类中的一个方法。
引自书中:
- 现在我们终于看到了静态导入功能的好处!我们不必在System.out.println中键入系统!哇!第二 我们不必在 Integer.MAX_VALUE 中键入 Integer。所以在这个 代码行我们能够使用静态方法的快捷方式和 不断。
你的批评是有道理的。 在这一行代码中,我们没有使用静态方法的快捷方式。 它只是静态字段的快捷方式。
"import static" 只能引用类的静态成员。所以这里它引用了 System 类中的 'out' 对象。
In 系统类 'out' 定义为
public final static PrintStream out = null;
println(( 是 java.io.PrintStream 类的非静态方法。
所以这里的"导入静态"与println((无关,它只是引用"out"对象。
而"out"进一步指的是println((。
与 Integer 类相同,它正在导入 Integer 类的所有静态方法和变量。所以你可以直接称之为
out.println(MAX_VALUE);
而不是
out.println(Integer.MAX_VALUE);
toHexString
,而不是println
。该行的意思是他们能够导入toHexString
并使用单个语句(import static java.lang.Integer.*;
(MAX_VALUE
。