国产精品色哟哟_男男激情3p互攻_色偷偷影院_和女同学厕所做了四次

當前位置: 首頁 / 技術干貨 / 正文
好程序員Java培訓之類的實例化步驟

2020-10-22

Java培訓 Java類

  好程序員Java培訓之類的實例化步驟,希望對同學們學習java開發有所幫助,首先對于java工程師來說,static非常容易在面試的時候被問到。書面上說static是靜態的。其實我把它理解為“全局的”。什么叫全局的?全局的屬性,全局的方法,全局的代碼塊。

 

好程序員

  全局屬性,全局方法,比較好理解就是這個類所有的對象都共有的屬性和方法。因為是整個類共有的,所以可以通過聲明直接調用。我把它理解為“單例模式”的屬性和方法。所謂單例模式就是指這個類聲明的所有對象共享這些屬性和方法。一個對象對這個屬性進行了修改,所有對象再調這個屬性都是修改后的值了。

  下面主要說一下static修飾的代碼塊,面試的一大考點就是static代碼塊是什么時候被加載的。

  首先我們需要了解一下java虛擬機對類的加載過程。首先JVM會通過classloader將類的字節碼轉換成相應的Class對象。其中classloader是雙親委托的方法來查找類文件的。

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

 

以下為網上找的一個經典的例子。

 

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

 

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

}

}

 

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

 

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

 

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

 

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

 

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

 

5.所以一個輸出結果為tttt,沒問題了吧。

 

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

 

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

 

8.既然newZ();那么Z類就要被加載。因為Z類繼承X類。所以必須先加載X類才行。因為X類已經被加載。所以此時不用再加載X類了。Z類加載好了就要執行Z類的static語句塊

 

9.那么就會打印出tt了吧。

 

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

 

11.實例化Z之前,還得先實例化X對吧。因為子類的構造方法都會調用父類的構造方法。

 

12.那就先實例化X類吧。

 

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

 

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

 

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

 

16.然后就是執行Z的構造方法

 

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

 

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

 

整個過程就是這樣了。現在知道結果了吧:

 

tttt

tt

Y

X

Y

Z

 

記住,面試有可能會標出一些語句的,讓你選擇這些語句的執行順序。不過只要知道原理,就沒什么難的了。

  以上就是關于好程序員Java培訓之類的實例化步驟詳解的全部內容,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,最后想要了解更多請關注好程序員Java培訓官網、微信公眾號等平臺。

Java培訓:http://bloohash.com/javaEE_class.shtml

好程序員公眾號

  • · 剖析行業發展趨勢
  • · 匯聚企業項目源碼

好程序員開班動態

More+
  • HTML5大前端 <高端班>

    開班時間:2021-04-12(深圳)

    開班盛況

    開班時間:2021-05-17(北京)

    開班盛況
  • 大數據+人工智能 <高端班>

    開班時間:2021-03-22(杭州)

    開班盛況

    開班時間:2021-04-26(北京)

    開班盛況
  • JavaEE分布式開發 <高端班>

    開班時間:2021-05-10(北京)

    開班盛況

    開班時間:2021-02-22(北京)

    開班盛況
  • Python人工智能+數據分析 <高端班>

    開班時間:2021-07-12(北京)

    預約報名

    開班時間:2020-09-21(上海)

    開班盛況
  • 云計算開發 <高端班>

    開班時間:2021-07-12(北京)

    預約報名

    開班時間:2019-07-22(北京)

    開班盛況
IT培訓IT培訓
在線咨詢
IT培訓IT培訓
試聽
IT培訓IT培訓
入學教程
IT培訓IT培訓
立即報名
IT培訓

Copyright 2011-2023 北京千鋒互聯科技有限公司 .All Right 京ICP備12003911號-5 京公網安備 11010802035720號