java關鍵字與訪問控制修飾符

在關鍵字中,有幾個比較特殊,可以控制訪問權限.

訪問控制修飾符--

Java中,可以使用訪問控制符來保護對類、變量、方法和構造方法的訪問。Java 支持 4 種不同的訪問權限。

  • default (即缺省,什麼也不寫,friendly): 在同一包內可見,不使用任何修飾符。使用對象:類、接口、變量、方法。當修飾方法時,可以不必被子類實現.比較好的一個應用是擴展已有很多個實現的一個接口,可以再新添加的方法前面使用此修飾符,已經實現該接口的多個類就可以不必實現新添加的方法.

  • private : 在同一類內可見。使用對象:變量、方法。 注意:不能修飾類(外部類)與接口

  • public : 對所有類可見。使用對象:類、接口、變量、方法。

  • protected : 對同一包內的類和所有子類可見。使用對象:變量、方法。 注意:不能修飾類(外部類)

訪問權限可以用下面的表格來表示:

訪問控制與繼承:

  • 父類中聲明爲 public 的方法在子類中也必須爲 public。

  • 父類中聲明爲 protected 的方法在子類中要麼聲明爲 protected,要麼聲明爲 public,不能聲明爲 private。

  • 父類中聲明爲 private 的方法,不能夠被繼承。

 

關鍵字--

static修飾符

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

final修飾符

  • final 類不能被繼承,沒有類能夠繼承 final 類的任何特性。
  • final 方法可以被重載,可以被子類繼承,但是不能被子類修改,既不能被子類重寫(覆蓋)。
  • final 變量一旦被賦值後,不能被修改。

abstract修飾符

  • abstaract 類不能被實例化,含有abstract方法的類一定是抽象類,抽象類不一定含有抽象方法,一個類不能同時被 abstract 和 final 修飾,任何繼承抽象類的子類都需要實現父類的所有抽象方法,除非該子類也是抽象類。
  • abstaract 方法沒有任何實現,需要子類實現其方法,抽象方法不能被聲明成 final 和 static。

synchronized修飾符

  • synchronized 關鍵字聲明的方法同一時間只能被一個線程訪問。。

transient 修飾符

  • 序列化的對象包含被 transient 修飾的實例變量時,java 虛擬機(JVM)跳過該特定的變量。
  • 該修飾符包含在定義變量的語句中,用來預處理類和變量的數據類型。

volatile 修飾符

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

要理解這個關鍵字,首先要明確兩個概念:

可見性:一個線程對共享變量的修改,能夠實時的被其他持有這個變量的線程看到

線程共享變量:如果一個變量在多個線程的工作內存中都存在副本,那麼這個變量就是共享變量

在JVM虛擬機中,規定了線程共享變量的訪問規則:

1.所有的共享變量都尋在主內存中

2.每個線程都有獨立的工作內存,共享變量存儲在其中

3.線程對共享內存的操作都是在自己的工作內存之中

4.無法訪問其他線程工作內存中的共享變量

這個關鍵字就能夠實現線程共享變量的可見性與禁止指令重排序.與synchronized關鍵字相比,volatile不具有原子性,即它是非安全的.

native 修飾符

  • 告訴JVM虛擬機,被修飾的這個類方法是在類的外部定義的.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章