Java 修飾符
Java語言提供了很多修飾符,主要分爲以下兩類:
- 訪問修飾符
- 非訪問修飾符
訪問控制修飾符
Java中,可以使用訪問控制符來保護對類、變量、方法和構造方法的訪問。Java 支持 4 種不同的訪問權限。
- default (即默認,什麼也不寫): 在同一包內可見,不使用任何修飾符。使用對象:類、接口、變量、方法。
- private : 在同一類內可見。使用對象:變量、方法。 注意:不能修飾類(外部類)
- public : 對所有類可見。使用對象:類、接口、變量、方法
- protected : 對同一包內的類和所有子類可見。使用對象:變量、方法。 注意:不能修飾類(外部類)。
幫助理解:
- public:在當前類 ,同一包內,子孫類(同一包),子孫類(不同包),其他包中都是可以訪問到的
- protected ::在當前類 同一包內 ,子孫類(同一包),子孫類(不同包)可以訪問到的,其他包是不可以的
- default當前類 同一包內 ,子孫類(同一包)可以訪問到的, 子孫類(不同包)和其他包是不可以的
- private當前類可以訪問到,同一包內,子孫類(同一包),子孫類(不同包)和其他包都是不可以訪問到的
1:默認訪問修飾符-不使用任何關鍵字
//變量和方法的聲明可以不使用任何修飾符。
void demo(){
int i=10;
}
2:私有訪問修飾符-private*
私有訪問修飾符是最嚴格的訪問級別,所以被聲明爲 private 的方法、變量和構造方法只能被所屬類訪問,並且類和接口不能聲明爲 private。
聲明爲私有訪問類型的變量只能通過類中公共的 getter 方法被外部類訪問。
public class NameDemo {
private String name;
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
代碼NameDemo這個類中,name是一個私有變量,其他類不可以直接訪問賦值,那麼類中提供了兩個public修飾的方法,可以使外部類訪問到
3:公有訪問修飾符-public
被聲明爲 public 的類、方法、構造方法和接口能夠被任何其他類訪問。
4:受保護的訪問修飾符-protected(修飾符中比較需要注意的)
在這裏推薦一片文章,菜鳥驛站,Java protected 關鍵字詳解
非訪問修飾符
static 修飾符
- 靜態變量
static變量也稱作靜態變量。靜態變量和非靜態變量的區別是:靜態變量被所有的對象所共享,在內存中只有一個副本,它當且僅當在類初次加載時會被初始化。而非靜態變量是對象所擁有的,在創建對象的時候被初始化,存在多個副本,各個對象擁有的副本互不影響。
- 靜態方法
static方法一般稱作靜態方法,由於靜態方法不依賴於任何對象就可以進行訪問,因此對於靜態方法來說,是沒有this的,因爲它不依附於任何對象。並且由於這個特性,在靜態方法中不能訪問類的非靜態成員變量和非靜態成員方法,因爲非靜態成員方法/變量都是必須依賴具體的對象才能夠被調用。但是在非靜態成員方法中是可以訪問靜態成員方法/變量的。
final 修飾符
- final變量:被 final 修飾的實例變量必須顯式指定初始值,被修飾並賦值後不能再重新賦值
//final 修飾符通常和 static 修飾符一起使用來創建類常量。
public static final int a=10;
- final 方法:被final修飾的方法是可以被繼承,但是不能重寫
abstract 修飾符、
-
抽象類:不能用來實例化對象,聲明抽象類的唯一目的是爲了將來對該類進行擴充。
-
特別注意一個類不能同時被 abstract 和 final 修飾
抽象方法
- 沒有任何實現的方法,該方法的的具體實現由繼承類提供。
- 抽象方法不能被聲明成 final 和 static。
- 任何繼承抽象類的子類必須實現父類的所有抽象方法,除非該子類也是抽象類。
- 如果一個類包含多個抽象方法,那麼該類必須聲明爲抽象類。抽象類可以不包含抽象方法。
synchronized 修飾符
- synchronized 關鍵字聲明的方法同一時間只能被一個線程訪問。synchronized 修飾符可以應用於四個訪問修飾符。