最终变量在jshell中运行不正常

Kay*_*ayV 6 final access-modifiers java-9 jshell

我正在使用JDK9的jshell.

我刚刚创建了一个final变量并为其赋值.在下一行我刚修改了这个值.令我惊讶的是,修改最终变量时没有错误.

这是代码片段:

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
Run Code Online (Sandbox Code Playgroud)

这是jshell的预期吗?或者还有其他一些方法可以在jshell中使用最终变量?

Nam*_*man 6

虽然不应该在顶层创建最终变量.但我想没有什么难以限制这种用法.

从周围的文档 JShell.eval

修饰符public,protected,private,static,并且final不允许在OP级的声明,并发出警告忽略.

不允许使用同步,本机,抽象和默认的顶级方法,这些方法都是错误的.

如果覆盖了声明的先前定义,则会有一个事件显示其状态已更改为OVERWRITTEN,这对于删除,拒绝或已经覆盖的声明不会发生.

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

在此输入图像描述