這裏將java中包含的幾乎所有修飾符的做用進行彙總,若是有錯誤,請批評指正,謝謝。java
Java中提供了不少修飾符,總的來講分爲兩大類: 訪問權限修飾符和非訪問權限修飾符。多線程
在Java裏面一共包含4種訪問權限修飾符,分別是: 一、private:私有的; 二、默認; 三、protected:受保護的; 四、public:公共的。線程
其中,private:只容許在本類範圍中進行訪問,離開了當前類就不容許訪問;對象
默認: 容許在當前類,同包子類/非子類均可調用,跨包子類/非子類都不容許;blog
protected:容許在當前類,同包中的子類/非子類均可以以及跨包子類調用。跨包的非子類不容許調用。繼承
public:容許在任意位置訪問。接口
按照前面的順序,自上而下,訪問範圍愈來愈大;自下而上,限制能力愈來愈強:生命週期
(同包包括同包子類與非子類;子類包括同包子類和跨包子類)內存
這裏推薦你們一句口訣:pmpp,本同子其。同步
一、static 修飾符,用來建立類方法和類變量。
二、final 修飾符,用來修飾類、方法和變量,final 修飾的類不可以被繼承,修飾的方法不能被繼承類從新定義,修飾的變量爲常量,是不可修改的。
三、abstract 修飾符,用來建立抽象類和抽象方法。
四、synchronized 用於多線程的同步。
五、volatile 修飾的成員變量在每次被線程訪問時,都強制從共享內存中從新讀取該成員變量的值。並且,當成員變量發生變化時,會強制線程將變化值回寫到共享內存。這樣在任什麼時候刻,兩個不一樣的線程老是看到某個成員變量的同一個值。
六、transient:序列化的對象包含被 transient 修飾的實例變量時,java 虛擬機(JVM)跳過該特定的變量。
局部變量只能由final 來修飾。
其實局部變量不能賦予權限修飾符的? 爲何這麼說呢,那是由於局部變量的生命週期是一個方法的調用期,所以不必爲其設置權限訪問字段。由於你既然能訪問到這個方法,就沒有必要再爲其方法內的變量賦予訪問權限了,這徹底就是畫蛇添足。再者該變量在方法調用期間已經被加載進了虛擬機棧,說白了就是它確定能被當前線程訪問到,因此你不必設置它。
還有爲何局部變量不能用static修飾呢?哈哈,你確定也想到了,由於靜態變量是在方法以前先加載,因此若是在方法內設置了靜態變量,可想而知,連方法都沒加載,方法內的靜態變量你能加載成功麼?
對於接口而言,其修飾符只能用public、default和abstract, 不能用final、static修飾。接口默認修飾爲abstract。
只能使用public和abstract,默認也是public abstract。 須要說明的是:自Java1.8之後,接口容許定義靜態方法,也就是說你能夠用static來修飾接口中的方法了。