为什么没有显示任何例外?

时间:2015-12-24 11:06:40

标签: java

当我使用eclipse ID时,我突然发现我在变量声明中加了双分号。

以下是我的陈述

double defaultValue = 0.0;;

我在这里感到困惑。我期望上面的语句抛出一个异常,但我错误的上面的语句运行没有任何错误。

为什么双分号没有显示任何错误?

6 个答案:

答案 0 :(得分:5)

这是一个空洞的陈述,就是这样。它完全合法,但通常没用。它在section 14.6 of the JLS中指定:

  

空语句什么都不做。

     

EmptyStatement:
  ;

     

空语句的执行总是正常完成。

几乎我唯一一次实际看到它使用的是给一个空体,例如。

while (somethingWithSideEffects()) 
    ;

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

答案 1 :(得分:2)

您期望什么样的例外?

double defaultValue = 0.0;;

只是double的声明defaultValue,其值为0.0,后跟空语句

您可以根据需要添加任意数量的分号。他们在这种情况下什么都不做

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

只是为了术语:没有异常 - 如果有任何东西会有编译警告或错误。语法错误不会在运行时发生,并且可能会抛出错误,编译器会尽早捕获这些错误。

答案 2 :(得分:1)

当您执行;

时,没有错误,因为它是空语句

您的代码等同于

double defaultValue = 0.0; // valid statement
;   // an empty statement

答案 3 :(得分:1)

Double semilcolon并非违法。它只是一个空代码行。没有错误抛出。

如果你想(从JLS),你甚至可以把它们放在一个类声明之后:

  

额外“;”出现在编译单元中类型声明级别的标记没有   影响编译单元的含义。 Java中允许使用杂散分号   编程语言仅仅是对习惯于放置的C ++程序员的让步   “;”在课堂宣言之后。它们不应该用在新的Java代码中。

答案 4 :(得分:0)

因为编译器将其视为空语句

;应该是表示结束语句的分隔符。

while(true);;;;;// compiles and runs fine but will crash your pc

答案 5 :(得分:0)

double defaultValue = 0.0; // Correct Statement 
;   // Called as a Empty 

这就是编译器Desen没有给出任何错误的原因。乐意帮助