【问题标题】:why java.Lang.System can be used as a static class [duplicate]为什么java.Lang.System可以用作静态类[重复]
【发布时间】:2013-06-20 21:17:03
【问题描述】:

当我们调用 System.out.println("aaa"); 我们没有实例化 System 类的对象。

而且System 不是静态类。在文档中,它只说Systempublic final

所以我的问题是为什么我们可以将System 用作静态类?

【问题讨论】:

  • 里面有静态字段和方法。
  • 没有顶级静态类这样的东西..
  • Java 中没有“静态类”这样的东西。这是一个具有静态字段/方法的类。
  • System 不是“静态类”(仅在完全不同的上下文中才有意义),但 outSystem 类的静态成员,因此您可以使用它直接上课。但是,您不能使用 System.toString(),因为它不是静态成员。
  • @jlordo 那仍然不是“静态类”;使用关键字static 的上下文意味着可以使用内部类,而无需封闭外部类的实例。

标签: java


【解决方案1】:

因为out 是类System 上的公共静态字段。可以使用Type.member 语法访问静态成员。

在您的示例中,您正在调用PrintStream 上定义的实例方法println()。调用目标是存储在静态字段System.out 中的PrintStream 实例。

【讨论】:

    【解决方案2】:

    不是静态的,但其中的字段和方法是静态的。您仍然可以通过这种方式调用静态方法。

    【讨论】:

    • 准确地说:out 是一个字段,而不是一个方法;)
    【解决方案3】:

    System 类包含几个有用的类字段和方法。无法实例化。

    System 类提供的设施包括标准输入、标准输出和错误输出流;访问外部定义的属性和环境变量;一种加载文件和库的方法;以及一种用于快速复制数组的一部分的实用方法。

    如果你检查 api,它的所有方法都是静态的。而您只是访问它的公共字段out ...查看此question 以了解有关何时实例化 out 的更多信息

    【解决方案4】:

    System 是一个顶级类。由于out 是静态的(不是`System 本身),我们使用您描述的语法。

    访问静态类成员的语法是

    .

    注意这与访问非静态方法或字段有何不同:

    .

    请注意,语法是由类的成员的静态性决定的,而不是类本身的静态性。在您的示例中,System 的静态性无关紧要; out 的静态性才是最重要的。

    【讨论】:

      猜你喜欢
      • 2015-11-13
      • 1970-01-01
      • 2015-03-08
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 2015-11-03
      • 2012-06-01
      • 1970-01-01
      相关资源
      最近更新 更多