Java如何解释关键字?

时间:2016-09-13 11:35:47

标签: java

我正在阅读java,所以通过浏览网络和资源,我开始了解java规范中的java define关键字。但我需要更多的清关。  所以我想要知道的是,因为我们在方法或类中使用的所有东西都是在一些java包中定义的。但它如何解决关于int,float等关键字的定义?关键字的一切如何运作?

更清楚地说,如果我必须使用Scanner类方法然后我必须导入java.util。*包然后我只能通过创建其对象然后编译器检查是否所有必需的Scanner类方法定义可用。那么在原始数据类型和关键字的情况下会发生什么? 谁实际提供了信息,它是编译器还是JVM以及如何。 有点让我困惑。

2 个答案:

答案 0 :(得分:5)

关键词是语言语法中的特殊词。关键字在语言中具有特殊含义。我个人喜欢区分保留字和关键字以及内置类型,但这只是我。 (例如,我不会将int称为关键字,它只是一种内置类型,因此它最多只是一个保留字。

编译器会对这些内容进行不同的处理。编译器知道如何处理publicintvoidclass等。

<强>更新

实际上,您需要导入包才能使用扫描仪:

public void M() throws FileNotFoundException {
    java.util.Scanner scanner = new java.util.Scanner(new File(""));
}

这是一段有效的代码段。 import只需将内容导入命名空间即可。如果您有java.util.Scannercom.business.Scanner,则无法导入它们,因为您的命名空间中现在存在冲突:您有两个Scanner

Scanner不是java 语言的一部分。 int是。就你的编译器而言,Scanner没有这样的东西,但有intdouble之类的东西。实质上:这些关键字的定义内置于编译器中。原始数据类型是编译器知道的内置类型。您不必告诉编译器double是什么,它只知道。但是,您必须告诉编译器Scanner是什么。 (当然,如果你正在编写一个编译器,你必须教你编译器你正在编写双精度函数。)

whilepublic等关键字不同,因为它们不是数据类型。它们是语言的语法(和语义)的一部分。编译器知道如何处理这些。如果它看到while它会产生机器代码(或java中的字节码),只要某个条件为真,它就会循环。

想想一个像这样的语法的简单语言:

Program: <Identifier>, 'says', <Text>
Identifier: Character | Character, Identifier
Text: '"', [Character], '"'

这看起来令人困惑,但基本上这个语法意味着程序(句子)以名称开头,然后是,然后是 Text < / em>的。在这种情况下,says是一个关键字。它在语言中具有特殊含义。例如,当编译器看到包含says的程序时,编译器将生成在屏幕上显示文本的代码。

答案 1 :(得分:0)

编译器在找到标识符

时遵循这些简单规则
  1. 在内置关键字列表中查找(例如publicabstractreturn等。如果它包含在该列表中,则它是关键字。
  2. 如果找不到,则与内置类型相同(例如intchardoublefloat等。
  3. 如果未找到,请按以下顺序在当前范围的定义中查找:
    • 在当前区块内。
    • 在当前的方法中。
    • 在当前的类或接口中。
    • 在当前包中。
  4. 如果未找到,请在当前来源中导入的定义中查找(通过import声明)。
  5. 如您所见,无论当前范围或声明的导入,内置类型和保留关键字始终具有优先级。