關於非static方法不能被static方法呼叫的解釋
阿新 • • 發佈:2021-02-04
下面的這個Something類包含了一個靜態方法staticMethod()和一個非靜態方法nonStaticMethod()。
class Something
{
private int data;
public static void staticMethod()
{
nonStaticMethod();
}
public void nonStaticMethod()
{
}
}
如果編譯一下,編譯器就會顯示如下錯誤:
也就是說非static方法不能被static方法呼叫。
為什麼呢?
我們可以考慮下面的這一種情況。
同樣是一個Something類包含了一個靜態方法staticMethod()和一個非靜態方法nonStaticMethod()。不過與前面稍有不同的是,在非靜態方法nonStaticMethod()中涉及到了對成員變數的修改。
class Something
{
private int data;
public static void staticMethod()
{
nonStaticMethod();
}
public void nonStaticMethod()
{
data = 1;
}
}
那麼把這個類化簡一下,其實就相當於這樣:
class Something
{
private int data;
public static void staticMethod()
{
data = 1;
}
}
這就相當於static方法可以直接訪問非static成員變量了!但是java語法規定非static成員變數是不能夠被static方法所訪問的,因為非static的類成員變數是屬於一個例項的,而static方法可以無需例項化直接呼叫。
所以,如果非static方法對成員變數訪問,而這時static方法通過呼叫非static方法會導致static方法能夠間接的對非static成員變數訪問,也就相當於static方法可以直接訪問非static成員變數了。而這是java語法所不允許的。為了防止這一情況的發生,非static方法就不能被static方法呼叫。