非靜态代碼塊如:
{
System.out.println("2");
}
以上代碼塊就是非靜态的代碼塊,請注意這裡的方法名、作用域、傳回值、參數一概沒有,非靜态代碼塊會在每次類被調用或者被執行個體化時就會被執行。
靜态代碼塊如:
static {
System.out.println("3");
}
上面的代碼塊就是靜态的代碼塊,同樣沒有方法名、作用域、傳回值以及參數,靜态代碼塊類似于靜态變量,不論類被調用多少次,該區域代碼隻在第一次時執行一次
大家可以通過下面的代碼做進一步的測試
public class test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
new test1();
{
System.out.println("2");
static {
public test1(){
System.out.println("1");
輸出結果為
3
2
1
從結果中發現靜态代碼塊以及非靜态代碼塊都會在構造函數前執行,首次通路時,靜态代碼塊會在非靜态代碼塊前執行
靜态代碼塊是在類加載時自動執行的,非靜态代碼塊是在建立對象時自動執行的代碼,不建立對象不執行該類的非靜态代碼塊