本书将Java语言作为大学生计算机程序设计的入门语言,其特色是内容全面、深入浅出、立体配套。书中详细介绍了Java语言以及面向对象的设计思想和编程方法、图形用户界面的编程方法、网络和数据库程序的编程方法、线程的使用、Java集合框架、Java工程化开发等实用技术。全书以面向对象的程序设计方法贯穿始终,基础性和实用性并重。宗旨是不仅使读者掌握Java语言,而且能够对现实世界中较简单的问题及其解决方法用计算机语言进行描述。本书适合作为高等院校Java语言程序设计课程的教材或Java爱好者入门的自学教材。
全书以面向对象的程序设计方法贯穿始终,基础理论和工程实践并重。宗旨是:不仅要使读者掌握Java语言,而且要能够对现实世界中较简单的问题及其解决方法用计算机语言进行描述,要有基本的工程实践能力。
一、 版次说明
本书第1版于2005年出版,第2版于2011年6月出版。本版是在第2版的基础上,广泛听取了读者和同行的建议,参考了的资料,并根据作者本人在授课过程中的经验而形成的。
二、 本书的作者及编写背景
这是一本面向广大初学者的入门教材,是《C 语言程序设计》的姊妹篇。《C 语言程序设计》一书自1999年第1版出版以来,已经出版了5版,在清华大学等300多所大学的不同专业中使用,取得了良好的教学效果。与《C 语言程序设计》一样,本书同样是基于作者多年来在清华大学讲授Java语言程序设计的经验,以及作者本人的研究和开发经验编写的。
Java语言是应用广泛的面向对象的程序设计语言之一。面向对象的程序设计方法将数据及对数据的操作方法封装在一起,作为一个相互依存、不可分离的整体对象。对同类型对象抽象出其共性,形成类。这样,程序模块间的关系简单,程序模块的独立性、数据的安全性具有良好的保障,通过继承与多态性,使程序具有很高的可重用性,使得软件的开发和维护都更为方便。
面向对象方法的出现,实际上是程序设计方法发展的一个返璞归真过程。软件开发从本质上讲,就是对软件所要处理的问题域进行正确的认识,并把这种认识正确地描述出来。面向对象方法所强调的基本原则,就是直接面对客观存在的事物进行软件开发,将人们在日常生活中习惯的思维方式和表达方式应用在软件开发中,使软件开发从过分专业化的方法、规则和技巧中回到客观世界,回到人们通常的思维。由于面向对象方法的突出优点,目前它已经成为开发大型软件时所采用的主要方法。
除了面向对象以外,Java语言的另一个突出特点是与平台无关,可以实现一次编写、各处运行。因此,Java被广泛用于网络应用程序开发,以及各种电器设备的嵌入式系统。
从语法上看,Java语言与C 语言一样,都是以C语言的语法为基础。那么,学习Java语言是否应该首先学习C语言呢?不是的,虽然Java语言借鉴了C语言的语法,但是Java本身是一个完整的程序设计语言,而且它与C语言的程序设计思想是完全不同的。因此,Java语言是可以作为程序设计的入门语言来学习的,这正是本书的定位。学习本书并不要求读者有C语言基础,但是有一定基础的读者学习起来会感觉更容易。
三、 本书的特色
本书的特色是内容全面、深入浅出、立体配套。
本书将Java语言作为大学生的计算机程序设计入门语言,不仅详细介绍语言本身,而且介绍面向对象的设计思想和编程方法、图形用户界面的编程方法、网络和数据库程序的编程方法、线程的使用、Java集合框架等实用开发技术。全书以面向对象的程序设计方法贯穿始终,基础性和实用性并重。宗旨是: 不仅使读者掌握Java语言本身,而且要能够对现实世界中较简单的问题及其解决方法用计算机语言进行描述,并掌握基本的工程开发技术。当然,要达到能够描述较复杂的问题域还需要学习面向对象的软件工程课等其他课程。
针对初学者和自学读者的特点,本书力求做到深入浅出,将复杂的概念用简洁浅显的语言娓娓道来。读者还可以通过配套的《Java语言程序设计(第3版)学生用书》,在实践中达到对内容的深入理解和熟练掌握。
为了方便教师备课,本书配有教师参考资料,包括电子教案(PPT文件)、教学要点、考试样题等。
四、 内容摘要
第1章Java语言基础知识: 作为全书的开篇,本章首先介绍面向对象程序设计的基本概念和Java语言的特点;通过几个简单而典型的例子使读者对Java程序有个感性认识;然后详细介绍Java的基本数据类型和表达式;讲解数组的概念、创建和引用;后介绍控制流程。
第2章类与对象的基本概念: 主要介绍类与对象的基本概念、类的声明、对象的生成与销毁、枚举类型,后简要介绍了注解。
第3章类的重用: 介绍与类的重用有关的内容,包括类的继承、Object类、final类与final方法、抽象类、泛型、类的组合,以及Java包的应用。
第4章接口与多态: 介绍Java的接口、多态的概念及实现方法。
第5章异常处理与输入输出流: 概要介绍了异常处理机制、基本的输入输出流类,重点介绍常用的文件读写方式。
第6章集合框架: 概要介绍Java的集合框架,并对常用的集合类进行详细介绍。
第7章图形用户界面: 介绍Swing的基础和主要特点、使用方法,容器的层次结构,布局管理,以及如何在Java Application和Java Applet中引入图形用户界面。
第8章多线程编程: 介绍线程的概念,以及如何创建和使用线程等问题。
第9章JDBC编程: 首先介绍数据库的基本概念,以及基本SQL语句的使用,然后介绍在Java程序中如何实现对数据库的操作,后介绍Java 自带数据库Java DB的操作。
第10章Servlet程序设计: 首先对与网络相关的概念进行简单讲解,然后简单介绍Java语言Servlet程序的开发方法。
第11章JSP程序设计: 介绍JSP的基本概念和语法、JSP与JavaBean的结合、标签库的应用,以及Web应用程序的MVC架构、Web服务相关内容。
第12章Java工程化开发概述: 介绍Java工程化开发过程、开发环境和工具,带领读者通过案例学习如何运用理论知识解决实际问题。
五、 使用指南及相关资源
作者本人使用本书授课时的讲课学时数为32学时,实验学时数为32学时,课外上机学时数为32学时,课内外共96学时,每学时45分钟。
与本书配套的教材有: 《Java语言程序设计(第3版)学生用书》、电子版教师资源。
本书内容是在第2版基础上修订的,在此感谢参与编写第1版、第2版的作者马素霞、王行言、杜彬、廖学良、刘兆宏、李超、李玉山、徐骏、许磊、张超、张新钰、王朝卿,以及参与本书修订工作的胡家威。
感谢读者选择使用本书,欢迎您对本书内容提出意见和建议。作者的电子邮件地址是zhengli@mail.tsinghua.edu.cn,来信标题请包含Java book。
本书的读者可以登录学堂在线(http://www.xuetangx.com/)学习作者讲授的国家精品在线开放课程Java程序设计。
作者2021年1月 于清华大学
郑莉,清华大学计算机科学与技术系教授;主讲MOOCC 语言程序设计、Java程序设计;国家精品资源共享课负责人;全国高等学校计算机教育研究会副理事长;全国高等院校计算机基础教育研究会副会长;全国信息技术标准化技术委员会教育技术分技术委员会秘书长。主要研究方向:计算机教育、教育信息化、软件工程,主持和参加多项国家863、支撑计划课题和教育部课题。
主编出版教材20余部,其中《C 语言程序设计》获教育部自然科学奖和精品教材称号。《C 语言程序设计》、《Java语言程序设计》(本MOOC配套教材)为十二五普通高等教育本科规划教材
起草教育信息化相关国家标准5部、国际标准1部。
获教学成果奖、北京市教学成果奖、教育部自然科学奖、教育部科技进步奖、北京市科技进步奖、电子学会科技进步奖等9项、教育部、北京市奖励。
第1章Java语言基础知识1
1.1Java语言与面向对象程序设计简介1
1.1.1面向对象的程序设计思想1
1.1.2Java语言发展简史3
1.1.3Java语言的特点4
1.1.4Java程序运行机制5
1.2Java程序概述5
1.2.1搭建Java程序开发环境5
1.2.2个Java程序: Hello Java6
1.3基本数据类型与表达式6
1.3.1变量与常量7
1.3.2基本数据类型8
1.3.3运算符与表达式10
1.3.4类型转换13
1.4数组14
1.4.1数组的声明15
1.4.2数组的创建15
1.4.3数组元素的初始化16
1.4.4数组的引用16
1.4.5多维数组18
1.5控制流程20
1.5.1if选择结构21
1.5.2switch选择结构23
1.5.3for循环24
1.5.4while语句25
1.5.5dowhile语句26
1.5.6break语句26
1.5.7continue语句28
1.6本章小结30
习题30
第2章类与对象的基本概念32
2.1面向对象的程序设计方法概述32
2.1.1抽象32
2.1.2封装33
2.1.3继承33
2.1.4多态33
2.2类与对象34
2.2.1类的声明35
2.2.2对象的声明与引用36
2.2.3数据成员37
2.2.4方法成员42
2.2.5包的概念48
2.2.6类的访问控制51
2.2.7类成员的访问控制51
2.3对象初始化和回收54
2.3.1构造方法54
2.3.2内存回收技术57
2.4枚举类型58
2.4.1枚举类型的默认方法59
2.4.2枚举类型的自定义属性和方法59
2.5应用举例60
2.5.1声明BankAccount类60
2.5.2声明toString方法62
2.5.3声明存取款方法63
2.5.4格式化输出字符串64
2.5.5使用静态工厂方法生成实例64
2.5.6声明类变量65
2.6注解67
2.6.1注解应用举例68
2.6.2自定义注解69
2.6.3元注解简介70
2.6.4注解的处理71
2.7本章小结72
习题72
第3章类的重用74
3.1类的继承74
3.1.1继承的概念74
3.1.2继承的语法75
3.1.3隐藏和覆盖78
3.1.4有继承时的构造方法82
3.1.5应用举例83
3.2Object类84
3.2.1相等与同一85
3.2.2Object类中的equals方法86
3.2.3equals方法的覆盖86
3.3final类与final方法88
3.3.1final类88
3.3.2final方法89
3.4抽象类91
3.4.1抽象类的声明91
3.4.2抽象方法92
3.5泛型93
3.5.1泛型的概念93
3.5.2通配符泛型和有限制的泛型96
3.6类的组合98
3.6.1组合的语法98
3.6.2组合与继承的比较99
3.6.3组合与继承的结合100
3.7包的应用102
3.7.1Java基础类库概述103
3.7.2自定义包113
3.7.3JAR文件114
3.8本章小结117
习题117
第4章接口与多态119
4.1接口119
4.1.1接口的作用及语法119
4.1.2实现接口121
4.1.3函数式接口与Lambda表达式124
4.1.4实现多个接口128
4.1.5接口的扩展130
4.1.6接口的默认方法与静态方法131
4.1.7接口的私有方法134
4.2类型转换135
4.2.1类型转换的概念135
4.2.2类型转换的应用136
4.2.3方法的查找137
4.3多态的概念138
4.3.1多态的目的139
4.3.2绑定的概念140
4.4多态的应用142
4.5构造方法与多态145
4.5.1构造方法的调用顺序146
4.5.2构造方法中的多态方法149
4.6本章小结151
习题151
第5章异常处理与输入输出流152
5.1异常处理机制简介152
5.1.1异常处理概述152
5.1.2错误的分类153
5.2异常的处理155
5.2.1声明抛出异常155
5.2.2捕获异常156
5.2.3生成异常对象161
5.2.4自定义异常类161
5.3输入输出流163
5.3.1输入输出流的概念163
5.3.2预定义的I/O流类概述164
5.3.3I/O异常167
5.4文件读写169
5.4.1写文本文件169
5.4.2读文本文件171
5.4.3写二进制文件174
5.4.4读二进制文件177
5.4.5File类180
5.4.6处理压缩文件181
5.4.7对象序列化186
5.4.8随机文件读写188
5.5本章小结190
习题191
第6章集合框架192
6.1集合框架概述192
6.2集合框架中的主要接口192
6.3集合框架中的常用类196
6.3.1HashSet196
6.3.2Vector和ArrayList198
6.3.3LinkedList203
6.3.4HashTable和HashMap204
6.4集合的操作213
6.4.1集合的遍历213
6.4.2使用Collections类生成常用集合215
6.4.3使用Collections类进行集合操作216
6.4.4数组实用方法217
6.5流式API218
6.5.1流式API介绍218
6.5.2流的获取218
6.5.3流的操作219
6.6本章小结222
习题223
第7章图形用户界面224
7.1绘图224
7.1.1图形环境和图形对象224
7.1.2颜色和字体224
7.1.3使用Graphics类绘图225
7.1.4使用Graphics2D类绘图(Java2D API)228
7.2Swing基础228
7.2.1JFC与Swing228
7.2.2Swing与AWT229
7.2.3在Application中应用Swing230
7.3Swing的特点和概念231
7.3.1Swing的组件和容器层次231
7.3.2布局管理234
7.3.3事件处理247
7.4Swing组件252
7.4.1顶层容器252
7.4.2中间容器255
7.4.3原子组件262
7.5其他Swing特性275
7.5.1Action对象275
7.5.2边框277
7.5.3设置外观和感觉278
7.5.4应用线程279
7.5.5定时器281
7.6桌面API282
7.7本章小结286
习题287
第8章多线程编程288
8.1多线程编程基础288
8.1.1线程的概念288
8.1.2Thread类288
8.1.3Runnable接口292
8.1.4线程间的数据共享294
8.1.5多线程的同步控制297
8.1.6线程之间的通信303
8.1.7后台线程305
8.2线程的生命周期307
8.2.1线程的几种基本状态307
8.2.2死锁问题308
8.2.3控制线程的生命311
8.3线程的优先级312
8.4常用接口与实现类315
8.4.1Executor接口316
8.4.2ExecutorService接口317
8.4.3ThreadPoolExecutor类319
8.4.4ScheduledThreadPoolExecutor类323
8.5本章小结324
习题324
第9章JDBC编程326
9.1数据库基础知识326
9.1.1数据库技术的特点326
9.1.2数据模型327
9.1.3关系表中的主键与外键328
9.1.4建立一个实例数据库329
9.1.5SQL简介333
9.2通过JDBC访问数据库335
9.2.1设置环境337
9.2.2建立连接338
9.2.3对数据库进行操作339
9.2.4执行带参数的SQL语句349
9.3Java DB349
9.4本章小结352
习题352
第10章Servlet程序设计353
10.1Java网络程序设计的基本概念353
10.1.1网络协议353
10.1.2统一资源标识符URI354
10.1.3基于套接字的有连接通信355
10.1.4数据报通信356
10.1.5Servlet358
10.2Servlet基础358
10.2.1Servlet容器、Web服务器、应用服务器358
10.2.2Tomcat的配置与使用360
10.2.3Web应用程序362
10.2.4Servlet API363
10.2.5Servlet的基本结构363
10.2.6Servlet编译364
10.3Servlet的生命周期365
10.3.1初始化Servlet365
10.3.2销毁Servlet366
10.4与客户端交互366
10.4.1提取Servlet信息366
10.4.2提取服务器信息368
10.4.3提取客户端信息368
10.4.4发送HTML信息371
10.5客户端跟踪372
10.5.1使用Cookie372
10.5.2使用Session375
10.6协作与通信377
10.7程序举例379
10.8本章小结383
习题384
第11章JSP程序设计385
11.1JSP简介385
11.1.1什么是JSP程序385
11.1.2JSP语法概述387
11.1.3JSP内置对象391
11.1.4一个简单的JSP程序394
11.2JSP与JavaBean398
11.2.1JavaBean简介398
11.2.2在JSP程序中使用JavaBean399
11.3JSP标签库403
11.3.1标签处理类403
11.3.2标签库描述文件404
11.3.3在JSP程序中使用标签405
11.3.4自定义标签库405
11.4JSP与Servlet408
11.4.1Web应用程序的一般结构408
11.4.2JSP与Servlet间的信息共享409
11.4.3JSP与Servlet间的控制传递411
11.4.4Web应用程序举例412
11.5Web服务419
11.5.1Web服务的开发419
11.5.2Web服务的使用421
11.6本章小结422
习题422
第12章Java工程化开发概述423
12.1项目需求423
12.2开发环境424
12.2.1使用Git进行版本控制424
12.2.2使用Maven进行项目构建427
12.2.3使用IntelliJ IDEA进行Java开发431
12.3项目开发框架433
12.4核心模块的开发439
12.4.1模块的功能设计439
12.4.2业务服务接口的开发439
12.4.3数据库存取程序的开发441
12.4.4展现程序的开发448
12.5单元测试与集成测试449
12.5.1对Spring Boot应用进行单元测试450
12.5.2对Spring Boot应用进行集成测试453
12.6本章小结456
习题457