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

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于內部類靜態成員的問題

public?class?StatiClass?{
	static?int?age=100;
	private??int?c=89;
	public?static?void?main(String[]?args)?{
		StatiClass?o=new?StatiClass();
		System.out.println(o.c);
		new?A().a();
	}
	public??class?A{//這個地方會報錯,請問為什么內部內中有靜態成員,內部類就一定得是靜態修飾的類?
		static?int?age=100;
		String?name="張三";
		public?void?a(){
			System.out.println(name+"會活到"+age+"歲,那時候是"+StatiClass.age+"個奇跡");
		}
	}
}


正在回答

5 回答

一般情況下,如果一個內部類不是被定義成靜態內部類,那么在定義成員變量或者成員方法的時候, 是不能夠被定義成靜態成員變量與靜態成員方法的。也就是說,在非靜態內部類中不可以聲明靜態成員。如現在在一個student類中定義了一個內部類 age,如果沒有將這個類利用static關鍵字修飾,即沒有定義為靜態類,那么在這個內部類中如果要利用static關鍵字來修飾某個成員方法或者成員 變量是不允許的。在編譯的時候就通不過。

2 回復 有任何疑惑可以回復我~
#1

慕標0097473 提問者

非常感謝!
2016-10-30 回復 有任何疑惑可以回復我~

會報錯是因為你在非靜態內部類中定義了靜態變量。

1 回復 有任何疑惑可以回復我~

那為什么主函數main方法可以有static?

public?class?A{//沒有被staticz修飾。
????public?static?void?main(String[]args){//有static修飾
????}
}


0 回復 有任何疑惑可以回復我~

?new?A().a();這段就有問題,只有靜態內部類才能這樣調用

0 回復 有任何疑惑可以回復我~

這樣想,靜態類或靜態成員沒有new之前就已經加載了,而普通類,只有new創建對象的時候才會加載,兩者出現的先后順序就有沖突

2 回復 有任何疑惑可以回復我~
#1

袁初

完全同意! 給個鏈接,感覺講得不錯 http://blog.csdn.net/zhifengsun/article/details/19479383
2016-12-09 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

關于內部類靜態成員的問題

我要回答 關注問題
微信客服

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

幫助反饋 APP下載

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

公眾號

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