编辑推荐

  ● 《JAVA学习笔记(第8版)》是作者多年来教学实践经验的总结,汇集了学员在学习课程或认证考试中遇到的概念、操作、应用等问题及解决方案
  ● 针对JavaSE8新功能全面改版,无论是章节架构或范例程序代码,都做了重新编写与全面翻新
  ● 详细介绍了JVM、JRE、JavaSEAPI、JDK与IDE之间的对照关系
  ● 从JavaSEAPI的源代码分析,了解各种语法在JavaSEAPI中的具体应用
  ● 提供练习的Lab操作文档,方便读者掌握练习重点
  ● 将IDE操作纳入教学内容使读者能与实践结合,提供视频教学能更清楚地帮助读者掌握操作步骤
  超值赠送:
  各章NetBeans范例项目
  Lab的NetBeans项目
  教学操作视频

内容简介

   《JAVA学习笔记(第8版)》是作者多年来教学实践经验的总结,汇集了学生在学习Java或认证考试时遇到的概念、操作、应用等问题及解决方案。
   《JAVA学习笔记(第8版)》针对JavaSE8新功能全面改版,无论是章节架构或范例程序代码,都做了重新编写与全面翻新,并详细介绍了JVM、JRE、JavaSEAPI、JDK与IDE之间的对照关系。必要时可从JavaSEAPI的源代码分析,了解各种语法在JavaSEAPI中如何应用。对于建议练习的范例提供了Lab文档,以突出练习重点。此外,《Java 学习笔记(第8版)》还将IDE操作纳为教学内容之一,让读者能与实践相结合,提供的教学视频可以让读者更清楚地掌握操作步骤。
   《JAVA学习笔记(第8版)》适合Java的初、中级读者以及广大Java应用开发人员。

作者简介

  林信良(网名:良葛格),
  学历:台湾大学电机工程学系
  经历:台湾升阳教育训练技术顾问、专业讲师,Oracle授权训练中心讲师
  著作:《JavaJDK5.0学习笔记》《JavaSE6技术手册》《JavaJDK6.0学习笔记》《JSP&Servlet学习笔记》《Spring技术手册》《JavaJDK7学习笔记》等
  译作:《Ajax实战手册》《jQuery实战手册(第2版)》

目录

Chapter1Java平台概论1
1.1 Java不只是语言2
1.1.1 前世今生2
1.1.2 三大平台5
1.1.3 JCP与JSR6
1.1.4 OracleJDK与OpenJDK7
1.1.5 建议的学习路径9
1.2 JVM/JRE/JDK12
1.2.1 什么是JVM13
1.2.2 区分JRE与JDK15
1.2.3 下载、安装JDK16
1.2.4 认识JDK安装内容19
1.3 重点复习20
1.4 课后练习21
Chapter2从JDK到IDE22
2.1 从HelloWorld开始23
2.1.1 撰写Java原始码23
2.1.2 PATH是什么25
2.1.3 JVM(java)与
CLASSPATH28
2.1.4 编译程序(javac)与
CLASSPATH31
2.2 管理原始码与位码文档33
2.2.1 编译程序(javac)与SOURCEPATH33
2.2.2 使用package管理类35
2.2.3 使用import偷懒37
2.3 使用IDE39
2.3.1 IDE项目管理基础40
2.3.2 使用了哪个JRE44
2.3.3 类文档版本45
2.4 重点复习48
2.5 课后练习49
Chapter3基础语法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、continue77
3.3 重点复习78
3.4 课后练习79
3.4.1 选择题79
3.4.2 操作题81
Chapter4认识对象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 查询JavaAPI文件115
4.6 重点复习118
4.7 课后练习119
4.7.1 选择题119
4.7.2 操作题121
Chapter5对象封装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 使用this136
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
Chapter6继承与多态157
6.1 何谓继承158
6.1.1 继承共同行为158
6.1.2 多态与is-a162
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.Object178
6.2.6 关于垃圾收集182
6.2.7 再看抽象类185
6.3 重点复习188
6.4 课后练习189
6.4.1 选择题189
6.4.2 操作题193
Chapter7接口与多态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
Chapter8异常处理226
8.1 语法与继承架构227
8.1.1 使用try、catch227
8.1.2 异常继承架构230
8.1.3 要抓还是要抛235
8.1.4 贴心还是造成麻烦238
8.1.5 认识堆栈追踪240
8.1.6 关于assert244
8.2 异常与资源管理247
8.2.1 使用finally247
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
Chapter9Collection与Map262
9.1 使用Collection收集对象263
9.1.1 认识Collection架构263
9.1.2 具有索引的List264
9.1.3 内容不重复的Set268
9.1.4 支持队列操作的Queue272
9.1.5 使用泛型275
9.1.6 简介Lambda表达式279
9.1.7 Interable与Iterator281
9.1.8 Comparable与Comparator284
9.2 键值对应的Map290
9.2.1 常用Map操作类291
9.2.2 访问Map键值295
9.3 重点复习298
9.4 课后练习299
9.4.1 选择题299
9.4.2 操作题303
Chapter10输入/输出304
11.4.1 选择题380
11.4.2 操作题381
Chapter12Lambda382
12.1 认识Lambda语法383
12.1.1 Lambda语法概览383
12.1.2 Lambda表达式与函数接口386
12.1.3 Lambda遇上this与final388
12.1.4 方法与构造函数参考391
12.1.5 接口默认方法394
12.2 Functional与StreamAPI399
12.2.1 使用Optional取代null399
12.2.2 标准API的函数接口401
12.2.3 使用Stream进行管道操作404
12.2.4 进行Stream的reduce与collect408
12.2.5 关于flatMap()方法413
12.3 Lambda与并行处理416
12.3.1 Stream与平行化416
12.3.2 使用Completable-Future420
12.4 重点复习423
12.5课后练习424

