Java中一些其他修飾符,如super、static、final

super修飾符

super關鍵字與this類似,this用來表示當前類的實例,super用來表示父類。

super可以用在子類上,使用方式和this一樣,通過點號(.)來在子類中獲取父類的成員變量和方法。super也可以用在子類的類中,Java能自動上層追溯。

super關鍵字的功能:
  • 調用父類中聲明爲private的變量。
  • 可以調用在子類中已被覆蓋了的方法。
  • 作爲方法名錶示父類構造方法。
注意:如果在子類的構造方法中使用super()調用父類的構造方法時,必須把super()放在子類的構造方法的第一行。
class Student extends People{
	public double score;
	public Student(double score){
	    super();//必須放在第一行
	    this.score=score;
	}
	
}

instanceof關鍵字

Java多態性帶來了一個問題,就是如何判斷一個變量所實際引用的對象的類型。C++中使用runtime-type iformation(RTTI),Java使用instanceof關鍵字。

public class Test {

	public void instanceofTest(Object obj){
		if(obj instanceof People){
			System.out.println("參數obj是一個People類型的對象");
		}else if(obj instanceof Teacher){
			System.out.println("參數obj是一個Teacher類型的對象");
		}else if(obj instanceof Student){
			System.out.println("參數obj是一個Student類型的對象");
		}
	}
	public static void main(String[] args) {
		Student student=new Student(100);
		Test test=new Test();
		test.instanceofTest(student);

	}

}
可以看出,如果變量引用的是當前類或當前類的子類,instanceof返回true,否則返回false。


static關鍵字

static修飾的變量

static修飾符能夠與變量、方法一起使用,表示是“靜態”的。

被static關鍵字修飾的變量、方法可以直接通過(類名.屬性)這樣的格式獲取,不用對類進行實例化,並且static修飾的變量一般情況下都是大寫。

staitc 的內存分配

靜態變量屬於類,不屬於任何獨立的對象,所以無需創建類的實例就能訪問到靜態變量。之所以會有這樣的結果,是因爲編譯器只爲整個類創建了一個靜態變量的副本,也就是隻分配一次內存空間,雖然有多個實例,但這些實例共享該內存。實例變量則不同,每創建一個對象,都會分配一次內存空間,不同變量的內存相互獨立,互不影響,改變a對象的實例變量不會影響b對象。

注意:static的變量在類裝載時就會被初始化。也就是說,只要類被裝載,不管你是否使用了這個static變量,他都會被初始化。
static修飾的方法

調用靜態方法也是通過(類名.方法名)這樣即可。不需要實例化任何對象。

因爲靜態方法不能操作對象,所以不能在靜態方法中訪問實例變量,只能訪問自身類的靜態變量。

寫過很多程序的人肯定注意到了,main()也是一個被static修飾的方法,不對任何對象進行操作。實際上,在程序啓動時還沒有任何對象,main()方法時程序的入口,將被執行並創建程序所需的對象。

關於靜態變量和靜態方法的總結:

  • 一個類的靜態方法只能訪問靜態變量;
  • 一個類的靜態方法不能夠直接調用非靜態方法;
  • 如訪問控制權限允許,靜態變量和靜態方法也可以通過對象來訪問,但是不被推薦;
  • 靜態方法中不存在當前對象,因而不能使用 this,當然也不能使用 super;
  • 靜態方法不能被非靜態方法覆蓋;
  • 構造方法不允許聲明爲 static 的;
  • 局部變量不能使用static修飾。

final修飾符

在Java中,聲明類,變量和方法時,可以使用final關鍵字來修飾,final所修飾的數據具有“終態”的特徵,表示“最終的”意思。具體規定如下:

  • final修飾的類不能被繼承,如String類,StringBuffer,Integer...
  • final修飾的方法不能被子類重寫。
  • final修飾的變量即稱爲常量,只能賦值一次,無法二次修改。
  • final修飾的成員變量必須在聲明的同時賦值,如果在聲明的時候賦值,那麼只有一次賦值的機會,而且只能在構造方法中顯式賦值,然後才能使用。

final修飾符一般用於修飾那些通用性的功能、實現方法或取值不能隨意被改變的數據,以避免被誤用,例如數學類常量π=3.1415926、e=2.71828等。


發佈了44 篇原創文章 · 獲贊 88 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章