我遇到了一個代碼,其中java中的this()方法接受三個參數兩個是整數,第三個參數是布爾值。 究竟是什麼意思?這個()方法有其他變體嗎? 赫拉是實際的代碼。這是什麼()?它可以有多個參數?
public SegmentConstructor(int seqNum_, int length_) {
this(seqNum_, length_, false);
}
謝謝。
我遇到了一個代碼,其中java中的this()方法接受三個參數兩個是整數,第三個參數是布爾值。 究竟是什麼意思?這個()方法有其他變體嗎? 赫拉是實際的代碼。這是什麼()?它可以有多個參數?
public SegmentConstructor(int seqNum_, int length_) {
this(seqNum_, length_, false);
}
謝謝。
這意味着有在具有該簽名當前類的另一個構造函數。
public SegmentConstructor(int seqNum_, int length_) {
this(seqNum_, length_, false); // calls the constructor below.
}
public SegmentConstructor(int seqNum_, int length_, boolean required_) {
seqNum = seqNum_;
length = length_;
required = required_;
}
的this
方法只是一個方法來調用類的構造函數之一從另一個構造函數中,以幫助避免代碼重複。它只能在構造函數的第一行調用 - 絕不能在其他方法中調用。
這是一個構造函數調用。如果你的類有不同數量的參數,實現不同的構造函數,你可以鏈接你的構造是這樣的:
class A {
public A(boolean arg) {
...
}
public A() {
this(false); // invokes the constructor with the boolean argument
}
}
有時是有意義的創建一個私有的構造函數採取不同的參數,並提供與其他公共和/或受保護的構造函數/更少的參數並將該對象構造委託給該私有構造函數。
重要的是要知道,在調用此(...)之前,不能放置其他代碼。然而,在調用這個(...)後,你可以在任何其他構造函數中做所有事情。
編輯:由於此(...)調用構造函數,因此只能從其他構造函數中調用(屬於同一個類)。
如前所述,這調用了另一個構造函數,主要作爲一種方便的方法。
簡單的例子:
class A {
private int value;
public A(int val) {
value = val;
}
public A() {
this(0); //0 as default
}
}
通常你使用這個),電話(時最具體的構造函數(即一個最參數)不僅是分配,但包含您不想讓更多的邏輯重複/複製等。
只是因爲它適合在這裏:super()
也可以有參數,也就是說,它調用超類的構造函數與來自子類的構造函數的參數。
+1:關於應該如何使用以及'超級'關鍵字的好評。 – StriplingWarrior 2011-03-03 19:15:14
class MyClass { private int var1; private int var2; 私有布爾標誌;
public MyClass(int var1_,int var2_) this(var1_,var2_,false); }
公共MyClass的(INT var1_,INT var2_,布爾flag_) { VAR1 = var1_; var2 = var2_; flag = flag_; }
public String toString() return(new Boolean(flag).toString()); }
public static void main(String [] args) MyClass my = new MyClass(5,6); System.out.println(my); }
}
所以它的工作原理。
如果您將代碼縮進四個空格,它將被格式化爲StackOverflow的代碼。 – StriplingWarrior 2011-03-03 19:12:59
this()不是一種方法,而是一個保留關鍵字,指向同一類的重載構造函數。 您傳遞的參數數量應指向該類中定義的現有對應構造函數。
super()也具有語義,但構造函數是在其父層次結構中定義的。
哦!感謝您的快速回復......我現在明白了......所以這(int,int,bool)調用其他類似參數的構造函數......非常感謝您。 – KoneruDattu 2011-03-03 18:52:05