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

时间:2017-12-19 05:49:21

标签: final java-9 access-modifiers 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

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

1 个答案:

答案 0 :(得分:6)

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

来自JShell.eval

周围的文档
  

修饰符this.router.navigate([newStep.StepView])publicprotectedprivatestatic不是   允许在操作级别声明中,被忽略并带有警告

     

同步,本机,抽象和默认的顶级方法不是   允许并且是错误。

     

如果声明的先前定义是   覆盖然后会有一个事件显示其状态已更改为   OVERWRITTEN,这不会发生丢弃,拒绝或已经发生   覆盖声明。

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

enter image description here