簡體   English   中英

Java - 能夠訪問靜態方法的實例

[英]Java - Instance able to access static method

我剛剛開始使用Java,正在查看Nested Classes主題,並嘗試了一些東西,當突然,這發生了:

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 不像RubyClass Methods那樣的Static Methods嗎?

任何解釋將不勝感激:)

這是語言允許的:

ee.m1();

但你應該寫:

Encloser.m1();

編譯器應該發出如下警告,通知你:

source_file.java:37:警告:[靜態]靜態方法應該由類型名稱Encloser限定,而不是由表達式ee.m1();

靜態方法也可以被對象訪問(但不應該是一個很好的編程實踐),因為在編譯時, 這些變量類型被解析為類名

在編譯時,如果實例變量調用靜態方法,則它們將替換為類名。

ee.m1(); 被解釋為Enclosee.m1();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM