为类变量赋值

时间:2011-10-17 10:42:47

标签: c# java global-variables

我会尽量保持这一点。

class MyClass {
   private int x = 3;
}

VS

class MyClass {
   private int x;
   public MyClass() {
      x = 3;
   }
}

两者之间有什么区别?这些差异是如何发挥作用的?

提前致谢。

6 个答案:

答案 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,在构造函数中设置值。这将在一定程度上提高代码的可读性和可维护性,并删除重复的代码(在这种情况下,有几个构造函数用于启动具有相同值的变量)。