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

问题描述 投票:6回答:1

我正在使用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中使用最终变量?

final java-9 access-modifiers jshell
1个回答
6
投票

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

JShell.eval周围的文档

修饰符publicprotectedprivatestaticfinal在op级声明中是不允许的,并且会被警告忽略。

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

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

当您在详细模式下执行jshell时,上面提到的警告非常明显,如下所示:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.