java程式的執行順序
阿新 • • 發佈:2019-02-05
筆試的時候發現這樣一道題,發現自己對於java的一些基礎還是有所欠缺,於是在筆試後專門自己動手實現了下。
也就是說賦值順序是:
1.成員變數賦值>>>塊賦值>>>構造器賦值
2.父類的塊>>父類構造器>>自身塊>>自身構造器
又因為一個成員變數是不可能在靜態變數中賦值的,而且又前面程式執行順序可知
靜態塊>>塊
所以,程式的賦值步驟為
import java.util.*; class helloA{ public helloA(){ System.out.println("helloA"); } { System.out.println(" I am class A"); } static{ System.out.println(" static A"); } } public final class helloB extends helloA{ public helloB(){ System.out.println("helloB"); } { System.out.println(" I am class B"); } static{ System.out.println(" static B"); } public static void main(String args[]){ helloB b; helloB a; helloB c; new helloB(); } }
程式執行結果是:
static A
static B
I am class A
helloA
I am class B
helloB
也就是說,執行順序是
- 父類靜態塊
- 自身靜態塊
- 父類塊
- 父類構造器
- 自身塊
- 自身構造器
執行結果是:class Dog { public String type="父類成員變數賦的值"; public Dog() { System.out.println("父類構造器--type-->"+type); type="父類構造器賦的值"; System.out.println("父類構造器----type--->"+type); } { System.out.println("block---type--->"+type); type="父類塊賦的值"; } } public class Mastiff extends Dog { public String type="成員變數賦的值"; public Mastiff() { System.out.println("構造器---type--->"+type); type="構造器賦的值"; } public void say(){ System.out.println("say---type---->"+type); } { System.out.println("block---type--->"+type); type="塊賦的值"; } public static void main(String[] args){ Mastiff mastiff=new Mastiff(); mastiff.say(); } }
block---type--->父類成員變數賦的值
父類構造器--type-->父類塊賦的值
父類構造器----type--->父類構造器賦的值
block---type--->成員變數賦的值
構造器---type--->塊賦的值
say---type---->構造器賦的值
也就是說賦值順序是:
- 父類成員變數賦值
- 父類塊賦值
- 父類構造器賦值
- 自身成員變數賦值
- 自身塊賦值
- 自身構造器賦值
1.成員變數賦值>>>塊賦值>>>構造器賦值
2.父類的塊>>父類構造器>>自身塊>>自身構造器
- 父類的靜態變數賦值
- 自身的靜態變數賦值
- 父類成員變數賦值
- 父類塊賦值
- 父類構造器賦值
- 自身成員變數賦值
- 自身塊賦值
- 自身構造器賦值