● 《JAVA 学习笔记(第8版)》是作者多年来教学实践经验的总结,汇集了学员在学习课程或认证考试中遇到的概念、操作、应用等问题及解决方案
● 针对JavaSE8新功能全面改版,无论是章节架构或范例程序代码,都做了重新编写与全面翻新
● 详细介绍了JVM、JRE、JavaSEAPI、JDK与IDE之间的对照关系
● 从JavaSEAPI的源代码分析,了解各种语法在JavaSEAPI中的具体应用
● 提供练习的Lab操作文档,方便读者掌握练习重点
● 将IDE操作纳入教学内容使读者能与实践结合,提供视频教学能更清楚地帮助读者掌握操作步骤
超值赠送:
各章NetBeans范例项目
Lab的NetBeans项目
教学操作视频
《JAVA 学习笔记(第8版)》是作者多年来教学实践经验的总结,汇集了学生在学习Java或认证考试时遇到的概念、操作、应用等问题及解决方案。
《JAVA 学习笔记(第8版)》针对Java SE 8新功能全面改版,无论是章节架构或范例程序代码,都做了重新编写与全面翻新,并详细介绍了JVM、JRE、Java SE API、JDK与IDE之间的对照关系。必要时可从Java SE API的源代码分析,了解各种语法在Java SE API中如何应用。对于建议练习的范例提供了Lab文档,以突出练习重点。此外,本书还将IDE操作纳为教学内容之一,让读者能与实践相结合,提供的教学视频可以让读者更清楚地掌握操作步骤。
《JAVA 学习笔记(第8版)》适合Java的初、中级读者以及广大Java应用开发人员。
1.1 Java不只是语言
从1995年至今,Java已经过20个年头,经过这些年的演进,正如本节标题所示,Java已不仅是个程序语言,也代表了解决问题的平台(Platform),更代表了原厂、各个厂商、社群、开发者与用户沟通的成果。若仅以程序语言的角度来看待Java,正如冰山一角,你仅看到Java身为程序语言的一部分,而没看到Java身为程序语言之外,更可贵也更为庞大的资源。
1.1.1 前世今生
一个语言的诞生有其目的,因为这个目的而成就了语言的主要特性。探索Java的历史演进,对于掌握Java特性与各式可用资源,着实有其帮助。
1. Java诞生
Java最早是Sun公司绿色项目Green Project中撰写Star7应用程序的程序语言,当时名称不是Java,而是取名为Oak。
绿色项目始于1990年12月,由Patrick Naughton、Mike Sheridan与James Gosling(James Gosling被尊称为Java之父)主持,目的是希望构筑出下一波计算机应用趋势并加以掌握,他们认为下一波计算机应用趋势会集中在消费性数字产品(就像现在的PDA、手机等消费性电子商品)的使用上。1992年9月3日,Green Team项目小组展示了Star7手持设备,这个设备具备无线网络连接、5inLCD彩色屏幕、PCMCIA接口等功能,而Oak在绿色项目中的目的,是用来撰写Star7上应用程序的程序语言。
Oak名称的由来,是因为James Gosling的办公室窗外有一棵橡树(Oak),就顺手取了这个名称。但后来发现Oak名称已经被注册了,工程师们边喝咖啡边讨论着新名称,最后灵机一动而改名为Java。
Java本身会见到许多为了节省资源而作的设计,像是动态加载类别文档、字符串池(String Pool)等特性,这是因为Java一开始就是为了消费性数字产品而设计,而这类小型装置通常有着有限内存与运算资源。
全球信息网(World Wide Web)兴起,Java Applet成为网页互动技术的代表。
1993年第一个全球信息网浏览器Mosaic诞生,James Gosling认为因特网与Java的一些特性不谋而合,利用Java Applet在浏览器上展现互动性媒体,在当时而言,对视觉感官是一种革命性的颠覆。Green Team仿照Mosaic开发出以Java技术为基础的浏览器WebRunner(原名为BladeRunner),后来改名为HotJava,虽然HotJava只是一个展示性产品,但它使用Java Applet展现的多媒体效果立即吸引了许多人的注意,如图1.1所示。
1995年5月23日(这一天被公认为Java的诞生日),正式将Oak改名为Java,Java Development Kits(当时JDK全名)1.0a2版本正式对外发表,而在1996年Netscape Navigator 2.0也正式支持Java,Microsoft Internet Explorer也开始支持Java,从此Java在因特网的世界中逐渐风行起来。虽然Star7产品并不被当时消费性市场接受,绿色项目面临被裁撤的命运,然而全球信息网的兴起却给了Java新的生命与舞台。
图1.1 JDK所附的Java Applet范例(JDK文件夹\demo\applets\MoleculeViewer\example1.html)
2. 版本演进
随着Java越来越受到瞩目,Sun在1998年12月4日发布Java 2 Platform,简称J2SE 1.2,Java开发者版本一开始是以Java Development Kit名称发表,简称JDK,而J2SE则是平台名称,包含了JDK与Java程序语言。
Java平台标准版约以两年为周期推出重大版本更新,1998年12月4日发表J2SE 1.2,2000年5月8日发表J2SE 1.3,2002年2月13日发表J2SE 1.4, Java 2这个名称也从J2SE 1.2一直沿用至之后各个版本。
2004年9月29日发表的Java平台标准版的版号不是1.5,而直接跳到5.0,称为J2SE 5.0,这是为了彰显这个版本与之前版本有极大不同,如语法上的简化、增加泛型(Generics)、枚举(Enum)、注释(Annotation)等重大功能。
2006年12月11日发表的Java平台标准版,除了版本号之外,名称也有了变化,称为Java Platform, Standard Edition 6,简称Java SE 6,JDK6全名则称为Java SE Development Kit 6,也就是不再像以前Java 2带有2这个号码,版本号6或1.6.0都使用,6是产品版本(Product Version),而1.6.0是开发者版本(Developer Version)。
大部分的Java标准版平台都会取个代码名称(Code Name),例如J2SE 5.0的代码名称为Tiger(老虎),为了引人注目,在发表会上还真的抱了一只小白老虎出来作为噱头,而许多书的封面也相应地放上老虎的图片。有关JDK代码名称与发布日期,可以参考表1.1所示。
……
Chapter 1 Java平台概论 1
1.1 Java不只是语言 2
1.1.1 前世今生 2
1.1.2 三大平台 5
1.1.3 JCP与JSR 6
1.1.4 Oracle JDK与OpenJDK 7
1.1.5 建议的学习路径 9
1.2 JVM/JRE/JDK 12
1.2.1 什么是JVM 13
1.2.2 区分JRE与JDK 15
1.2.3 下载、安装JDK 16
1.2.4 认识JDK安装内容 19
1.3 重点复习 20
1.4 课后练习 21
Chapter 2 从JDK到IDE 22
2.1 从Hello World开始 23
2.1.1 撰写Java原始码 23
2.1.2 PATH是什么 25
2.1.3 JVM(java)与
CLASSPATH 28
2.1.4 编译程序(javac)与
CLASSPATH 31
2.2 管理原始码与位码文档 33
2.2.1 编译程序(javac)与SOURCEPATH 33
2.2.2 使用package管理类 35
2.2.3 使用import偷懒 37
2.3 使用IDE 39
2.3.1 IDE项目管理基础 40
2.3.2 使用了哪个JRE 44
2.3.3 类文档版本 45
2.4 重点复习 48
2.5 课后练习 49
Chapter 3 基础语法 53
3.1 类型、变量与运算符 54
3.1.1 类型 54
3.1.2 变量 57
3.1.3 运算符 60
3.1.4 类型转换 66
3.2 流程控制 69
3.2.1 if...else条件式 69
3.2.2 switch条件式 72
3.2.3 for循环 74
3.2.4 while循环 75
3.2.5 break、continue 77
3.3 重点复习 78
3.4 课后练习 79
3.4.1 选择题 79
3.4.2 操作题 81
Chapter 4 认识对象 82
4.1 类与对象 83
4.1.1 定义类 83
4.1.2 使用标准类 86
4.1.3 对象指定与相等性 89
4.2 基本类型打包器 90
4.2.1 打包基本类型 90
4.2.2 自动装箱、拆箱 91
4.2.3 自动装箱、拆箱的内幕 92
4.3 数组对象 95
4.3.1 数组基础 95
4.3.2 操作数组对象 98
4.3.3 数组复制 104
4.4 字符串对象 107
4.4.1 字符串基础 107
4.4.2 字符串特性 110
4.4.3 字符串编码 113
4.5 查询Java API文件 115
4.6 重点复习 118
4.7 课后练习 119
4.7.1 选择题 119
4.7.2 操作题 121
Chapter 5 对象封装 122
5.1 何谓封装 123
5.1.1 封装对象初始流程 123
5.1.2 封装对象操作流程 125
5.1.3 封装对象内部数据 128
5.2 类语法细节 131
5.2.1 public权限修饰 131
5.2.2 关于构造函数 133
5.2.3 构造函数与方法重载 134
5.2.4 使用this 136
5.2.5 static类成员 139
5.2.6 不定长度自变量 145
5.2.7 内部类 146
5.2.8 传值调用 148
5.3 重点复习 151
5.4 课后练习 152
5.4.1 选择题 152
5.4.2 操作题 155
Chapter 6 继承与多态 157
6.1 何谓继承 158
6.1.1 继承共同行为 158
6.1.2 多态与is-a 162
6.1.3 重新定义行为 166
6.1.4 抽象方法、抽象类 169
6.2 继承语法细节 170
6.2.1 protected成员 170
6.2.2 重新定义的细节 172
6.2.3 再看构造函数 174
6.2.4 再看final关键字 176
6.2.5 java.lang.Object 178
6.2.6 关于垃圾收集 182
6.2.7 再看抽象类 185
6.3 重点复习 188
6.4 课后练习 189
6.4.1 选择题 189
6.4.2 操作题 193
Chapter 7 接口与多态 194
7.1 何谓接口 195
7.1.1 接口定义行为 195
7.1.2 行为的多态 199
7.1.3 解决需求变化 202
7.2 接口语法细节 208
7.2.1 接口的默认 208
7.2.2 匿名内部类 212
7.2.3 使用enum枚举常数 217
7.3 重点复习 219
7.4 课后练习 220
7.4.1 选择题 220
7.4.2 操作题 224
Chapter 8 异常处理 226
8.1 语法与继承架构 227
8.1.1 使用try、catch 227
8.1.2 异常继承架构 230
8.1.3 要抓还是要抛 235
8.1.4 贴心还是造成麻烦 238
8.1.5 认识堆栈追踪 240
8.1.6 关于assert 244
8.2 异常与资源管理 247
8.2.1 使用finally 247
8.2.2 自动尝试关闭资源 249
8.2.3 java.lang.AutoCloseable接口 251
8.3 重点复习 256
8.4 课后练习 257
8.4.1 选择题 257
8.4.2 操作题 261
Chapter 9 Collection与Map 262
9.1 使用Collection收集对象 263
9.1.1 认识Collection架构 263
9.1.2 具有索引的List 264
9.1.3 内容不重复的Set 268
9.1.4 支持队列操作的Queue 272
9.1.5 使用泛型 275
9.1.6 简介Lambda表达式 279
9.1.7 Interable与Iterator 281
9.1.8 Comparable与Comparator 284
9.2 键值对应的Map 290
9.2.1 常用Map操作类 291
9.2.2 访问Map键值 295
9.3 重点复习 298
9.4 课后练习 299
9.4.1 选择题 299
9.4.2 操作题 303
Chapter 10 输入/输出 304
11.4.1 选择题 380
11.4.2 操作题 381
Chapter 12 Lambda 382
12.1 认识Lambda语法 383
12.1.1 Lambda语法概览 383
12.1.2 Lambda表达式与函数接口 386
12.1.3 Lambda遇上this与final 388
12.1.4 方法与构造函数参考 391
12.1.5 接口默认方法 394
12.2 Functional与Stream API 399
12.2.1 使用Optional取代null 399
12.2.2 标准API的函数接口 401
12.2.3 使用Stream进行管道操作 404
12.2.4 进行Stream的reduce与collect 408
12.2.5 关于flatMap()方法 413
12.3 Lambda与并行处理 416
12.3.1 Stream与平行化 416
12.3.2 使用Completable-Future 420
12.4 重点复习 423
12.5 课后练习 424