一、可以使用static關鍵字來定義“靜態代碼塊” 1.語法規則 2.靜態代碼塊在類載入時執行,並且只執行一次 3.靜態代碼塊在一個類中可以編寫多個,並且遵循自上而下的順序依次執行。 4.靜態代碼塊的作用是什麼?怎麼使用?用在哪裡?什麼時候用? 這當然和具體的需求有關,例如:項目中要求在類載入的時候 ...
一、可以使用static關鍵字來定義“靜態代碼塊”
1.語法規則
static { java語句; }
2.靜態代碼塊在類載入時執行,並且只執行一次
3.靜態代碼塊在一個類中可以編寫多個,並且遵循自上而下的順序依次執行。
4.靜態代碼塊的作用是什麼?怎麼使用?用在哪裡?什麼時候用?
這當然和具體的需求有關,例如:項目中要求在類載入的時候執行代碼完成日誌的記錄,那麼這段記錄日誌的代碼就可以編寫在到靜態代碼塊之中,完成日誌記錄。
靜態代碼塊是java準備的一個特殊時刻,這個特殊時刻被稱為類載入時刻,若希望在此執行一段特殊的程式,這段程式可以直接放在靜態代碼塊之中。
package com.bjpowernode.java_learning; public class D44_StaticCodeBlock { static { System.out.println("類載入1"); } static { System.out.println("類載入2"); } static { System.out.println("類載入3"); } public static void main(String[] args) { System.out.println("j"); } }
5.通常在靜態代碼塊當中完成預備工作,先完成數據的準備工具,例如:初始化連接池,解析XML配置文件
二、實例代碼塊/語句塊
1.實例代碼塊可以編寫多個,也是遵循自上而下的順序進行執行
2.實例代碼塊在構造方法執行之前進行執行,構造方法執行一次,實例代碼塊執行對應一次。
3.實例代碼塊也是java語言準備的一個特殊時機,這個特殊時機被稱為對象初始化時機。
4.語法結構
{
java語句;
}
5.舉例
package com.bjpowernode.java_learning; public class D44_2_ObjectCodeBlock { { System.out.println("實例代碼塊1"); } { System.out.println("實例代碼塊1"); } public static void main(String[] args) { System.out.println("shaof"); new D44_2_ObjectCodeBlock(); } }
三、總結
1.public表示公開的,在任何位置都是可以訪問的
static表示靜態的,使用“類名."的方式進行訪問,不需要創建對象,就可以調用這裡的main方法。
2.方法什麼時候定義為靜態的方法(靜態方法又稱為靜態上下文)
方法描述的是動作,當所有的對象執行這個動作的時候,最終產生的影響是一樣的,那麼這個動作已經不再屬於某一個對象動作了,可以將這個動作提升為類級別的動作,模板級別的動作。
3.大多數方法都定義為實例方法,一般一個行為或者一個動作在發生的時候,都需要對象的參與,但是也是有例外的,例如:大多數”工具類“的方法都是靜態方法,因為工具類就是方便編程,為了方便方法的調用,自然不需要new對象是最好的。例如:Math.PI
四、繼承
1.繼承是面向對象的三大特征之一。(三大特征:封裝、繼承、多態)
2.繼承“基本”作用:代碼復用,但是繼承最重要的作用是:有了繼承才會有以後的“方法覆蓋”和“多態機制”
3.繼承語法格式:
[修飾符列表] class 類名 extends 父類名{ 類體 = 屬性 + 方法 }
4.java語言中只支持單繼承,一個類不能同時繼承很多的類,只能繼承一個類,在C++中支持多繼承
5.關於繼承的一些術語:
B類繼承A類,其中:
A類稱為:父類,基類,超類、superclass
B類稱為:子類,派生類,subclass
6.在java語言中子類繼承父類都繼承哪些數據呢?
(1)私有的不能繼承;(2)構造方法不能繼承;(3)其他數據都可以繼承
7.雖然java語言之中只支持單繼承,但是一個類也可以間接繼承其他類,例如:
C extends B{
}
B extends A{
}
A extends T{
}
C直接繼承B類,但是C類間接繼承A、T類
五、源碼:
D44_1_StaticCodeBlock.java
D44_2_ObjectCodeBlock.java
地址:
https://github.com/ruigege66/Java/blob/master/D44_1_StaticCodeBlock.java
https://github.com/ruigege66/Java/blob/master/D44_2_ObjectCodeBlock.java
2.CSDN:https://blog.csdn.net/weixin_44630050(心悅君兮君不知-睿)
3.博客園:https://www.cnblogs.com/ruigege0000/
4.歡迎關註微信公眾號:傅里葉變換,個人公眾號,僅用於學習交流,後臺回覆”禮包“,獲取大數據學習資料