1. 程式人生 > >Java中的修飾符彙總(比較全)

Java中的修飾符彙總(比較全)

開發十年,就只剩下這套架構體系了! >>>   

說明

這裡將java中包含的幾乎全部修飾符的作用進行彙總,如果有錯誤,請批評指正,謝謝。

修飾符分類

Java中提供了很多修飾符,總的來說分為兩大類: 訪問許可權修飾符和非訪問許可權修飾符。

訪問許可權修飾符

在Java裡面一共包含4種訪問許可權修飾符,分別是: 1、private:私有的; 2、預設; 3、protected:受保護的; 4、public:公共的。

其中,private:只允許在本類範圍中進行訪問,離開了當前類就不允許訪問;

預設: 允許在當前類,同包子類/非子類都可呼叫,跨包子類/非子類都不允許;

protected:允許在當前類,同包中的子類/非子類都可以以及跨包子類呼叫。跨包的非子類不允許呼叫。

public:允許在任意位置訪問。

按照前面的順序,自上而下,訪問範圍越來越大;自下而上,限制能力越來越強:

(同包包括同包子類與非子類;子類包括同包子類和跨包子類)

這裡推薦大家一句口訣:pmpp,本同子其。

非訪問許可權修飾符

1、static 修飾符,用來建立類方法和類變數。

2、final 修飾符,用來修飾類、方法和變數,final 修飾的類不能夠被繼承,修飾的方法不能被繼承類重新定義,修飾的變數為常量,是不可修改的。

3、abstract 修飾符,用來建立抽象類和抽象方法。

4、synchronized 用於多執行緒的同步。

5、volatile 修飾的成員變數在每次被執行緒訪問時,都強制從共享記憶體中重新讀取該成員變數的值。而且,當成員變數發生變化時,會強制執行緒將變化值回寫到共享記憶體。這樣在任何時刻,兩個不同的執行緒總是看到某個成員變數的同一個值。

6、transient:序列化的物件包含被 transient 修飾的例項變數時,java 虛擬機器(JVM)跳過該特定的變數。

區域性變數修飾符

區域性變數只能由final 來修飾。

其實區域性變數不能賦予許可權修飾符的? 為什麼這麼說呢,那是因為區域性變數的生命週期是一個方法的呼叫期,因此沒必要為其設定許可權訪問欄位。因為你既然能訪問到這個方法,就沒有必要再為其方法內的變數賦予訪問許可權了,這完全就是多此一舉。再者該變數在方法呼叫期間已經被載入進了虛擬機器棧,說白了就是它肯定能被當前執行緒訪問到,所以你沒必要設定它。

還有為什麼區域性變數不能用static修飾呢?哈哈,你肯定也想到了,因為靜態變數是在方法之前先載入,所以如果在方法內設定了靜態變數,可想而知,連方法都沒載入,方法內的靜態變數你能載入成功麼?

介面

對於介面而言,其修飾符只能用public、default和abstract, 不能用final、static修飾。介面預設修飾為abstract。

介面中方法修飾符

只能使用public和abstract,預設也是public abstract。 需要說明的是:自Java1.8以後,介面允許定義靜態方法,也就是說你可以用static來修飾介