1. 程式人生 > 其它 >關於非static方法不能被static方法呼叫的解釋

關於非static方法不能被static方法呼叫的解釋

技術標籤:語法java

下面的這個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方法呼叫