我目前正在学习Java,并且给出了一个似乎无法回答简单答案的问题:
Java中以下符号的含义是什么:
{
?
当然,有一些共同的含义:if
语句的主体,for
循环,其他控制结构。但是它也可能是方法或初始化器的开始 - 这些似乎没有那么共同之处。
我花了很多时间在Java的上下文中搜索此符号的单个定义,但是没有找到任何足够的内容。
开头大括号在Java中表示什么是无所不包的定义?
答案 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 declaration,class declaration或statement。虽然这个定义涵盖了许多使用大括号的Java构造 - 例如,static initializer是一个块,for
或if
语句的主体(如果用括号括起来)是一个块 - 它不覆盖类主体或数组初始值设定项,它们具有不同的块内容。
{
缺乏一个单一的,无所不包的定义,不应该令人惊讶,也不应该在哲学上不令人满意。想象一下以下类似的问题:
“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
在某些情况下,必须使用大括号,例如:
有时它是可选的,例如:
if
,while
和for
声明还有许多其他使用花括号的情况:嵌套类,匿名类,初始化器,静态初始化器等。在每种情况下,我们使用相同的语法(花括号),但它带有不同的语义。