我会尽量保持这一点。
class MyClass {
private int x = 3;
}
VS
class MyClass {
private int x;
public MyClass() {
x = 3;
}
}
两者之间有什么区别?这些差异是如何发挥作用的?
提前致谢。
答案 0 :(得分:3)
class MyClass {
private int x = 3;
}
与
相同class MyClass {
private int x;
MyClass() { // default constructor based on the class access modifier
x = 3;
}
}
答案 1 :(得分:2)
这些都是一样的 但如果x是静态变量,它们就会不同。
答案 2 :(得分:2)
什么都没有。在调用构造函数时设置变量,您可以通过添加行MyClass temp = new MyClass()
并通过调试踩到它来看到这一点,调试器将首先转到行private int x = 3;
。
答案 3 :(得分:2)
字段的初始化在调用构造函数之前完成。但是对于你的例子他们是相同的
答案 4 :(得分:2)
在您的示例中,您实际上有实例变量,而不是类变量。 当你添加新的构造函数 MyClass(Object argument)并且忘记直接设置x而忘记调用原始的no-arg构造函数时,差异就出现了。如果适用,将其设为最终将会迫使您记住在某处设置值。
在类变量的情况下,事情变得更有趣,只需将x更改为static并将以下main方法添加到MyClass并观察结果。
public static void main(String ... args) {
MyClass y = null;
System.out.println(y.x);
System.out.println(MyClass.x);
new MyClass();
System.out.println(MyClass.x);
}
答案 5 :(得分:1)
正如其他人所说,他们两者都是等价的。主要区别在于代码的可读性,重复性和可维护性。如果我们将给定的示例扩展为具有多个构造函数,您将开始注意到差异。如果x的值不依赖于构造函数,我建议初始化字段变量else,在构造函数中设置值。这将在一定程度上提高代码的可读性和可维护性,并删除重复的代码(在这种情况下,有几个构造函数用于启动具有相同值的变量)。