精彩书摘

  1.1 Java不只是语言
  从1995年至今,Java已经过20个年头,经过这些年的演进,正如本节标题所示,Java已不仅是个程序语言,也代表了解决问题的平台(Platform),更代表了原厂、各个厂商、社群、开发者与用户沟通的成果。若仅以程序语言的角度来看待Java,正如冰山一角,你仅看到Java身为程序语言的一部分,而没看到Java身为程序语言之外,更可贵也更为庞大的资源。
  1.1.1 前世今生
  一个语言的诞生有其目的,因为这个目的而成就了语言的主要特性。探索Java的历史演进,对于掌握Java特性与各式可用资源,着实有其帮助。
  1.Java诞生
  Java最早是Sun公司绿色项目GreenProject中撰写Star7应用程序的程序语言,当时名称不是Java,而是取名为Oak。
  绿色项目始于1990年12月,由PatrickNaughton、MikeSheridan与JamesGosling(JamesGosling被尊称为Java之父)主持,目的是希望构筑出下一波计算机应用趋势并加以掌握,他们认为下一波计算机应用趋势会集中在消费性数字产品(就像现在的PDA、手机等消费性电子商品)的使用上。1992年9月3日,GreenTeam项目小组展示了Star7手持设备,这个设备具备无线网络连接、5inLCD彩色屏幕、PCMCIA接口等功能,而Oak在绿色项目中的目的,是用来撰写Star7上应用程序的程序语言。
  Oak名称的由来,是因为JamesGosling的办公室窗外有一棵橡树(Oak),就顺手取了这个名称。但后来发现Oak名称已经被注册了,工程师们边喝咖啡边讨论着新名称,最后灵机一动而改名为Java。
  Java本身会见到许多为了节省资源而作的设计,像是动态加载类别文档、字符串池(StringPool)等特性,这是因为Java一开始就是为了消费性数字产品而设计,而这类小型装置通常有着有限内存与运算资源。
  全球信息网(WorldWideWeb)兴起,JavaApplet成为网页互动技术的代表。
  1993年第一个全球信息网浏览器Mosaic诞生,JamesGosling认为因特网与Java的一些特性不谋而合,利用JavaApplet在浏览器上展现互动性媒体,在当时而言,对视觉感官是一种革命性的颠覆。GreenTeam仿照Mosaic开发出以Java技术为基础的浏览器WebRunner(原名为BladeRunner),后来改名为HotJava,虽然HotJava只是一个展示性产品,但它使用JavaApplet展现的多媒体效果立即吸引了许多人的注意,如图1.1所示。
  1995年5月23日(这一天被公认为Java的诞生日),正式将Oak改名为Java,JavaDevelopmentKits(当时JDK全名)1.0a2版本正式对外发表,而在1996年NetscapeNavigator2.0也正式支持Java,MicrosoftInternetExplorer也开始支持Java,从此Java在因特网的世界中逐渐风行起来。虽然Star7产品并不被当时消费性市场接受,绿色项目面临被裁撤的命运,然而全球信息网的兴起却给了Java新的生命与舞台。
  图1.1 JDK所附的JavaApplet范例(JDK文件夹\demo\applets\MoleculeViewer\example1.html)
  2.版本演进
  随着Java越来越受到瞩目,Sun在1998年12月4日发布Java2Platform,简称J2SE1.2,Java开发者版本一开始是以JavaDevelopmentKit名称发表,简称JDK,而J2SE则是平台名称,包含了JDK与Java程序语言。
  Java平台标准版约以两年为周期推出重大版本更新,1998年12月4日发表J2SE1.2,2000年5月8日发表J2SE1.3,2002年2月13日发表J2SE1.4,Java2这个名称也从J2SE1.2一直沿用至之后各个版本。
  2004年9月29日发表的Java平台标准版的版号不是1.5,而直接跳到5.0,称为J2SE5.0,这是为了彰显这个版本与之前版本有极大不同,如语法上的简化、增加泛型(Generics)、枚举(Enum)、注释(Annotation)等重大功能。
  2006年12月11日发表的Java平台标准版,除了版本号之外,名称也有了变化,称为JavaPlatform,StandardEdition6,简称JavaSE6,JDK6全名则称为JavaSEDevelopmentKit6,也就是不再像以前Java2带有2这个号码,版本号6或1.6.0都使用,6是产品版本(ProductVersion),而1.6.0是开发者版本(DeveloperVersion)。
  大部分的Java标准版平台都会取个代码名称(CodeName),例如J2SE5.0的代码名称为Tiger(老虎),为了引人注目,在发表会上还真的抱了一只小白老虎出来作为噱头,而许多书的封面也相应地放上老虎的图片。有关JDK代码名称与发布日期,可以参考表1.1所示。
  ……

