
本书详细介绍了Java程序设计的基本环境、概念、方法和应用。内容分为三个部分:第一部分介绍了Java语言基础,包括数据、控制结构、数组、类、包、对象、接口等;第二部分介绍了Java深入知识,包括参数传递、虚方法调用、异常处理、Lambda表达式、流式处理;第三部分是Java的应用,包括工具类与算法、线程、文件、Swing图形用户界面,以及Java在网络、多媒体、数据库等方面的应用。本书对Java8、Java11-Java17中的新内容也进行了介绍。
在程序设计的教学中,选择一种适合的语言是十分重要的。比较多种程序设计语言,笔者认为Java具有如下突出的优点。
其一,Java是面向对象的语言,与现代面向对象的设计与分析的软件工程相一致,也是当前的主流程序设计语言之一。
其二,简单易学。其中的数据类型、数据运算、程序控制结构等基本概念对于任何语言都是一致的;而其语法比C++等语言更简单,更容易掌握。
其三,Java语言本身就支持一些高级特性,如自动垃圾回收、异常处理、多线程、并行计算等,这些特性使Java成为极优秀的语言之一。
此外,Java具有广泛的用途。Java具有跨平台的特点,在各种平台上都有应用,它还可以有效地进行数据库、多媒体及网络的程序设计。不仅如此,Java还可以编写桌面应用、手机应用及网络应用。
综上所述,Java是特别适合于程序设计学习的基础语言。
对于学习者而言,选择一本好的教材至关重要。笔者基于多年程序设计语言的教学经验,结合个人的软件开发实践,力图使本书突出以下特色。
(1)对Java语言的基础知识,包括数据类型、流程控制、类的封装与继承、多态、虚方法调用、传值调用等进行系统讲解,让学习者知其然,并知其所以然。
(2)对Java类库中的基本类,包括Math、字符串、集合,进行详细讲解,以利于学习者打下牢固的基础。
(3)对Java中的基本应用,包括I/O、文本界面、图形界面等,精选大量典型而实用的例子,力图使学习者触类旁通、举一反三。
(4)对一些高级应用,如数据库编程、网络编程、多媒体编程、多线程、并行计算等内容,介绍了其概念、原理,以利于学习者能了解Java的实际应用及最新发展。
(5)在讲解语言的同时,介绍它所采用的面向对象技术的基础理论、主要原则和思维方法,以及在编程中写好代码的一些技巧与经验。
(6)在讲解、举例时充分考虑到各个层次的需要,力求语言简洁,内容循序渐进。同时,考虑到部分读者的需要,本书提供了较多的习题。
本书在内容安排上,大致可以分为三部分:第一部分介绍了Java语言基础,包括数据、控制结构、数组、类、包、对象、接口等;第二部分介绍了Java深入知识,包括参数传递、虚方法调用、异常处理、工具类与算法;第三部分是Java的应用,包括线程、并行编程、流式文件、图形用户界面,以及Java在网络、多媒体、数据库等方面的应用。
本书历经了第1版、第1版修订本、第2版和本次的第3版,书中融合了多年的教学经验,同时也针对广大读者的反馈进行了改进。另外,本书对Java语言的新特性进行了介绍,如Java 5中的泛型、增强的for语句、装箱等,Java 7中增加的switch与字符串、自动尝试关闭资源、新字面常量、多重异常捕获,Java 8中增加的Lambda表达式、流式处理、函数式接口等,同时也将Java 9以上版本增加的语法特性融入到各章的示例中。
本书第3版在保持第2版整体框架的同时,在一些细节上进行了较多的修改。
(1)增加了一些新的知识:实用的线程工具类、NIO、异步、HttpClient、Record类型等。
(2)对涉及图形用户界面的程序,统一改成Swing实现,而不再使用较老的AWT组件、Applet等技术,也不再使用独立于Java SE的Java FX界面。
(3)在文字叙述上,使用更通行的名词术语,例题的讲解更详细,书中的代码重新进行了整理,使用更有意义的命名和更通行的代码风格。
(4)对新的工具(如IDEA、Eclipse、NetBeans等)进行了介绍,对实践中用得较多的技术(如JUnit、正则表达式、数据库等)也进行了更详细的介绍。
相信第3版在全面性、先进性、实用性方面比前几个版本做得更好一些。
本书的内容和组织方式适合作为高等学校各专业“计算机程序设计”课程的教材,或者作为计算机技术的培训教材,也可以作为Java认证考试(OCP/JP,即原来的SCJP)用书。
作者在中国大学MOOC平台上开设的慕课“Java程序设计”是国家精品在线开放课程,本书也可以作为慕课教材。慕课的网址是:https://www.icourse163.org/course/PKU-1001941004,可以扫描下面的二维码参加课程。
读者可以从作者的个人网站(http://www.dstang.com)下载与本书配套的源程序。如果需要电子教案也可直接与作者联系(dstang2000@263.net)。
书中存在的缺点和不足,恳请读者批评指正。
唐大仕2021年7月于北京大学
第1章Java语言与面向对象的程序设计
11Java语言简介
111Java 语言的发展
112Java 三大平台
113Java语言的特点
114Java和C、C++比较
12面向对象程序设计
121面向对象概述
122对象、类与实体
123对象的状态与行为
124对象的关系
125面向对象的软件开发过程
习题
第2章简单的Java程序
21简单程序的书写
211HelloWorld程序
212Java程序的基本构成
22程序的编辑、编译与运行
221Java开发工具包JDK
222程序的编译与运行
223使用jar打包程序
23Java程序中的基本输入与输出
231字符界面的输入与输出
232图形界面的输入与输出
24Java集成开发环境
241文本编辑工具
242集成开发工具
243建构工具及代码混淆
习题
第3章数据运算、流程控制和数组
31数据类型、变量与常量
311数据类型
312标识符
313常量
314变量
315程序的注释
32运算符与表达式
321算术运算符
322关系运算符
323逻辑运算符
324位运算符
325赋值与强制类型转换
326条件运算符
327表达式及运算的优先级、结合性
33流程控制语句
331结构化程序设计的三种基本流程
332简单语句
333分支语句
334循环语句
335跳转语句
34数组
341一维数组
342多维数组
343数组与增强的for语句
344数组的复制
习题
第4章类、包和接口
41类、字段、方法
411定义类中的字段和方法
412构造方法与对象的创建
413使用对象
414方法的重载
415this的使用
42类的继承
421派生子类
422字段的继承、隐藏与添加
423方法的继承、覆盖与添加
424super的使用
425父类对象与子类对象的转换
43包
431package语句
432import语句
433编译和运行包中的类
434CLASSPATH变量
435模块
44访问控制符
441成员的访问控制符
442类的访问控制符
443setter与getter
444构造方法的隐藏
45非访问控制符
451static
452final
453abstract
454其他修饰符
455一个应用模式——单例模式
46接口
461接口的概念
462定义接口
463实现接口
464对接口的引用
465Java 8对接口的扩展
47枚举
471枚举的基本用法
472枚举的深入用法
习题
第5章深入理解Java语言
51变量及其传递
511基本类型变量与引用型变量
512字段变量与局部变量
513变量的传递
514变量的返回
515不定长参数变量
52多态与虚方法调用
521上溯造型
522虚方法调用
523动态类型确定
53对象构造与初始化
531调用本类或父类的构造方法
532构造方法的执行过程
533构造方法内部调用的方法的多态性
534实例初始化与静态初始化
54对象清除与垃圾回收
541对象的自动清除
542Systemgc()方法
543finalize()方法
55内部类与匿名类
551内部类
552方法中的局部类及匿名类
553匿名类
56Lambda表达式与函数式接口
561Lambda表达式的书写与使用
562函数式接口
563高阶函数
57注解与反射
571注解的定义与使用
572反射
习题
第6章异常处理
61异常处理
611异常的概念
612捕获和处理异常
613应用举例
62创建用户自定义异常类
621自定义异常类
622重抛异常及异常链接
63异常与资源管理
631使用finally
632使用try with resource
64断言及程序的测试
641使用assert
642程序的测试及JUnit
习题
第7章工具类及常用算法
71Java语言基础类
711Java API
712Object类
713基本数据类型的包装类
714Math类
715System类
72字符串和日期
721String类
722StringBuilder类
723StringTokenizer类
724日期相关类
73集合类
731Collection API
732Set接口及HashSet、TreeSet类
733List接口及ArrayList,LinkedList类
734栈与队列
735Map接口及HashMap,TreeMap类
74泛型及集合遍历
741泛型
742装箱与拆箱
743Iterator及Enumeration
744集合与增强的for语句
75排序与查找
751使用Arrays类
752使用Collections类
753编写排序程序
76遍试、迭代、递归及回溯
761遍试
762迭代
763递归
764回溯
习题
第8章线程
81线程的创建与运行
811Java中的线程
812创建线程对象
813多线程
814使用Timer类
815应用举例
82线程的控制与同步
821线程的状态与生命周期
822对线程的基本控制
823synchronized关键字
824线程间的同步控制
83线程的实用工具类
831线程安全的集合
832原子变量
833读写锁
834Executor与Future
835使用CountDownLatch
84流式操作及并行流
841使用流的基本方法
842流及操作的种类
习题
第9章流、文件及基于文本的应用
91流式输入与输出
911字节流与字符流
912节点流和处理流
913标准输入和标准输出
914文本文件及二进制文件应用示例
915对象序列化
92文件及
921文件与管理
922使用NIO2文件系统API
923文件输入与输出流
924RandomAccessFile类
93基于文本的应用
931Java Application命令行参数
932环境参数
933处理Deprecated的API
94正则表达式
941正则表达式的基本元素
942Pattern及Matcher
95XML处理
951XML的基本概念
952XML编程
习题
第10章图形用户界面
101界面组件
1011图形用户界面概述
1012界面组件分类
1013Component的方法
102布局管理
1021FlowLayout
1022BorderLayout
1023GridLayout
1024通过嵌套来设定复杂的布局
1025其他布局管理
103事件处理
1031事件及事件监听器
1032事件监听器的注册
1033事件适配器
1034内部类及匿名类在事件处理中的应用
104常用组件的使用
1041标签、按钮与动作事件
1042文本框、文本区域与文本事件
1043单选按钮、复选按钮,列表与选择事件
1044调整事件与滚动条
1045鼠标、键盘事件
1046JFrame与窗口事件
1047JPanel与容器事件
1048组件事件、焦点事件与对话框
105绘图、图像和动画
1051绘制图形
1052显示文字
1053显示图像及实现动画
106基于GUI的应用程序
1061使用可视化设计工具
1062菜单的定义与使用
1063菜单、工具条及对话框的应用
习题
第11章网络、多媒体和数据库编程
111Java网络编程
1111使用URL
1112用Java实现底层网络通信
1113实现多线程服务器程序
1114与Email服务器通信
1115使用HttpClient
112多媒体编程
1121Java图像编程
1122Java播放声音
1123Java Media API简介
113Java数据库编程
1131Java访问数据库的基本步骤
1132使用JTable显示数据表
114Java EE及Java ME简介
1141Java EE简介
1142Java ME简介
习题
附录AJava语言各版本增加的重要特性
参考文献
本书内容充实,层次清晰,用丰富的实例进行讲解,由浅入深地引导读者学习和掌握相关知识点。
唐大仕,博士,北京大学信息科学技术学院教师,获北京大学教学成果一等奖。开设的慕课“Java程序设计”“C#程序设计”是国家精品在线开放课程,慕课“动态几何画板Geogebra教学应用”获评为中国大学最美慕课。出版的教材包括《C#程序设计教程》《Visual C++.NET程序设计》《Visual Basic程序设计》《Python程序设计》《Java程序设计》