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

Java類變量和成員變量初始化過程的應(yīng)用介紹

 更新時(shí)間:2013年04月26日 15:39:19   作者:  
昨天看了一本叫做《突破程序員基本功的16課》的書,個(gè)人感覺還可以,主要對(duì)Java的技巧進(jìn)行了一些深入的講解,讓我對(duì)類的初始化和對(duì)象的創(chuàng)建有了新的認(rèn)識(shí)

一、類的初始化

對(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)換如下:

源文件:

復(fù)制代碼 代碼如下:

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)換成類似下面的代碼:
復(fù)制代碼 代碼如下:

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ù)階段,源代碼如下:

復(fù)制代碼 代碼如下:

public class Person{
   {
     name="李四";
     age=56;
     System.out.println("初始化age");
     address="上海";
   }
   public String name="張三";
   public int age=29;
   public String address="北京市";
   public Person(){
     name="趙六";
     age=23;
     address="上海市";
   }
 }

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

public class Person{
   public String name;
   public int age;
   public String address;
   public Person(){
     name="李四";
     age=56;
     System.out.println("初始化age");
     address="上海";
     name="張三";
     age=29;
     address="北京市";
     name="趙六";
     age=23;
     address="上海市";
   }
 }

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

相關(guān)文章

  • SpringBoot源碼剖析之屬性文件加載原理

    SpringBoot源碼剖析之屬性文件加載原理

    這篇文章主要給大家介紹了關(guān)于SpringBoot源碼剖析之屬性文件加載原理的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-02-02
  • Java程序圖形用戶界面設(shè)計(jì)之容器JFrame

    Java程序圖形用戶界面設(shè)計(jì)之容器JFrame

    圖形界面(簡(jiǎn)稱GUI)是指采用圖形方式顯示的計(jì)算機(jī)操作用戶界面。與早期計(jì)算機(jī)使用的命令行界面相比,圖形界面對(duì)于用戶來說在視覺上更易于接受,本篇精講Java語言中關(guān)于圖形用戶界面的基本容器JFrame
    2022-02-02
  • 如何去除Java中List集合中的重復(fù)數(shù)據(jù)

    如何去除Java中List集合中的重復(fù)數(shù)據(jù)

    這篇文章主要介紹了Java中List集合去除重復(fù)數(shù)據(jù)的方法,對(duì)大家的工作或?qū)W習(xí)有一定價(jià)值,有需求的朋友可以參考下
    2020-05-05
  • java異步調(diào)用Feign接口空指針問題解決

    java異步調(diào)用Feign接口空指針問題解決

    這篇文章主要為大家介紹了java異步調(diào)用Feign接口空指針問題解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • SSM 實(shí)現(xiàn)登錄驗(yàn)證碼功能(附源碼)

    SSM 實(shí)現(xiàn)登錄驗(yàn)證碼功能(附源碼)

    這篇文章主要介紹了SSM 實(shí)現(xiàn)登錄驗(yàn)證碼功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-12-12
  • java中redis增刪查以及清理緩存的案例

    java中redis增刪查以及清理緩存的案例

    這篇文章主要介紹了java中redis增刪查以及清理緩存的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • springboot2.X整合prometheus監(jiān)控的實(shí)例講解

    springboot2.X整合prometheus監(jiān)控的實(shí)例講解

    這篇文章主要介紹了springboot2.X整合prometheus監(jiān)控的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 淺談Java內(nèi)存區(qū)域劃分和內(nèi)存分配策略

    淺談Java內(nèi)存區(qū)域劃分和內(nèi)存分配策略

    這篇文章主要介紹了淺談Java內(nèi)存區(qū)域劃分和內(nèi)存分配策略,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • java根據(jù)模板動(dòng)態(tài)生成PDF實(shí)例

    java根據(jù)模板動(dòng)態(tài)生成PDF實(shí)例

    本篇文章主要介紹了java根據(jù)模板動(dòng)態(tài)生成PDF實(shí)例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • Java 解析線程的幾種狀態(tài)詳解

    Java 解析線程的幾種狀態(tài)詳解

    這篇文章主要為大家詳細(xì)介紹了Java 解析線程的幾種狀態(tài),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03

最新評(píng)論