Java 修飾符主要用于定義類、方法或變量,通常放在語句的最前端,可分為訪問修飾符和非訪問修飾符兩類。
一、訪問修飾符
- public:對所有類可見,可用于類、接口、變量和方法。被聲明為 public 的類、方法、構造方法和接口能夠被任何其他類訪問。
- protected:對同一包內的類和所有子類可見,可用于變量和方法,但不能修飾外部類。當子類與基類不在同一包中時,子類實例可以訪問其從基類繼承而來的 protected 方法,而不能訪問基類實例的 protected 方法。
- default(默認):在同一包內可見,不使用任何修飾符,可用于類、接口、變量和方法。
- private:在同一類內可見,只能用于變量和方法,不能修飾外部類。用 private 修飾的類成員,只能被該類自身的方法訪問和修改,而不能被任何其他類訪問和引用。
二、非訪問修飾符
- static:用來修飾類方法和類變量。靜態變量無論一個類實例化多少對象,都只有一份拷貝;靜態方法獨立于對象,不能使用類的非靜態變量。
- final:用來修飾類、方法和變量。final 修飾的類不能被繼承,修飾的方法不能被繼承類重新定義,修飾的變量為常量,不可修改。
- abstract:用來創建抽象類和抽象方法。抽象類不能用來實例化對象,抽象方法沒有具體實現,必須在子類中重寫。一個類不能同時被 abstract 和 final 修飾。
- synchronized:用于多線程,聲明的方法同一時間只能被一個線程訪問,可應用于四個訪問修飾符。
- volatile:用于修飾成員變量,保證其在多線程環境下的可見性,即每次被線程訪問時,都強制從共享內存中重新讀取該成員變量的值,當成員變量發生變化時,會強制線程將變化值回寫到共享內存。
- transient:修飾變量時,表示該變量在對象序列化時會被跳過。