最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、類的初始化

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

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

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

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

2)       再按照原java類中對成員變量的初始化順序進行初始化。

一個java類和編譯后的class對應(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)換成一個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)換后對應(yīng)的class類成員變量的初始化順序依次執(zhí)行,所以所有的靜態(tài)成員變量都是先聲明,后執(zhí)行賦值的,而且賦值的順序也是依照源代碼對靜態(tài)成員變量初始化的順序進行的,注意:定義一個成員變量并直接初始化與在靜態(tài)代碼塊中進行初始化是等價的,都是依據(jù)它們在源代碼中定義的順序進行的。


二、對象的生成

對于對象的生成其初始化過程與類的初始化過程類似,但會增加構(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文件后,會轉(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="上海市";
   }
 }

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

相關(guān)文章

  • Spring源碼之事件監(jiān)聽機制詳解(@EventListener實現(xiàn)方式)

    Spring源碼之事件監(jiān)聽機制詳解(@EventListener實現(xiàn)方式)

    這篇文章主要介紹了Spring源碼之事件監(jiān)聽機制(@EventListener實現(xiàn)方式),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • SpringBoot自定義轉(zhuǎn)換器應(yīng)用實例講解

    SpringBoot自定義轉(zhuǎn)換器應(yīng)用實例講解

    SpringBoot在響應(yīng)客戶端請求時,將提交的數(shù)據(jù)封裝成對象時,使用了內(nèi)置的轉(zhuǎn)換器,SpringBoot 也支持自定義轉(zhuǎn)換器,這個內(nèi)置轉(zhuǎn)換器在 debug的時候,可以看到,提供了124個內(nèi)置轉(zhuǎn)換器
    2022-08-08
  • SpringCloud+RocketMQ實現(xiàn)分布式事務(wù)的實踐

    SpringCloud+RocketMQ實現(xiàn)分布式事務(wù)的實踐

    分布式事務(wù)已經(jīng)成為了我們的經(jīng)常使用的。所以我們來一步一步的實現(xiàn)基于RocketMQ的分布式事務(wù)。感興趣的可以了解一下
    2021-10-10
  • Java8中stream流的collectingAndThen方法應(yīng)用實例詳解

    Java8中stream流的collectingAndThen方法應(yīng)用實例詳解

    Java8中的Stream流提供了collectingAndThen方法,用于對歸納結(jié)果進行二次處理,文章通過User類的數(shù)據(jù)填充,演示了如何使用該方法進行集合去重、查找最高工資員工、計算平均工資等操作,感興趣的朋友跟隨小編一起看看吧
    2025-03-03
  • Java實現(xiàn)多個單張tif文件合并成一個多頁tif文件

    Java實現(xiàn)多個單張tif文件合并成一個多頁tif文件

    業(yè)務(wù)部門需要將多個單張的tiff文件,合并成一個多頁的tiff文件,本文就來介紹一下如何實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • SpringBoot中的Aop用法示例詳解

    SpringBoot中的Aop用法示例詳解

    這篇文章主要介紹了SpringBoot中的Aop用法,本文結(jié)合示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • java實現(xiàn)簡單的圖書管理系統(tǒng)

    java實現(xiàn)簡單的圖書管理系統(tǒng)

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單的圖書管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • IntelliJ IDEA配置Tomcat(完整版圖文教程)

    IntelliJ IDEA配置Tomcat(完整版圖文教程)

    這篇文章主要介紹了IntelliJ IDEA配置Tomcat(完整版圖文教程),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Springboot?前后端分離項目使用?POI?生成并導(dǎo)出?Excel的操作方法

    Springboot?前后端分離項目使用?POI?生成并導(dǎo)出?Excel的操作方法

    在做一個?SpringBoot?前后端分離項目的時候,需要將數(shù)據(jù)存到?Excel中,用戶可以下載?Excel,具體實現(xiàn)是采用?Apache?強大的?POI,本文給大家介紹Springboot?前后端分離項目使用?POI?生成并導(dǎo)出?Excel相關(guān)知識,感興趣的朋友一起看看吧
    2023-09-09
  • Java中的gateway自定義過濾器詳解

    Java中的gateway自定義過濾器詳解

    這篇文章主要介紹了Java中的gateway自定義過濾器詳解,過濾器是指gateway在路由過程中(A地址路由到B地址)生效進行過濾操作的,所有首先你得先配一個地址路由,本文提供了部分實現(xiàn)代碼,需要的朋友可以參考下
    2023-11-11

最新評論

开江县| 清远市| 宜良县| 海林市| 泾阳县| 汽车| 吴旗县| 九寨沟县| 佳木斯市| 陆良县| 邹城市| 固始县| 苗栗县| 江陵县| 保靖县| 泗洪县| 炉霍县| 马公市| 万州区| 桦川县| 西吉县| 从江县| 斗六市| 盐源县| 汉源县| 青神县| 广安市| 阜城县| 聊城市| 叙永县| 林甸县| 宜黄县| 五莲县| 西城区| 和顺县| 思茅市| 兰坪| 昌黎县| 友谊县| 敖汉旗| 苏尼特右旗|