我试图了解类
中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;
}
}
为每个人欢呼
答案 0 :(得分:4)
首先是复制构造函数,用于在初始化期间将一个对象的值复制到另一个对象。
Second和Fourth是一个参数化构造函数,它包含该类的所有数据成员。但建议使用第四个和大多数IDE(我所知道的)将自动生成第4个,因为它更容易阅读并具有相同的上下文
第三个是默认构造函数。用于设置默认值。看它不接受任何输入(作为参数)
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)
答案 1 :(得分:3)
第一个通常称为复制构造函数,这意味着您要将现有实例中的值复制到新实例中。第2个和第4个(相同)正在创建一个新实例,从显式原始值初始化每个字段。第三个似乎是尝试使用字段的默认值创建实例,当您不想显式提供任何实例时。
顺便说一句,第二和第四之间的微不足道的差异在于,在第二个中,您使用的参数名称与字段名称不同,因此您不必在左侧说"this.fieldname"
。在第4个参数中,参数与字段名称具有相同的名称,因此您必须在左侧使用"this,fieldname"
来表示您正在从参数复制到字段,而不是反之亦然(或者从参数到自身,或从字段到自身)。
答案 2 :(得分:1)
好的,我首先假设您没有使用Box编写class
关键字,并且还省略了宽度,高度和深度声明以保存输入。
在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.