public
class
a//非靜態**塊
//靜態**塊
static
}
public
class
bextends
a//非靜態語句塊
//靜態語句塊
static
public
static
void
main
(string[
] args)
}
執行結果:
new兩次
public
class
bextends
a//非靜態語句塊
//靜態語句塊
static
public
static
void
main
(string[
] args)
}
執行結果:
靜態塊屬於類的,非靜態屬於物件,有物件才有類,有類不一定有物件。打個比方,有車子一定有圖紙,有圖紙未必有車子。靜態塊用於類的初始化,建構函式用於物件的初始化,所以靜態塊在非靜態塊之前執行。靜態**只在第一次new執行一次,之後不再執行,而非靜態塊每new一次就執行一次。
所以靜態方法》非靜態語句塊》構造方法
上圖是我遇到的面試題
import test02.test01;
public
class
test01
static
public
static
void
main
(string[
] args)
}
執行結果:c,執行程式時先執行靜態方法new了乙個t1物件,t1裡面就乙個語句塊,然後就列印了a,然後在執行下乙個靜態方法列印b,這些都在mian方法之前執行的,然後在執行main,然後列印"開始",再new t2這個物件,因為靜態方法只在類載入的時候執行一次,所以就列印a,所以選c。
Java 靜態語句塊 語句塊 建構函式
以下是一道筆試題 package com.example public class parent static package com.example public class child extends parent static public static void main string ar...
靜態語句塊 構造語句塊以及建構函式的執行順序
class helloa static public class hellob extends helloa static public static void main string args 輸出 static astatic b main start i m a class helloa i ...
Java 靜態語句塊 語句塊 建構函式執行順序
package test class parent static public parent class child extends parent static public child public class staticiniblockordertest 分析 物件的初始化順序 首先執行父類靜...