国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

java 初始化順序

2019-11-15 00:39:52
字體:
來源:轉載
供稿:網友
java 初始化順序

java 變量類型如下:

實例變量;

類變量;

初始化途經如下:

實例變量

  --聲明時,初始化;

  --非靜態初始化塊內,初始化;

  --構造函數內,初始化;

實例1:

public class bean1 {int d;int e;int c;int b;int f;{c = 3;}int a = 1;{b = 2;}public bean1() {d = 4;f = 5;e = 6;}public int geta() {return a;}}

javap -c bean1.class 查看反匯編代碼如下:

Compiled from "bean1.java"public class initialization.bean1 {  int d;  int e;  int c;  int b;  int f;  int a;  public initialization.bean1();    Code:       0: aload_0       1: invokespecial #1                  // Method java/lang/Object."<init>":()V       4: aload_0       5: iconst_3  //初始化c       6: putfield      #2                  // Field c:I       9: aload_0      10: iconst_1  //初始化a        11: putfield      #3                  // Field a:I      14: aload_0      15: iconst_2  //初始化b      16: putfield      #4                  // Field b:I      19: aload_0      20: iconst_4  //初始化d      21: putfield      #5                  // Field d:I      24: aload_0      25: iconst_5      26: putfield      #6                  // Field f:I      29: aload_0      30: bipush        6      32: putfield      #7                  // Field e:I      35: return  public int geta();    Code:       0: aload_0       1: getfield      #3                  // Field a:I       4: ireturn}

結論:實例變量的初始化均在public initialization.bean1()當中完成,無論是在聲明時直接初始化,還是在代碼塊當中初始化,本質均在構造函數里面進行初始化,在構造函數當中的初始化順序取決于在 定義直接初始化和代碼塊初始化中的順序。

類變量

  --聲明時,初始化;

  --靜態初始化塊內,初始化;

實例2:

package initialization;public class bean2 {static int d;static int e = 5;static int c;int b;int f;int a = 1;static {c = 3;System.out.

新建bean2實例時,輸出如下:

hello,statichello

靜態代碼塊是主動執行的,需要在項目啟動的時候就初始化;

javap -c bean2.class 查看反匯編代碼如下:

Compiled from "bean2.java"public class initialization.bean2 {  static int d;  static int e;  static int c;  int b;  int f;  int a;  public initialization.bean2();    Code:       0: aload_0       1: invokespecial #1                  // Method java/lang/Object."<init>":()V       4: aload_0       5: iconst_1//初始化a       6: putfield      #2                  // Field a:I       9: aload_0      10: iconst_2//初始化b      11: putfield      #3                  // Field b:I      14: aload_0      15: bipush        6      17: putfield      #4                  // Field f:I      20: return  public int geta();    Code:       0: aload_0       1: getfield      #2                  // Field a:I       4: ireturn  static {};    Code:       0: iconst_5//初始化e       1: putstatic     #5                  // Field e:I       4: iconst_3//初始化c       5: putstatic     #6                  // Field c:I       8: iconst_4//初始化d       9: putstatic     #7                  // Field d:I      12: return}

結論:  實例變量的初始化均在public initialization.bean2()當中完成,無論是在聲明時直接初始化,還是在代碼塊當中初始化,本質均在構造函數里面進行初始化,在構造函數當中的初始化順序取決于在 定義直接初始化和代碼塊初始化中的順序;

類變量在static {}中完成,且初始順序以代碼中順序為主,類變量在實例變量前執行;

關于java final可以查看:http://m.survivalescaperooms.com/dolphin0520/p/3736238.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 常州市| 新邵县| 日土县| 泗水县| 万载县| 红河县| 潮州市| 东阿县| 贵州省| 大邑县| 临西县| 敦化市| 普宁市| 鄂托克旗| 乡城县| 左贡县| 岐山县| 德格县| 新兴县| 宜春市| 永修县| 汤阴县| 金堂县| 托里县| 家居| 德令哈市| 从江县| 寻甸| 安阳市| 诏安县| 托克托县| 成武县| 内丘县| 穆棱市| 筠连县| 峨山| 明溪县| 台中县| 永泰县| 什邡市| 湄潭县|