静态成员的方法是否被认为是静态的?

Are methods of static members considered static?

在以下来自 pg 的静态导入示例中。 Oracle OCA/OCP Java SE 7 程序员 I 和 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。所以在这行代码中,我们能够使用静态方法和常量的快捷方式。

在这里将println称为静态方法是不是错误?

以上程序如文中给出

对于标记为 4 的行,书上说:"Finally, we do one more shortcut, this time for a method in the Integer class."

被称为静态的方法是 toHexString,而不是 println。该行的意思是他们能够使用单个语句 (import static java.lang.Integer.*;).

导入 toHexStringMAX_VALUE

'import static' 只能引用 Class.
的静态成员 所以这里它引用了来自系统 class.
的 'out' 对象 在系统 class 'out' 中定义为

  public final static PrintStream out = null;

println() 是 java.io.PrintStream class.

的非静态方法

所以这里 'import static' 与 println() 无关,它只是引用 'out' 对象。
'out' 进一步引用 println()。

与整数相同class。它正在导入 Integer class 的所有静态方法和变量。所以你可以直接调用它

out.println(MAX_VALUE);  

而不是

out.println(Integer.MAX_VALUE);

引自书中:

  1. Now we’re finally seeing the benefit of the static import feature! We didn’t have to type the System in System.out.println! Wow! Second, we didn’t have to type the Integer in Integer.MAX_VALUE. So in this line of code we were able to use a shortcut for a static method AND a constant.

您的批评有理。在那行代码中,我们没有使用 静态方法 的快捷方式。它只是 静态字段 的快捷方式。