我正在使用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中使用最终变量?
虽然不应该在顶层创建最终变量。但我想没有什么难以限制这种用法。
从JShell.eval
周围的文档
修饰符
public
,protected
,private
,static
和final
在op级声明中是不允许的,并且会被警告忽略。不允许使用同步,本机,抽象和默认的顶级方法,这些方法都是错误的。
如果覆盖了声明的先前定义,则会有一个事件显示其状态已更改为OVERWRITTEN,这对于删除,拒绝或已经覆盖的声明不会发生。
当您在详细模式下执行jshell
时,上面提到的警告非常明显,如下所示: