摘要:一成員變量的初始化成員變量的默認(rèn)值會在調(diào)用構(gòu)造方法之前對所有沒有在聲明時賦值的成員變量賦予默認(rèn)值。四初始化順序在類加載時唯一初始化一次次靜態(tài)變量和執(zhí)行靜態(tài)字句。
java中所有變量在使用之前必須得到初始值,否則無法編譯通過。java中的變量分為類中的成員變量和方法中的局部變量,方法中的局部變量在使用之前我們必須自己進(jìn)行初始化。
一、成員變量的初始化:Java會在調(diào)用構(gòu)造方法之前對所有沒有在聲明時賦值的成員變量賦予默認(rèn)值。
數(shù)值類型:0
字符char:"u0000"
布爾型:false
對象和數(shù)組:null
在聲明成員變量的時候就指定初始化值。
在顯示指定初始化值時若用的其他成員變量,必須保證用到的變量已經(jīng)被初始化了。(成員變量的初始子上而下進(jìn)行)
靜態(tài)成員變量的初始賦值與普通成員一樣,唯一不同在于靜態(tài)變量初始化只在在類加載時執(zhí)行一次,而普通成員變量在每次實(shí)例化時都執(zhí)行一次。
class Test { static int a = 1; static { System.out.println(a); } static int b = 2; }
靜態(tài)字句使用static后加大括號中,在類加載時靜態(tài)字句會被執(zhí)行,且之只會在類加載時執(zhí)行一次。
注意:初始時,先對a進(jìn)行初始,然后執(zhí)行靜態(tài)字句,然后對a進(jìn)行初始化。如果上面輸出得是b那將編譯報錯,因?yàn)槲覀儾荒茉俪跏蓟苯邮褂靡粋€變量。
class Test { int a = 1; { System.out.println(a) } }
非靜態(tài)字句在每次實(shí)例化時被執(zhí)行。
二、構(gòu)造方法進(jìn)行初始化:每次創(chuàng)建類對象時都會調(diào)用類的構(gòu)造方法,可以在構(gòu)造方法中進(jìn)行一些初始化操作,不過構(gòu)造方法的調(diào)用發(fā)生在成員初始化之后。
1、this關(guān)鍵字調(diào)用其他構(gòu)造方法可以在構(gòu)造方法將this作為方法調(diào)用從而調(diào)用其它構(gòu)造方法,但this調(diào)用只能調(diào)用一次且必須在第一行。
public class Tree { private int h; public Tree() { this(6); } public Tree(int h) { this.h = h; } }
除構(gòu)造方法中外,其他任何地方都禁止調(diào)用構(gòu)造方法。
類有父類時先對父類進(jìn)行初始化,如果類類也有父類則對先初始化父類,以此進(jìn)行下去。
并且在基類構(gòu)造器第一個語句使用super調(diào)用父類的構(gòu)造方法,若基類含有不帶參數(shù)的構(gòu)造方法那么可以不顯示的調(diào)用super,編譯器會自動調(diào)用。
super只能在構(gòu)造方法第一行調(diào)用一次。
public class A { public A(int a) { } } public class B { public B(int b) { spuer(b); } }四、初始化順序:
在類加載時唯一初始化一次次靜態(tài)變量和執(zhí)行靜態(tài)字句。靜態(tài)變量和靜態(tài)執(zhí)行子上而下順序進(jìn)行。
在每次實(shí)力化類對象時進(jìn)行普通成員變量的初始化和執(zhí)行費(fèi)靜態(tài)字句,初始化和字句按順序自上而下執(zhí)行。
有父類先進(jìn)行父類的初始化
五、數(shù)組初始化class Test { int[] as; public Test() { int[] bs; } }
Java中數(shù)組類型的變量也是對象,所以在成員變量的數(shù)組在聲明后如果未初始化則有默認(rèn)值null,但bs由于是方法里聲明所以不會被自動初始化為null,在使用之前就需要手動顯示的進(jìn)行初始化。
class Test { public static void main(String[] args) { int[] aArr = new int[10]; Integer[] bArrs = new Integer[10]; } }
對于aArr賦予new對象引用,此時aArr指向的是10個值為0的int數(shù)組。對于基本類型new的時候會為數(shù)組的每一個成員賦予默認(rèn)值,如果是對象類型則賦予null:
數(shù)值類型:0
字符char:"u0000"
布爾型:false
對象:null
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/71500.html
摘要:分析性能的影響但是需要注意時間單位,只是微秒而已,毫秒的千分之一秒的百萬分之一。在這種情況下,優(yōu)化毫秒的性能隱患無異于撿了芝麻丟了西瓜。 同步自:https://sulin.me/2019/T2ZXZB.... 在分布式系統(tǒng)開發(fā)中,我們經(jīng)常需要將各種各樣的狀態(tài)碼、錯誤信息傳遞給最外層的調(diào)用方,這個調(diào)用方通常是http/api接口,錯誤信息比如登錄失效、參數(shù)錯誤等等。 最外層接口暴露的...
摘要:開篇金幣積分商城下稱商城是眾多內(nèi)的一個產(chǎn)品,隨著使用的用戶越來越多,商城對于用戶留存的提升,扮演著重要的角色做為提高用戶黏性的核心產(chǎn)品,在擁有很好用戶體驗(yàn)的同時,也必須存在著一個高效穩(wěn)定的系統(tǒng)。分析上述兩點(diǎn),得到結(jié)論按用戶進(jìn)行分庫分表。 開篇 金幣(積分)商城(下稱商城)是眾多App內(nèi)的一個產(chǎn)品,隨著App使用的用戶越來越多,商城對于用戶留存的提升,扮演著重要的角色;做為提高用戶黏性的...
摘要:在開發(fā)設(shè)計中有一些常用原則或者潛規(guī)則,根據(jù)筆者的經(jīng)驗(yàn),這里稍微總結(jié)一下最最常用的,以饗讀者。是處理復(fù)雜性的一個原則。參考六大設(shè)計原則里氏替換原則奧卡姆剃刀如有問題可以通過郵件微信聯(lián)系我。 在開發(fā)設(shè)計中有一些常用原則或者潛規(guī)則,根據(jù)筆者的經(jīng)驗(yàn),這里稍微總結(jié)一下最最常用的,以饗讀者。 DRY 這里的DRY是Do Not Repeat Yourself的縮寫。具體解釋參見 ,嚴(yán)謹(jǐn)?shù)亩x是 E...
閱讀 3229·2023-04-26 02:27
閱讀 2145·2021-11-22 14:44
閱讀 4107·2021-10-22 09:54
閱讀 3203·2021-10-14 09:43
閱讀 759·2021-09-23 11:53
閱讀 12747·2021-09-22 15:33
閱讀 2715·2019-08-30 15:54
閱讀 2691·2019-08-30 14:04