Java 如果块变量定义给出错误,则不使用大括号

Java 如果块变量定义给出错误,则不使用大括号,java,Java,您好,上面的代码给出了如下错误: 该行有多个标记 -str无法解析为变量 -令牌“字符串”上的语法错误,此令牌后应为AssignmentOperator 为什么会有这样的错误?当然我知道str在定义之后是不可访问的。但是java没有给出这样的解释。我觉得很奇怪。这是因为您将声明放在条件语句的受保护块中。但是,根据Java语法,Java声明不被视为语句 声明可以作为大括号中的块的一部分与语句混合,但单个声明不被视为语句。这非常有意义,因为您声明的变量不可用:如果您希望声明初始化其副作用,例如 if

您好,上面的代码给出了如下错误:

该行有多个标记
-str无法解析为变量
-令牌“字符串”上的语法错误,此令牌后应为AssignmentOperator


为什么会有这样的错误?当然我知道str在定义之后是不可访问的。但是java没有给出这样的解释。我觉得很奇怪。

这是因为您将声明放在条件语句的受保护块中。但是,根据Java语法,Java声明不被视为语句

声明可以作为大括号中的块的一部分与语句混合,但单个声明不被视为语句。这非常有意义,因为您声明的变量不可用:如果您希望声明初始化其副作用,例如

if(true)
     String str;
可以使用表达式语句,而不声明无论如何都无法使用的变量:

if (true)
    String str = someFunction();

因此,如果您将声明本身放入条件或循环中,编译器会确定您犯了错误,并生成一条错误消息来提醒您该问题。

它的悬空指针。@huseyintugrulbuyukisik这将是一个运行时错误。OP有编译器错误。@OP:因为这个构造没有多大意义(相反,它没有用处,但可能会与其他构造混淆,所以容易出错),所以Java不允许它。C和C++ IIR也是如此。
if (true)
    someFunction();