このコードブロックにぶつかりましたが、この1行があり、意味やそれが何をしているのか理解するのをやめません。
_public Digraph(In in) {
this(in.readInt());
int E = in.readInt();
for (int i = 0; i < E; i++) {
int v = in.readInt();
int w = in.readInt();
addEdge(v, w);
}
}
_
this.method()
または_this.variable
_が何であるか理解していますが、this()
とは何ですか?
これはコンストラクタのオーバーロードです。
_public class Diagraph {
public Diagraph(int n) {
// Constructor code
}
public Digraph(In in) {
this(in.readInt()); // Calls the constructor above.
int E = in.readInt();
for (int i = 0; i < E; i++) {
int v = in.readInt();
int w = in.readInt();
addEdge(v, w);
}
}
}
_
このコードは、戻り値型がないため、メソッドではなくコンストラクターであることがわかります。これは、拡張クラスを初期化するために、コンストラクターの最初の行でsuper()
を呼び出すことによく似ています。コンストラクタの最初の行でthis()
(またはthis()
のその他のオーバーロード)を呼び出して、コンストラクタコードの重複を避ける必要があります。
この投稿もご覧ください: Constructor overloading in Java-ベストプラクティス
This()をそのような関数として使用すると、基本的にクラスのコンストラクターが呼び出されます。これにより、1つのコンストラクターですべての汎用初期化を行い、他のコンストラクターで特殊化を行うことができます。したがって、たとえばこのコードでは、this(in.readInt())
の呼び出しは、1つのint引数を持つDigraphコンストラクターを呼び出しています。
このコードスニペットはコンストラクタです。
this
へのこの呼び出しは、同じクラスの別のコンストラクターを呼び出します
_public App(int input) {
}
public App(String input) {
this(Integer.parseInt(input));
}
_
上記の例では、int
を受け取るコンストラクタとString
を受け取るコンストラクタがあります。 String
を受け取るコンストラクターは、String
をint
に変換し、int
コンストラクターに委任します。
別のコンストラクターまたはスーパークラスコンストラクター(super()
)の呼び出しは、コンストラクターの最初の行である必要があることに注意してください。
コンストラクタのオーバーロードの詳細については、 this をご覧ください。
ほぼ同じです
public class Test {
public Test(int i) { /*construct*/ }
public Test(int i, String s){ this(i); /*construct*/ }
}
Intパラメーターを持つDigraphクラスの他のコンストラクター。
Digraph(int param) { /* */ }
this
を呼び出すと、基本的にクラスConstructorが呼び出されます。たとえば、add(JComponent)
と一緒に何かを拡張する場合は、次のようにします。this.add(JComponent).
this();
は、クラス内の別のコンストラクターを呼び出すために使用されるコンストラクターです。たとえば:
_class A{
public A(int,int)
{ this(1.3,2.7);-->this will call default constructor
//code
}
public A()
{
//code
}
public A(float,float)
{ this();-->this will call default type constructor
//code
}
}
_
注:デッドロック状態につながるため、デフォルトコンストラクターでthis()
コンストラクターを使用しませんでした。
これがあなたを助けることを願っています:)
コンストラクターのオーバーロード:
例:
public class Test{
Test(){
this(10); // calling constructor with one parameter
System.out.println("This is Default Constructor");
}
Test(int number1){
this(10,20); // calling constructor with two parameter
System.out.println("This is Parametrized Constructor with one argument "+number1);
}
Test(int number1,int number2){
System.out.println("This is Parametrized Constructor with two argument"+number1+" , "+number2);
}
public static void main(String args[]){
Test t = new Test();
// first default constructor,then constructor with 1 parameter , then constructor with 2 parameters will be called
}
}