【问题标题】:Statement Vs. Block声明与。堵塞
【发布时间】:2015-03-21 17:35:54
【问题描述】:

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

但在很多地方,我发现作家都在说if 声明。所以我的问题是 java 中 statementblock 有什么区别?

提前致谢。

【问题讨论】:

  • 但在很多地方我发现作家都在说if 声明。你想说什么?
  • 是的,它们是两个不同的东西,因此有两个不同的名称。继续阅读您的 Java 教程。
  • "在java中每条语句都以分号结束"

标签: java if-statement block


【解决方案1】:

Java Language Specification 正式定义块和语句。为了简化它所说的:

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

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

    对比

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

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

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

底线:陈述是通过属于某些形式类别来定义的。有些以分号结尾,有些则没有。

【讨论】:

    【解决方案2】:

    您的定义是正确的。 if 是一个语句,即使它不以分号结尾。

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

    【讨论】:

      【解决方案3】:

      如果实际上两者都是典型的。

      if 语句本身就是一个控制流语句。如果该语句被评估为真,它会执行该语句,或者在它之后阻塞。换句话说,如果您只想执行一行代码,则不需要 if 后面的块。

      所以,请原谅我的袖口 java,您可以拥有以下任何一种:

      if(someboolean)
          DoSuff();
      

      或者

       if(someboolean) {
          DoSuff();
        }
      

      http://docs.oracle.com/javase/tutorial/java/nutsandbolts/if.html

      【讨论】:

      • “如果实际上都是典型的” 两者都是什么?语句和块?
      • 是的。条件逻辑是一个语句,通常后跟一个块。但是,如果您喜欢它,您可以只用一条语句来执行它。风险在于您忘记并尝试添加另一行,如果没有块语法将不是有条件的。
      • 我看不出ifs 是如何被视为块的:块是我们希望按给定顺序执行的语句序列,这显然与我们对@ 的期望相去甚远987654325@,这是一个语句。 (另外,“评估为真的陈述”具有误导性,陈述是我们想要评估其副作用的东西,它们不会评估为值)
      • 很抱歉,如果我感到困惑。 “如果”是一个陈述。 “如果”本身是不是一个块。但是,它通常紧跟一个块。 “if”包含一个被评估的表达式。在表达式等于 true 的情况下,执行紧跟在“if”之后的块或语句。它的形式是:[ControlStatement](表达式)[Statement]||{Block}
      【解决方案4】:

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

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

      【讨论】:

      • 这不是Java中块的制作方式,块语句不是用分号分隔的,这正是让OP感到困惑的地方。
      猜你喜欢
      • 1970-01-01
      • 2010-09-08
      • 2014-08-18
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 1970-01-01
      • 2014-06-01
      • 1970-01-01
      相关资源
      最近更新 更多