今天看了李剛的文章,頗有感觸,抱着學習的心態記錄一下本身的學習心得!我是一個剛剛進入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
————————————————————————
從結果咱們能夠看出,靜態化的總在前面,非靜態化的在後面。同時構造器永遠是父類——子類這樣的順序。
若是沒有顯式調用父類構造器,會默認調用父類的無參數構造器