【Java】基礎:常見修飾符(權限修飾符以及abstract、static、final等)與變量的描述
阿新 • • 發佈:2018-08-25
線程 cte string 數據 執行 style 權限 實例 類名
- 1. 修飾符
- public、protected、private、default
- abstract、static、final、
- abstract:抽象類、抽象方法
- static:靜態變量、靜態方法、靜態代碼塊
- final修飾類、方法、變量
- transient、violatile、native、synchronized
- 2. 變量
- 實例變量、局部變量、類變量
1. 修飾符
· public、protected、 private、default
修飾類時的訪問權限
當前類 | 同包 | 子孫類 | 其它包 | |
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
private | √ | √ | × | × |
default/缺省 | √ | × | × | × |
能夠修飾的位置
類 | 方法 | 變量 | |
public | √ | √ | √ |
protected | × | √ | √ |
private | × | √ | √ |
default/缺省 | √ | √ | √ |
public class A{} class B{}
· abstract 、static、 final、 transient、violatile、synchronized
總述:可修飾的位置(空白處為無此用法)
類 | 方法 | 變量 | 代碼塊 | |
abstract | √ | √ | ||
static | √ | √ | √ | |
final | √ | √ | √ | |
transient | √ | |||
native | √ | |||
violatile | √ | |||
synchronized | √ | √ | √ |
abstract - 抽象類、抽象方法
/** 1. 被abstract修飾的類即為抽象類; 2. 抽象類的權限修飾符為public,缺省(如下)也為public; 3. 抽象類無法創建對象(即不能new); 4. 其余情況與普通類相同。 */ abstract class animal { int num;//成員變量可使用任何訪問權限修飾詞(public、protected、private) /** 1. 抽象方法必須為public或protected,缺省即為public; 2. 抽象方法沒有方法體,即符號{}; 3. 子類中必須實現抽象方法,否則子類仍為抽象類。 */ abstract void run(); } class lion extends animal{ void run(){} }
static:靜態變量、靜態方法、靜態代碼塊
public class Test { public static int a = 100; //靜態變量 public int b = 100; //實例變量 //靜態方法 public static void method_a() { System.out.println("===static method==="); } //實例方法 public void method_b() { System.out.println("===instance method==="); } public static void method_c() { int c = 0; //局部變量 a = 5; //可訪問[靜態變量] method_a(); //可調用[靜態方法] //b = 5; 不能訪問[實例變量] //method_b(); 不能調用[實例方法] } public static void main(String[] args) { Test t = new Test(); //創建實例化對象 int static_var = Test.a; //[類名.靜態變量名]訪問 int instance_var = t.b; //[對象.變量名]訪問 Test.method_a(); //[類名.靜態方法名]訪問 t.method_b(); //[對象.方法名]訪問 } static { //靜態塊,在類加載時自動執行塊中的內容 int d = 1; int c = 0; //局部變量 a = 5; //可訪問[靜態變量] method_a(); //可調用[靜態方法] //b = 5; 不能訪問[實例變量] //method_b(); 不能調用[實例方法] } }
final
1. final 修飾的類無法被繼承;
2. final 修飾的方法無法在子類中重寫(override)
3. final 修飾變量:基本類型變量,初始化後數值無法更改;引用類型變量,初始化之後不能再指向另一個對象。
4. final static修飾的為常量
transient
public class Test { int a; //持久化 transient int b; //非持久化 }
synchronized為線程內容,在稍後的博文中描述;
violatile、native少有接觸,以後再另作描述。
2. 變量
根據聲明的位置劃分: 成員變量、局部變量、類變量
根據所屬數據類型劃分:基本數據類型,引用數據類型
實例變量(成員變量) | 局部變量 | 類變量(靜態變量) | |
修飾符 | 修飾符不可出現 | 必須有static | |
定義位置 | 類中,方法、構造方法與語句塊之外 | 聲明在方法、構造方法、語句塊 | 類中,方法、構造方法與語句塊之外
變量的值可以在聲明時指定,也可以在構造方法中指定,還可以在靜態語句塊中初始化。 |
訪問 | 對象調用 | 類名.變量名 | |
可見 |
實例變量對於類中的方法/構造方法/語句塊是可見的。一般情況下應該把實例變量設為私有。通過使用訪問修飾符可以使實例變量對子類可見 |
相關方法、構造方法或者語句塊 | 與實例變量具有相似的可見性。
但為了對類的使用者可見,大多數靜態變量聲明為public類型 |
生存時間 | 與對象共存亡 |
方法/構造方法/語句塊被執行時創建;執行完畢後銷毀 |
在程序開始時創建,在程序結束時銷毀。 |
分配位置 | 堆 (heap) | 棧 (stack) | 靜態存儲區(方法區) |
默認值 | 同類變量 | 沒有默認值,必須初始化才能使用 |
數值型變量默認值是0,布爾型默認值是false,引用類型默認值是null。
|
【Java】基礎:常見修飾符(權限修飾符以及abstract、static、final等)與變量的描述