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

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

關于繼承的一個問題

public?class?demo1?{
	public?static?int?b=10;
	public?demo1(){
		b=1;
	}
	static{
		b=2;
	}
}

這是第二個

public?class?Demo2?extends?demo1{
????public?static?void?main(String[]?args)?{
		demo1?d=new?demo1();
		System.out.println(d.b);
	}
}

為什么結果是1不是2,不是說static的初始化塊里面的b會覆蓋構造器的b么?

正在回答

5 回答

static 初始化快在構造器前先執行,不會覆蓋..

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

榎目貴音 提問者

那我在demo1里面這么寫的時候為什么是等于2呢? public class demo1 { public static int b=10; public demo1(){ b=1; } static{ b=2; } public void show(){ System.out.println("demo1_biu"); } public static void main(String[] args) { System.out.println(b); } }
2016-05-05 回復 有任何疑惑可以回復我~
#2

命里有玄機 回復 榎目貴音 提問者

虛擬機調用main方法的時候,并不會去創建它所在類的對象,所以就不會調用構造方法..
2016-05-12 回復 有任何疑惑可以回復我~
#3

榎目貴音 提問者

非常感謝!
2016-05-18 回復 有任何疑惑可以回復我~
#4

橋米 回復 命里有玄機

想不明白= =
2017-03-01 回復 有任何疑惑可以回復我~
#5

ThomasYao

其實你的core question 是首先加載類成員(包括類變量和類初始塊,如果類初始塊位置在前面,按照系統順序執行的原則,這個時候類變量還沒有定義,系統回自動把類變量提前定義,但是這個時候類變量=缺省值),然后再在調用構造函數的時候執行實例變量和實例初始塊代碼. 你的程序里面沒有構造函數,按照above describtion 所以b=2
2017-05-19 回復 有任何疑惑可以回復我~
查看2條回復

執行順序,普通初始化>static初始化>構造函數初始化。構造這個最后執行。

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

注意順序

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

public?class?Demo2?extends?demo1{

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

????????demo1?d=new?demo1();

????????System.out.println(d.b);

????}

}

在調用靜態變量時,無需創建對象進行調用,

public class Demo2 extends Demon1{

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

? ? ? ? ?System.out.println("靜態初始化塊中變量"+d);

}

}

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

執行順序是static代碼塊,然后是構造方法,然后是普通方法。

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

舉報

0/150
提交
取消
Java入門第二季 升級版
  • 參與學習       531146    人
  • 解答問題       6326    個

課程升級!以終為始告別枯燥,在開發和重構中體會Java面向對象編程的奧妙

進入課程

關于繼承的一個問題

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

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

幫助反饋 APP下載

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

公眾號

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