Java中有很多的權限修飾符和修飾符,往往我們在編程的時候,不能正確的使用這些修飾符,甚至有的人根本分不清權限修飾符和修飾符,以下是對修飾符和權限修飾符的一些總結!
首先,爲什麼要有權限修飾符?
答:因爲在我們編寫一個類,並且供人使用的時候,我們只需要滿足一些必要的功能就可以了,而沒有必要把類中的所有方法,成員都給他,這能保證一定的安全性,也體現了Java的封裝性。
權限修飾符:
default:
類,數據成員,構造方法,方法成員,都能夠使用默認權限,即不寫任何關鍵字。
默認權限即同包權限,同包權限的元素只能在定義它們的類中,以及同包的類中被調用。
(總結:只要是同一個包中,都可以被調用,範圍是本包)
public:
public可以修飾類,數據成員,構造方法,方法成員。被public修飾的成員,可以在任何一個類中被調用,不管同包或不同包,是權限最大的一個修飾符。
(總結:那都能用,範圍是本程序)
private:
private可以修飾數據成員,構造方法,方法成員,不能修飾類(此處指外部類,不考慮內部類)。被private修飾的成員,只能在定義它們的類中使用,在其他類中不能調用。
(總結:在哪個類定義,就在哪個類使用,範圍是本類)
protected:
protected可以修飾數據成員,構造方法,方法成員,不能修飾類(此處指外部類,不考慮內部類)。被protected修飾的成員,能在定義它們的類中,同包的類中被調用。如果有不同包的類想調用它們,那麼這個類必須是定義它們的類的子類。
(總結:範圍比default大一點,能在不同的包中進行訪問,只是另一個包中的類需要時該類的子類)
修飾符:
final:
final的意思是不可變,他可以修飾類、字段、方法。修飾類後類不能被擴展(extends),也就是不能被繼承。修飾字段後字段的值不能被改變,因此如果有final修飾字段,應該對字段進行手動初始化。修飾方法後該方法不能被改變,也就是重寫。
static:
static用來修飾內部類,方法,字段。修飾內部類說明該內部類屬於外部類而不屬於外部類的某個實例。修飾字段說明該字段屬於類而不屬於類實例。修飾方法說明該方法屬於類而不屬於類實例。
abstract:
abstract是抽象的意思,用來修飾類和方法,修飾類後,該類爲抽象類,不能被實例化,必需進行擴展。修飾方法後,該方法爲抽象方法必須被子類重寫(override)。
transient:
告訴編譯器,在類對象序列化的時候,此變量不需要持久保存。
volatile:
指出可能有多個線程修改此變量,要求編譯器優化以保證對此變量的修改能夠被正確的處理。