前言/序言

  你拿起了这《Java 学习笔记(第8版)》,翻开这篇序,我有了机会问你一个问题:“为什么想翻开这《Java 学习笔记(第8版)》?”
  “当然是想学Java啊!笨蛋(作者)!”
  翻开一《Java 学习笔记(第8版)》,无非是想从书中得到知识,只是为何你要得到书中的知识,才是我想知道的答案,而这个答案决定了你在取得知识的过程中是否快乐!
  多数人在取得知识的过程中并不快乐,因而只能幻想着取得知识之后,就能拥有快乐,我们的社会也不断塑造着这样的幻想……学会××之后就可以“找到工作”“年薪百万”“进外企”……不少人在完成买书或报名课程的那一瞬间,就彷佛看到童话故事结尾幸福又快乐的日子,甚至取得知识时花费越高,就越成为一种支持这自我满足的依据。
  取得知识的过程中快乐很重要,可惜的是,多数教育并不将取得知识过程中是否快乐这件事摆在优先,甚至强调为了能拥有幸福又快乐的结局,你必须忍耐学习过程中种种不快乐的事情,有的人可能从没了解到取得知识的过程中也能够快乐这件事,也许你也早就忘了……
  “不就是学个Java,跟快乐有什么关系!”
  如果你学的过程中不快乐,很快地,你就会对学习的对象感到厌烦,无法体验到逐步成长的喜悦,享受不到解决问题的成就感,失去探索更高级知识的动力,就算勉为其难地完成了学习过程,开始用着似懂非懂、半生不熟的知识闯荡江湖,紧接而来的是害怕着你当初不懂现在也不想搞懂的知识,也畏惧着别人带进来的新知识,只要有你参与的东西,多半掺杂了一团浆糊,造成了伙伴的困扰也伤害了自己,幸福与快乐的日子永远不会到来,你在学习的过程也没有过快乐,真的是亏大了!
  只是想着学习的过程中是否快乐,结局难道不重要吗?网络上对程序设计这块有句名言“程序是照你写的跑,不是照你想的跑”,事实上确实是如此,不过“就人生来说的话,不会照你想的跑,也不会照你规划的进行”,万一结局不是我所想象的,至少学习过程我乐在其中,以后有没有用那就再说了!
  “就人生来说的话,不会照你想的跑,也不会照你规划的进行。”简而言之就是世事难料,现在当红的技术难保日后不会没落,想当预言家,幻想能够选对一项知识,在苦痛学习过程之后得到美满结局,这是很没有保障的,现在冷门的知识也有可能咸鱼翻身,到时是不是感觉赚很大是一回事,不过届时你也许只会想着“其实我当时只是觉得好玩”!
  林信良
  2015年1月
  导 读
  这份导读让你可以更了解如何使用《Java 学习笔记(第8版)》。
  新旧版差异
  就目录上来说,你可以看出的差异是上一版为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新功能,《Java 学习笔记(第8版)》亦提供有JDK8新功能快速查询目录。
  《Java 学习笔记(第8版)》的程序代码都做了重新审视与修改,主要着重在增加可读性,每个方法片段尽量控制不超过15行,在9.1.6节简介过Lambda之后,在可能且有助于可读性的情况下,会使用Lambda相关语法或API来实作程序范例。
  旧版中有个“窗口程序设计”章节,在新版中没有消失,只不过被移至附录B,这多半表示了Java在窗口程序这块的地位,当然,Java有JavaFX这项技术,能否扩展Java在窗口程序的市场仍有待观察。“窗口程序设计”章节移至附录,主要是保留给对窗口程序仍有兴趣的读者。
  字型
  《Java 学习笔记(第8版)》正文中与程序代码相关的文字,都用固定字体来加以呈现,以与一般名词相区别。例如,JDK是一般名词,而String为程序代码相关文字,使用了固定字体以区分。
  程序范例
  你可以在以下网址下载《Java 学习笔记(第8版)》的范例:
  ?http://www.tupwk.com.cn/downpage
  ?http://books.gotop.com.tw/download/Acl042200
  《Java 学习笔记(第8版)》许多的范例都使用完整程序操作来展现,当看到以下程序代码示范时:
  ClassObjectGuess.java
  packagecc.openhome;
  importjava.util.Scanner;
  importstaticjava.lang.System.out;
  publicclassGuess{
  publicstaticvoidmain(String[]args){
  Scannerscanner=newScanner(System.in);
  intnumber=(int)(Math.random()*10);
  intguess;
  do{
  System.out.print("猜数字(0~9):");
  guess=scanner.nextInt();
  }while(guess!=number);
  out.println("猜中了...XD");
  }
  }
  范例开始的左边名称为ClassObject,表示可以在范例文件的samples文件夹的各章节文件夹中找到对应的ClassObject项目;而右边名称为Guess.java,表示可以在项目中找到Guess.java文件。如果程序代码中出现标号与提示文字,表示后续的正文中,会有对应于标号及提示的更详细说明。
  原则上,建议每个项目范例都亲手动作撰写,但如果由于教学时间或操作时间上的考虑,《Java 学习笔记(第8版)》有建议进行的练习。如果在范例开始前有个图标,例如:
  Game1SwordsMan.java
  packagecc.openhome;
  publicclassSwordsManextendsRole{
  publicvoidfight(){
  System.out.println("挥剑攻击");
  }
  }
  表示建议范例动手操作,而且在范例文件的labs文件夹中会有练习项目的基础,可以打开项目后,完成项目中遗漏或必须补齐的程序代码或设定。
  如果使用以下的程序代码呈现,表示它是一个完整的程序内容,但不是项目的一部分,主要用来展现一个完整文档如何撰写:
  publicclassHello{
  publicstaticvoidmain(String[]args){
  System.out.println("Hello!World!");
  }
  }
  如果使用以下的程序代码,则表示它是个代码段,主要展现程序撰写时需要特别注意的片段:
  SwordsManswordsMan=newSwordsMan();
  ...
  System.out.printf("剑士(%s,%d,%d)%n",swordsMan.getName(),
  swordsMan.getLevel(),swordsMan.getBlood());
  Magicianmagician=newMagician();
  ...
  System.out.printf("魔法师(%s,%d,%d)%n",magician.getName(),
  magician.getLevel(),magician.getBlood());
  操作步骤
  《Java 学习笔记(第8版)》将IDE进行设定的相关操作步骤也作为练习的一部分,你会看到如下的操作步骤说明:
  (1)选择“文件”|“新建项目”命令,在弹出的“新建项目”对话框的“类别”列表中选择Java,在“项目”列表中选择“Java应用程序”,接着单击“下一步”按钮。
  (2)在“项目名称”文本框中输入项目名称Hello2,在“项目位置”文本框中输入C:workspace。注意,“项目文件夹”会储存至C:workspaceHello2。
  (3)在“创建主类”文本框中输入cc.openhome.Main,这表示会有个Main类放在cc.openhome包,当中会自动建立main()程序进入点的方法,接着单击“完成”按钮建立项目。
  如果操作步骤旁有个图标,表示范例文件的videos文件夹中对应的章节文件夹有操作步骤的视频,可观看它以更了解实际操作过程。
  提示框
  在《Java 学习笔记(第8版)》中会出现以下提示框:
  针对课程中所提到的观点,提供一些额外的资源或思考方向,暂时忽略这些提示对课程进行并没有影响,但有时间的话,针对这些提示做阅读、思考或讨论是有帮助的。
  针对课程中所提到的观点,以提示框方式特别呈现出必须注意的一些使用方式、陷阱或避开问题的方法,看到这个提示框时请集中精神阅读。
  附录
  范例文件包括《Java 学习笔记(第8版)》中所有范例,提供NetBeans范例项目,附录A说明如何使用这些范例项目,附录B则收录了上一版的“窗口程序设计”一章的内容。
  联系作者
  若有《Java 学习笔记(第8版)》堪误反馈等相关书籍问题,可通过网站与作者联系。


其他推荐