4

首先,这不是在 Java 中构造函数之前 Initialize final variable的完全重复。这可能是相关的,但没有任何答案让我满意。

我的问题是关于 Swing GUI 中的最终变量。特别是关于 custom Action。我有许多final变量和许多static final变量。

问题是:如果变量实际上是一个常量,那么更好的是:在构造时初始化它们,还是在声明时初始化它们?

我上面提到的问题的答案通常指向在static声明变量时尽快分配变量。这对我来说真的没有意义,因为变量没有在静态上下文中使用。我有几个我的表单使用的图像,例如图标,我将它们设为静态,因为除非您的应用程序修改它们,否则图像只是静态的东西。那讲得通。

另一方面,Actions 是自定义内部类的新实例。从技术上讲,它们也是静态的,但感觉不同。它们根本不能在静态上下文 imo 中可用。我也这么说:

private final CustomAction customAction = new CustomAction();

还是我在构造函数中初始化它?哪个更好?还是我想错了static

4

4 回答 4

5

如果该字段是常量,则使其成为static final该类的成员,

public class Foo{
    public static final int BAR = ...;
}

否则,在构造函数中初始化该字段。

于 2012-04-10T17:41:46.157 回答
1

我认为您在不使其成为静态的情况下走在正确的轨道上,因为听起来您的CustomAction对象是真正为在其构造函数中创建它们的 GUI 实例定制的。我认为你是否在构造函数中初始化它取决于你的构造函数是否可以CustomAction根据构造函数的输入参数进行不同的初始化。

static与非静态相比......一个好的经验法则是,如果一个变量要在特定对象类型的所有实例中保持不变,那么该变量应该是static. 这可以节省程序运行时的内存,并在构造每个对象实例时节省 CPU 时间,因为每次创建对象的新实例时都不必初始化该常量。另一方面,如果一个变量对于对象的特定实例保持不变,但可能因实例而异,那么它不应该是静态的。

最后(双关语),final只要您不希望原始值或对 Object 的引用发生变化,就应该使用它。静态或非静态上下文并不会真正影响变量是否应该是final,这完全final是因为开发人员不想更改该变量。它的静态上下文完全取决于开发人员希望如何访问它。

于 2012-04-10T17:55:59.560 回答
1

在声明时初始化常量变量:它更具可读性。如果为类的不同实例放入不同的值没有任何意义,则将其设为静态,也就是说,如果它是类级别的变量,而不是实例级别。

于 2012-04-10T17:52:56.300 回答
0

对于快速的应用程序启动和用户可能不访问的程序部分(关于对话框),静态是不好的。一般来说,静态并不像您发现的那样非常受欢迎。有一些原因,但没有什么非常令人信服的。但有时它是一种反模式或它的标志。

仍然在您的情况下,我会避免使用静态图像。顺便说一下,资源是在内部缓存的。

于 2012-04-10T17:53:09.987 回答