談談變量初始化順序、構造器執行順序

今天看了李剛的文章,頗有感觸,抱着學習的心態記錄一下本身的學習心得!我是一個剛剛進入java世界的初學者,若是寫錯了,請你們指正! java

static修飾的變量  在文章中被稱爲 類變量,非static變量,稱爲實例變量,我的以爲很是貼切。 學習

實例變量的初始化順序 this

一、定義實例變量的初始值和非靜態化塊中對實例變量指定初始值。這兩個的執行順序與他們在源碼中的位置有關係。 .net

二、構造器中對實例變量指定初始值在上面二者後面進行初始化 繼承

類變量的初始化順序 ip

一、定義類變量的初始值和靜態初始化塊中對類變量指定初始值。這兩個的執行順序與他們在源碼中的位置有關係。 get

若是有實例變量還有類變量 源碼

實例變量老是能夠引用類變量,首先會對類變量進行初始化。 it

 

下面談談構造器 io

我照着文章敲了代碼

下面是父類

package com.wisco.variable;

public class Creature {

 {
  System.out.println("Creature的非靜態初始化塊");
 }
 static {
  System.out.println("Creature的靜態初始化塊");
 }
 public Creature(){
  System.out.println("Creature的無參構造器");
 }
 public Creature(String name){
  this();//顯示調用本類中另外一個重載的構造器,必須放置在第一行
  System.out.println("Creature有參數的構造器,name的參數:"+name);
 }
}

 

下面的類繼承上面的類

package com.wisco.variable;

public class Animal extends Creature{
 {
  System.out.println("Animal的非靜態初始化塊");
 }
 static {
  System.out.println("Animal的靜態初始化塊");
 }
 public Animal(String name) {
  super(name);//顯式調用父類的構造器,也必須放在第一行
  System.out.println("Animal帶參的構造器,參數name:"+name);
 }
 public Animal(String name,int age) {
  this(name);
  System.out.println("Animal帶參的構造器,參數name:"+name+"另外一個參數:"+age);
 }
}

子類:

package com.wisco.variable;

public class Wolf extends Animal{

 public Wolf() {
  super("灰太狼", 3);
  System.out.println("Wolf無參數的構造器");
  // TODO Auto-generated constructor stub
 }
 public Wolf(double weight){
  this();
  System.out.println("Wolf帶參數的構造器,參數:"+weight);
 }

}

主程序

package com.wisco.variable;

public class Variable {

 /**
  * @Title: main
  * @Description: TODO(這裏用一句話描述這個方法的做用)
  * @param
  * @return void    返回類型
  * @throws
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
                 new Wolf(7.89);
 }
}

輸出結果:

Creature的靜態初始化塊
Animal的靜態初始化塊
Creature的非靜態初始化塊
Creature的無參構造器
Creature有參數的構造器,name的參數:灰太狼
Animal的非靜態初始化塊
Animal帶參的構造器,參數name:灰太狼
Animal帶參的構造器,參數name:灰太狼另外一個參數:3
Wolf無參數的構造器
Wolf帶參數的構造器,參數:7.89
————————————————————————

從結果咱們能夠看出,靜態化的總在前面,非靜態化的在後面。同時構造器永遠是父類——子類這樣的順序。

若是沒有顯式調用父類構造器,會默認調用父類的無參數構造器

相關文章
相關標籤/搜索