Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是';{';符号(大括号)在Java中表示什么?_Java_Parsing - Fatal编程技术网

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

什么是';{';符号(大括号)在Java中表示什么?,java,parsing,Java,Parsing,我目前正在学习Java,有人问了我一个似乎不符合简单答案的问题: 以下符号在Java中的含义是什么:{ 当然,有一些共同的含义:if语句的主体、for循环、其他控制结构。但是,它也可能是方法的开始,或者是初始值设定项——这些似乎没有什么共同之处 我花了很多时间在Java上下文中搜索这个符号的单个定义,但没有找到任何足够的定义 什么是Java中开头的大括号所表示的内容的包罗万象的定义?您的讲师提出的问题似乎不太好,因为在Java中,{符号没有一个统一的含义 在语句上下文中,{符号用于表示块语句的开

我目前正在学习Java,有人问了我一个似乎不符合简单答案的问题:

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

当然,有一些共同的含义:if语句的主体、
for
循环、其他控制结构。但是,它也可能是方法的开始,或者是初始值设定项——这些似乎没有什么共同之处

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


什么是Java中开头的大括号所表示的内容的包罗万象的定义?

您的讲师提出的问题似乎不太好,因为在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};
开括号符号的每一种用法都不同于其他所有用法。事实上,如果我们在这些不同的上下文中使用不同的符号,那么这种语言就会很好地工作

我认为对你的问题最好的回答是{在某些情况下被用作一个单元,无论它是块语句(许多语句被视为单个语句)、类(许多方法和字段被视为单个对象)、方法(许多语句被视为单个统一的代码段),一个初始值设定项(许多事情需要一次完成),等等


正如评论所指出的,在大多数上下文中,大括号引入了一个新的作用域。语句块、类体、初始值设定项体和函数体都引入了一个新的作用域,这一点必须牢记在心。(不过,数组初始化并不能做到这一点。)

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

另一种方法是不正确的:如果您在范围外定义一个变量,然后打开一个新变量,那么将从嵌套范围内识别该变量

例如:

int k = 5;
if (true) { //opening a new scope 
    // k is recognized here!
    int i = 10;
}
// here i is not recognized
在某些情况下,必须使用大括号,例如:

  • 类声明
  • 方法声明
有时它是可选的,例如:

  • if
    while
    for
    语句之后
还有许多其他使用花括号的情况:嵌套类、匿名类、初始值设定项、静态初始值设定项等等。在每种情况下,我们使用相同的语法(花括号),但语义不同

在Java中,大括号开头表示的内容的全面定义是什么

没有。我能给你的最接近的东西是一些模糊的东西,比如:

  • 某种语言结构序列的开始,以右大括号结束
没有更精确的单一定义的原因是,大括号是几种不同语言结构的一部分,至少包括(可能我遗漏了一些):

值得注意的是,在Java中,并不是每一个包含括号中某些内容的构造都是一个“块”。上面链接的规范定义了一个“块”作为一个由大括号括起的零个或多个
BlockStatement
s的序列。它进一步将
BlockStatement
定义为a、a或a。而这个定义涵盖了许多使用大括号的Java构造—例如,a是块,如果用大括号括起,
if
语句的主体,是一个块-它不包括类主体或数组初始值设定项,它们与块具有不同的内容

{
缺乏一个单一的、包罗万象的定义并不令人惊讶,也不应在哲学上令人不满意

“of”一词在英语中的含义是什么


当然,没有这样包罗万象的定义;相反,“of”是一个“的”字。你最好要么说“of”是一个介词,要么像字典一样列举各个词的含义。

虽然我认为你写了一个很好的答案,但我不同意“不是很好”这个问题。年轻程序员的一大障碍是理解范围的含义。在您提供的所有示例中,都有一个相互联系,这就是“新范围的开始”.The是您在回答中提到的上下文。@alfasin大多数示例都是这样,但数组文字初始化不适用。不过,我确实明白您的意思。@alfasin事实上,我想得越多,就越同意您的意见。我已相应地更新了我的回答。主持人注意:我已将此问题锁定为停止这是一场拔河比赛,两个派系似乎为了争夺这个帖子而反复关闭/删除/和取消删除/重新打开帖子。如果任何一方都这么在意,请在上面发布一个问题以找到一个c