下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922
读书 > 编程语言 >Java > Java 学习笔记(第8版)

Java 学习笔记(第8版)

综合评级:★★★★★

定价:68.00

作者:林信良 著

出版社:清华大学出版社

出版日期:2015年3月

页数:627

字数:980000

ISBN:9787302388982

书籍介绍

《Java JDK 学习笔记(第8版)》是作者多年来教学实践经验的总结,汇集了学生在学习Java或认证考试时遇到的概念、操作、应用等问题及解决方案。

《Java JDK 学习笔记(第8版)》针对Java SE 8新功能全面改版,无论是章节架构或范例程序代码,都做了重新编写与全面翻新,并详细介绍了JVM、JRE、Java SE API、JDK与IDE之间的对照关系。必要时可从Java SE API的源代码分析,了解各种语法在Java SE API中如何应用。对于建议练习的范例提供了Lab文档,以突出练习重点。此外,本书还将IDE操作纳为教学内容之一,让读者能与实践相结合,提供的教学视频可以让读者更清楚地掌握操作步骤。

《Java JDK 学习笔记(第8版))》适合Java的初、中级读者以及广大Java应用开发人员。

相关课程
目录
目 录

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

10.1 InputStream与OutputStream 305

10.1.1 串流设计的概念 305

10.1.2 串流继承架构 308

10.1.3 串流处理装饰器 311

10.2 字符处理类 316

10.2.1 Reader与Writer继承架构 316

10.2.2 字符处理装饰器 318

10.3 重点复习 320

10.4 课后练习 321

10.4.1 选择题 321

10.4.2 操作题 322

Chapter 11 线程与并行API 324

11.1 线程 325

11.1.1 线程简介 325

11.1.2 Thread与Runnable 328

11.1.3 线程生命周期 329

11.1.4 关于ThreadGroup 336

11.1.5 synchronized与volatile 339

11.1.6 等待与通知 349

11.2 并行API 353

11.2.1 Lock、ReadWriteLock与Condition 354

11.2.2 使用Executor 364

11.2.3 并行Collection简介 375

11.3 重点复习 379

11.4 课后练习 380

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

Chapter 13 时间与日期 425

13.1 认识时间与日期 426

13.1.1 时间的度量 426

13.1.2 年历简介 427

13.1.3 认识时区 428

13.2 认识Date与Calendar 429

13.2.1 时间轴上瞬间的Date 429

13.2.2 格式化时间日期的DateFormat 430

13.2.3 处理时间日期的Calendar 433

13.2.4 设定TimeZone 436

13.3 JDK8新时间日期API 437

13.3.1 机器时间观点的API 437

13.3.2 人类时间观点的API 439

13.3.3 对时间的运算 441

13.3.4 年历系统设计 444

13.4 重点复习 445

13.5 课后练习 446

Chapter 14 NIO与NIO2 447

14.1 认识NIO 448

14.1.1 NIO概述 448

14.1.2 Channel架构与操作 449

14.1.3 Buffer架构与操作 450

14.2 NIO2文件系统 452

14.2.1 NIO2架构 453

14.2.2 操作路径 454

14.2.3 属性读取与设定 456

14.2.4 操作文档与目录 459

14.2.5 读取、访问目录 461

14.2.6 过滤、搜索文档 466

14.3 重点复习 468

14.4 课后练习 469

Chapter 15 通用API 470

15.1 日志 471

15.1.1 日志API简介 471

15.1.2 指定日志层级 473

15.1.3 使用Handler与

Formatter 475

15.1.4 自定义Handler、Formatter与Filter 476

15.1.5 使用logging.properties 478

15.2 国际化基础 480

15.2.1 使用ResourceBundle 480

15.2.2 使用Locale 481

15.3 规则表示式 483

15.3.1 规则表示式简介 483

15.3.2 Pattern与Matcher 491

15.4 JDK8 API增强功能 494

15.4.1 StringJoiner、Arrays新增API 494

15.4.2 Stream相关API 495

15.5 重点复习 496

15.6 课后练习 497

15.6.1 选择题 497

15.6.2 操作题 497

Chapter 16 整合数据库 498

16.1 JDBC入门 499

16.1.1 JDBC简介 499

16.1.2 连接数据库 503

16.1.3 使用Statement、ResultSet 509

16.1.4 使用PreparedStatement、CallableStatement 514

16.2 JDBC进阶 518

16.2.1 使用DataSource取得联机 518

16.2.2 使用ResultSet卷动、更新数据 522

16.2.3 批次更新 524

16.2.4 Blob与Clob 526

16.2.5 交易简介 526

16.2.6 metadata简介 534

16.2.7 RowSet简介 537

16.3 重点复习 542

16.4 课后练习 543

16.4.1 选择题 543

16.4.2 操作题 544

Chapter 17 反射与类加载器 545

17.1 运用反射 546

17.1.1 Class与.class文档 546

17.1.2 使用Class.forName() 548

17.1.3 从Class获得信息 550

