我对Java很新,这个特殊的问题已经出现,因为我第一次尝试做一些Swing编程,但这是一个普遍的Java问题。
我有一个带有一些实例变量的类,我需要创建一个(并且只有一个)对象来保存变量和方法。是否有最佳/批准的位置来创建对象,如果它在类的属性定义中声明和实例化:
public class TestClass {
static TestClass tC = new TestClass();
...
或在类'属性定义中声明并通过静态方法实例化(例如稍后main
):
public class TestClass {
static TestClass tC;
...
public static void main(String[] args) {
tc = new TestClass();
}
或在其他地方,这有关系吗?
答案 0 :(得分:0)
如果你实例化你声明它作为字段的变量,它将在类首次初始化时创建(也就是说,当它第一次“触摸”时。)如果你在main方法中初始化它,那么它将无论何时执行该方法中的特定行,都要进行初始化。
如果它在功能上没有区别,那么人们可以争辩说内联声明确保它在方法变得尊重时永远不会为空(如果你使用final
字段可以进一步强化但是,在宏观方案中,它可能并不重要。
答案 1 :(得分:0)
或在其他地方,这有关系吗?
如果你看得够的话,这当然很重要。
将初始化放在main
方法中仅与您执行此特定main
方法的类的用法相关。如果您的类的使用范围大于单个程序,那么初始化的特定途径将与不存在一样好。
使用声明放置初始化内联可确保为该类的所有用户初始化该字段,而不依赖于访问它的代码路径。
另外请注意,在真实世界的程序中,像这样的硬编码单例初始化通常会干扰预期用途的全部范围。单例通常取决于某种初始化数据,并且该数据在类初始化时可能不可用。在较大的程序中可能有几个独立的“区域”,每个区域都需要不同的初始化单例。测试问题通常意味着替换模拟实现而不是类,等等。
因此,您的任何一种方法目前都可能对您有用,但在更复杂的情况下,它们也不够。