1. 程式人生 > >this關鍵字、super關鍵字、static關鍵字、final關鍵字

this關鍵字、super關鍵字、static關鍵字、final關鍵字

this關鍵字 

this表示的是當前物件本身,更準確地說,this代表當前物件的一個引用,可以呼叫該類的屬性,方法,構造器。

當在方法內需要用到呼叫該方法的物件時就可以使用this。

使用this呼叫成員變數

當形參與成員變數重名時,如果在方法內部需要使用成員變數,必須新增this來表明該變數時類成員

public Persion(String name, int age) {
	this.name = name;
	this.age = age;
}

使用this呼叫方法。

呼叫當前物件的其他方法(可以省略)
位置:任意

public void getInfo(){	
	System.out.println("姓名:" + name) ;
	this.speak();
}
public void speak(){
	System.out.println(“年齡:” + this.age);	
}

構造方法中使用this來呼叫其它構造方法。

位置:必須是第一條語句

public Persion(String name, int age) {
	this.name = name;
	this.age = age;
}
public Persion(String name, int age,double salary) {
	this(name,age);
	this.salary = salary;
}

super關鍵字

super代表父類的記憶體空間的標識,這個父類不僅僅指的是子類的直接父類。

使用場景

super可用於訪問父類中定義的屬性
super可用於呼叫父類中定義的成員方法
super可用於在子類構造方法中呼叫父類的構造器,必須在構造器中的第一句,且不能同時出現this呼叫本類中其他的構造方法
當子父類出現同名成員時,可以用super進行區分

this和super的區別

No.

區別點

this

super

1

訪問屬性

訪問本類中的屬性,如果本類沒有此屬性則從父類中繼續查詢

訪問父類中的屬性

2

呼叫方法

訪問本類中的方法

直接訪問父類中的方法

3

呼叫構造器

呼叫本類構造器,必須放在構造器的首行

呼叫父類構造器,必須放在子類構造器的首行

4

特殊

表示當前物件

無此概念


static關鍵字

static修飾成員變數

static修飾的成員變數為靜態成員變數 ,或者叫做: 類屬性,類變數.注意:static不能修飾區域性變數。
它為該類的公用變數,屬於類,對於該類的所有物件來說,static成員變數只有一份,被該類的所有物件共享,如果一個物件修改了類變數都將影響其他物件對這個類變數的呼叫
可以使用”物件.類屬性”來呼叫。不過,一般都是用“類名.類屬性”
static變數存放在靜態域中

static修飾方法

static修飾的方法叫靜態方法

不需要物件,就可以呼叫(類名.方法名)
靜態方法不能以任何方式引用this和super關鍵字,因為this,super都是物件的引用,它在記憶體中是在靜態方法載入後出現的,所以無法訪問
靜態方法中不可以訪問非靜態變數,非靜態方法,只能訪問靜態變數和靜態方法
理解:載入類的時候就載入靜態變數和靜態方法,此時可能還沒有建立物件,所以非靜態變數和非靜態的方法還沒有分配空間,無法訪問
非靜態方法中可以訪問靜態方法或者靜態變數
理解:載入類的時候就已經載入靜態變數和靜態方法,建立物件後,非靜態變數和非靜態的方法才分配空間,此時靜態變數和靜態方法已經存在,可以訪問

過載的方法需要同時為static的或者非static的

static修飾程式碼塊

如果希望載入後,對整個類進行某些初始化操作,可以使用static靜態程式碼塊。
類第一次被載入時先執行static程式碼塊;類多次載入時,static程式碼塊只執行一次;Static經常用來進行static變數的初始化。
是在類初始化時執行,不是在建立物件時執行。
靜態初始化塊中不能訪問非static成員。

static修飾內部類

使用場景:單例模式的實現
public class Singleton {
	private Singleton() {

	}

	private static class SingletonHolder {
		private final static Singleton instance = new Singleton();
	}

	public static Singleton getInstance() {
		return SingletonHolder.instance;
	}
	
	public static void main(String[] args) {
		Singleton s1 = Singleton.getInstance();
		Singleton s2 = Singleton.getInstance();
		System.out.println(s1 == s2);
	}
}

final關鍵字

 1.final修飾變數,成為常量,值不能再變化

    --final修飾基本資料型別,值只能賦值一次,後續不能再賦值
    --final修飾引用資料型別,不能變化的引用變數的值,可以變化的是物件的屬性
 2.final修飾方法,不能被子類重寫
 3.final修飾類,不能再有子類,如String類、StringBuffer、System
 4.final不能修飾構造方法

 5.static final 修飾的變數是全域性靜態常量