[英]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
? 不像Ruby
的Class 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.