久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

java - 請(qǐng)問(wèn)下,這里為何會(huì)引發(fā)空指針異常?

瀏覽:109日期:2024-01-25 16:13:38

問(wèn)題描述

java - 請(qǐng)問(wèn)下,這里為何會(huì)引發(fā)空指針異常?

有人跟我講,將name進(jìn)行靜態(tài)賦值即可,但實(shí)例變量不也是屬于成員變量嗎,也是在整個(gè)類(lèi)實(shí)例化的時(shí)候產(chǎn)生的啊,跟靜態(tài)賦值有何區(qū)別嗎?

問(wèn)題解答

回答1:

父類(lèi)的構(gòu)造方法先于子類(lèi)構(gòu)造方法執(zhí)行,Base()->test()-->name.length()相當(dāng)于null.length()。將name寫(xiě)成靜態(tài)的話,當(dāng)然可以了,因?yàn)殪o態(tài)成員的初始化先于實(shí)例成員的初始化。

順序大概是這樣的:

父類(lèi)static{...}

父類(lèi)靜態(tài)成員

父類(lèi)構(gòu)造方法

子類(lèi)static{...}

子類(lèi)靜態(tài)成員

子類(lèi)構(gòu)造方法

回答2:

首先拋出一個(gè)概念,對(duì)象的初始化流程:靜態(tài)變量 > 靜態(tài)初始化塊 > 實(shí)例變量 > 構(gòu)造器而存在父子類(lèi)關(guān)系的對(duì)象,又存在一個(gè)嵌套的初始化流程父類(lèi)初始化流程 > 子類(lèi)初始化流程

所以在你實(shí)例化的過(guò)程中,調(diào)用父類(lèi)構(gòu)造器并調(diào)用test()方法時(shí),子類(lèi)的name還沒(méi)有賦值,仍然是null,自然就會(huì)報(bào)空指針。

回答3:

你把name放在父類(lèi)Base中定義就不會(huì)報(bào)錯(cuò)。 因?yàn)槟銓?shí)例化Sub時(shí),會(huì)調(diào)用默認(rèn)的構(gòu)造函數(shù),默認(rèn)的構(gòu)造函數(shù)會(huì)調(diào)用父類(lèi)的構(gòu)造函數(shù),在父類(lèi)的構(gòu)造函數(shù)中,你使用了test()方法,而你在子類(lèi)中重寫(xiě)了該方法,子類(lèi)的test方法內(nèi)使用了name,但是這時(shí)候name還沒(méi)有完成初始化。所以會(huì)報(bào)NullPointerException。

標(biāo)簽: java
相關(guān)文章:
主站蜘蛛池模板: 南康市| 修文县| 新平| 新和县| 信丰县| 体育| 皋兰县| 习水县| 太仓市| 渭南市| 景洪市| 三门峡市| 阿拉善右旗| 岳西县| 深州市| 襄樊市| 林口县| 米易县| 肥东县| 盐源县| 新闻| 虞城县| 彭州市| 安康市| 任丘市| 广丰县| 巴中市| 会宁县| 海安县| 石景山区| 古交市| 临沭县| 诸暨市| 满洲里市| 大安市| 循化| 大埔县| 无棣县| 靖宇县| 郴州市| 环江|