Java中的繼承與靜態(tài)static等的執行先后順序的面試題

時(shí)間:2022-07-13 16:51:30 面試 我要投稿
  • 相關(guān)推薦

Java中的繼承與靜態(tài)static等的執行先后順序的面試題

繼承與static

Java中的繼承與靜態(tài)static等的執行先后順序的面試題

面試題目如下:請寫(xiě)出程序執行完成之后的結果。

package extend;

public class X {
Y y=new Y();
static{
System.out.println("tttt");
}
X(){
System.out.println("X");
}

public static void main(String[] args) {
new Z();

}
}

class Y{
Y(){
System.out.println("Y");
}
}

class Z extends X{
Y y=new Y();
static{
System.out.println("tt");
}
Z(){
System.out.println("Z");
}
}

先不告訴最后結果,我們先來(lái)分析下。一步一步推出結果。

1.首先分析一段程序的執行后的結果,我們得先找到程序的入口,然后才能著(zhù)手分析。

也就是main()方法。

2.我們發(fā)現main()方法在X類(lèi)中,要執行main()方法,還得先將X類(lèi)加載到內存中。

3.X類(lèi)加載完成后,會(huì )做什么事情呢?別急,先來(lái)看看static的作用,不知道吧。告訴你:static就是在類(lèi)被第一次加載的時(shí)候執行,以后就不再執行。

4.知道了static的作用,那么X類(lèi)被加載,那么就會(huì )先執行X類(lèi)的靜態(tài)屬性和靜態(tài)語(yǔ)句塊(static),執行先后順序看誰(shuí)在前面就先執行誰(shuí)。只在此時(shí)執行,以后都不會(huì )。

5.所以一個(gè)輸出結果為tttt,沒(méi)問(wèn)題了吧。

6.X類(lèi)的static語(yǔ)句塊執行完了,就該執行main()方法啦。

7.new Z();此方法被執行。

8.既然new Z();那么Z類(lèi)就要被加載。因為Z類(lèi)繼承X類(lèi)。所以必須先加載X類(lèi)才行。因為X類(lèi)已經(jīng)被加載。所以此時(shí)不用再加載X類(lèi)了。Z類(lèi)加載好了就要執行Z類(lèi)的static語(yǔ)句塊

9.那么就會(huì )打印出tt了吧。

10.都加在完后就要實(shí)例化對象了。

11.實(shí)例化Z之前,還得先實(shí)例化X對吧。因為子類(lèi)的構造方法都會(huì )調用父類(lèi)的構造方法。

12.那就先實(shí)例化X類(lèi)吧。

13.執行X方法前還得先初始化對不。也就是獲取所有屬性。那么X類(lèi)的屬性Y就會(huì )獲取。

14.即X類(lèi)的Y y=new Y();要被執行。也就是會(huì )打印Y。

15.接著(zhù)執行System.out.println("X");
16.然后就是執行Z的構造方法

17.同樣先獲取Z的屬性Y y=new Y();打印Y。

18.再執行System.out.println("Z");


整個(gè)過(guò)程就是這樣了,F在知道結果了吧:

tttt
tt
Y
X
Y
Z

記住,面試有可能會(huì )標出一些語(yǔ)句的,讓你選擇這些語(yǔ)句的執行順序。不過(guò)只要知道原理,就沒(méi)什么難的了。

【Java中的繼承與靜態(tài)static等的執行先后順序的面試題】相關(guān)文章:

Java面試題07-12

JAVA題庫:JAVA面試題目整理07-11

java面試題五07-11

java 基礎面試題07-11

華為Java面試題07-11

華為的JAVA面試題07-11

求java面試題07-11

華為公司 java人員面試題07-11

一道Java面試題,題目如下07-11

經(jīng)典Java面試題(絕版搞笑)篇,你笑了嗎?07-12

99久久精品免费看国产一区二区三区|baoyu135国产精品t|40分钟97精品国产最大网站|久久综合丝袜日本网|欧美videosdesexo肥婆