Java 将新实例分配给实例变量的变体是什么?

Java 将新实例分配给实例变量的变体是什么?,java,Java,所以在Java中,我很长一段时间对此感到困惑。 当我在另一个实例中需要一个实例时,我有两种方法: 1.声明变量a为成员变量,然后在构造函数中实例化它:(这是一种正常的方法) 2.在成员变量定义中直接实例化 public class ClassA { SomeType a = new SomeType(); } 那么第二种方法可行吗?为什么可行或为什么不可行?它们都代表相同的东西。在这两个示例中,a在ClassA的构造过程中被赋值,而不管该逻辑是否显式地在构造函数中 在幕后,他们最终编译

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

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

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

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

那么第二种方法可行吗?为什么可行或为什么不可行?

它们都代表相同的东西。在这两个示例中,
a
ClassA
的构造过程中被赋值,而不管该逻辑是否显式地在构造函数中

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



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

如果您查看字节码,这是相同的事情,这是一个偏好问题,但是如果您不介意我在这里强加我的观点,我将不惜一切代价避免使用方法2。当您查看代码时会感到困惑,因为不清楚哪些变量是首先初始化的。然后你必须用谷歌搜索它,找到告诉你实例变量在构造函数运行之前被初始化的页面,然后你必须返回并弄清楚这对你的代码意味着什么。这绝对不是自我记录的代码。我总是初始化构造函数中的所有实例变量。这能回答你的问题吗?它们都是可行的。。。在这个词的简单英语意义上。
public class ClassA {
    SomeType a = new SomeType();
}