我正在阅读java,所以通过浏览网络和资源,我开始了解java规范中的java define关键字。但我需要更多的清关。 所以我想要知道的是,因为我们在方法或类中使用的所有东西都是在一些java包中定义的。但它如何解决关于int,float等关键字的定义?关键字的一切如何运作?
更清楚地说,如果我必须使用Scanner类方法然后我必须导入java.util。*包然后我只能通过创建其对象然后编译器检查是否所有必需的Scanner类方法定义可用。那么在原始数据类型和关键字的情况下会发生什么? 谁实际提供了信息,它是编译器还是JVM以及如何。 有点让我困惑。
答案 0 :(得分:5)
关键词是语言语法中的特殊词。关键字在语言中具有特殊含义。我个人喜欢区分保留字和关键字以及内置类型,但这只是我。 (例如,我不会将int
称为关键字,它只是一种内置类型,因此它最多只是一个保留字。
编译器会对这些内容进行不同的处理。编译器知道如何处理public
,int
,void
,class
等。
<强>更新强>
实际上,您需要导入包才能使用扫描仪:
public void M() throws FileNotFoundException {
java.util.Scanner scanner = new java.util.Scanner(new File(""));
}
这是一段有效的代码段。 import
只需将内容导入命名空间即可。如果您有java.util.Scanner
和com.business.Scanner
,则无法导入它们,因为您的命名空间中现在存在冲突:您有两个Scanner
。
Scanner
不是java 语言的一部分。 int
是。就你的编译器而言,Scanner
没有这样的东西,但有int
,double
之类的东西。实质上:这些关键字的定义内置于编译器中。原始数据类型是编译器知道的内置类型。您不必告诉编译器double
是什么,它只知道。但是,您必须告诉编译器Scanner
是什么。 (当然,如果你正在编写一个编译器,你必须教你编译器你正在编写双精度函数。)
while
,public
等关键字不同,因为它们不是数据类型。它们是语言的语法(和语义)的一部分。编译器知道如何处理这些。如果它看到while
它会产生机器代码(或java中的字节码),只要某个条件为真,它就会循环。
想想一个像这样的语法的简单语言:
Program: <Identifier>, 'says', <Text>
Identifier: Character | Character, Identifier
Text: '"', [Character], '"'
这看起来令人困惑,但基本上这个语法意味着程序(句子)以名称开头,然后是说,然后是 Text < / em>的。在这种情况下,says
是一个关键字。它在语言中具有特殊含义。例如,当编译器看到包含says
的程序时,编译器将生成在屏幕上显示文本的代码。
答案 1 :(得分:0)
编译器在找到标识符:
时遵循这些简单规则public
,abstract
,return
等。如果它包含在该列表中,则它是关键字。int
,char
,double
,float
等。import
声明)。如您所见,无论当前范围或声明的导入,内置类型和保留关键字始终具有优先级。