类构造函数如何具有相同类的参数?

时间:2012-07-13 07:26:29

标签: java constructor

当我发现其中一个构造函数将“String”对象作为参数时,我正在研究String.java源代码。这看起来很简单,但我无法消化它。 例如:

public class Example {

    private String value;

    public Example() {
        // TODO Auto-generated constructor stub
    }

    public Example(Example e){
        value = e.getValue();
    }

    String getValue() {
        return value;
    }
}

第一次编译类Example时,编译器会遇到第二个带有'Example'类对象作为参数的构造函数。在这一点上,它将如何找到它,因为它仍在编译这个类?

2 个答案:

答案 0 :(得分:12)

编译类时,它需要访问的是类的declaration,而不是完整的实现。


在编译构造函数时使用不同的方法

public Example(Example e) {
    value = e.getValue();
}

所有需要知道的是存在一个名为Example的类,并且它有一个方法getValue。在实际尝试编译代码之前,可以在源文件的单独传递中解析此信息。

(顺便说一下,构造函数与方法的工作方式不同。乍一看,在编译任何方法之前,似乎需要编译构造函数,但这种推理会将编译时问题与运行时混淆的问题。)

答案 1 :(得分:-1)

每当类中有任何Copy Constructor时,总会有一个构造函数。没有它不会给出任何错误,但在运行时它将无法正常工作。首先,需要使用非复制构造函数构造对象,然后将其引用传递给其他构造函数的构造函数。

这就像告诉另一个对象'嘿,我​​已经找到一些工作正常的房产,你也可以使用相同的房产。'

请记住,总是有一个非复制的构造对象,因此其他对象只能复制它的属性。