Java语言规范 基于 Java SE 8 作者:詹姆斯 高斯林 等出版时间:2016内容简介 本书是Java语言**版本的规范,全书从Java*基础的文法、类型、变量到高级特性lambda表达式、线程与锁等进行了详尽阐述。该规范针对每一项语言特性都给出了代表性的示例程序,以帮助读者更容易地理解和掌握这些特性。读者通过阅读本规范,可以全面系统地了解Java语言的各项特性,为充分利用这些特性来编写出更加高效简洁的Java程序提供帮助。读者还可以从Oracle的Java官方网站上看到本书的**进展和修订,以了解Java语言的**发展动向。目录目 录The Java Language Specification, Java SE 8 Edition出版者的话译者序前言第1章 概述 11.1 本书结构 11.2 样例程序 41.3 表示法 41.4 与预定义的类和接口的关系 41.5 反馈 51.6 参考文献 5第2章 文法 62.1 上下文无关文法 62.2 词法 62.3 句法 62.4 文法表示法 6第3章 词法结构 93.1 Unicode 93.2 词法翻译 103.3 Unicode转义字符 103.4 行终止符 113.5 输入元素和符号 123.6 空白字符 123.7 注释 133.8 标识符 143.9 关键字 153.10 字面常量 153.10.1 整数字面常量 153.10.2 浮点数字面常量 193.10.3 布尔字面常量 213.10.4 字符字面常量 213.10.5 字符串字面常量 223.10.6 字符和字符串字面常量的转义序列 233.10.7 空字面常量 243.11 分隔符 243.12 操作符 24第4章 类型、值和变量 254.1 类型和值的种类 254.2 简单类型和值 254.2.1 整数类型和值 264.2.2 整数操作 264.2.3 浮点数类型、格式和值 274.2.4 浮点数操作 294.2.5 boolean类型和布尔值 314.3 引用类型和值 324.3.1 对象 334.3.2 Object类 354.3.3 String类 354.3.4 当引用类型相同时 354.4 类型变量 364.5 参数化类型 374.5.1 参数化类型的类型引元 384.5.2 参数化类型的成员和构造器 404.6 类型擦除 404.7 可具化类型 414.8 原生类型 424.9 交集类型 454.10 子类型化 454.10.1 简单类型之间的子类型化 464.10.2 类与接口类型之间的子类型化 464.10.3 数组类型之间的子类型化 474.10.4 **上边界 474.11 使用类型之处 494.12 变量 524.12.1 简单类型的变量 524.12.2 引用类型的变量 524.12.3 变量的种类 544.12.4 final变量 554.12.5 变量的初始值 564.12.6 类型、类和接口 57第5章 类型转换与上下文 595.1 转换的种类 615.1.1 标识转换 615.1.2 拓宽简单类型转换 615.1.3 窄化简单类型转换 625.1.4 拓宽和窄化简单类型转换 645.1.5 拓宽引用类型转换 645.1.6 窄化引用类型转换 645.1.7 装箱转换 655.1.8 拆箱转换 665.1.9 非受检转换 675.1.10 捕获转换 675.1.11 字符串转换 695.1.12 被禁止的转换 695.1.13 值集转换 705.2 赋值上下文 705.3 方法调用上下文 745.4 字符串上下文 755.5 强制类型转换上下文 755.5.1 引用类型强制类型转换 775.5.2 受检强制类型转换和非受检强制类型转换 795.5.3 运行时的受检强制类型转换 805.6 数字上下文 815.6.1 一元数字提升 825.6.2 二元数字提升 83第6章 名字 846.1 声明 846.2 名字与标识符 896.3 声明的作用域 916.4 遮蔽和遮掩 936.4.1 遮蔽 946.4.2 遮掩 966.5 确定名字的含义 976.5.1 根据上下文的名字的句法分类 986.5.2 对上下文歧义名字的重分类 1006.5.3 包名的含义 1016.5.4 PackageOrTypeNames的含义 1026.5.5 类型名的含义 1026.5.6 表达式名的含义 1036.5.7 方法名的含义 1056.6 访问控制 1066.6.1 确定可访问性 1076.6.2 受保护访问权限的细节 1106.7 完全限定名和规范名 111第7章 包 1137.1 包成员 1137.2 主机对包的支持 1147.3 编译单元 1157.4 包声明 1167.4.1 具名包 1167.4.2 不具名包 1167.4.3 包的可观察性 1177.5 导入声明 1177.5.1 单类型导入声明 1187.5.2 按需类型导入声明 1197.5.3 单静态导入声明 1207.5.4 按需静态导入声明 1207.6 顶层类型声明 121第8章 类 1238.1 类声明 1248.1.1 类修饰符 1248.1.2 泛化类和类型参数 1268.1.3 内部类和包围实例 1288.1.4 超类和子类 1308.1.5 超接口 1328.1.6 类体和成员声明 1348.2 类成员 1358.3 域声明 1388.3.1 域修饰符 1418.3.2 域的初始化 1458.3.3 在域初始化过程中的向前引用 1468.4 方法声明 1488.4.1 形参 1498.4.2 方法签名 1528.4.3 方法修饰符 1528.4.4 泛化方法 1568.4.5 方法的结果 1578.4.6 方法抛出异常 1578.4.7 方法体 1588.4.8 继承、覆盖和隐藏 1598.4.9 重载 1668.5 成员类型声明 1688.5.1 静态成员类型声明 1698.6 实例初始化器 1698.7 静态初始化器 1698.8 构造器声明 1708.8.1 形参 1708.8.2 构造器签名 1718.8.3 构造器修饰符 1718.8.4 泛化构造器 1728.8.5 构造器抛出异常 1728.8.6 构造器的类型 1728.8.7 构造器体 1728.8.8 构造器重载 1768.8.9 缺省构造器 1768.8.10 阻止类的实例化 1778.9 枚举类型 1778.9.1 枚举常量 1788.9.2 枚举体声明 1788.9.3 枚举成员 180第9章 接口 1849.1 接口声明 1849.1.1?接口修饰符 1859.1.2 泛化接口和类型参数 1859.1.3 超接口和子接口 1869.1.4 接口体和成员声明 1879.2 接口成员 1879.3 域(常量)声明 1879.3.1 接口中域的初始化 1899.4 方法声明 1899.4.1 继承和覆盖 1909.4.2 重载 1939.4.3 接口方法体 1939.5 成员类型声明 1939.6 注解类型 1949.6.1 注解类型元素 1959.6.2 注解类型元素的缺省值 1979.6.3 可重复的注解类型 1989.6.4 预定义的注解类型 2009.7 注解 2049.7.1 普通注解 2059.7.2 标记注解 2079.7.3 单元素注解 2079.7.4 注解可以出现在何处 2089.7.5 同种类型的多重注解 2119.8 函数型接口 2129.9 函数类型 214第10章 数组 21810.1 数组类型 21810.2 数组变量 21910.3 数组创建 22010.4 数组访问 22010.5 数组存储异常 22010.6 数组初始化器 22110.7 数组成员 22210.8 数组的Class对象 22310.9 字符数组不是String 224第11章 异常 22511.1 异常的种类和成因 22511.1.1 异常的种类 22511.1.2 异常的成因 22611.1.3 异步异常 22611.2 异常的编译时检查 22711.2.1 表达式异常分析 22811.2.2 语句异常分析 22811.2.3 异常检查 22911.3 异常的运行时处理 230第12章 执行 23312.1 Java虚拟机启动 23312.1.1 加载Test类 23312.1.2 链接Test:校验、准备、(可选的)解析 23312.1.3 初始化Test:执行初始化器 23412.1.4 调用Test.main 23412.2 加载类和接口 23512.2.1 加载过程 23512.3 链接类和接口 23612.3.1 二进制表示的校验 23612.3.2 类或接口类型的准备 23612.3.3 符号引用的解析 23712.4 初始化类和接口 23712.4.1 当初始化发生时 23812.4.2 详细的初始化过程 23912.5 创建新的类实例 24112.6 类实例的终结 24312.6.1 实现终结 24412.6.2 与内存模型的交互 24512.7 卸载类和接口 24612.8 程序退出 247第13章 二进制兼容性 24813.1 二进制形式 24913.2 二进制兼容性到底是什么 25213.3 包的演化 25213.4 类的演化 25313.4.1 abstract类 25313.4.2 final类 25313.4.3 public类 25313.4.4 超类和超接口 25313.4.5 类的类型参数 25413.4.6 类体和成员声明 25513.4.7 对成员和构造器的访问权限 25613.4.8 域声明 25713.4.9 final域和static常量变量 25813.4.10 static域 26013.4.11 transient域 26013.4.12 方法和构造器声明 26013.4.13 方法和构造器的类型参数 26113.4.14 方法和构造器的形式参数 26113.4.15 方法返回类型 26213.4.16 abstract方法 26213.4.17 final方法 26213.4.18 native方法 26313.4.19 static方法 26313.4.20 synchronized方法 26313.4.21 方法和构造器的抛出物 26313.4.22 方法和构造器体 26313.4.23 方法和构造器的重载 26413.4.24 方法覆盖 26413.4.25 静态初始化器 26413.4.26 枚举的演化 26513.5 接口的演化 26513.5.1 public接口 26513.5.2 超接口 26513.5.3 接口成员 26513.5.4 接口的类型参数 26613.5.5 域声明 26613.5.6 接口方法声明 26613.5.7 注解类型的演化 267第14章 块和语句 26814.1 语句的正常结束和猝然结束 26814.2 块 26914.3 局部类声明 26914.4 局部变量声明语句 27014.4.1 局部变量声明符和类型 27114.4.2 局部变量声明的执行 27114.5 语句 27114.6 空语句 27214.7 标号语句 27314.8 表达式语句 27414.9 if语句 27414.9.1 if-then语句 27414.9.2 if-then-else语句 27514.10 assert语句 27514.11 switch语句 27714.12 while语句 28014.12.1 while语句的猝然结束 28014.13 do语句 28114.13.1 do语句的猝然结束 28114.14 for语句 28214.14.1 基本for语句 28214.14.2 增强for语句 28414.15 break语句 28514.16 continue语句 28714.17 return语句 28814.18 throw语句 28914.19 synchronized语句 29014.20 try语句 29114.20.1 try-catch的执行 29314.20.2 try-finally和try-catch-finally的执行 29414.20.3 带资源的try 29614.21 不可达语句 299第15章 表达式 30315.1 计算、表示和结果 30315.2 表达式的形式 30315.3 表达式的类型 30415.4 FP-严格的表达式 30415.5 表达式和运行时检查 30515.6 计算的正常和猝然结束 30615.7 计算顺序 30715.7.1 首先计算左操作数 30715.7.2 在操作之前计算操作数 30815.7.3 计算遵循括号和优先级 30915.7.4 引元列表是自左向右计算的 31015.7.5 其他表达式的计算顺序 31015.8 基本表达式 31115.8.1 词法上的字面常量 31215.8.2 类字面常量 31215.8.3 this 31315.8.4 限定的this 31315.8.5 带括号的表达式 31415.9 类实例创建表达式 31415.9.1 确定要实例化的类 31515.9.2 确定包围实例 31615.9.3 选择构造器及其引元 31715.9.4 类实例创建表达式的运行时计算 31915.9.5 匿名类声明 32015.10 数组创建和访问表达式 32115.10.1 数组创建表达式 32115.10.2 数组创建表达式的运行时执行 32215.10.3 数组访问表达式 32415.10.4 数组访问表达式的运行时计算 32415.11 域访问表达式 32615.11.1 使用基本表达式访问域 32615.11.2 使用super访问超类成员 32815.12 方法调用表达式 32915.12.1 编译时的步骤1:确定要搜索的类或接口 33015.12.2 编译时的步骤2:确定方法签名 33215.12.3 编译时的步骤3:选中的方法是否合适 34215.12.4 方法调用的运行时计算 34315.13 方法引用表达式 35015.13.1 方法引用的编译时声明 35215.13.2 方法引用的类型 35515.13.3 方法引用的运行时计算 35615.14 后缀表达式 35915.14.1 表达式名字 35915.14.2 后缀递增操作符++ 35915.14.3 后缀递减操作符-- 35915.15 一元操作符 36015.15.1 前缀递增操作符++ 36115.15.2 前缀递减操作符-- 36115.15.3 一元加号操作符+ 36215.15.4 一元减号操作符- 36215.15.5 按位取反操作符~ 36215.15.6 逻辑取反操作符! 36215.16 强制类型转换表达式 36315.17 乘除操作符 36415.17.1 乘法操作符* 36415.17.2 除法操作符/ 36515.17.3 取余操作符% 36615.18 加减操作符 36715.18.1 字符串连接操作符+ 36815.18.2 用于数字类型的加减操作符 (+和-) 36915.19 移位操作符 37115.20 关系操作符 37115.20.1 数字比较操作符和>= 37215.20.2 类型比较操作符instanceof 37215.21 判等操作符 37315.21.1 数字判等操作符==和!= 37315.21.2 布尔判等操作符==和!= 37415.21.3 引用判等操作符==和!= 37415.22 位操作符与逻辑操作符 37515.22.1 整数位操作符&、^和| 37515.22.2 布尔逻辑操作符&、^和| 37615.23 条件与操作符&& 37615.24 条件或操作符|| 37615.25 条件操作符? : 37715.25.1 布尔条件表达式 38115.25.2 数字型条件表达式 38115.25.3 引用条件表达式 38215.26 赋值操作符 38315.26.1 简单赋值操作符= 38315.26.2 复合赋值操作符 38715.27 lambda表达式 39115.27.1 lambda参数 39315.27.2 lambda体 39415.27.3 lambda表达式的类型 39715.27.4 lambda表达式的运行时计算 39815.28 常量表达式 399第16章 明确赋值 40016.1 明确赋值和表达式 40416.1.1 布尔常量表达式 40416.1.2 条件与操作符&& 40416.1.3 条件或操作符|| 40416.1.4 逻辑取反操作符! 40516.1.5 条件操作符? : 40516.1.6 其他boolean类型的表达式 40516.1.7 赋值表达式 40616.1.8 操作符++和-- 40616.1.9 其他表达式 40616.2 明确赋值与语句 40716.2.1 空语句 40716.2.2 块 40716.2.3 局部类声明语句 40816.2.4 局部变量声明语句 40816.2.5 标号语句 40916.2.6 表达式语句 40916.2.7 if语句 40916.2.8 assert语句 40916.2.9 switch语句 41016.2.10 while语句 41016.2.11 do语句 41016.2.12 for语句 41116.2.13 break、continue、return和throw语句 41216.2.14 synchronized语句 41216.2.15 try语句 41216.3 明确赋值与参数 41316.4 明确赋值与数组初始化器 41316.5 明确赋值与枚举常量 41316.6 明确赋值与匿名类 41416.7 明确赋值与成员类型 41416.8 明确赋值与静态初始化器 41416.9 明确赋值、构造器和实例初始化器 415第17章 线程与锁 41617.1 同步 41617.2 等待集和通知 41717.2.1 等待 41717.2.2 通知 41817.2.3 中断 41817.2.4 等待、通知和中断的交互 41817.3 睡眠和让步 41917.4 内存模型 41917.4.1 共享变量 42117.4.2 动作 42117.4.3 程序和程序顺序 42217.4.4 同步顺序 42217.4.5 “之前发生”顺序 42317.4.6 执行 42517.4.7 良构执行 42517.4.8 执行和因果关系要求 42617.4.9 可观察的行为和不终止的执行 42817.5 final域的语义 42917.5.1 final域的语义 43017.5.2 在构造阶段读final域 43017.5.3 对final域的后续修改 43117.5.4 写受保护的域 43217.6 字撕裂 43217.7 double和long的非原子化处理 433第18章 类型推断 43418.1 概念与表示法 43518.1.1 推断变量 43518.1.2 约束公式 43518.1.3 边界 43518.2 归纳 43618.2.1 表达式可兼容性约束 43718.2.2 类型可兼容性约束 44018.2.3 子类型化约束 44018.2.4 类型相等性约束 44218.2.5 受检异常约束 44218.3 合并 44318.3.1 互补的边界对 44418.3.2 涉及捕获转换的边界 44418.4 解析 44518.5 推断的使用 44618.5.1 调用可应用性的推断 44718.5.2 调用类型的推断 44818.5.3 函数型接口的参数化版本推断 45118.5.4 更具体方法的推断 452第19章 语法 454索引 470 上一篇: Java数据结构和算法 第二版(含示例代码及Applet) 下一篇: Java语言程序设计-基础篇 原书第八版