白嫩娇妻被交换经过_被弄出白浆喷水了视频_亚洲依依成人_小蝌蚪视频污下载

當(dāng)前位置: 首頁(yè) / 技術(shù)干貨 / 正文
好程序員Java培訓(xùn)之類的實(shí)例化步驟

2020-10-22

Java培訓(xùn) Java類

  好程序員Java培訓(xùn)之類的實(shí)例化步驟,希望對(duì)同學(xué)們學(xué)習(xí)java開(kāi)發(fā)有所幫助,首先對(duì)于java工程師來(lái)說(shuō),static非常容易在面試的時(shí)候被問(wèn)到。書(shū)面上說(shuō)static是靜態(tài)的。其實(shí)我把它理解為“全局的”。什么叫全局的?全局的屬性,全局的方法,全局的代碼塊。

 

好程序員

  全局屬性,全局方法,比較好理解就是這個(gè)類所有的對(duì)象都共有的屬性和方法。因?yàn)槭钦麄€(gè)類共有的,所以可以通過(guò)聲明直接調(diào)用。我把它理解為“單例模式”的屬性和方法。所謂單例模式就是指這個(gè)類聲明的所有對(duì)象共享這些屬性和方法。一個(gè)對(duì)象對(duì)這個(gè)屬性進(jìn)行了修改,所有對(duì)象再調(diào)這個(gè)屬性都是修改后的值了。

  下面主要說(shuō)一下static修飾的代碼塊,面試的一大考點(diǎn)就是static代碼塊是什么時(shí)候被加載的。

  首先我們需要了解一下java虛擬機(jī)對(duì)類的加載過(guò)程。首先JVM會(huì)通過(guò)classloader將類的字節(jié)碼轉(zhuǎn)換成相應(yīng)的Class對(duì)象。其中classloader是雙親委托的方法來(lái)查找類文件的。

  就是首先委托父類的classloader查找(父類也有父類就交由父類的父類查找以此類推,直到不再繼承別的classloader的類),如果查找不到再由自己來(lái)查找。如果自己也找不到就拋出異常。以上是準(zhǔn)備工作,當(dāng)這個(gè)類抽次被使用,我們會(huì)顯出石化這個(gè)類(如果有父類就先初始化他的父類),在初始化的過(guò)程中我們會(huì)處理static修飾的代碼。就是我們這里要說(shuō)的static代碼塊。每個(gè)類知會(huì)初始化1次。(我們可以通過(guò)改變方法Class.forName()中的第二個(gè)參數(shù)來(lái)控制是否初始化一個(gè)類)。

 

以下為網(wǎng)上找的一個(gè)經(jīng)典的例子。

 

面試題目如下:請(qǐng)寫(xiě)出程序執(zhí)行完成之后的結(jié)果。

 

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");

}

}

 

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

 

1.首先分析一段程序的執(zhí)行后的結(jié)果,我們得先找到程序的入口,然后才能著手分析。也就是main()方法。

 

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

 

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

 

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

 

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

 

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

 

7.newZ();此方法被執(zhí)行。

 

8.既然newZ();那么Z類就要被加載。因?yàn)?/font>Z類繼承X類。所以必須先加載X類才行。因?yàn)?/font>X類已經(jīng)被加載。所以此時(shí)不用再加載X類了。Z類加載好了就要執(zhí)行Z類的static語(yǔ)句塊

 

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

 

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

 

11.實(shí)例化Z之前,還得先實(shí)例化X對(duì)吧。因?yàn)樽宇惖臉?gòu)造方法都會(huì)調(diào)用父類的構(gòu)造方法。

 

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

 

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

 

14.X類的Yy=newY();要被執(zhí)行。也就是會(huì)打印Y

 

15.接著執(zhí)行System.out.println("X");

 

16.然后就是執(zhí)行Z的構(gòu)造方法

 

17.同樣先獲取Z的屬性Yy=newY();打印Y

 

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

 

整個(gè)過(guò)程就是這樣了。現(xiàn)在知道結(jié)果了吧:

 

tttt

tt

Y

X

Y

Z

 

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

  以上就是關(guān)于好程序員Java培訓(xùn)之類的實(shí)例化步驟詳解的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,最后想要了解更多請(qǐng)關(guān)注好程序員Java培訓(xùn)官網(wǎng)、微信公眾號(hào)等平臺(tái)。

Java培訓(xùn):http://zhyikao.com/javaEE_class.shtml

好程序員公眾號(hào)

  • · 剖析行業(yè)發(fā)展趨勢(shì)
  • · 匯聚企業(yè)項(xiàng)目源碼

好程序員開(kāi)班動(dòng)態(tài)

More+

Copyright 2011-2023 北京千鋒互聯(lián)科技有限公司 .All Right 京ICP備12003911號(hào)-5 京公網(wǎng)安備 11010802035720號(hào)