Java修飾符

Java語言提供了很多修飾符,主要分爲以下兩類:

  • 訪問修飾符
  • 非訪問修飾符

修飾符用來定義類、方法或者變量,通常放在語句的最前端。

訪問修飾符

名稱 說明 備註
public 可以被所有類訪問(使用) public類必須定義在和類名同名的文件中
無訪問修飾符(默認) 可以被同一個包中的類訪問(使用) 默認的訪問權限,可以定義在其他文件中

接口

名稱 說明 備註
public 可以被所有類訪問(使用) public接口必須定義在和接口名同名的文件中
無訪問修飾符(默認) 可以被同一個包中的類訪問(使用) 默認的訪問權限,可以定義在其他文件中


注意:

  • 一個.java文件中只能有一個public修飾的類或者接口,如果有其它類或者接口,都是默認的無訪問修飾符。

  • 接口裏的變量都隱式聲明爲 public static final,而接口裏的方法默認情況下訪問權限爲 public abstract

變量

名稱 說明 備註
public 可以被任何類訪問
protected 可以被同一包中的所有類訪問
可以被所有子類訪問
子類沒有在同一包中也可以訪問
無訪問修飾符(默認) 可以被同一包中的所有類訪問 如果子類沒有在同一個包中,也不能訪問
private 只能夠被當前類的方法訪問

方法

名稱 說明 備註
public 可以被任何類訪問
protected 可以被同一包中的所有類訪問
可以被所有子類訪問
子類沒有在同一包中也可以訪問
無訪問修飾符(默認) 可以被同一包中的所有類訪問 如果子類沒有在同一個包中,也不能訪問
private 只能夠被當前類的方法訪問


注意:

  • Java中子類重寫方法的訪問權限不能低於父類中權限

非訪問修飾符

爲了實現一些其他的功能,Java 也提供了許多非訪問修飾符。

static

用來修飾類方法和類變量。

靜態變量
static 關鍵字用來聲明獨立於對象的靜態變量,無論一個類實例化多少對象,它的靜態變量只有一份拷貝。 靜態變量也被稱爲類變量。局部變量不能被聲明爲 static

靜態方法
static 關鍵字用來聲明獨立於對象的靜態方法。靜態方法不能使用類的非靜態變量。靜態方法從參數列表得到數據,然後計算這些數據。

final

用來修飾類、方法和變量。

final 修飾的類不能夠被繼承,修飾的方法不能被重寫,修飾的變量爲常量,不可修改

final 變量能被顯式地初始化並且只能初始化一次。被聲明爲 final 的對象的引用不能指向不同的對象。但是 final 對象裏的數據可以被改變。也就是說 final 對象的引用不能改變,但是裏面的值可以改變

final 修飾符通常和 static 修飾符一起使用來創建類常量。

abstract

用來創建抽象類和抽象方法。

抽象類:
抽象類不能用來實例化對象,聲明抽象類的唯一目的是爲了將來對該類進行擴充。
一個類不能同時被 abstract 和 final 修飾。如果一個類包含抽象方法,那麼該類一定要聲明爲抽象類,否則將出現編譯錯誤。
抽象類可以包含抽象方法和非抽象方法。

抽象方法:
抽象方法是一種沒有任何實現的方法,該方法的的具體實現由子類提供。
抽象方法不能被聲明成 final 和 static。
任何繼承抽象類的子類必須實現父類的所有抽象方法,除非該子類也是抽象類
如果一個類包含若干個抽象方法,那麼該類必須聲明爲抽象類。抽象類可以不包含抽象方法

synchronized

用來修飾方法,變量還有代碼塊。

主要用於線程的編程。

進一步研究可以參考:Java關鍵字synchronized

volatile

用來修飾成員變量。

volatile 修飾的成員變量在每次被線程訪問時,都強制從共享內存中重新讀取該成員變量的值。而且,當成員變量發生變化時,會強制線程將變化值回寫到共享內存。這樣在任何時刻,兩個不同的線程總是看到某個成員變量的同一個值。

進一步研究可以參考:對於volatile型變量的特殊規則(深入理解Java虛擬機學習筆記)

transient

用來修飾成員變量。

告訴編譯器,在類對象序列化時,此變量不需要持久保存。然後序列化的對象包含被transient修飾的實例變量時,Java虛擬機(JVM)跳過該特定的變量。

參考:
1.Java中各種修飾符與訪問修飾符
2.Java 修飾符

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章