我正在尝试从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添加这个只是为了像你这样从C切换的人!
在Java中,一个分号是一个几乎可以在任何地方编写的声明。它的唯一目的是简化这些语言的过渡。
例如,以下Java也是正确的:
;;;;;;;;;;
class X{
;;;;;;;;;;;;;;
} ;;;;;;;;;;;;;;;
分号被简单地视为不起任何作用的空声明。
以下引用规范第7.6段:
额外“;”出现在编译单元中类型声明级别的标记对编译单元的含义没有影响。Java编程语言中只允许使用零散的分号,作为对习惯于放置“;”的C程序员的让步在类声明之后。它们不应该在新的Java代码中使用。
所以如你所见,这真的只适合像你这样的人:)。
您甚至可以使用一行分号作为良好的视觉分隔。然而,我强烈建议不要这样做。但这可能有助于吹牛。E、 g.:
class X {
// Member variables
private int i;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
// Constructors
X(){}
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
// Methods
void foo(){}
}
在早期,允许这样做是C/C程序员更熟悉Java的方式之一。这种熟悉对Java的采用很重要。
下面是它在语法上的工作方式。
根据JLS 7.3,在顶级类之后,它可以工作,因为编译单元包含以下序列:
CompilationUnit:
PackageDeclaration(opt) ImportDeclarations(opt) TypeDeclarations(opt)
根据JLS 7.6,类型声明为以下任一项:
TypeDeclaration:
ClassDeclaration
InterfaceDeclaration
;
根据JLS 8.1.6,在嵌套在其他类中的成员类之后,它可以工作,因为分号可以是类成员声明:
ClassMemberDeclaration:
FieldDeclaration
MethodDeclaration
ClassDeclaration
InterfaceDeclaration
;
根据JLS 14.6,在本地类之后,在方法内部,它可以工作,因为分号可以是空语句:
EmptyStatement:
;
我已经编译并执行了为Java显示的两个程序片段,它们都可以工作。有人能解释为什么会这样吗?
它是允许的,因为Java语法说它是允许的;见JLS 7.6。
Java中类定义末尾的分号代表什么?
没有什么它是可选的“语法噪音”。
JLS解释如下:
在编译单元中类型声明级别出现的额外";"标记对编译单元的含义没有影响。在Java编程语言中允许使用迷路分号,这仅是对习惯于将";"放在类声明之后的C程序员的让步。它们不应用于新的Java代码。
(请注意,这不是“空语句”。空语句(JLS 14.6)出现在允许使用语句的语法上下文中。空语句的存在可能会改变代码的含义;e、 g.<代码>如果(a==b);c() 与<代码>相对 )
问题内容: 我正在尝试从C ++转向Java。 我想知道的是,在C ++中,在类定义之后,需要使用分号(),而在Java中则不需要。 也就是说,在C ++中: 但是在Java中: 很好,我知道。 但是, 我的问题是 : 当我在类定义的末尾添加分号时,Java也可以使用,例如: 我已经编译并执行了Java所示的两个程序片段,并且它们均有效。谁能解释为什么会这样?Java类定义末尾的分号代表什么? 很
我正在学习Rust,我发现函数有些混乱。根据官方参考,一个返回表达式: ...[is]用关键字返回表示。评估返回表达式将其参数移动到当前函数的输出槽中,破坏当前函数激活帧,并将控制权转移到调用者帧。 所以,这个程序工作: 当我在“返回”表达式中添加分号时,它仍然有效: 我对表达式语句(例如)的理解是,它将计算表达式,并忽略结果(而是使用)。如果使用
问题内容: 我不小心写了一个Java语句,结尾有两个分号。Java编译器不显示任何错误,它可以运行。 码: 出于学习目的,我尝试在分号后添加不同的字符,并且Java编译器已将编译时错误显示为 令牌“)”上的语法错误,请删除此令牌 。 这个说法: 为什么Java将分号和其他字符视为不同? 问题答案: 因为双分号不会被视为双分号,而是会被视为分号和空语句。空的语句不执行任何操作,这不是错误。
我在系统的分号后面加了一个分号。出来打印ln: 这对Java编译器来说是合法的,所以我检查了其他语句,它们也都是合法的。所以当我搜索并找到这些链接时: > 为什么Java在语句末尾不显示双分号错误? 当我用两个分号结束一行时,编译器并没有抱怨。为什么? 什么时候在方法结束括号后面加上分号? 为什么使用连续分号的代码会编译? “if”语句末尾的分号 我开始明白一个额外的分号意味着一个额外的空语句。
问题内容: 我只是想要一些有关此的信息。 什么是在的结尾文字呢?这叫什么?为什么使用它? 问题答案: 在表明它是一个浮点文字,不是双字面它并没有一个特定的技术名称,我知道(这将暗示以其它方式) -我倾向于把它称为“字母后缀”如果我需要参考具体来说,尽管有点武断! 例如: 您当然可以: …几乎可以完成同一件事,但是F是一种更简洁,更简洁的表示方式。 为什么选择double作为默认值而不是float?
《铁锈之书》第3.5章摘录: 我们使用关键字和值。循环结束后,我们使用分号结束将值赋给的语句。 加上代码片段: 我理解这是如何工作的,以及为什么结果是20,但我注意到,如果我删除包含关键字的行上的分号,程序是等效的。 为什么分号在这种情况下是可选的?