2012-02-01 54 views
4

Java有沒有this()this()和這個

如果是這樣,thisthis()之間的區別是什麼?

+0

你問之間'this'和'這個()'爲什麼你有選擇 – 2012-02-01 07:21:25

回答

12

this是對當前實例的引用。 this()是調用默認的構造函數。 super() is explicit調用超類的默認構造函數。

+0

所以'super'是對超類的引用? – 2012-02-01 07:12:50

+0

@JJ劉燁,沒錯。 (:所以你可以用'super.aSuperMethod(var1,var2)'明確地調用protected/public超級方法' – Nishant 2012-02-01 07:14:47

7

this是對當前對象的引用。 this()是對默認構造函數的調用;它只在另一個構造函數中是合法的,並且只是作爲構造函數中的第一條語句。您也可以調用super()來調用超類的默認構造函數(同樣,僅作爲構造函數的第一條語句)。事實上,如果代碼中不存在this()super()(帶有或不帶參數),那麼這實際上是由編譯器自動插入的。例如:

public class A { 
    A() { 
     super(); // call to default superclass constructor. 
    } 

    A(int arg) { 
     this(); // invokes default constructor 
     // do something special with arg 
    } 

    A(int arg, int arg2) { 
     this(arg); // invokes above constructor 
     // do something with arg2 
    } 
} 
+0

感謝,當你做'超()',做差價你總是調用默認的無參數超類的構造函數?我的意思是,當你說默認構造函數時,你是否總是指沒有參數的那個? – 2012-02-01 07:16:15

+0

@JJLiu - 如果超類定義了一個帶有args的構造函數,則可以調用'super(args)'。 – 2012-02-01 07:38:16

1

是的,Java有this()this()調用當前類的構造函數的無參數重載。 this是對類的當前實例(對象)的引用。

1

this是用於保存當前對象的引用ID的關鍵字java
雖然,this()是對java program中默認構造函數的調用。

this()的代碼段:

class ThisTest{ 
    ThisTest(){ 
     System.out.println("this is the default constructor of your class"); 
    } 
    ThisTest(int val){ 
     this(); 
     System.out.println("this is the parameterized constructor of your class and the passed value is "+val); 
    } 
    public static void main(String...args){ 
     ThisTest tt=new ThisTest(10); 
    } 
} 

在上面的代碼中你會使用參數的構造函數,但this()創建類的對象必須是你的任何構造函數首先調用任何其它構造。
您還可以更改上面的代碼:

ThisTest(){ 
    this(10); 
    //above code 
} 
ThisTest(int val){ 
    //above code 
} 
public static void main(string...args){ 
    ThisTest tt=new ThisTest(); 
} 
相關問題