this關鍵字:
一.this是什麼?
this是一個引用類型, 在堆中的每一個java對象上都有this,this保存內存地址指向自身。
二.this及this()能用在哪些地方?
- this可以用在成員方法中.
- this()可以用在構造方法中.語法:
- this(實參);
- 通過一個構造方法去調用另一個構造方法。
- 目的:代碼重用。
- this(實參);必須出現在構造方法的第一行。
應用實例:
public class ThisTest01{
public static void main(String[] args){
/*
//創建對象
MyDate t1 = new MyDate(2008,8,8);
System.out.println(t1.year+"年"+t1.month+"月"+t1.day+"日");
//創建對象
MyDate t2 = new MyDate(2012,12,20);
System.out.println(t2.year+"年"+t2.month+"月"+t2.day+"日");
*/
MyDate t3 = new MyDate();
System.out.println(t3.year+"年"+t3.month+"月"+t3.day+"日");
}
}
//日期
class MyDate{
//Field
int year;
int month;
int day;
//Constructor
//需求:在創建日期對象的時候,默認的日期是:1970-1-1
MyDate(){
this(1970,1,1);
/*
this.year = 1970;
this.month = 1;
this.day = 1;
*/
}
MyDate(int _year,int _month,int _day){
year = _year;
month = _month;
day = _day;
}
}
this爲什麼不能用在靜態方法中.
- 靜態方法的執行根本不需要java對象的存在。直接使用 類名. 的方式訪問。而this代表的是當前對象。所以靜態方法中根本沒有this
- 根據構造方法的執行順序,靜態的方法是先於對象存在的,也就是說在靜態方法加載的時候有,對象還沒有創建!!!
三.super()用在構造方法中:
語法:super(實參);
作用:通過子類的構造方法去調用父類的構造方法.
語法規則:一個構造方法第一行如果沒有this(...);也沒有顯示的去調用super(...);
系統會默認調用super();
注意:
- super(...);的調用只能放在構造方法的第一行.
- super(....)和this(....)不能共存。
- super(...);調用了父類中的構造方法,虛擬機會創建父類對象,但不是new 出來的;是虛擬機在執行字節碼時在初始化方法 init(該方法在字節碼中)中創建的對象!!!
- 在java語言中只要是創建java對象,那麼Object中的無參數構造方法一定會執行。
四.super關鍵字做引用,
語法:super.xx 來調用父類的成員方法或成員變量:
注意:super是一個引用但是卻沒辦法輸出,Sun公司也沒有給出相關的聲明,導致此處有些模棱兩可,所以不必糾結其他,記住這個結論就行