aka*_*wal 5 java final declaration keyword
据我所知,最终变量必须/只能初始化一次,否则编译器会抛出错误.
如果最终实例变量x未初始化,则抛出错误,但y在以下代码中保持未初始化本地变量时,我没有遇到任何错误:
import java.util.*;
public class test
{
final int x = 5;// if final variable x uninitialized, compilation error occurs
public static void main(String[] args)
{
final int y; // y is not initialized, **no error is thrown**
System.out.println("test program");
}
}
Run Code Online (Sandbox Code Playgroud)
不使用局部变量,因此可以保持未初始化
尝试使用它时会出现编译错误(即使它不是final):
System.out.println("test program" + y);
Run Code Online (Sandbox Code Playgroud)
局部变量y可能尚未初始化
import java.util.*;\npublic class test\n{\n final int x = 5;\n public static void main(String[] args)\n {\n final int y;\n System.out.println("test program");\n y=6;\n y=7; \n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\ny=7会给出错误:The final local variable y may already have been assigned。由于它是一个final变量,并且它已被分配给6.
恕我直言,final局部变量意味着一旦分配,就不能重新分配。但final int y你只是声明一个final变量而没有赋值(初始化),这在Java中是合法的。(但是为了使用它你仍然必须初始化它,否则会发生错误。)
更新:
\n\nclass field如下所述,您已经注意到最终变量和最终变量之间的区别local。
来自 Java 语言规范:
\n\nfinal field必须definely assigned位于static initializer或 中 constructor :\n\n\n8.3.1.2 Final 字段\n 字段可以声明为 Final (\xc2\xa74.12.4)。类和实例变量(静态和非静态字段)都可以声明为 Final。空白的 Final 类变量必须由声明它的类的静态初始值设定项明确指定,或者由编译器指定。发生时间错误 (\xc2\xa78.7, \xc2\xa716.8)。\n 必须在声明该变量的类的每个\n 构造函数的末尾明确分配一个空白的最终实例变量,或者编译- 发生时间错误(\xc2\xa78.8,\n \xc2\xa716.9)。
\n
(请注意,非最终字段可以保留未初始化状态)
\n\n2.局部变量(无论是否final)在使用前必须显式赋值:(第4.12.5章,P88)
\n\n\n\n\xe2\x80\xa2 局部变量 (\xc2\xa714.4, \xc2\xa714.14) 在使用之前必须通过初始化 (\xc2\xa714.4) 或赋值显式指定一个值(\xc2\xa715.26),可以使用明确赋值的规则进行验证(\xc2\xa716 (明确赋值))。
\n
| 归档时间: |
|
| 查看次数: |
120 次 |
| 最近记录: |