关于Copy Constructor的Java问题

时间:2011-06-11 21:28:32

标签: java

我希望你能帮助我理解这一点Copy Constructor我花了2个多小时阅读网站上的阅读资料,我对此一无所知。

我知道复制构造函数用于复制类的对象。但我不明白复制consturctor的代码。

例如:

public class Rectangle 
{
    private double length = 10.0;
    private double width = 10.0;


    public Rectangle(double length, double width){
        this.length = length;
        this.width = width;

    }
   //this is the copy constructor  what exactly the argument here? is it the object ref it self? please explain what happening here. and the use

    public Rectangle(Rectangle ref){
        this.length = ref.length;
        this.width = ref.width;
    }

这是我一直看到的。但我根本不懂代码! ref是否会在主程序中创建?

让我们说这是主程序

public class rectangleTest{ 
public static void main(String[] args){
//is this new_ref object going to be created here?

Rectangle new_ref = new Rectangle(10.0 , 10.0);

除非有人上小班,主要班级向我展示正在发生的事情,否则这件事不会100%清楚

谢谢。

4 个答案:

答案 0 :(得分:3)

ref不是类的名称;它是第二个构造函数的参数的名称。所以main方法实际上看起来像这样:

Rectangle foo = new Rectangle(10.0 , 10.0);

// Create another Rectangle with the same width and height
Rectangle bar = new Rectangle(foo);

请注意,对象没有名称 - 变量可以。这里foo变量的值成为第二个构造函数中ref参数的值,当在上一行中调用该构造函数时。另请注意,foobarref 的值不是对象......它们是对象的引用。

答案 1 :(得分:2)

您可以像这样使用“复制构造函数”

Rectangle a = new Rectangle (3.0, 4.0);
Rectangle b = new Rectangle (a);

NOTA BENE:与C ++中的复制ctor是语言的一部分并且被隐含地调用不同,Java中的以下示例不会调用您的副本ctor,而只是分配引用。

Rectangle a = new Rectangle (3.0, 4.0);
Rectangle b = a;

在您的情况下,我更愿意实施克隆方法。

答案 2 :(得分:0)

名字无关紧要。这个名称只是指一个对象,所以当你把它传递给一个方法时,它只是使用了一个不同的名字。

答案 3 :(得分:0)

它更像是clone(),它会复制您的对象,以便您有两个不同的实例,但它们是相同的。