17.1.4 从Class建立对象 553

17.1.5 操作对象方法与成员 556

17.1.6 动态代理 558

17.2 了解类加载器 562

17.2.1 类加载器层级架构 562

17.2.2 建立ClassLoader实例 565

17.3 重点复习 567

17.4 课后练习 568

17.4.1 选择题 568

17.4.2 操作题 568

Chapter 18 自定义泛型、枚举与注释 569

18.1 自定义泛型 570

18.1.1 使用extends与? 570

18.1.2 使用super与? 575

18.2 自定义枚举 578

18.2.1 了解java.lang.

Enum类 578

18.2.2 enum高级运用 581

18.3 关于注释 587

18.3.1 常用标准注释 587

18.3.2 自定义注释类型 590

18.3.3 JDK8标注增强功能 594

18.3.4 执行时期读取注释信息 596

18.4 重点复习 599

18.5 课后练习 600

appendix A 如何使用本书项目 601

A.1 项目环境配置 602

A.2 打开案例 602

Appendix B 窗口程序设计 603

B.1 Swing入门 604

B.1.1 简易需求分析 604

B.1.2 Swing组件简介 605

B.1.3 设计主窗口与菜单列 607

B.1.4 关于版面管理 612

B.1.5 事件处理 615

B.2 文档打开、存储与编辑 620

B.2.1 操作打开文档 620

B.2.2 制作存储、关闭文档 623

B.2.3 文字区编辑、剪切、复制、粘贴 626

Java SE 8新功能

Unicode 6.2.0 3-3

匿名类捕捉了等效final的局部变量,final可省略 7-26

简介Lambda表示式 9-21

Iterable的forEach() 9-27

高级排序API 9-33

Map的forEach()方法 9-42

UncheckedIOException 10-3

StampedLock 11-41

Lambda语法 12-2

@FunctionalInterface 12-8

方法与构造函数参考 12-12

接口默认方法 12-15

Functional与Stream API 12-21

CompletableFuture 12-46

新时间日期A

前言

你拿起了这本书,翻开这篇序,我有了机会问你一个问题:“为什么想翻开这本书?”

“当然是想学Java啊!笨蛋(作者)!”

翻开一本书,无非是想从书中得到知识,只是为何你要得到书中的知识,才是我想知道的答案,而这个答案决定了你在取得知识的过程中是否快乐!

多数人在取得知识的过程中并不快乐,因而只能幻想着取得知识之后,就能拥有快乐,我们的社会也不断塑造着这样的幻想……学会××之后就可以“找到工作”“年薪百万”“进外企”……不少人在完成买书或报名课程的那一瞬间,就彷佛看到童话故事结尾幸福又快乐的日子,甚至取得知识时花费越高,就越成为一种支持这自我满足的依据。

取得知识的过程中快乐很重要,可惜的是,多数教育并不将取得知识过程中是否快乐这件事摆在优先,甚至强调为了能拥有幸福又快乐的结局,你必须忍耐学习过程中种种不快乐的事情,有的人可能从没了解到取得知识的过程中也能够快乐这件事,也许你也早就忘了……

“不就是学个Java,跟快乐有什么关系!”

如果你学的过程中不快乐,很快地,你就会对学习的对象感到厌烦,无法体验到逐步成长的喜悦,享受不到解决问题的成就感,失去探索更高级知识的动力,就算勉为其难地完成了学习过程,开始用着似懂非懂、半生不熟的知识闯荡江湖,紧接而来的是害怕着你当初不懂现在也不想搞懂的知识,也畏惧着别人带进来的新知识,只要有你参与的东西,多半掺杂了一团浆糊,造成了伙伴的困扰也伤害了自己,幸福与快乐的日子永远不会到来,你在学习的过程也没有过快乐,真的是亏大了!

只是想着学习的过程中是否快乐,结局难道不重要吗?网络上对程序设计这块有句名言“程序是照你写的跑,不是照你想的跑”,事实上确实是如此,不过“就人生来说的话,不会照你想的跑,也不会照你规划的进行”,万一结局不是我所想象的,至少学习过程我乐在其中,以后有没有用那就再说了!

“就人生来说的话,不会照你想的跑,也不会照你规划的进行。”简而言之就是世事难料,现在当红的技术难保日后不会没落,想当预言家,幻想能够选对一项知识,在苦痛学习过程之后得到美满结局,这是很没有保障的,现在冷门的知识也有可能咸鱼翻身,到时是不是感觉赚很大是一回事,不过届时你也许只会想着“其实我当时只是觉得好玩”!

林信良

2015年1月

导 读

这份导读让你可以更了解如何使用本书。

新旧版差异

就目录上来说,你可以看出的差异是上一版为16个章节,新一版为18个章节,第12章Lambda无疑是新的章节,也是JDK8最重要的新增功能。第13章“时间与日期”,一开始先谈了对时间与日期应有的基本知识,然后将旧版中的Date与Calendar做了更详细介绍,因为有许多现存API仍在使用它们,紧接着该章介绍了JDK8新时间与日期API。

