构造函数订购

时间:2017-02-18 20:53:18

标签: java constructor

我正在研究一个项目,我很想知道传递给构造函数的参数的顺序是否重要。例如,如果我创建了一个程序:

public class Test{
    int t3;
    String h;
    Test(int t1, String t2){
        t3 = t1;
        String h = t2;
    }
}

我做的很重要:

Test t4 = new Test( "hello", 6);

而不是

Test t4 = new Test(6, "hello");

喜欢构造函数中的顺序?谢谢!

4 个答案:

答案 0 :(得分:1)

你可以这样做:

public class Test{
  int t3;
  String h;
  Test(int t1, String t2){
    h = t2;
    t3 = t1;
    }
  }

但不是那样:

Test t = new Test(t2,t1);

因为当您调用任何方法时,您需要尊重参数顺序。 如果你想要你可以做到这一点(你的代码将编译并执行),那么你将有价值切换。

答案 1 :(得分:1)

是的......您必须尊重参数的顺序,因为构造函数将期望Integer作为第一个参数而String作为第二个参数;任何不同的东西都可能引发错误。

答案 2 :(得分:1)

是的,订单很重要,但你可以"重载",这意味着添加另一个反转参数列表的构造函数。

Test(String t2, int t1){
 this.Test(t1,t2);
}

..如您所见,您可以调用内部的第一个构造函数,java将找到签名使用的正确版本

答案 3 :(得分:0)

重要的是,就像任何方法调用一样重要。如果你有这样的事情怎么办:

public SomeClass(int a, int b)...

如果你做了

new SomeClass(1, 2);

编译器怎么知道你实际意味着a为2而b为1?如果您的所有参数都具有不同的类型,那么编译器可能会破译您的意图的唯一情况就是这一点 - 在大多数情况下,编译器可能无法知道您打算做什么。

即使所有类型的 都不同,编译器如何知道您是故意以不同的顺序传递它们的呢?尽管如此,它知道它可以帮助你避免错误。

请注意,其他一些语言(如C#)允许您以不同于您指定的顺序传递参数,但您必须对它们进行标注,以便编译器知道哪个是哪个。