java 學習筆記4-static、final

修飾符static: 把對象相關的變成類相關的,它可以修飾屬性、方法、代碼塊和內部類

static修飾屬性(類變量):

那麼這個屬性就可以用" 類名.屬性名 "來訪問,也就是使這個屬性成爲本類的類變量,爲本類對象所共享。

類加載的過程,類本身也是保存在文件中(字節碼文件保存着類的信息)的,java會通過I/O流把類的文件讀入JVM(java虛擬機),這個過程稱爲類的加載。JVM會通過類路徑(CLASSPATH)來找字節碼文件。需要的時候纔會進行類加載,生成對象時是先加載後構造

類變量,會在加載時自動初始化,初始化規則和實例變量相同。

注意:

類中的實例變量是在創建對象時被初始化的

static修飾的屬性,是在類加載時被創建並進行初始化,類加載的過程只進行一次,也就是類變量只會被創建一次。

static修飾方法(靜態方法):

會使這個方法成爲整個類所公有的方法,可以用" 類名.方法名 "訪問。

static修飾的方法,不能直接訪問本類中的非靜態成員,但本類的非靜態方法可以訪問本類的靜態成員。

在靜態方法中不能出現this關鍵字。

父類中是靜態方法,子類中不能覆蓋爲非靜態方法,在符合覆蓋規則的前提下,在父子類中,父類中的靜態方法可以被子類中的靜態方法覆蓋,但是沒有多態。(在使用對象調用靜態方法時其實是調用編譯時類型的靜態方法)

java中的main方法必須寫成static的原因:在類加載時無法創建對象,而靜態方法可以不通過對象調用,所以在類加載時就可以通過main方法入口來運行程序。

static修飾初始代碼塊:

這時這個初始代碼塊就叫做靜態初始代碼塊,這個代碼塊只在類加載時被執行一次。

可以用靜態初始代碼塊初始化一個類。

動態初始代碼塊,寫在類體中的“{}”,這個代碼塊是在生成對象時運行,這種代碼塊叫動態初始代碼塊。

單例設計模式:

一個類只允許有一個對象,保證所有引用的對象都是同一個對象。

因爲只允許存在一個對象,則不允許在外面直接new出新的對象,所以應該把構造器設爲private,。

在類內定義一個公開的靜態方法,讓使用者進行調用,通過該方法去獲得一個實例。

例:

public calss Singleton{

private static Singleton s;

private Singleton(){}

public static Singleton newInstance(){

if ( s == null)

s = new Singleton();

return s;

}

}

修飾符final:不允許改變,可以修飾變量、方法、類

final修飾變量:

被fianl修飾的變量就會變成常量,一旦賦值不能改變

常量可以在初始化時直接賦值,也可以在構造方法裏賦值,只能在這兩種方法裏二選一,不能不爲常量賦值

常量不會有默認初始值

鎖定棧,使棧中的數據不可以改變

靜態常量只能在初始化時直接賦值

final修飾方法:

被final修飾的方法將不能被其子類覆蓋,保持方法的穩定不能被覆蓋

final修飾類:

被final修飾的類將不能被繼承

final類中的方法也都是final的

注意:

final不能用來修飾構造方法

訪問權限控制:

private:

本類內部可以訪問

不能繼承到子類

default:

本類內部可以訪問,同包其他類也可以訪問。

同包可繼承

protected:

本類內部可以訪問,不同包的子類也可以訪問,同包其他類也可以訪問。

能繼承到子類

public:

任何地方都可以訪問  

能繼承到子類


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