-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

首先是复制构造函数,用于在初始化期间将一个对象的值复制到另一个对象。

Second 和 Fourth 是一个参数化构造函数,其中包含该类的所有数据成员。但建议使用第四个,大多数 IDE(我所知道的)将自动生成第四个,因为它更易于阅读并且具有相同的上下文

第三个是默认构造函数。用于设置默认值。看到它不接受任何输入(作为参数)

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 次之间的细微差别在于,在第 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.
    }
}

如果您甚至提供了一个其他构造函数,那么在您明确声明之前,未声明的默认构造函数将不再可用。

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 回答