1. 程式人生 > 實用技巧 >JAVA基礎 面向物件(四) 程式碼塊 static 抽象類 內部類

JAVA基礎 面向物件(四) 程式碼塊 static 抽象類 內部類

一、static 關鍵字引入

static關鍵字宣告的屬性和方法是類自己的,所有類例項化的物件,都共享這些static屬性和方法。

static可用於修飾:屬性、方法、程式碼塊、內部類

1.1 static修飾屬性

static修飾後的屬性稱為靜態屬性,也叫靜態變數,類變數。類的所有物件共享同一靜態變數,當通過某一個物件修改靜態變數時,會導致其他物件呼叫此靜態變數時,是修改過的。可以想象成大學宿舍,每個宿舍裡面的房間都是物件,個人是個人的,宿舍公共區的東西比如澡堂,廚房就是共有的,static變數

1.2 static靜態變數的說明

1、靜態變數隨著類載入而載入,因此靜態變數的載入要早於物件的建立。

2、由於類只會載入一次,因此靜態變數在記憶體中也會只有一份:存在方法區的靜態域中。

說明:類是不會被銷燬的,除非記憶體嚴重不足,因此類變數(靜態變數)會被一直儲存(即資料不會被重置)。

1.3 static靜態變數的呼叫方法

靜態變數由於是類變數,因此可以直接用類來呼叫,不需要用類的物件呼叫了(也可以用物件呼叫)

語法: 類名.靜態變數 = 值; //可以直接通過類給類靜態變數賦值(通過類來呼叫)

類物件名1.靜態變數 = 值; //通過類物件來呼叫(注意需要public許可權)

exp: Math.PI ,System.out(類的屬性也可以是引用資料型別,out屬性就是system類的一個引用資料型別的屬性)

class System{

public static finalPrintStream out; //屬性名為out,屬性值為out.toString()

}

因此可以用out物件呼叫 PrintStream類的println方法,就形成了System.out.println();

1.4 static靜態變數的記憶體解析

1.5 靜態方法

1、特點

(1)靜態方法隨著類的載入而載入,同樣可以直接通過 類.方法名 來呼叫靜態方法

(2)同樣可以通過類的物件來調靜態方法。

(3)靜態方法,只能呼叫靜態方法或屬性(因為他們宣告週期一致,重點是,非靜態方法或屬性都是物件的,根本不知道物件啥時候會銷燬,而且那麼多物件,你呼叫誰的)。非靜態方法,既可以呼叫非靜態屬性或方法,也可以呼叫靜態方法或屬性。(就是說物件可以呼叫類的東西)

注意:靜態方法內,不能使用this關鍵字、super關鍵字(根本沒物件)。直接類名.屬性,或類名.方法

1.6 static屬性和方法的應用場景 (一般情況)

1、static屬性應用場景

(1)如果這個屬性可以被多個物件所共享,就可以宣告成static。比如銀行賬戶類,賬號,密碼,餘額,透支額度,利率。顯然利率可以宣告為static屬性

(2)類中的常量(final修飾的變數),一般也用static修飾,比如Math.PI。 既然是常量,自然這個類的所有物件都是用一個相同的值。那就static成類屬性多好。要不每個物件都來生成一個相同值,麻煩。

2、static方法應用場景

(1)操作靜態屬性的方法,一般就設定成靜態了,就是直接用類呼叫方法來設定靜態屬性,沒必要造個物件去調方法。

(2)工具類中的方法,一般宣告為靜態。因為工具類沒屬性,還要造個物件去調方法,太麻煩了,直接用類調方法更方便。