java中this、super、this()、super()的用法和區別
阿新 • • 發佈:2019-01-09
this關鍵字:一.this是什麼?this是一個引用型別,在堆中的每一個java物件上都有this,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; } }
- 靜態方法的執行根本不需要java物件的存在。直接使用 類名. 的方式訪問。而this代表的是當前物件。所以靜態方法中根本沒有this
- 根據構造方法的執行順序,靜態的方法是先於物件存在的,也就是說在靜態方法載入的時候有,物件還沒有建立!!!
- super(...);的呼叫只能放在構造方法的第一行.
- super(....)和this(....)不能共存。
- super(...);呼叫了父類中的構造方法,虛擬機器會建立父類物件,但不是new 出來的;是虛擬機器在執行位元組碼時在初始化方法 init(該方法在位元組碼中)中建立的物件!!!
- 在java語言中只要是建立java物件,那麼Object中的無引數構造方法一定會執行。