Java 为什么可以';t'#'''';:';是否在标识符中使用?

Java 为什么可以';t'#'''';:';是否在标识符中使用?,java,scjp,Java,Scjp,我理解为什么标识符不能以数字或“-”开头 为什么不能将“#”、“点”和“:”(冒号)用作标识符的一部分 标识符是Java字母和Java数字的无限长序列,其中的第一个必须是Java字母 。。。“Java字母”是方法character.isJavaIdentifierStart(int)返回true的字符 这些不是Java字母,所以不能从它们开始$是,但这种用法更多地保留给内部类。您不能使用为JVM保留的任何字符,因为JVM将这些字符识别为seprators delimters。这与使用“new”关

我理解为什么标识符不能以数字或“-”开头

为什么不能将“#”、“点”和“:”(冒号)用作标识符的一部分

标识符是Java字母和Java数字的无限长序列,其中的第一个必须是Java字母

。。。“Java字母”是方法
character.isJavaIdentifierStart(int)
返回true的字符


这些不是Java字母,所以不能从它们开始<代码>$是,但这种用法更多地保留给内部类。

您不能使用为JVM保留的任何字符,因为JVM将这些字符识别为seprators delimters。这与使用“new”关键字作为变量名基本相同,在Java中这是非法操作。

不应该”是不正确的定义。更好地使用“不得”或“不能”

一旦我们改变了一个问题,我们就可以回答它。原因是这样定义java编程语言。因此,您可以问“为什么java创建者定义了这样的规则?”

可能有几个答案。其中一个最相关的(IMHO)是所有编程语言(至少是我所知道的编程语言)对标识符中可以使用的字符有或多或少相同的定义:

字母、数字或下划线,从字母或下划线开始

顺便说一句,java扩展了这一规则,因为它允许使用任何字母,包括国家字母表,而其他(至少较旧的)编程语言通常只允许使用拉丁字母

在您编写的所有字符中,我认为理论上只有
#
可以包含在标识符所允许的字符列表中,但他们决定不这样做,可能是考虑到java的未来版本,该字符可能会成为语言的一部分


我认为
的用法显然是不可能的。考虑操作员的

因为你的代码无法编译?注意,数字可能是标识符的一部分。我不知道你从哪里得到这个规则。另外,想想点是否可以作为标识符的一部分。这段代码会做什么:
foo.bar.baz.hello()
?酒吧会是一个富国吗?或者foo.bar会是一个变量吗?因为它们是不允许的,因为它们在Java所基于的C语言中是不允许的。在某些情况下,他们可能会允许
#
,虽然它是保留供将来使用的,但是
在Java中有特殊的含义。因为JLS说是这样(tm)是的,你是正确的,但是为什么我们不能使用字符串foo.bar.baz.hello;因为当您调用
int length=foo.bar.baz.hello.length()
时,您不知道
foo.bar.baz.hello
是否是一个变量,或者
hello
是否是
foo.bar.baz
的字段,或者
baz.hello
是否是
foo.bar
的字段,等等。即使编译器能够计算出来,这将使人类极难理解代码。很难理解的代码是你想不惜一切代价避免的。谢谢你,我理解@AlexR,但为什么我们不应该使用。(点)?Do更为明显。如何引用字段、方法或对象?非常感谢Alex耐心地回答我的问题(尽管看起来很傻)。我想问题是为什么JLS说你不能。