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

說明

這裏將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來修飾接口中的方法了。

相關文章
相關標籤/搜索