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 修飾的變數是全域性靜態常量