为什么要指定一个方法两次 - Java

时间:2016-09-07 04:58:05

标签: java function class definition

我是一名python程序员,但最近开始使用Java。我试图理解一段特定的代码,但遇到了一些困难,我认为这些困难与不太了解Java有关。

对我来说突出的一点是,有时在类定义方法中会调用两次。我想知道为什么会这样?例如:

以下代码取自名为ApplicationCreator.java的文件。我注意到公共类ApplicationCreator本质上实例化了两次,或者我在这里遗漏了什么?

public class ApplicationCreator<MR> implements
    IResourceObjectCreator<BinaryRuleSet<MR>> {

private String  type;

public ApplicationCreator() {
    this("rule.application");
}

public ApplicationCreator(String type) {
    this.type = type;
}

所以我的问题在这里:

1)为什么类会在类中实例化?

2)为什么会这样做两次?或者这是将ApplicationCreator类的某些参数设置为新值的方法吗?

任何建议都将受到高度赞赏。

6 个答案:

答案 0 :(得分:4)

它没有在类中实例化,它在类中调用了不同的构造函数。

这些是重载的构造函数。构造函数在某种程度上类似于方法,但它们在对象创建时被调用。考虑一下:

public class Example {
    private int instanceVariable;

    public Example() { //a constructor of Example
        instanceVariable = 3;
        System.out.println("New Example object was created!");
    }

    public static void main(String[] args) {
        Example ex = new Example();
    }
}

这里,我们有一个Example类,它有一个构造函数。如果您查看main方法,我们会创建Example的新实例。程序将输出New Example object was created!并将实例instanceVariable设置为3,因为构造函数会立即在对象上调用,因为它构造了对象(因此名称)。

现在,如果你看看你的情况,构造函数有不同的参数(以及签名),因此可以通过不提供参数或提供String来构造对象。让我举例说明这一点:

public ApplicationCreator() {
    this("rule.application");
}

this在这种情况下引用类,并且调用this(args)调用类的构造函数。由于我们重载了构造函数,Java将调用与传递的参数最匹配的构造函数。因为,在这种情况下,传递一个String,Java将看到构造函数public ApplicationCreator(String)是最匹配的并将调用它。

在无参数构造函数中,它使用String rule.application调用另一个构造函数,因此您可以将无参数构造函数视为将构造函数传递给String的默认值。

答案 1 :(得分:2)

1)为什么类会在类中实例化?

  

该类不会调用自身,它为其他人提供了实例化其对象的方法。阅读constructor

2)为什么会这样做两次?或者这是将ApplicationCreator类的某些参数设置为新值的方法吗?

  

正如我所说,这是一种创造物体的方法。第一个将为类型指定默认值。第二个将为其他人提供分配值的选项。阅读constructor overloading

构造函数中的

this将根据传递给this的参数类型调用同一个类的另一个构造函数。

答案 2 :(得分:2)

这是两种不同的构造者。
它们被称为“不同的签名。”
使用它,你可以用两种不同的方式构造一个ApplicationCreator对象:

ApplicationCreator ac = new ApplicationCreator();

ApplicationCreator ac = new ApplicationCreator("A String");

如需进一步阅读,请参阅:The Java Class Constructor

答案 3 :(得分:1)

该类实际上并没有两次实例化。相反,默认构造函数ApplicationCreator()(即不带参数的构造函数)只是调用接受输入字符串的构造函数。

这可确保ApplicationCreator对象始终具有类型。如果未指定类型,则将使用默认值rule.application

这是重载构造函数的一个示例。

答案 4 :(得分:0)

它被称为构造函数。并且它不会被叫两次&#34;,只需通过this()使用给定的参数重定向到另一个。

基本上第一种方式,没有参数,只有一个默认值。否则,您使用给定的String type

构造一个实例

答案 5 :(得分:0)

这里这个类有两个构造函数。
当课程名称&#34;方法&#34;名称相同你可以理解那些是构造函数。
这里构造函数超载。基于参数类将被实例化。用户可以根据需要进行选择。