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

首頁 > 編程 > Java > 正文

Java類變量和成員變量初始化過程的應用介紹

2019-11-26 16:10:20
字體:
來源:轉載
供稿:網友

一、類的初始化

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

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

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

1)       先按照靜態成員變量的定義順序在類內部聲明成員變量。

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

一個java類和編譯后的class對應的轉換如下:

源文件:

復制代碼 代碼如下:

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);
         }
}

當java源代碼轉換成一個class文件后,其轉換成類似下面的代碼:
復制代碼 代碼如下:

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);
         }
}

初始化順序依據轉換后對應的class類成員變量的初始化順序依次執行,所以所有的靜態成員變量都是先聲明,后執行賦值的,而且賦值的順序也是依照源代碼對靜態成員變量初始化的順序進行的,注意:定義一個成員變量并直接初始化與在靜態代碼塊中進行初始化是等價的,都是依據它們在源代碼中定義的順序進行的。


二、對象的生成

對于對象的生成其初始化過程與類的初始化過程類似,但會增加構造函數階段,源代碼如下:

復制代碼 代碼如下:

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="上海市";
   }
 }

編譯器轉換成class文件后,會轉換成類似下面的代碼:
復制代碼 代碼如下:

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="上海市";
   }
 }

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乐昌市| 稻城县| 松滋市| 明水县| 株洲县| 田东县| 大竹县| 当雄县| 潮安县| 阿巴嘎旗| 德令哈市| 新郑市| 泸定县| 凉山| 宽甸| 乌兰浩特市| 绥宁县| 桐城市| 太湖县| 乳源| 新化县| 台前县| 石柱| 介休市| 大理市| 泰来县| 横山县| 洪泽县| 富民县| 河西区| 巢湖市| 石河子市| 宜丰县| 巩义市| 安吉县| 苏尼特右旗| 云林县| 大邑县| 财经| 罗城| 澎湖县|