当前位置: 首页 > 知识库问答 >
问题:

为什么在return语句后不允许有额外的分号,而其他语句允许有分号?

盛辰沛
2023-03-14

我在系统的分号后面加了一个分号。出来打印ln:

System.out.println();;

这对Java编译器来说是合法的,所以我检查了其他语句,它们也都是合法的。所以当我搜索并找到这些链接时:

>

  • 为什么Java在语句末尾不显示双分号错误?

    当我用两个分号结束一行时,编译器并没有抱怨。为什么?

    什么时候在方法结束括号后面加上分号?

    为什么使用连续分号的代码会编译?

    “if”语句末尾的分号

    我开始明白一个额外的分号意味着一个额外的空语句。

    但当我在return语句后加上分号时,我得到了一个编译时错误。我得出的结论是,return语句被认为是执行流中的最后一条语句,因此在return语句之后放置额外的语句是非法的。

    同样的事情也发生在这段代码中:

    if(a == b)
        System.out.println();;
    else
        System.out.println();
    

    在if语句系统中。出来println()给出编译时错误,因为编译器需要elseif或else。我是对的还是有其他原因?

  • 共有3个答案

    爱亮
    2023-03-14

    使用时:

    System.out.println();;
    

    一个新的分号生成一个新的空语句,这对编译器来说是可以的。但是当你有

    return; 
    

    它是不允许的,因为您不能在返回语句之后放置更多语句,因为当方法返回时,它会停止在那里,并且它之后的语句永远不会被调用,所以它是不允许的!

    曾骁
    2023-03-14

    您的代码:

    if (a == b)
        System.out.println();;
    else
        System.out.println();
    

    相当于

    if (a == b) System.out.println();
    ;
    else System.out.println();
    

    如果前面的语句不是if,则不能使用else。

    农飞翔
    2023-03-14

    为什么返回语句后不允许多个分号,而所有其他语句都允许?

    仅仅是因为当你有这样的陈述时

    System.out.println();;
    

    这意味着您有两条语句,一条是系统。出来println()和other语句位于第一个分号之后,它是空的,这是允许的,但在return语句之后不能有任何空语句或任何其他语句,因为它永远不会执行,换句话说,它的unreachable语句,代码中不能有unreachable语句。

    同样的事情也发生在这段代码中

    if(a == b)
        System.out.println();;
    else
        System.out.println();
    

    这是因为,当您有一个else语句时,它前面的语句应该是if语句,这在上面的代码段中不是这样的,因为它前面的语句是一个不允许的空语句。

    如果您在if语句之后有括号,例如

    if(a == b) {
        System.out.println();;
    }
    else
       System.out.println();
    

    您将不会收到任何错误,因为现在空语句位于if block中,并且ore之前的语句是if语句而不是空语句这是当您在if语句之后没有括号时的情况

     类似资料:
    • 我目前正在使用MySQL for DB connection开发一个Struts2 Web应用程序,并且在实际工作中遇到了代码部分的问题。恒定误差: 我目前拥有的RequestAction类基本上是我的一个工作项目的完整副本,但由于某些原因,我无法使其用于此应用程序。 请求操作。Java: 不知道为什么连接不工作,我试图乱搞,看看从我的其他项目,看看有什么差异,使连接和无法找到它,除非是给问题。

    • 问题内容: 今天,当我在教学生如何防止SQL注入时,我有些尴尬。在专业项目中,我已经使用准备好的语句/参数化查询作为防止SQL注入的一层(尽管我从未专业地使用过mySQL)。从理论上讲,我认为使用准备好的语句时不可能进行SQL注入。 但是后来这起作用了… 如果我传递参数“?s = 1 OR 1 = 1”,那么我可以获得所有产品的完整清单。我仍然无法在末尾插入另一个查询,但是我对为什么在mysql

    • 我想遍历选项的列表。如果其中有一个值,我想返回一个错误。下面是一个人为的例子: 添加另一个分号会导致错误,但删除分号不会导致错误。 为什么return语句后面的分号是可选的? 习惯用法Rust应该使用哪种形式:分号还是不使用分号?这两种方法都被编译器接受,并且似乎产生相同的结果。

    • 我为Select创建了动态DB2存储过程。我将使用这个泛型查询通过传递参数来执行多个select语句。 下面是我的查询的样子。 当我运行这个的时候

    • 问题内容: 我正在尝试从C ++转向Java。 我想知道的是,在C ++中,在类定义之后,需要使用分号(),而在Java中则不需要。 也就是说,在C ++中: 但是在Java中: 很好,我知道。 但是, 我的问题是 : 当我在类定义的末尾添加分号时,Java也可以使用,例如: 我已经编译并执行了Java所示的两个程序片段,并且它们均有效。谁能解释为什么会这样?Java类定义末尾的分号代表什么? 很

    • 问题内容: 在JS中,我试图检查扩展名是否以“ png”“ jpg”或“ gif”结尾。我知道这可以通过switch语句来完成,但是我想知道是否有一种更简单的方法可以将所有条件都放入条件语句中。喜欢: 实现此目标的最佳方法是什么? 问题答案: 您可以使用如下数组: 在这种情况下,您将存储“有效”扩展名。然后,您可以使用的方法来查找数组中的任何项目是否与您正在查看的特定扩展名相匹配- 检查值是否大于