日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

java 成员变量的初始化_Java类变量和成员变量初始化过程

發(fā)布時(shí)間:2023/12/19 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 成员变量的初始化_Java类变量和成员变量初始化过程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、類的初始化

對(duì)于類的初始化:類的初始化一般只初始化一次,類的初始化主要是初始化靜態(tài)成員變量。

類的編譯決定了類的初始化過程。

編譯器生成的class文件主要對(duì)定義在源文件中的類進(jìn)行了如下的更改:

1)?????? 先按照靜態(tài)成員變量的定義順序在類內(nèi)部聲明成員變量。

2)?????? 再按照原java類中對(duì)成員變量的初始化順序進(jìn)行初始化。

一個(gè)java類和編譯后的class對(duì)應(yīng)的轉(zhuǎn)換如下:

源文件:

public class Person{

public static String name="張三";

public static int age;

static{

age=20;

System.out.println("初始化age");

}

public static String address;

static{

address="北京市";

age=34;

}

public static void main(String[] args) {

System.out.println(name);

System.out.println(age);

System.out.println(address);

}

}

當(dāng)java源代碼轉(zhuǎn)換成一個(gè)class文件后,其轉(zhuǎn)換成類似下面的代碼:

public class Person{

public static String name;

public static int age;

public static String address;

static{

name="張三";

age=20;

System.out.println("初始化age");

address="北京市";

age=34;

}

public static void main(String[] args) {

System.out.println(name);

System.out.println(age);

System.out.println(address);

}

}

初始化順序依據(jù)轉(zhuǎn)換后對(duì)應(yīng)的class類成員變量的初始化順序依次執(zhí)行,所以所有的靜態(tài)成員變量都是先聲明,后執(zhí)行賦值的,而且賦值的順序也是依照源代碼對(duì)靜態(tài)成員變量初始化的順序進(jìn)行的,注意:定義一個(gè)成員變量并直接初始化與在靜態(tài)代碼塊中進(jìn)行初始化是等價(jià)的,都是依據(jù)它們?cè)谠创a中定義的順序進(jìn)行的。

二、對(duì)象的生成

對(duì)于對(duì)象的生成其初始化過程與類的初始化過程類似,但會(huì)增加構(gòu)造函數(shù)階段,源代碼如下:

1 public class Person{

2   {

3     name="李四";

4     age=56;

5     System.out.println("初始化age");

6     address="上海";

7   }

8   public String name="張三";

9   public int age=29;

10   public String address="北京市";

11   public Person(){

12     name="趙六";

13     age=23;

14     address="上海市";

15   }

16 }

編譯器轉(zhuǎn)換成class文件后,會(huì)轉(zhuǎn)換成類似下面的代碼:

1 public class Person{

2   public String name;

3   public int age;

4   public String address;

5   public Person(){

6     name="李四";

7     age=56;

8     System.out.println("初始化age");

9     address="上海";

10     name="張三";

11     age=29;

12     address="北京市";

13     name="趙六";

14     age=23;

15     address="上海市";

16   }

17 }

可以看到,對(duì)于類中對(duì)成員變量的初始化和代碼塊中的代碼全部都挪到了構(gòu)造函數(shù)中,并且是按照java源文件的初始化順序依次對(duì)成員變量進(jìn)行初始化的,而原構(gòu)造函數(shù)中的代碼則移到了構(gòu)造函數(shù)的最后執(zhí)行。本人以前一直對(duì)類初始化過程一直沒有一個(gè)深刻的理解,就是搞不清到底是怎么初始化的,只能按照書上所說的記住了初始化順序,但是過一段時(shí)間有給忘了,所以這次總算給弄清楚了,還是按照一個(gè)模型來解釋初始化機(jī)制比較好啊,不用再背了,只有理解了才能不易忘

總結(jié)

以上是生活随笔為你收集整理的java 成员变量的初始化_Java类变量和成员变量初始化过程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。