- 语言的基本文字是语言符号。解析器首先将源代码分解成语言符号,然后弄清楚代码是由哪些语句和标识符等构成的。
- Java的符号化器(tokenizer)是“贪婪”的,在构建下一个语言符号时,它要抓取尽可能多的字符,而不关心所构建的语言符号序列是否有效。于是,就因为++比+长,表达式j = i+++++i;被解释为无效的i++ ++ +i;而不是有效的j = i++ + ++i;
- double类型的常量不能直接赋给float类型的变量,即使double类型的常量的值在float类型的有效范围内也是如此;
- 每种类型(基本类型或引用类型)都有与之相关联的表示该类型的class类的实例,即所有类都是class的实例;class实例化所有类,类实例化所有程序员使用的对象;
- 字段变量是类或接口的成员,它们有默认的初始值;局部变量没有任何默认的初始值,所以在使用之前必须被赋值,因为没有对其赋值通常是程序中的缺陷,编译器将会拒绝编译不能保证变量在使用之前已经被赋值的代码;
- 除了注解,唯一能应用于局部变量的修饰符是final;当局部变量会被局部或者匿名内部类访问时,就需要将其声明为是final的;
- 必须牢记的重要问题是修饰符能够应用于数组变量,但不能够应用于该变量所引用的数组元素;
- 在Java中有6种不同的命名空间:
- 包名
- 类型名
- 字段名
- 方法名
- 局部变量名(包括参数)
- 标号
- 当名字作为变量使用时,其含义是通过在不同的命名空间中搜索该名字声明的当前作用字段和包围作用字段来确定的;搜索顺序如下:
- 搜索在语句块和for循环中声明的局部变量,以及走位try语句和catch子句的参数的局部变量,接着搜索在所有包围代码块中声明的局部变量。该条规则将递归地应用于该名字,直至找到包含上述语句块的方法,或者直到不再存在任何包围块为止;
- 如果代码在方法或构造器中,则搜索方法或构造器的参数;
- 搜索类或接口的字段,包括所有可访问的继承而来的字段;
- 如果该类型是嵌套类型,则搜索包围块中的变量或包围类中的字段;如果该类型是静态嵌套类型,则仅搜索包围类型的静态字段。这条搜索规则将持续作用于更外部的所有包围块和包围类型;
- 搜索类或接口的静态字段,特别是在静态import语句中声明的字段;
- 搜索类或接口在按需静态import语句中声明的静态字段;
- 变量作用字段机制是为了向整个系统提供保护,而不是为了向重用标识符名字提供支持;
- 类型作用字段是通过包来定义的,其搜索顺序如下:
- 当前类型,包括继承类型;
- 当前类型的嵌套类型;
- 显示命名的导入类型;
- 在同一个包中声明的其他类型;
- 隐式命名的导入类型;
The Java Programming Language4th读书笔记-第七章 语言符号、值和变量
最新推荐文章于 2024-01-18 21:13:16 发布