Java 语句与块

Java 语句与块,java,if-statement,block,Java,If Statement,Block,我是一个新的java用户。最近我了解到,在java中,每个语句都以分号(;)结尾,每个块由一对大括号分隔-{}(如果我错了,请纠正我) 但在许多地方,我发现作家都在说,if语句。所以我的问题是java中语句和块之间有什么区别 提前谢谢 您的定义是正确的。如果是语句,即使它没有以分号结尾 一般来说,如果程序构造产生一个值,那么它就是表达式,否则它就是语句。在Java中,与其他语言(Scala、Groovy等)不同的是,如果是语句而不是表达式。语句是块的一部分。块包含由分号分隔的语句,但也是语句本身

我是一个新的java用户。最近我了解到,在java中,每个语句都以分号(;)结尾,每个块由一对大括号分隔-
{}
(如果我错了,请纠正我)

但在许多地方,我发现作家都在说,
if
语句。所以我的问题是java中
语句
之间有什么区别


提前谢谢

您的定义是正确的。
如果
是语句,即使它没有以分号结尾


一般来说,如果程序构造产生一个值,那么它就是表达式,否则它就是语句。在Java中,与其他语言(Scala、Groovy等)不同的是,
如果
是语句而不是表达式。

语句是块的一部分。块包含由分号分隔的语句,但也是语句本身。在BNF中:

statement := block | ...
block := '{' { block | (statement ';') } '}'

如果两者都是典型的

if语句本身就是控制流语句。如果该语句的计算结果为true,它将执行该语句,或在语句后执行块。换句话说,如果您只想执行一行代码,则不需要if后面的块

所以,请原谅我的袖口java,你可以有以下两种:

if(someboolean)
    DoSuff();

正式定义块和语句。要简化它所说的内容:

  • Java中的每个语句都以分号结尾,这是不正确的。这是一种方便的思考方式,但在形式上并不正确
  • 有些语句的定义中包含分号。这些通常是简单的陈述。例如:
    • 空语句只是一个分号:
    • 表达式语句是一组允许的表达式之一,后跟分号<代码>新类名()
System.out.println()
i++
  • 块是一种语句类型,它包含声明和其他语句,这些语句由大括号
    {int i=1;System.out.println(i);}
    包围
  • 有些语句是使用其他语句生成的。它们的定义不包括分号。如果sub语句以分号结尾,则这些语句以分号结尾。
    if
    语句属于这一类。它构建为
    if(expression)语句
    。因此,如果语句中的
    部分有分号,则以分号结尾。如果其中的
    语句
    恰好是一个块(这是语句的一种!),则它以大括号结束:

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

    在第一种格式中,if
    的子语句是表达式语句(方法调用是表达式语句,表达式语句以分号结尾)

    在第二种格式中,
    if
    的子语句是块语句,它包含一个表达式语句。因此,
    if
    以块的大括号结束,而不是分号


  • 一句话:语句是通过属于某些正式类别来定义的。有些以分号结尾,有些则不以分号结尾。

    但在许多地方,我发现作者都在说
    if
    语句。你想说什么?是的,他们是两个不同的东西,因此有两个不同的名字。请继续阅读Java教程。正式定义:“在Java中,每条语句都以分号结尾”否。在Java中块不是这样生成的,块语句不是用分号分隔的,这正是混淆OP的地方。“如果实际上都是”通常都是“什么?语句和块?是的。条件逻辑是一条语句,通常后跟一个块。但是,如果您愿意,您可以只执行一条语句。风险在于您忘记并尝试添加另一行,如果没有块语法,这将不是有条件的。我看不出
    if
    s如何被视为块:块是我们希望按给定顺序执行的语句序列,这显然与我们期望的
    if
    语句相去甚远。(另外,“陈述评估为真”是误导性的,我们要评估陈述的副作用,它们的评估不符合价值)如果我混淆了,我很抱歉。“如果”是一种陈述。“如果”本身不是块。但是,它通常紧接着一个块。“if”包含一个要计算的表达式。如果表达式等于true,则执行紧跟在“if”之后的块或语句。它的形式是:[ControlStatement](表达式)[Statement]| |{Block}
    if ( a == b )
       System.out.println(a);
    
    if ( a == b ) {
       System.out.println(a);
    }