第14章“NIO与NIO2”一开始谈了NIO的基础,接着将旧版的NIO2也放进该章。第15章“通用API”为旧版本“通用API”,该章删除了Date与Calendar、NIO2,并将一些JDK8的新增功能放了进去。

当然,JDK8中还有不少新增的小功能,散落在各章节中适当的地方介绍,如果发现页侧有 图标,表示提及JDK8新功能,本书亦提供有JDK8新功能快速查询目录。

全书的程序代码都做了重新审视与修改,主要着重在增加可读性,每个方法片段尽量控制不超过15行,在9.1.6节简介过Lambda之后,在可能且有助于可读性的情况下,会使用Lambda相关语法或API来实作程序范例。

旧版中有个“窗口程序设计”章节,在新版中没有消失,只不过被移至附录B,这多半表示了Java在窗口程序这块的地位,当然,Java有JavaFX这项技术,能否扩展Java在窗口程序的市场仍有待观察。“窗口程序设计”章节移至附录,主要是保留给对窗口程序仍有兴趣的读者。

字型

本书正文中与程序代码相关的文字,都用固定字体来加以呈现,以与一般名词相区别。例如,JDK是一般名词,而String为程序代码相关文字,使用了固定字体以区分。

程序范例

本书许多的范例都使用完整程序操作来展现,当看到以下程序代码示范时:

ClassObject Guess.java

package cc.openhome;

import java.util.Scanner;

import static java.lang.System.out;

public class Guess {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

int number = (int) (Math.random() * 10);

int guess;

do {

System.out.print("猜数字(0 ~ 9):");

guess = scanner.nextInt();

} while(guess != number);

out.println("猜中了...XD");

}

}

范例开始的左边名称为ClassObject,表示可以在范例文件的samples文件夹的各章节文件夹中找到对应的ClassObject项目;而右边名称为Guess.java,表示可以在项目中找到Guess.java文件。如果程序代码中出现标号与提示文字,表示后续的正文中,会有对应于标号及提示的更详细说明。

原则上,建议每个项目范例都亲手动作撰写,但如果由于教学时间或操作时间上的考虑,本书有建议进行的练习。如果在范例开始前有个 图标,例如:

Game1 SwordsMan.java

package cc.openhome;

public class SwordsMan extends Role {

public void fight() {

System.out.println("挥剑攻击");

}

}

表示建议范例动手操作,而且在范例文件的labs文件夹中会有练习项目的基础,可以打开项目后,完成项目中遗漏或必须补齐的程序代码或设定。

如果使用以下的程序代码呈现,表示它是一个完整的程序内容,但不是项目的一部分,主要用来展现一个完整文档如何撰写:

public class Hello {

public static void main(String[] args) {

System.out.println("Hello!World!");

}

}

如果使用以下的程序代码,则表示它是个代码段,主要展现程序撰写时需要特别注意的片段:

SwordsMan swordsMan = new SwordsMan();

...

System.out.printf("剑士 (%s, %d, %d)%n", swordsMan.getName(),

swordsMan.getLevel(), swordsMan.getBlood());

Magician magician = new Magician();

...

System.out.printf("魔法师 (%s, %d, %d)%n", magician.getName(),

magician.getLevel(), magician.getBlood());

操作步骤

本书将IDE进行设定的相关操作步骤也作为练习的一部分,你会看到如下的操作步骤说明:

(1) 选择“文件”|“新建项目”命令,在弹出的“新建项目”对话框的“类别”列表中选择Java,在“项目”列表中选择“Java应用程序”,接着单击“下一步”按钮。

(2) 在“项目名称”文本框中输入项目名称Hello2,在“项目位置”文本框中输入C:\\\\workspace。注意,“项目文件夹”会储存至C:\\\\workspace\\\\Hello2。

(3) 在“创建主类”文本框中输入cc.openhome.Main,这表示会有个Main类放在cc.openhome包,当中会自动建立main()程序进入点的方法,接着单击“完成”按钮建立项目。

如果操作步骤旁有个 图标,表示范例文件的videos文件夹中对应的章节文件夹有操作步骤的视频,可观看它以更了解实际操作过程。

提示框

在本书中会出现以下提示框:

针对课程中所提到的观点,提供一些额外的资源或思考方向,暂时忽略这些提示对课程进行并没有影响,但有时间的话,针对这些提示做阅读、思考或讨论是有帮助的。

针对课程中所提到的观点,以提示框方式特别呈现出必须注意的一些使用方式、陷阱或避开问题的方法,看到这个提示框时请集中精神阅读。

附录

范例文件包括本书中所有范例,提供NetBeans范例项目,附录A说明如何使用这些范例项目,附录B则收录了上一版的“窗口程序设计”一章的内容。

联系作者

若有本书堪误反馈等相关书籍问题,可通过网站与作者联系。

热门图书
推荐新闻
技术文库
论坛推荐