java - 空白最终字段是否适用于局部变量?
问题描述
空白 final 是一个 final 变量,其声明缺少初始化程序。
这是否意味着空白的最终字段仅用于实例和类变量而不是局部变量,因为初始化程序仅用于实例和类变量?
解决方案
这是否意味着空白的最终字段仅用于实例和类变量而不是局部变量,因为初始化程序仅用于实例和类变量?
由于初始化器不仅用于实例和类变量,因此答案是否定的。
初始化器可以是局部变量声明的一部分。例如
public void method() {
int i = 0; // this declaration has an initializer
...
}
我在问这里的初始化器一词是否在一般意义上使用,即用于任何值或初始化器块。
在您所指的上下文中,不。它专门指的是作为声明一部分的初始化程序。它说:
“ ...一个最终变量,其声明缺少初始化程序。”
假设初始化器在1之后出现(例如在实例或静态初始化器块中,或者稍后在相同或嵌套的方法块中),那么这是一个空白的 final。
如果它也是一个字段,那么它是一个空白的 final 字段。
最后,以下程序演示了局部变量可以为空白 final:
public class Test {
public static void main(String[] args) {
final int i; // blank final
i = 0;
System.out.println(i);
}
}
这在 Java 11 上编译和运行,并且应该在所有 Java 版本的所有(兼容)实现上编译和运行。
1 - 实际上,JLS 并没有明确禁止完全没有初始化的空白决赛。但是,在使用变量之前必须进行初始化,所以这样的声明是没有意义的。编译器可能会警告您未使用的变量。
推荐阅读
- wordpress - 根据 Wordpress 中的用户名为新用户自动生成电子邮件
- python - 如何在 Python 中一次对多个图像执行 OCR,并将所有数据打印到 XLSX 文件中?
- c++ - 模板化的 Q_OBJECT 基类
- java - 如果联系人与电话通讯簿中的应用程序相关联,例如什么是应用程序、skyip,则显示您的应用程序图标
- reactjs - 如何在 Reactjs 中显示链接共享博客预览
- stripe-payments - 当客户从条带帐户的所有者那里收到钱时,必须使用哪个条带 API?
- ios - 在ios14上调试iPhone Safari浏览器页面时不显示样式列表?
- web-services - 我们如何在邮递员中使用 saml
- .net - F# 异步让!& 返回!计算表达式
- c# - 从代理读取时出现性能问题