1. 程式人生 > >java中this、super、this()、super()的用法和區別

java中this、super、this()、super()的用法和區別

this關鍵字:一.this是什麼?this是一個引用型別,在堆中的每一個java物件上都有this,this儲存記憶體地址指向自身。二.this及this()能用在哪些地方?
  1. this可以用在成員方法中.
  2. 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公司也沒有給出相關的宣告,導致此處有些模稜兩可,所以不必糾結其他,記住這個結論就行