当前位置: 首页 > 面试题库 >

为什么在类定义的末尾不需要分号但允许分号?

马银龙
2023-03-14
问题内容

我正在尝试从C ++转向Java。

我想知道的是,在C ++中,在类定义之后,需要使用分号(;),而在Java中则不需要。

也就是说,在C ++中:

class Person {
    public:
    string name;
    int number;
}; // Note this semicolon

但是在Java中:

class Person {
    public String name;
    public int number;
} // Semicolon is not required

很好,我知道。

但是, 我的问题是

当我在类定义的末尾添加分号时,Java也可以使用,例如:

class Person {
    public String name;
    public int number;
}; // Now this semicolon is confusing me!

我已经编译并执行了Java所示的两个程序片段,并且它们均有效。谁能解释为什么会这样?Java类定义末尾的分号代表什么?

很抱歉,这个问题的质量很低,但我确实需要对此进行澄清。希望Java方面的专家能对我有所帮助。

好吧,我已经在类定义和其他相关问题中看到了分号。

提前致谢。


问题答案:

我已经编译并执行了Java所示的两个程序片段,并且它们均有效。谁能解释为什么会这样?

之所以允许,是因为Java语法说允许。参见JLS
7.6

Java类定义末尾的分号代表什么?

没有。它是可选的“语法噪声”。

JLS对此进行了如下解释:

多余的“;” 出现在编译单元中类型声明级别的标记对编译单元的含义没有影响。Java编程语言中仅允许使用散列分号作为对习惯于放置“;”的C
++程序员的让步。在类声明之后。它们不应在新的Java代码中使用。

(请注意,这不是“空语句”。在允许使用语句的句法上下文中会出现一个空语句(JLS
14.6
)。空语句的存在可以更改代码的含义;例如if(a == b) ; c();vs if (a == b) c();



 类似资料:
  • 我正在尝试从C转换到Java。 我想知道的是,在C中,在类定义之后需要分号(),但在Java中则不是。 也就是说,在C中: 但在Java中: 那很好,我理解。 然而,我的问题是: 当我在类定义的末尾添加分号时,Java也可以工作,例如: 我已经编译并执行了为Java显示的两个程序片段,它们都有效。有人能解释为什么会这样吗?Java中类定义末尾的分号代表什么? 如果这个问题质量不高,我很抱歉,但我真

  • 问题内容: 我不小心写了一个Java语句,结尾有两个分号。Java编译器不显示任何错误,它可以运行。 码: 出于学习目的,我尝试在分号后添加不同的字符,并且Java编译器已将编译时错误显示为 令牌“)”上的语法错误,请删除此令牌 。 这个说法: 为什么Java将分号和其他字符视为不同? 问题答案: 因为双分号不会被视为双分号,而是会被视为分号和空语句。空的语句不执行任何操作,这不是错误。

  • 我在系统的分号后面加了一个分号。出来打印ln: 这对Java编译器来说是合法的,所以我检查了其他语句,它们也都是合法的。所以当我搜索并找到这些链接时: > 为什么Java在语句末尾不显示双分号错误? 当我用两个分号结束一行时,编译器并没有抱怨。为什么? 什么时候在方法结束括号后面加上分号? 为什么使用连续分号的代码会编译? “if”语句末尾的分号 我开始明白一个额外的分号意味着一个额外的空语句。

  • 我正在学习Rust,我发现函数有些混乱。根据官方参考,一个返回表达式: ...[is]用关键字返回表示。评估返回表达式将其参数移动到当前函数的输出槽中,破坏当前函数激活帧,并将控制权转移到调用者帧。 所以,这个程序工作: 当我在“返回”表达式中添加分号时,它仍然有效: 我对表达式语句(例如)的理解是,它将计算表达式,并忽略结果(而是使用)。如果使用

  • 《铁锈之书》第3.5章摘录: 我们使用关键字和值。循环结束后,我们使用分号结束将值赋给的语句。 加上代码片段: 我理解这是如何工作的,以及为什么结果是20,但我注意到,如果我删除包含关键字的行上的分号,程序是等效的。 为什么分号在这种情况下是可选的?

  • 问题内容: 我从编译器收到的错误是“分配的左侧必须是变量”。我的用例是深度复制,但并没有实际意义。 在C ++中,可以分配给。 问题不在于如何规避对的分配。这很简单,但是决定不进行变量的背后是什么原理。 原因是技术上的还是概念上的? 到目前为止,我的猜测-用随机方法重建对象的可能性容易出错(概念上),但在技术上是可行的。 编辑 请避免使用“因为Java规范这么说”的变体。我想知道 这个决定 的 原