在使用Eclipse IDE时,我突然发现在变量声明中使用了双分号。下面是我的声明
double defaultValue = 0.0;;
我有点糊涂了。我期望上面的语句会抛出异常,但我编写了上面的语句,它运行时没有任何错误。为什么双分号不显示错误?
f8rj6qna1#
这是一个空洞的声明;就这些。这是完全法律的的,虽然通常是无用的。JLS第14.6节规定:空语句什么也不做。
EmptyStatement:*
;
空语句的执行始终正常完成。我唯一一次真正看到它的使用是给予一个循环一个空体,例如。
while (somethingWithSideEffects()) ;
就我个人而言,我更喜欢在这种情况下使用大括号(或者修改代码以不使用这种方式的副作用),但这是个人喜好的问题。
ntjbwcob2#
你会期待什么样的例外?
只是一个名为defaultValue的double的声明,值为0.0,后跟一个 *empty语句 *。你可以在那里放很多分号。他们在这种情况下什么都不做
defaultValue
double
0.0
double defaultValue = 0.0;;;;;;;;;;;;;;
只是为了术语的缘故:不会有 * 异常 * -如果有的话,会有一个编译警告或错误。语法错误并不是在运行时发生的,它可能会抛出错误,编译器的作用是尽早捕获这些错误。
ojsjcaue3#
没有任何错误,因为当你执行;时,它是一个空语句。您的代码相当于
double defaultValue = 0.0; // Valid statement ; // An empty statement
suzh9iv84#
双分号并不违法。只是一个空的代码行。未抛出错误。你甚至可以把它们放在一个类声明之后,如果你愿意的话(从JLS):出现在编译单元中类型声明级别的额外“;”标记对编译单元的含义没有影响。在Java编程语言中允许使用分号,这只是对习惯于使用“;”的字符串。它们不应该在新的Java代码中使用。
6bc51xsx5#
因为编译器会将其视为空语句。;应该是一个分隔符,用来表示语句的结束。
while(true);;;;;// Compiles and runs fine, but it will crash your PC
n6lpvg4x6#
考虑:
double defaultValue = 0.0; // Correct statement ; // Called as an empty
这就是为什么编译器不会给予任何错误。
6条答案
按热度按时间f8rj6qna1#
这是一个空洞的声明;就这些。这是完全法律的的,虽然通常是无用的。JLS第14.6节规定:
空语句什么也不做。
EmptyStatement:*
空语句的执行始终正常完成。
我唯一一次真正看到它的使用是给予一个循环一个空体,例如。
就我个人而言,我更喜欢在这种情况下使用大括号(或者修改代码以不使用这种方式的副作用),但这是个人喜好的问题。
ntjbwcob2#
你会期待什么样的例外?
只是一个名为
defaultValue
的double
的声明,值为0.0
,后跟一个 *empty语句 *。你可以在那里放很多分号。他们在这种情况下什么都不做
只是为了术语的缘故:不会有 * 异常 * -如果有的话,会有一个编译警告或错误。语法错误并不是在运行时发生的,它可能会抛出错误,编译器的作用是尽早捕获这些错误。
ojsjcaue3#
没有任何错误,因为当你执行
;
时,它是一个空语句。您的代码相当于
suzh9iv84#
双分号并不违法。只是一个空的代码行。未抛出错误。
你甚至可以把它们放在一个类声明之后,如果你愿意的话(从JLS):
出现在编译单元中类型声明级别的额外“;”标记对编译单元的含义没有影响。在Java编程语言中允许使用分号,这只是对习惯于使用“;”的字符串。它们不应该在新的Java代码中使用。
6bc51xsx5#
因为编译器会将其视为空语句。
;
应该是一个分隔符,用来表示语句的结束。n6lpvg4x6#
考虑:
这就是为什么编译器不会给予任何错误。