java 为什么;(分号)不显示异常?

lf5gs5x2  于 2023-05-27  发布在  Java
关注(0)|答案(6)|浏览(210)

在使用Eclipse IDE时,我突然发现在变量声明中使用了双分号。
下面是我的声明

double defaultValue = 0.0;;

我有点糊涂了。我期望上面的语句会抛出异常,但我编写了上面的语句,它运行时没有任何错误。
为什么双分号不显示错误?

f8rj6qna

f8rj6qna1#

这是一个空洞的声明;就这些。这是完全法律的的,虽然通常是无用的。JLS第14.6节规定:
空语句什么也不做。

  • EmptyStatement:*

     ;

空语句的执行始终正常完成。
我唯一一次真正看到它的使用是给予一个循环一个空体,例如。

while (somethingWithSideEffects())
    ;

就我个人而言,我更喜欢在这种情况下使用大括号(或者修改代码以不使用这种方式的副作用),但这是个人喜好的问题。

ntjbwcob

ntjbwcob2#

你会期待什么样的例外?

double defaultValue = 0.0;;

只是一个名为defaultValuedouble的声明,值为0.0,后跟一个 *empty语句 *。
你可以在那里放很多分号。他们在这种情况下什么都不做

double defaultValue = 0.0;;;;;;;;;;;;;;

只是为了术语的缘故:不会有 * 异常 * -如果有的话,会有一个编译警告或错误。语法错误并不是在运行时发生的,它可能会抛出错误,编译器的作用是尽早捕获这些错误。

ojsjcaue

ojsjcaue3#

没有任何错误,因为当你执行;时,它是一个空语句
您的代码相当于

double defaultValue = 0.0; // Valid statement
;   // An empty statement
suzh9iv8

suzh9iv84#

双分号并不违法。只是一个空的代码行。未抛出错误。
你甚至可以把它们放在一个类声明之后,如果你愿意的话(从JLS):
出现在编译单元中类型声明级别的额外“;”标记对编译单元的含义没有影响。在Java编程语言中允许使用分号,这只是对习惯于使用“;”的字符串。它们不应该在新的Java代码中使用。

6bc51xsx

6bc51xsx5#

因为编译器会将其视为空语句。
;应该是一个分隔符,用来表示语句的结束。

while(true);;;;;// Compiles and runs fine, but it will crash your PC
n6lpvg4x

n6lpvg4x6#

考虑:

double defaultValue = 0.0; // Correct statement
;   // Called as an empty

这就是为什么编译器不会给予任何错误。

相关问题