面向物件第四天---三大特性之多型
一、static關鍵字
1、static可以修飾屬性、方法、類(只能修飾內部類)
(1)修飾靜態屬性、靜態初始化、靜態方法、單子模式。修飾的屬性會被放到方法區,只會被載入一次。
(2)static修飾的屬性或者方法被所有的例項共享,如訪問許可權控制允許。可以不必建立該類的例項物件,可以通過類名.屬性名或者方法名呼叫。
(3)static修飾的成員叫做類成員或者靜態成員。
(4)當一個類物件作為一個類中的成員變數的時候,才可以用static去修飾
(5)static修飾的方法在方法體中不能使用this和super關鍵字。
(6)靜態方法要訪問非靜態成員時,必須先將其例項化。
2、靜態方法:靜態成員變數的設計思想
(1)靜態成員變數:不因為物件的不同而改變屬性的值。
(2)靜態方法:方法和呼叫者無關,靜態方法不參與繼承(實質上是繼承後隱藏了),所以static修飾的方法沒有覆寫。
3、被所有類物件共享那個的屬性(方法)與呼叫者無關的時候,需要用static關鍵字去修飾成員變數或者方法。
二、靜態初始化
1、在一個類中可以使用不包含在任何方法體中的靜態程式碼塊(static block),當類被載入時,靜態程式碼塊被執行,且只會被執行一次,靜態程式碼塊通常是用來給屬性初始化的。
static{
java 程式碼···
}
這是給程式設計師提供的一種時機,我們要在類載入時做某些事情的時候,我們用靜態程式碼塊
如:連線池,xml解析···
2、是在構造方法執行之前呼叫的,如果你想在構造方法執行前需要做某件事情,可以使用構造程式碼塊
{
}
三、單子模式(單例模式)
1、屬於Java中的設計模式:
(1)在整個軟體系統中,對某個類只能存在一個例項物件,該類只提供一個取得物件例項的方法,但是在本類中依然可以建立這個物件。我們可以用private對構造方法進行私有化。
(2)構造方法私有化之後不能在外部建立這個類的物件。
2、如資料庫連線池。
四、理解main方法
修飾符:public/static其中有一個String型別的陣列作為引數
五、final關鍵字
1、fianl關鍵字可以修飾類、屬性、方法。
(1)修飾屬性:final修飾的屬性必須視覺化賦值;修飾的屬性是一個常量(不可變的值),可以被繼承;修飾屬性的只能被賦值一次;不能通過建立類物件後使用引用名.屬性名的方式賦值、不能通過set和get方法賦值,只能夠通過構造方法賦值,宣告變數的同時在構造方法中賦值。
(2)修飾類:final修飾的類不能被繼承。final修飾類提高了安全性,還提高了程式的可讀性。
(3)修飾方法:final修飾方法可以呼叫靜態方法;final修飾的方法參與繼承,可以被過載,但不能被子類複寫(提高了安全性)。
2、因為final修飾的屬性是一個只會載入一次的常量,所以我們經常會和static一起使用(相當於一個全域性常量)。
六、抽象類
1、隨著繼承層次中子類的定義,子類變得越來越具體,父類更簡單、更通用。如果一個父類非常抽象,抽象到沒有例項,我們就叫這個類為抽象類。即用abstract修飾的類我們叫它抽象類(只做繼承,沒有例項)。
2、抽象類是用來模型化那些父類無法確定的全部實現,而是由其子類提供具體實現物件的類。
3、用abstract修飾的方法我們稱為抽象方法,抽象方法只能宣告,沒有實現,並且是以分號結尾的(可以有引數,無方法體{})。
public abstract void testAbstract(String);
4、有抽象方法的類必須是抽象類,抽象類中可以沒有抽象方法。
5、抽象類的子類必須用複寫(@Override)實現父類中的所有抽象方法,必須提供方法體。
6、不能用abstract修飾私有方法、靜態方法、構造方法。
7、抽象類中可以有構造方法
8、static不能修飾抽象方法