03 Java 修飾符

Java 修飾符主要分爲兩類:this

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

訪問修飾符

  • public,對全部類可見
  • protected,對同一包內的類和子類可見
  • default,同一個包內的類可見
  • private,對當前類可見
修飾符 當前類 同一包內 子孫類 其它包
public Y Y Y Y
protected Y Y Y N
default Y Y N N
private Y N N N

非訪問修飾符

static

  • static 是一個修飾符,被 static 修飾的成員變量和成員方法,不依賴類的特定實例,被類的全部實例共享,所以靜態類方法中不能夠定義 this,super 等關鍵字。
  • 靜態成員變量和方法,能夠使用類直接調用,以下能夠直接使用 Dog 訪問 name,age,printInfo()。
  • 靜態方法只能訪問靜態成員,非靜態方法既能夠訪問靜態也能夠訪問非靜態成員,如在 printInfo() 方法使用 static 修飾,其中涉及的 name 和 age 也必須使用 static 修飾。
public class Dog {
    
    static String name;
    static int age;
    
    public static void printInfo() {
        System.out.println("name:" + name + ", age:" + age);
    }
    
    public static void main(String[] args) {
        
        Dog.name = "roy";
        Dog.age = 3;
        Dog.printInfo();
        
        Dog dog = new Dog();
        dog.printInfo();
    }
}
name:roy, age:3
name:roy, age:3

final

  • final 能夠修飾類,方法,變量(成員變量和局部變量)
  • 當 final 修飾一個類,表示這個類不能被繼承
  • 當 final 修飾一個方法,明確禁止該方法在子類中被覆蓋
  • 當 final 修飾一個變量,如是基本類型,表示數值一旦肯定,不能修改,如是引用類型,則初始化以後不能指向另外一個對象

abstract

  • 抽象類不能實例化對象,聲明抽象類的惟一目的是未來對該類進行擴充
  • 一個類不能同時被 abstract 和 final 修飾,若是一個類包含抽象方法,則類必定要聲明爲抽象類,抽象類不必定有抽象方法
  • 抽象方法是一種沒有任何實現的方法,該方法具體由子類提供
  • 抽象方法不能被聲明爲 final 和 static
  • 任何集成抽象類的子類必須實現弗雷的全部抽象方法,除非子類也是抽象類
public abstract class SuperClass {
    abstract void m();
}

class SubClass extends SubClass {
    void m() {
        ………………
    }
}

synchronized

synchronized 表示同一時間只能被一個線程訪問線程

public synchronized void showDetails() {

}

volatile

volatile 修飾的成員變量在每次被線程訪問時,都強制從共享內存中從新讀取該成員變量的值,並且,當成員變量發生改變時,會強制線程將變化的值回寫到共享內存,這樣在任什麼時候刻,兩個不一樣的線程總會看到某個成員變量的同一個值。
```
public class Run {
private volatile boolean active;
}code

相關文章
相關標籤/搜索