Java 决赛是静态的还是静态的重要吗?
将类常量声明为静态与否有关系吗Java 决赛是静态的还是静态的重要吗?,java,optimization,constants,final,Java,Optimization,Constants,Final,将类常量声明为静态与否有关系吗 public class MyClass { private final static int statConst = 1; private final int nonStatConst = 2; } statConst和nonStatConst永远不会更改,因为它们是最终的,所以即使是nonStatConst在每个实例中都是相同的。我是否使它们成为静态的有关系吗 (我意识到只有private final int otherConst;)是的,这
public class MyClass {
private final static int statConst = 1;
private final int nonStatConst = 2;
}
statConst
和nonStatConst
永远不会更改,因为它们是最终的,所以即使是nonStatConst
在每个实例中都是相同的。我是否使它们成为静态的有关系吗
(我意识到只有private final int otherConst;
)是的,这很重要
nonStatConst
属于特定的实例
statConst
跨所有实例共享
而静态上下文
在访问时也很重要
进入
final
如果您这样声明,则必须在构造函数完成之前初始化您在类中声明的字段。如果它是静态的,您将只创建一个与类关联的常量,如果它对于每个对象都是非静态的,则将新创建该常量。如果它是非静态的,则在不为类创建对象的情况下无法访问它唯一不同的方法是,如果要从静态上下文引用成员;换句话说,您没有要处理的类的特定实例。在这种情况下,您需要变量是静态的。不同的是,在每个实例中,空间将分别分配给非statconst
。对于静态<代码> STATCONST< <代码>空间将只分配一次。 有两件事要考虑。
是的,这很重要,特别是如果你有一个
静态
方法,它只能调用静态常量
主要的区别是静态最终原语和字符串在字节码中内联(硬编码)。对,我在想原语类型。我知道静态
的意思。但是在final
的情况下,我不明白这会有什么不同。优化编译不能在不影响任何行为的情况下将所有private final int
更改为private final static int
?没有回答这个问题。是的,也用final
重新表述,请看一看。@Andreas:我很确定,编译器不会这样做。1.这不是一个与实际程序相关的优化,因为每个程序员自己都可以轻松地完成。2.我相信编译器不允许做这样的优化。啊,我不知道。那么,使用非静态final有什么好处呢?通常在您要在构造函数中设置值的情况下,您会使用非静态final。在初始化器中将其设置为常量会使其变得毫无意义。此外,调用ClassName.constant比查找或创建实例要容易得多。