java溫習*(4):static關鍵字的應用---靜態代碼塊

應用三:static + 代碼塊 vs 代碼塊

概念:

靜態代碼塊:被static修飾的,定義在類內部,用{}括起的代碼段。

構造代碼塊:沒有被static修飾的,定義在類內部,用{}括起的代碼段。

普通代碼塊:定義在方法內部,用{}括起的代碼段。

特徵:

靜態代碼塊:

  • 只能出現在類內,不允許出現在方法內。

  • 可以出現多次,按順序在類加載時執行。

  • 無論該類實例化多少對象,只執行一次。

構造代碼塊:

  • 可以在類內出現多次,按順序在每個對象實例化時執行。

  • 執行優先級:晚於靜態代碼塊,高於構造方法。

  • 每次執行對象實例化時,均會執行一次。

普通代碼塊:

  • 可以在方法內出現多次,按順序在方法調用時執行。

應用:

靜態代碼塊:基於性能優化的考量,多適用於需要在項目啓動時執行一次的場景,譬如項目資源整體加載等。

構造代碼塊:多適用於類中每個對象產生時都需要執行的功能封裝。與構造方法的區別在於,構造方法是在new執行時有選擇性的調用帶參或者無參構造,而構造代碼塊則是,在每個對象實例化時都一定會執行。

普通代碼塊:適用於在方法內進行代碼功能拆分。

示例:

定義國產車類CarDemo,包含靜態成員firm,非靜態方法run;定義測試類CarTest,針對CarDemo進行測試
備註:此處由於展示篇幅有限,暫不考慮屬性的訪問權限

- 當CarDemo類在靜態代碼塊和構造代碼塊中分別對靜態成員賦值,並添加構造方法

 

測試類CarTest中實例化CarDemo,並調用run方法

運行結果:

總結:

1、執行優先級:靜態代碼塊>構造代碼塊>構造方法

2、執行次數:靜態代碼塊只執行1次;構造代碼塊、構造方法隨對象實例化個數而定

- CarDemo類中添加成員屬性color,並在靜態代碼塊和構造代碼塊中分別對color進行賦值時

錯誤提示:不能在靜態塊中操作非靜態成員

總結:
1、不能在靜態代碼塊中直接對非靜態成員賦值。

2、可以在構造代碼塊中直接操作靜態和非靜態成員。

- 當將屬性定義移入靜態代碼塊時

 

錯誤提示分別爲:不允許在靜態代碼塊中聲明靜態成員;無法在構造代碼塊中訪問到相關成員。

總結:

1、不能在靜態代碼塊聲明靜態成員,可以聲明非靜態成員。

2、靜態代碼塊中聲明的成員,在外部無法進行訪問。

  • 當在run方法中分別添加2個代碼塊時

圖片描述

圖片描述

運行結果爲:

圖片描述

  • 當在兩個代碼塊上部添加同名局部變量聲明時:

圖片描述

錯誤提示:不允許定義重名變量

圖片描述

總結:

1、普通代碼塊在方法內順序執行,各自作用範圍獨立。

2、方法內定義的局部變量,作用範圍爲:自定義位置起,至方法結束。在此期間,不允許方法中普通代碼塊內存在局部變量的聲明。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章