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公司也沒有給出相關的聲明,導致此處有些模棱兩可,所以不必糾結其他,記住這個結論就行


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章