2017-02-18 98 views
-3

我正在开发一个项目,我在想,是否将参数的顺序传递给构造函数。例如,如果我创建了一个程序:构造函数排序

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"); 

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

+5

试一下,看看会发生什么。 – Kayaman

+0

是的,它很重要。 –

+0

在上面的例子中,第一个参数必须是一个整数,第二个参数必须是一个字符串。 –

回答

0

它很重要,就像任何方法调用一样。如果你有这样的事情:

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

如果你没有

new SomeClass(1, 2); 

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

即使所有类型都是都不同,编译器如何知道你是按照不同的顺序传递它们的?尽管它知道它可以让你免于错误。

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

1

你可以这样做:

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

但不是说:

Test t = new Test(t2,t1); 

因为当你打电话,你需要尊重参数顺序的任何方法。 对于真实的如果你想你可以做到这一点(你的代码将编译和执行),但是你将有价值转换。

1

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

1

是,为了事宜,但你可以“超载”,这意味着添加具有逆转喜欢的参数列表中的另一个构造函数..

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

..和你看,你可以在里面调用第一个构造函数java会找到签名所使用的正确版本。