亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么非靜態方法不可以調用該類靜態的方法或靜態的變量?

為什么非靜態方法不可以調用該類靜態的方法或靜態的變量?

慕沐2402639 2018-03-02 16:16:14
為什么非靜態方法不可以調用該類靜態的方法或靜態的變量?
查看完整描述

5 回答

?
慕雪5558698

TA貢獻3條經驗 獲得超4個贊

無語了,前三樓是沒仔細讀清題就瞎回答...

查看完整回答
4 反對 回復 2018-03-03
?
十三灬叔

TA貢獻3條經驗 獲得超3個贊

這是因為jvm加載java文件順序的問題。先加載靜態變量,靜態方法,靜態代碼塊。然后才加載變量,非靜態方法。所以在靜態方法中如果調用非靜態方法或者靜態變量,非靜態的變量和方法還沒有被jvm加載,所以會報編譯錯誤。

查看完整回答
3 反對 回復 2018-03-03
  • 慕沐2402639
    慕沐2402639
    靜態方法不能調用非靜態方法和變量。我理解這句話,但是為啥書上說非靜態方法不能調用該類的靜態方法和靜態變量。
  • 慕沐2402639
    慕沐2402639
    書上回答當然可以,后面又寫不可以,我都懵了。
  • 十三灬叔
    十三灬叔
    如果書上說非靜態方法不能調用該類的靜態方法和靜態變量。那就是書上印刷錯誤了
?
不斯文敗類

TA貢獻3條經驗 獲得超5個贊

首先要理解面向對象,搞清楚什么是“類”,什么是“對象”。

靜態變量又叫類變量,靜態方法又叫類方法。為什么這么叫,因為他們是屬于類的,而不是類的對象的。

拿類變量來說:

public class Test {

????private int a =5;

????public static int b = a;

}

在部署類的時候就已經生成類變量(此處的b)了,而實例變量(即非static修飾,此處的a)需要在當前類實例化(即生成對象,編程初期可以簡單理解為new)的時候才會生成。

也就是說,當你程序跑起來的時候,即使從運行到結束都沒用過Test類,變量b都存在,而變量a需要等到new Test()的時候才會存在。已經存在的東西去訪問未存在的東西,這顯然是不合理的。

所以不允許。

再深層一點,還可以探索到類變量和實例變量在內存中存儲的關系,當然這是如何理解static的問題,不是static能否訪問非static的問題,就不說了。

查看完整回答
2 反對 回復 2018-03-03
  • 慕沐2402639
    慕沐2402639
    我就是想問一下,書上是不是寫錯了,這本書遇到好幾個地方了答案也有錯的。
  • 不斯文敗類
    不斯文敗類
    是寫錯了。 靜態不可以訪問非靜態, 非靜態可以訪問靜態。
?
hello_world_mk

TA貢獻13條經驗 獲得超2個贊

public?class?StaticTest?{

	public?static?void?main(String[]?args)?{

	}
	static?void?test(){
		new?StaticTest().test1();
	}
	void?test1(){
		test();
	}
}

不能直接調用

查看完整回答
反對 回復 2018-03-02
  • 慕沐2402639
    慕沐2402639
    靜態方法不能調用非靜態方法和變量。我理解這句話,但是為啥書上說非靜態方法不能調用該類的靜態方法和靜態變量。
?
我不會你還讓我

TA貢獻10條經驗 獲得超2個贊

非靜態方法可以調用該類的靜態方法和靜態變量;靜態方法不能調用該類的非靜態方法和非靜態變量

查看完整回答
反對 回復 2018-03-02
  • 5 回答
  • 0 關注
  • 5479 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號