考虑 static
变量,例如:
private static int x;
如果我们尝试在main方法中打印它的值,它将是0。所以变量被初始化了。现在考虑变量是否为 final
:
private static final int x;
这是不可能的;为什么?我们必须像这样初始化它 private static final int x = 2;
,或使用静态初始化器,如:
static {
x = 2;
}
一 static
默认情况下初始化变量;那么,如果变量也是 final
?
3条答案
按热度按时间omtl5h9j1#
原则上,这种语言可以让你声明
static final
字段,并让它接受其默认值,但实际上,如果您未能为static final
那么它几乎总是错的。所以编译器在这里给你一个错误,因为这段代码做了一些你几乎肯定不想做的事情(或者,没有做一些你几乎肯定想做的事情),并且
默认值将是一些无关紧要的值,如0或0
null
,因此,如果使用该值是您想要的,那么强加给您的不便是最小的;你只要写就行了static final int x = 0;
而不是static final int x;
.事实上,被迫写作
= 0
或者= null
显式地使代码更易于阅读、理解和维护。请记住,大多数代码的读取频率比编写的频率高出数百或数千倍,因此您实际上是在通过更详细和明确的方式节省时间。czfnxgou2#
oracle文档中的段落:最后一个修饰符表示此字段的值不能更改。
例如,下面的变量声明定义了一个名为pi的常量,其值是pi的近似值(圆的周长与其直径的比值):
以这种方式定义的常量不能被重新分配,如果您的程序试图这样做,这是一个编译时错误。按照惯例,常量值的名称用大写字母拼写。如果名称由多个单词组成,则这些单词之间用下划线(\分隔)。
编辑:请检查java语言规范。你问题的答案就在那里。
xxls0lw83#
注意:问题标题上的static关键字可以删除,因为您应该初始化所有final变量,而不仅仅是静态final变量。
所有final变量都应该显式初始化,或者在声明点处初始化,或者在声明它的类的每个构造函数中初始化(在本例中,它被命名为blank final variable)。这是因为在第一次赋值后不能更改最终变量值。因此,该语言会发出警告,要求隐式地指定最终变量,以驱动开发人员显式地指定值(即使它是默认值,如整数的“0”)。
此外,在“static final”变量的特定情况下,还可以在声明该变量的类的静态初始值设定项中赋值。