-4

クラス内のJavaの次のコンストラクターの違いを理解しようとしています

Box
{
    Box(Box ob)
    {
     width = ob.width;
     height = ob.height;
     depth = ob.depth;
    }

    Box(double w, double h, double d)
    {
     width = w;
     height = h;
     depth = d;
    }

    Box()
    {
     width = 0;
     height = 0;
     depth = 0;

    }

    Box(double width, double height, double depth)
    {
     this.width = width;
     this.height = height;
     this.depth = depth;
    }
}

みんなで乾杯

4

3 に答える 3

4

1 つ目は、初期化中にあるオブジェクトの値を別のオブジェクトにコピーするために使用されるコピー コンストラクターです。

Second と Fourth は、クラスのすべてのデータ メンバーを含むパラメーター化されたコンストラクターです。しかし、4番目を使用することをお勧めします。ほとんどのIDE(私が知っているすべて)は、読みやすく、同じコンテキストを持つため、4番目を自動生成します

3 番目はデフォルトのコンストラクターです。デフォルト値の設定に使用します。(パラメータとして)入力を取らないことを確認してください

Box b = new Box();//Default constructor
Box b1 = new Box(1.0,2.0,3.0);//Parameterized constructor completely defining the object
Box b2 = new Box(b1);//Copy constructor will copy the values but both will have a different reference
b2 = b1;//b2 now refers to object referenced by b1. So the earlier reference for b2 will be taken by GC(garbage Collector)
于 2012-04-19T19:59:50.807 に答える
3

最初のものは、コピー コンストラクターと呼ばれることが多く、既存のインスタンスから新しいインスタンスに値をコピーしていることを意味します。2 番目と 4 番目 (同じ) は新しいインスタンスを作成し、明示的なプリミティブ値から各フィールドを初期化します。3 つ目は、明示的に指定する必要がない場合に、フィールドのデフォルト値を使用してインスタンスを作成しようとする試みのようです。

ところで、2 番目と 4 番目の些細な違いは、2 番目ではフィールド名とは異なるパラメーターの名前を使用しているため"this.fieldname"、左側で言う必要がないことです。4番目のものでは、パラメーターはフィールド名と同じ名前を持っているため"this,fieldname"、左側で使用して、パラメーターからフィールドにコピーしていることを示す必要があります。 、またはフィールドからそれ自体へ)。

于 2012-04-19T19:55:56.347 に答える
1

classわかりました、 Box でキーワードを記述しておらず、入力を節約するために幅、高さ、深さの宣言も省略したという仮定から始めています。

Java では、コンストラクターを指定しない場合、パラメーターを取らないデフォルトのコンストラクターがデフォルトで存在します。したがって、以下のようにクラス Box に何も記述しなくても、main でその基本コンストラクターを呼び出すことができます。

class Box{
}

class CallingClass{
    public static void main(String args[]){
        Box box = new Box(); // this would work.
    }
}

他のコンストラクターを 1 つでも指定すると、宣言されていないデフォルトのコンストラクターは、明示的に宣言するまで使用できなくなります。

class Box{
    public Double height;

    public Box(Double height){
        this.height = height;
    }
}

class CallingClass{
    public static void main(String args[]){
        Box box = new Box((double)50); // this would work.
        Box anotherBox = new Box(); // this will give you an error.
    }
}

コンストラクターをすばやくオーバー:

public Box(){...} // default constructor in which you allow caller to not worry about initialization.

public Box(Box boxToCopy){...} // copy constructor for creating a new box from the values of an old one.

public Box(double height, double width, double depth){...} // should create a box with specified dimensions.
于 2012-04-19T20:17:59.407 に答える