Java中的'{'符号(花括号)表示什么?

Ste*_*oon -12 java parsing

我目前正在学习Java,并且给出了一个似乎无视简单答案的问题:

什么是Java中的以下符号的含义:{

当然,还有一个共同的含义:if声明的主体,for循环,其他控制结构.但是它也可能是方法或初始化器的开始 - 这些似乎没有那么共同之处.

我花了很多时间在Java的上下文中搜索这个符号的单个定义,但是没有找到任何足够的东西.

什么是开放大括号在Java中表示的全面定义?

tem*_*def 15

你的导师提出的问题似乎并不那么好,因为Java中的{符号没有统一的含义.

在语句的上下文中,{符号用于表示块语句的开头.这解释了{with if语句,while循环,for循环,do ... while循环,switch语句等的所有用法,它们在技术上仅适用于单个语句,但通常与块语句一起使用:

if (x == 0) {
    statementOne();
    statementTwo();
}
Run Code Online (Sandbox Code Playgroud)

在方法或类型(类/接口/枚举/注释)的上下文中,{符号用于表示类或方法的主体的开头:

public class NewClass {
    ...

    public void foo() {
         ...
    }
}
Run Code Online (Sandbox Code Playgroud)

它也可以在类中用于声明初始化器或静态初始化器块:

class MyClass() {
    static int x;
    static {
        x = somethingHorrible();
    }
};
Run Code Online (Sandbox Code Playgroud)

在数组文字的上下文中,{符号用于表示该文字内使用的元素列表的开头:

int[] arr = new int[] {1, 3, 7};
Run Code Online (Sandbox Code Playgroud)

开放式支架符号的这些用途中的每一个都与所有其他用途不同.事实上,如果我们为这些不同的上下文中的每一个使用不同的符号,那么语言就可以正常工作.

我认为对你的问题的最佳答案是{用于某些事物将被视为一个单元的上下文中,是否是块语句(许多语句被视为单个语句),类(许多方法和字段)被视为单个对象),一种方法(许多语句被视为一个统一的代码片段),一个初始化器(许多需要一次完成的事情),等等.

在大多数这些背景中,正如评论所指出的那样,大括号引入了一个新的范围.语句块,类主体,初始化主体和函数体都引入了一个新的范围,这绝对是要记住的重要事项.(但是,数组初始化不会这样做.)

  • 虽然我认为你写了一个很好的答案,但我不同意这个"不太好"的问题.年轻程序员的一大障碍是了解*scope*的含义.在您提供的所有示例中,存在一个相互连接,它是"新范围的开始".[scope](https://www.cs.umd.edu/~clin/MoreJava/Objects/local.html)是你在答案中提到的*context*. (3认同)
  • @alfasin大多数示例都是如此,但它不适用于数组文字初始化.不过,我确实看到了你在说什么. (2认同)
  • @alfasin实际上,我越是想到它,我就越同意你.我已相应更新了我的答案. (2认同)