Java中是否需要分号?

Ypn*_*ypn 4 java syntax

Java语法的基本部分(以及大多数基于C语言的语法)是在每个语句的末尾都需要分号.

但是,我设法编写了以下程序,而不使用任何分号:

class Hello extends Exception
{
    Hello(String s)
    {
        super(s)
    }
}

public class HelloWorld
{
    public static void main(String[] args) throws Hello
    {
        world((char)130)
    }

    static void world(char c) throws Hello
    {
        throw new Hello(new String(new char[]{c}))
    }
}
Run Code Online (Sandbox Code Playgroud)

运行NetBeans 7.4,它警告我缺少分号,但它确实正常工作.但是,当我在CodeGolf.SE上发布它时,其他人评论说它不适javac用于Eclipse IDE.那么,是否需要分号?

Sti*_*itt 7

大多数情况下,是必需的分号.

何时需要它们可以在Java语言规范中找到.例如(来自第14章):

14.4.地方变量声明声明

LocalVariableDeclarationStatement:
    LocalVariableDeclaration ;
Run Code Online (Sandbox Code Playgroud)

14.6.空陈述

EmptyStatement:
    ;
Run Code Online (Sandbox Code Playgroud)

14.8.表达陈述

ExpressionStatement:
    StatementExpression ;
Run Code Online (Sandbox Code Playgroud)

14.10.断言声明

AssertStatement:
    assert Expression1 ;
    assert Expression1 : Expression2 ;
Run Code Online (Sandbox Code Playgroud)

14.13.做声明

DoStatement:
    do Statement while ( Expression ) ;
Run Code Online (Sandbox Code Playgroud)

等等等等.正如您所看到的那样,分号实际上就在规范中,作为文字文本.我发现这些语言规范总是有点时髦阅读,但基本上它们是从小型的原子概念定义语法,例如'EmptyStatement',关键字和文字文本,直到更高级别的结构,如do-while,if -then-else等因此,如果您想确切知道何时需要分号,请仔细研究规范.


小智 0

当然,它们是必需的。尝试添加分号并检查它是否适用于 javac 或 Eclipse IDE。在 Eclipse 中,如果代码不包含分号,则不会运行该代码。