【问题标题】:The variations of assigning an new instance to a instance variable? [duplicate]将新实例分配给实例变量的变化? [复制]
【发布时间】:2021-06-18 16:48:19
【问题描述】:

所以在Java中,我对此感到困惑很长时间。 当我在另一个实例中需要一个实例时,我有两种方法:

1.将变量a声明为成员变量,然后在构造函数中实例化:(这是正常的做法)

public class ClassA {
    SomeType a;
    ClassA(){
         a = new SomeType();
    }
}

2.在成员变量定义中直接实例化

public class ClassA {
    SomeType a = new SomeType();
}

那么第二个可行吗,为什么或为什么不可行?

【问题讨论】:

  • 看字节码是一样的
  • 这是一个偏好问题,但如果你不介意我在这里强加我的意见,我会不惜一切代价避免方法 2。当您查看代码时只会感到困惑,因为不清楚首先初始化哪些变量。然后你必须去谷歌它,找到告诉你实例变量在构造函数运行之前被初始化的页面,然后你必须回去弄清楚这对你的代码意味着什么。它绝对不是自记录代码。我会总是在构造函数中初始化所有实例变量。
  • 它们都是可行的......在这个词的简单英语意义上。

标签: java


【解决方案1】:

它们都代表同一个东西。在您的两个示例中,a 是在 ClassA 的构造期间分配的,无论逻辑是否在构造函数中显式。

在幕后,他们最终编译成相同的代码,正如@Eugene 所说,字节码是相同的。


就偏好而言,您应该选择对您和阅读您作品的其他人最有意义的方法,没有正确答案。但是我个人认为第一种方法过于复杂(至少在您的简单示例中)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-05
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多