1. 程式人生 > >【Java】基礎:常見修飾符(權限修飾符以及abstract、static、final等)與變量的描述

【Java】基礎:常見修飾符(權限修飾符以及abstract、static、final等)與變量的描述

線程 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{}

· abstractstatic、 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等)與變量的描述