Java - 实例能够访问静态方法

标签 java static instance-variables nested-class

我刚刚再次开始使用 Java,正在研究嵌套类主题,并且正在尝试一些东西,突然间,发生了这样的事情:

class Encloser
{
  static int i;

  static void m1()
  {
    System.out.println(i);
  }

  static void m2()
  {
    Enclosee.accessEncloser();
  }

  static class Enclosee
  {
    static void accessEncloser()
    {
      i = 1;
      m1();
    }

    static void accessEncloserNew()
    {
      m2();
    }
  }
}

class EncloserTest
{

  public static void main(String[] args)
  {
    Encloser ee = new Encloser();
    Encloser.Enclosee e = new Encloser.Enclosee();
    ee.m1();
    ee.m2();
    e.accessEncloser();
    e.accessEncloserNew();Encloser.m1();
    Encloser.m2();
    Encloser.m1();
    Encloser.Enclosee.accessEncloserNew();
    Encloser.Enclosee.accessEncloser();
  }

}

运行上面的代码不会给出任何错误/异常。它只是运行。这里的困惑是,实例如何能够在这里调用 Static Methods静态方法不像Ruby中的类方法吗?

任何解释将不胜感激:)

最佳答案

这是语言允许的:

ee.m1();

但你应该这样写:

Encloser.m1();

您的编译器应该发出如下警告,以通知您:

source_file.java:37: warning: [static] static method should be qualified by type name, Encloser, instead of by an expression ee.m1();

关于Java - 实例能够访问静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21407335/

相关文章:

java - 图表需要多大才能触发斐波那契堆的最坏情况复杂性?

java - 如何在 Java 中对来自不同对象的等键进行同步

c# - 静态字段或属性是否初始化一次?

c++ - 为什么 c++ 编译器接受这个初始化?静态整数 x = x;

c# - 初始化静态变量时抛出奇怪的异常

ruby-on-rails - 为什么使用实例变量重定向会将您带到显示 View (登录)

java - 在网站中嵌入 DWG 文件

java - 如何获取整个http post的值?解析 Restful 帖子

java - 更改引用而不显式更改其引用

java - 在类中将关键字 this 与多个构造函数一起使用