Java中是否需要分号?

时间:2014-03-09 19:55:32

标签: 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}))
    }
}

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

3 个答案:

答案 0 :(得分:6)

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

如果需要,可以在Java Language Specification中找到。例如(来自chapter 14):

<强> 14.4。本地变量声明声明

LocalVariableDeclarationStatement:
    LocalVariableDeclaration ;

<强> 14.6。空陈述

EmptyStatement:
    ;

<强> 14.8。表达式声明

ExpressionStatement:
    StatementExpression ;

<强> 14.10。断言声明

AssertStatement:
    assert Expression1 ;
    assert Expression1 : Expression2 ;

<强> 14.13。 do Statement

DoStatement:
    do Statement while ( Expression ) ;

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

答案 1 :(得分:2)

Netbeans很可能推断分号,因为每个块中只有一个语句。它在编译之前将它们添加到幕后。

Java需要使用分号,因为它们是规范的一部分。

答案 2 :(得分:0)

当然他们是必需的。尝试添加分号并检查它是否可以与javac或Eclipse IDE一起使用。在Eclipse中,如果代码不包含分号,则不会运行代码。