欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談Java中類的實(shí)例化步驟

 更新時(shí)間:2019年02月25日 11:59:07   作者:車到山前是死路  
今天小編就為大家分享一篇關(guān)于淺談Java中類的實(shí)例化步驟,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧

就個(gè)人的一些看法簡(jiǎn)單的 談?wù)剆tatic。

就java 工程師來說,static非常容易在面試的時(shí)候被問到。

言歸正傳,書面上說static是靜態(tài)的。其實(shí)我把它理解為“全局的”。什么叫全局的?全局的屬性,全局的方法,全局的代碼塊。

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

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

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

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

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

面試題目如下:請(qǐng)寫出程序執(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é)果,我們先來分析下。一步一步推出結(jié)果。

  • 1.首先分析一段程序的執(zhí)行后的結(jié)果,我們得先找到程序的入口,然后才能著手分析。也就是main()方法。
  • 2.我們發(fā)現(xiàn)main()方法在X類中,要執(zhí)行main()方法,還得先將X類加載到內(nèi)存中。
  • 3.X類加載完成后,會(huì)做什么事情呢?別急,先來看看static的作用,不知道吧。告訴你:static就是在類被第一次加載的時(shí)候執(zhí)行,以后就不再執(zhí)行。
  • 4.知道了static的作用,那么X類被加載,那么就會(huì)先執(zhí)行X類的靜態(tài)屬性和靜態(tài)語句塊(static),執(zhí)行先后順序看誰在前面就先執(zhí)行誰。只在此時(shí)執(zhí)行,以后都不會(huì)。
  • 5.所以一個(gè)輸出結(jié)果為tttt,沒問題了吧。
  • 6.X類的static語句塊執(zhí)行完了,就該執(zhí)行main()方法啦。
  • 7.new Z();此方法被執(zhí)行。
  • 8.既然new Z();那么Z類就要被加載。因?yàn)閆類繼承X類。所以必須先加載X類才行。因?yàn)閄類已經(jīng)被加載。所以此時(shí)不用再加載X類了。Z類加載好了就要執(zhí)行Z類的static語句塊
  • 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類的Y y=new Y();要被執(zhí)行。也就是會(huì)打印Y。
  • 15.接著執(zhí)行System.out.println("X");
  • 16.然后就是執(zhí)行Z的構(gòu)造方法
  • 17.同樣先獲取Z的屬性Y y=new Y();打印Y。
  • 18.再執(zhí)行System.out.println("Z");

整個(gè)過程就是這樣了?,F(xiàn)在知道結(jié)果了吧:

tttt
tt
Y
X
Y
Z

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

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • java網(wǎng)上圖書商城(7)訂單模塊2

    java網(wǎng)上圖書商城(7)訂單模塊2

    這篇文章主要為大家詳細(xì)介紹了java網(wǎng)上圖書商城,訂單模塊第二篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Java實(shí)現(xiàn)的校驗(yàn)銀行卡功能示例

    Java實(shí)現(xiàn)的校驗(yàn)銀行卡功能示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的校驗(yàn)銀行卡功能,結(jié)合完整實(shí)例形式分析了java針對(duì)銀行卡類型、歸屬地等信息的判斷、讀取相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06
  • 一文了解Java中枚舉的使用

    一文了解Java中枚舉的使用

    Java中枚舉,大家在項(xiàng)目中經(jīng)常使用吧,主要用來定義一些固定值。那你了解枚舉的本質(zhì)嗎?了解枚舉的一些常見用法嗎?本文就來為大家一一進(jìn)行詳解
    2022-09-09
  • SpringBoot動(dòng)態(tài)定時(shí)功能實(shí)現(xiàn)方案詳解

    SpringBoot動(dòng)態(tài)定時(shí)功能實(shí)現(xiàn)方案詳解

    在SpringBoot項(xiàng)目中簡(jiǎn)單使用定時(shí)任務(wù),不過由于要借助cron表達(dá)式且都提前定義好放在配置文件里,不能在項(xiàng)目運(yùn)行中動(dòng)態(tài)修改任務(wù)執(zhí)行時(shí)間,實(shí)在不太靈活。現(xiàn)在我們就來實(shí)現(xiàn)可以動(dòng)態(tài)修改cron表達(dá)式的定時(shí)任務(wù),感興趣的可以了解一下
    2022-11-11
  • Mybatis-Plus或PageHelper多表分頁查詢總條數(shù)不對(duì)問題的解決方法

    Mybatis-Plus或PageHelper多表分頁查詢總條數(shù)不對(duì)問題的解決方法

    PageHelper 這個(gè)插件用了很多次了,今天使用的時(shí)候才遇到一個(gè)問題,這篇文章主要給大家介紹了關(guān)于Mybatis-Plus或PageHelper多表分頁查詢總條數(shù)不對(duì)問題的解決方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • Java報(bào)錯(cuò):Error:java:?程序包org.springframework.boot不存在解決辦法

    Java報(bào)錯(cuò):Error:java:?程序包org.springframework.boot不存在解決辦法

    建完springboot項(xiàng)目時(shí),點(diǎn)擊啟動(dòng),有可能會(huì)報(bào)錯(cuò),下面這篇文章主要給大家介紹了關(guān)于Java報(bào)錯(cuò):Error:java:?程序包org.springframework.boot不存在的解決辦法,需要的朋友可以參考下
    2024-02-02
  • mybatis的dtd約束文件及配置文件xml自動(dòng)提示操作

    mybatis的dtd約束文件及配置文件xml自動(dòng)提示操作

    這篇文章主要介紹了mybatis的dtd約束文件及配置文件xml自動(dòng)提示操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 解決mybatis-plus3.1.1版本使用lambda表達(dá)式查詢報(bào)錯(cuò)的方法

    解決mybatis-plus3.1.1版本使用lambda表達(dá)式查詢報(bào)錯(cuò)的方法

    這篇文章主要介紹了解決mybatis-plus3.1.1版本使用lambda表達(dá)式查詢報(bào)錯(cuò)的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 關(guān)于SpringSecurity的基本使用示例

    關(guān)于SpringSecurity的基本使用示例

    這篇文章主要介紹了關(guān)于SpringSecurity的基本使用示例,SpringSecurity 本質(zhì)是一個(gè)過濾器鏈SpringSecurity 采用的是責(zé)任鏈的設(shè)計(jì)模式,它有一條很長(zhǎng)的過濾器鏈,需要的朋友可以參考下
    2023-05-05
  • Java中的線程死鎖是什么?如何避免?

    Java中的線程死鎖是什么?如何避免?

    這篇文章主要介紹了Java中線程死鎖的相關(guān)資料,以及避免死鎖的方法,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-09-09

最新評(píng)論