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

时间:2016-12-19 19:04:08

标签: java parsing

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

  

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

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

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

开头大括号在Java中表示什么是无所不包的定义?

3 个答案:

答案 0 :(得分:15)

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

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

if (x == 0) {
    statementOne();
    statementTwo();
}

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

public class NewClass {
    ...

    public void foo() {
         ...
    }
}

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

class MyClass() {
    static int x;
    static {
        x = somethingHorrible();
    }
};

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

int[] arr = new int[] {1, 3, 7};

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

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

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

答案 1 :(得分:3)

  

在Java中,开口大括号表示什么是无所不包的定义?

没有一个。我能给你的最接近的东西是含糊不清的东西:

  • “某种语言结构序列的开始,以一个结束的大括号终止。”

没有更精确的单个定义的原因是,开括号是几种不同语言结构的一部分,至少包括(也许我错过了一些):

值得注意的是,请注意 Java中涉及括号中的一些内容的每个构造都是“块”。上面链接的规范将“块”定义为由大括号括起来的零个或多个BlockStatement s的序列。它进一步将BlockStatement定义为local variable declarationclass declarationstatement。虽然这个定义涵盖了许多使用大括号的Java构造 - 例如,static initializer是一个块,forif语句的主体(如果用括号括起来)是一个块 - 它覆盖类主体或数组初始值设定项,它们具有不同的块内容。

{缺乏一个单一的,无所不包的定义,不应该令人惊讶,也不应该在哲学上不令人满意。想象一下以下类似的问题:

  

“of of”用英语表示什么是无所不包的定义?

当然,没有这种无所不包的定义;相反,“of”是many meanings的一个词。你能做的最好的事情就是说“''是一个介词”或列举个别含义,就像字典一样。

答案 2 :(得分:1)

在Java中打开大括号时,意味着您打开一个新的范围(通常是嵌套范围)。要理解的一件重要事情是,您将在此范围内定义的变量(放置结束大括号的那一端)将不会在范围之外被识别。

另一种方法不是这样:如果你在范围之外定义一个变量,然后打开一个新变量,那么将从嵌套范围内识别变量。

示例:

int k = 5;
if (true) { //opening a new scope 
    // k is recognized here!
    int i = 10;
}
// here i is not recognized

在某些情况下,必须使用大括号,例如:

  • 班级宣言
  • 方法声明

有时它是可选的,例如:

  • 关注ifwhilefor声明

还有许多其他使用花括号的情况:嵌套类,匿名类,初始化器,静态初始化器等。在每种情况下,我们使用相同的语法(花括号),但它带有不同的语义。