6

我正在使用 JDK9 的 jshell。

我刚刚创建了一个最终变量并为其分配了一个值。在下一行中,我刚刚修改了值。令我惊讶的是,修改最终变量时没有错误。

这是代码片段:

jshell> final int r = 0;
|  Warning:
|  Modifier 'final'  not permitted in top-level declarations, ignored
|  final int r = 0;
|  ^---^
r ==> 0

jshell> r = 1;
r ==> 1

jshell> System.out.println("r = "+r)
r = 1

这是 jshell 所期望的吗?还是有其他方法可以在 jshell 中使用最终变量?

4

1 回答 1

7

虽然不应该在顶层创建最终变量。但我想没有严格的方法来限制这种用法。

从周围的文档JShell.eval

修饰符public, protected, private,staticfinal不允许在操作级声明中使用,并且会被忽略并发出警告

不允许使用同步的、本机的、抽象的和默认的顶级方法,它们都是错误的。

如果声明的先前定义被覆盖,则将有一个事件显示其状态更改为 OVERWRITTEN,这不会发生在丢弃、拒绝或已覆盖的声明中。

在详细模式下执行时,上述警告非常明显jshell,如下所示:

在此处输入图像描述

于 2017-12-19T05:58:04.823 回答