【JAVA基础篇】对象初始化过程
生活随笔
收集整理的這篇文章主要介紹了
【JAVA基础篇】对象初始化过程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們都知道,創建對象是由 new關鍵字調用構造方法 返回類實例(實際上還可以通過反射來創建實例)。
例如 : Person jack = new Person();
這句話到底做了什么事情呢 ? 其實就是講對象的初始化過程。
- 1、 new 用到了Person.class,所以會先找到Person.class文件,并加載到內存中(用到類中的內容類就會被加載)
- 2、執行該對象的static代碼塊(靜態初始塊)。(如果有的話,給Person.class類進行初始化)
- 3、在堆內存中開辟空間,分配內存地址
- 4、在堆內存中建立對象特有屬性,并進行默認初始化
- 5、對屬性進行顯示初始化(聲明成員屬性并賦值)
- 6、執行構造塊
- 7、執行構造函數
- 8、將內存地址賦值給棧內存中的jack變量
如下圖:
下面我們來看兩個案例
案例一:
以下代碼的輸出結果是什么?
public class B {public static B t1 = new B();public static B t2 = new B();{System.out.println("構造塊");}static {System.out.println("靜態塊");}public static void main(String[] args) {B t = new B();} }答案是:
構造塊
構造塊
靜態塊
構造塊
答案分析:JVM先加載B這個類,初始化靜態域(靜態變量、靜態塊和靜態方法,按照代碼先后順序初始化),先初始化t1,t2,所以先輸出構造塊 構造塊;然后執行靜態塊,所以輸出靜態塊;最后執行new B()輸出構造塊
案例二:
一下代碼的輸出結果是什么?
public class B {static {i = 100;}public static int i = 1;public static void main(String[] args) {System.out.println(i);} }答案是:1
答案分析:靜態變量是在類初始化時首先被加載的,JVM會去查找類中所有的靜態聲明,然后分配空間,注意這時候只是完成了地址空間的分配,還沒有賦值,之后JVM會根據類中靜態賦值(包括靜態類賦值和靜態塊賦值)的先后順序來執行。對于程序來說,就是先聲明了int類型的地址空間,并把地址傳遞給了i,然后按照類中的先后順序執行賦值動作,首先執行靜態塊中i=100,接著執行i=1,那最后的結果就是i=1了。
總結
以上是生活随笔為你收集整理的【JAVA基础篇】对象初始化过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 天融信防火墙重置配置_天融信防火墙配置手
- 下一篇: 什么叫大数据人物画像_大数据时代,如何构