初始化对象的优选方法

时间:2012-12-28 13:19:55

标签: java

  

可能重复:
  Should I initialize variable within constructor or outside constructor

例如,我有一个字段int x。 Java是否更喜欢在声明

时初始化该字段
int x = 0;

或者更确切地说是构造函数?

public foo() {
x = 0;
}

从设计角度来看哪个更受欢迎?

6 个答案:

答案 0 :(得分:1)

两者都很好,只要你知道会发生什么。

初始化它们的顺序是:

  1. 班级成员(例如:public int x = 0;
  2. 构造函数(例如:this.x = 0;
  3. 但是,将整数初始化为零是无操作。 Java会自动执行此操作。

    一个小演示来演示忽略初始化顺序的错误:

    class Foo
    {
        public String str;
        public String strTwo = "Here is str: " + str;
    
        public Foo()
        {
            str = "Java";
            System.out.println(strTwo);
        }
    }
    

    这将打印Here is str: null

答案 1 :(得分:0)

public foo(){ x = 0; }

这将是好事。如果你使用这个int x = 0,它将适用于所有对象。但构造函数表示法用于由特定构造函数创建的对象。

答案 2 :(得分:0)

原始类型的实例变量被隐式初始化,而引用变量被赋值为空值。

所以如果你想指定像::

那样
int x=0;

对于所有对象,它将是x = 0.

但是在构造函数的情况下,您可以在不同的构造函数中使用不同的值初始化它们,尽管在不同的构造函数中使用不同的值初始化它不是一个好习惯。

答案 3 :(得分:0)

  

Java是否更喜欢在声明字段时或者在构造函数中初始化字段?

如果使用默认值进行初始化,则在构造函数或声明时初始化将是多余的。

但是,如果要使用与默认值不同的值进行初始化,则应使用构造函数而不是delaration。

  

从设计角度来看哪个更受欢迎?

从设计的角度来看,没有任何区别。这是实施细节。

答案 4 :(得分:0)

我的偏好是在构造函数之外初始化默认值,如

int x=0;

因此,如果您有多个构造函数和大量实例变量,那么您将不会忘记初始化。如果我需要变量的特定值,那么我将在构造函数中重新初始化。

答案 5 :(得分:0)

根据我的记忆,编译器在两个实例中生成的字节码几乎完全相同,实际上只是偏好和编码风格的问题。就个人而言,我倾向于在构造函数中初始化变量 - 在某些情况下,您将不得不在构造函数中初始化变量(例如将参数传递给构造函数时),这意味着您只需要在一个地方查看以理解发生了什么,而不是2。

(旁注 - 在您的示例中,不需要执行“int x = 0”,因为定义“int x;”会自动将其设置为0.)