Java漫談---Java中的初始化

java中全部變量在使用以前必須獲得初始值,不然沒法編譯經過。java中的變量分爲類中的成員變量和方法中的局部變量,方法中的局部變量在使用以前咱們必須本身進行初始化。java

1、成員變量的初始化:

一、成員變量的默認值:

Java會在調用構造方法以前對全部沒有在聲明時賦值的成員變量賦予默認值。數組

  • 數值類型:0
  • 字符char:'u0000'
  • 布爾型:false
  • 對象和數組:null
一、指定初始化值:

在聲明成員變量的時候就指定初始化值。
在顯示指定初始化值時若用的其餘成員變量,必須保證用到的變量已經被初始化了。(成員變量的初始子上而下進行)this

三、靜態成員初始化:

靜態成員變量的初始賦值與普通成員同樣,惟一不一樣在於靜態變量初始化只在在類加載時執行一次,而普通成員變量在每次實例化時都執行一次。code

四、靜態字句:
class Test {
    static int a = 1;
    static {
        System.out.println(a);
    }
    static int b = 2;
}

靜態字句使用static後加大括號中,在類加載時靜態字句會被執行,且之只會在類加載時執行一次。
注意:初始時,先對a進行初始,而後執行靜態字句,而後對a進行初始化。若是上面輸出得是b那將編譯報錯,由於咱們不能再初始化直接使用一個變量。對象

五、非靜態字句:
class Test {
    int a = 1;
    {
        System.out.println(a)
    }
}

非靜態字句在每次實例化時被執行。編譯器

2、構造方法進行初始化:

每次建立類對象時都會調用類的構造方法,能夠在構造方法中進行一些初始化操做,不過構造方法的調用發生在成員初始化以後。編譯

一、this關鍵字調用其餘構造方法

能夠在構造方法將this做爲方法調用從而調用其它構造方法,但this調用只能調用一次且必須在第一行。class

public class Tree {
    private int h;
    
    public Tree() {
        this(6);
    }
    public Tree(int h) {
        this.h = h;    
    }
}

除構造方法中外,其餘任何地方都禁止調用構造方法。變量

3、父類初始化:

類有父類時先對父類進行初始化,若是類類也有父類則對先初始化父類,以此進行下去。
而且在基類構造器第一個語句使用super調用父類的構造方法,若基類含有不帶參數的構造方法那麼能夠不顯示的調用super,編譯器會自動調用。
super只能在構造方法第一行調用一次。引用

public class A {
    public A(int a) {
        
    }
}

public class B {
    public B(int b) {
        spuer(b);
    }
}

4、初始化順序:

  1. 在類加載時惟一初始化一次次靜態變量和執行靜態字句。靜態變量和靜態執行子上而下順序進行。
  2. 在每次實力化類對象時進行普通成員變量的初始化和執行費靜態字句,初始化和字句按順序自上而下執行。
  3. 有父類先進行父類的初始化

5、數組初始化

一、只聲明時的默認值:
class Test {
    int[] as;
    
    public Test() {
        int[] bs;
    }
}

Java中數組類型的變量也是對象,因此在成員變量的數組在聲明後若是未初始化則有默認值null,但bs因爲是方法裏聲明因此不會被自動初始化爲null,在使用以前就須要手動顯示的進行初始化。

二、new時的默認值:
class Test {
    public static void main(String[] args) {
        int[] aArr = new int[10];
        Integer[] bArrs = new Integer[10];
    }
}

對於aArr賦予new對象引用,此時aArr指向的是10個值爲0的int數組。對於基本類型new的時候會爲數組的每個成員賦予默認值,若是是對象類型則賦予null:

  • 數值類型:0
  • 字符char:'u0000'
  • 布爾型:false
  • 對象:null
相關文章
相關標籤/搜索