【问题标题】:Why is this not a syntax error / What syntax is that [duplicate]为什么这不是语法错误/那是什么语法[重复]
【发布时间】:2017-01-12 14:26:26
【问题描述】:

我很难找到重复或解释,因为我不知道语法的名称。

今天早些时候,我写了一段代码,其中包含一个额外的;

if (condition); {
    try {
        // something
    } catch (Exception e) {
        // something
    }
}

我知道 if 语句被; 打断了。我感兴趣的是块

{
    // something
}

如何调用没有前导 iffor、... 的块 ({}),我可以用它做什么?

【问题讨论】:

    标签: java syntax


    【解决方案1】:

    您可以单独使用{} 块,您不需要(不一定)需要ifelse 或其他关键字。

    这样的块对于结构化代码很有用,例如,限制局部变量的范围,例如:

    {
         int myVar = ...;
    }
    

    myVar 在块外将不可见/不可访问,这样可能更容易阅读此代码,因为您不必考虑块外的myVar

    【讨论】:

      【解决方案2】:

      它被称为(匿名)代码块

      有一篇关于该功能动机的 SO 帖子。

      Anonymous code blocks in Java

      【讨论】:

        【解决方案3】:

        这只是一个复合语句。您的拼写错误不是语法错误的原因是,根据定义,if 语句后面跟着 exactly 一个语句。这可以是空语句 (;)、简单语句 (x = x + 1) 或复合语句 ({ ... })。

        复合语句本身(而不是用作 iffor 等的主体)通常用于定义一个范围,在该范围内可以定义一个具有精确生命周期的变量。

        // No foo out here
        {
           int foo;
           ...
        }
        // No foo here either
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-02-11
          • 1970-01-01
          • 1970-01-01
          • 2013-07-22
          • 2014-01-20
          • 2014-07-22
          • 2016-11-02
          • 1970-01-01
          相关资源
          最近更新 更多