為什麼這個Java程式會輸出這個結果

2021-06-25 14:52:45 字數 936 閱讀 2074

1樓:匿名使用者

一.除錯了一下a a=new b();的執行順序

先載入類,執行父類的靜態變數static int j=7;,然後執行子類的靜態變數及**塊static int j=9;

static  。這裡會先執行new a(),然後執行t().可以分1)、2)兩步來看

1):出現new a()了就會載入非靜態變數int k=6,然後呼叫類a的構造器,構造器裡呼叫類a的t();輸出,構造器裡再呼叫類a的h();輸出.。

2):類a構造器返回後,呼叫類a的t()輸出。

2  類載入完成後,就開始new b()了,它會先呼叫a的構造器,這裡也是先載入a中非靜態變數int k=6;然後執行a構造器,當要執行a裡面的方法t()時;這個方法是非靜態方法,而這裡沒有a的例項存在,因此,會轉而呼叫類b的方法t(),而這個 單純的呼叫過程也沒有載入b中的int k=8.因此輸出的k是int的空值,方法返回後會呼叫a的h();這個方法是靜態方法,因此輸出a中的

然後就呼叫b的構造器了,它先載入b中的int k=8;再呼叫構造方法中的t(),由於此時k已經載入了,因此輸出,接下來是h(),輸出。

以上就是a a=new b();

二.b a a=new b();

與一中不同的是,不需要載入類,因為一個類在程式執行過程只載入一次。因此輸出從new b()開始,同上依次輸出

三.a.h();和b.t();由於h()是static 方法是靜態繫結的,因此呼叫的是父類的h()輸出,而t()是非靜態方法,是動態繫結,因此呼叫的是b類的方法,輸出。

我也初學,不知道理解得對不對,感覺有些術語說得不太準確

2樓:

繼承:在new子類的物件時要先呼叫父類的構造方法,再執行子類的構造方法。

你按照這個思路去畫堆疊圖一步一步的分析程式的執行過程,你就能得到輸出結果。

希望對你有幫助~~~

關於兩個輸出結果不同的問題,java 為什麼下列兩個輸出結果不同

第二個結果還可以理解,就是在vc下面後 是後到最後的,就是在一個表示式中要所有的計算全部結束之後,所以在那個表示式中,a的值都是10,到分號結束時a 的值才 了三次,變成了13,就出現了那樣的結果。在看第一個。任何一個表示式都回產生一個臨時值 這個可以自己查書找到,而且比較重要 雙目運算子需要兩個數...

為什麼我的C語言程式沒有輸出?哪錯了

首先指出你寫的一處錯誤,fun函式沒有返回值。你要麼定義為void,既然定義成int,就要返回資料。可能需要優化下.輸入定義成字串,不必用char陣列,然後如果用while就用while,用for就用for,幹嘛都一起用,大致可以這麼寫 自己定義下變數,另外沒必要把變數定義到和main fun一個級...

下面程式段的輸出結果是為什麼c語言

a的資料型別是什麼?不管了,我就當是 int 型的了。a 100,a 120不成立,所以while 不執行,而while後面的內內 容是容 分號,也就是 while的內容為 空 所以結束while後執行a a 1 得a 101,列印a 101 a 100 while a 120 請注意這裡有沒有ba...