首頁 > 運動
一起學JAVA——修飾符
由 程龍快序 發表于 運動2021-06-16
簡介如果一個方法不用訪問物件的非靜態成員,那麼就可以定義為靜態的,這樣使用者就不需要建立物件,直接用類名呼叫
允許使用static修飾abstract方法嗎
java修飾符的作用就是對類或類成員進行修飾或限制。
訪問修飾符
訪問修飾符作用是控制類成員的可見度。
類的訪問控制符有兩種:
public關鍵字修飾:可以被所有的類訪問
預設為default:只能被同一包中的類訪問
static(靜態修飾符)
static關鍵字用來修飾類的成員,被這個關鍵字修飾的成員都和類載入有關。
JVM執行時不會將所有類載入到記憶體,因為無法確定程式中要使用哪些。類在第一次使用時載入,只加載一次。
靜態變數
用static修飾的變數就是靜態變數。
靜態變數在類載入後就初始化。
靜態變數被類的所有例項所共享。
靜態變數可以使用 類名。變數名 形式訪問。
如果在定義一個類的時候,發現一個成員變數需要被所有例項所共享,那麼這個成員變數就需要定義為static的。
靜態方法
用static修飾的方法就是靜態方法。
靜態方法在類載入後就可以使用。
靜態方法可以使用 類名。方法名 形式訪問。
靜態方法不能直接訪問外部非靜態成員。
因為外部非靜態成員必須在類建立物件之後才能使用,而靜態方法可以在沒建立物件時就使用。
如果要在靜態方法內部訪問外部非靜態成員,需要先建立該類物件,透過物件訪問。
靜態方法中不能使用this關鍵字。
因為this是個引用,哪個物件呼叫方法就引用哪個物件。 而靜態方法有可能不是被物件呼叫的,this無從引用。
如果一個方法不用訪問物件的非靜態成員,那麼就可以定義為靜態的,這樣使用者就不需要建立物件,直接用類名呼叫。
靜態方法通常是作為工具方法或者一個可以產生物件的方法被宣告,目的是為了讓呼叫者更方便地使用,不必建立物件。
用例項方法可以訪問static方法,而static方法不能訪問例項方法,因為這時不一定有例項的存在。
靜態程式碼塊
用static修飾的程式碼塊就是靜態程式碼塊。
靜態程式碼塊在類載入後執行。
靜態程式碼塊和靜態方法相同,不能使用外部非靜態成員。
靜態程式碼塊執行和靜態變數的初始化順序由程式碼從上到下順序決定。
final修飾符
final標記的類不能被繼承。
final標記的方法不能被子類重寫。
final標記的變數即為常量,只能賦值一次。
abstract 修飾符
抽象類:
抽象類不能用來例項化物件,宣告抽象類的唯一目的是為了將來對該類進行擴充。
一個類不能同時被 abstract 和 final 修飾。如果一個類包含抽象方法,那麼該類一定要宣告為抽象類,否則將出現編譯錯誤。
抽象類可以包含抽象方法和非抽象方法。
抽象方法
抽象方法是一種沒有任何實現的方法,該方法的的具體實現由子類提供。
抽象方法不能被宣告成 final 和 static。
任何繼承抽象類的子類必須實現父類的所有抽象方法,除非該子類也是抽象類。
如果一個類包含若干個抽象方法,那麼該類必須宣告為抽象類。抽象類可以不包含抽象方法。
抽象方法的宣告以分號結尾,例如:
public abstract sample();
synchronized 修飾符
synchronized 關鍵字宣告的方法同一時間只能被一個執行緒訪問。synchronized 修飾符可以應用於四個訪問修飾符。
transient 修飾符
序列化的物件包含被 transient 修飾的例項變數時,java 虛擬機器(JVM)跳過該特定的變數。
該修飾符包含在定義變數的語句中,用來預處理類和變數的資料型別。
volatile 修飾符
volatile 修飾的成員變數在每次被執行緒訪問時,都強制從共享記憶體中重新讀取該成員變數的值。而且,當成員變數發生變化時,會強制執行緒將變化值回寫到共享記憶體。這樣在任何時刻,兩個不同的執行緒總是看到某個成員變數的同一個值。
一個 volatile 物件引用可能是 null。
精品推薦:
一起學JAVA——面向物件(三)
一起學JAVA——字串類
一起學JAVA——面向物件(二)
程式設計技術筆記——搭建Redis5叢集