本书分别讲解了基本数据类型、枚举和数组、运算符、表达式和语句、类、对象和接口、面向对象的几个基本原则、重要的设计模式、常用实用类、Java Swing图形用户界面、对话框、Java输入输出流、泛型与集合框架、JDBC数据库操作、Java多线程机制、Java网络基础以及Java Applet等内容。
基础与实战。相关概念及知识点都辅以相应的实例,通俗易懂,便于理解掌握面向对象的编程思想。
实用与流行。涵盖了Java开发过程中重要的及流行的方法和技巧,讲解细致,环环相扣。
教学与互动。文字叙述注重可读性,知识组织注意合理性,提供辅助在线教学平台。
本书精选Java核心内容和重要的实用技术,注重Java语言的面向对象特性,强调面向对象的程序设计思想,在实例上侧重实用性和启发性,在类、对象、继承、接口等重要的基础知识上侧重编程思想,在实用类、输入输出流、Java 网络技术、JDBC数据库操作等实用技术方面侧重实用。通过本书的学习,读者可以掌握Java面向对象编程的思想和Java编程中的一些重要技术。
在第3版中,除了更新了JDK 1.8(也称为JDK 8)的版本外,在内容上做了适当的调整,特别增加了每章的上机实践内容。对第14章做了比较大的调整,由原来的操作Access数据库,更改为操作JDK新版本自带的Derby数据库。删除了很少使用的第15章的内容。
全书共分为14章。第1章主要介绍Java产生的背景和Java平台,读者可以了解到Java是怎样做到“一次写成,处处运行”的; 第2章讲述Java程序的基本结构; 第3章讲解简单数据类型; 第4章主要介绍Java运算符和控制语句; 第5章、第6章和第7章是本书的重点内容之一,讲述类与对象、子类与继承、接口与实现等内容; 第8章讲解内部类和异常类,特别强调使用内部类的原则以及学习自定义异常的重要性; 第9章讲述常用的实用类,包括字符串、日期、正则表达式、模式匹配以及数学计算等实用类,特别讲解怎样使用Scanner类解析字符串; 第10章讲解Java中的输入输出流技术,特别介绍怎样使用输入输出流来克隆对象、Java的文件锁技术以及使用Scanner解析文件等重要内容; 第11章是基于Java Swing的GUI图形用户界面设计,讲解常用的组件和容器,特别详细讲解事件处理; 第12章讲述Java多线程技术,通过许多有启发的例子来帮助读者理解多线程编程; 第13章讲解Java在网络编程中的一些重要技术,涉及URL、Socket、InetAddress、DatagramPacket等重要的类,特别讲解Java远程调用(RMI); 第14章主要讲解Java怎样使用JDBC操作数据库,讲解了预处理、事务处理、批处理等重要技术。
本书实例的源程序以及电子教案可以从清华大学出版社网站上免费下载,以供读者学习使用; 也可以加入耿祥义教材教学QQ群讨论相关内容。
编者
2017年6月
第1章Java入门
1.1Java的平台无关性
1.1.1平台与机器指令
1.1.2C/C++程序依赖平台
1.1.3虚拟机与平台
1.2Java之父——James Gosling
1.3Java的地位
1.3.1网络地位
1.3.2语言地位
1.3.3需求地位
1.4安装JDK
1.4.1平台简介
1.4.2安装Java SE平台
1.5Java程序的开发步骤
1.6一个简单的Java应用程序
1.6.1编写源文件
1.6.2编译
1.6.3运行
1.7上机实践
习题
第2章Java应用程序的基本结构
2.1问题的提出
2.2简单的Circle类
2.3使用Circle类创建对象
2.3.1用类声明对象
2.3.2为对象分配变量
2.3.3使用对象
2.4在应用程序中使用对象
2.5Java应用程序的基本结构
2.6在一个源文件中编写多个类
2.7编程风格
2.7.1Allmans风格
2.7.2Kernighan风格
2.7.3注释
2.8上机实践
习题
第3章标识符与简单数据类型
3.1标识符与关键字
3.1.1标识符
3.1.2关键字
3.2简单数据类型
3.2.1逻辑类型
3.2.2整数类型
3.2.3字符类型
3.2.4浮点类型
3.3简单数据类型的级别与类型转换运算
3.4从命令行窗口输入、输出数据
3.4.1输入基本型数据
3.4.2输出基本型数据
3.5上机实践
习题
第4章运算符、表达式与语句
4.1运算符与表达式
4.1.1算术运算符与算术表达式
4.1.2自增,自减运算符
4.1.3算术混合运算的精度
4.1.4关系运算符与关系表达式
4.1.5逻辑运算符与逻辑表达式
4.1.6赋值运算符与赋值表达式
4.1.7位运算符
4.1.8instanceof运算符
4.1.9运算符综述
4.2语句概述
4.3if条件分支语句
4.3.1if语句
4.3.2ifelse语句
4.3.3ifelse ifelse语句
4.4switch开关语句
4.5循环语句
4.5.1for循环语句
4.5.2while循环
4.5.3dowhile循环
4.6break和continue语句
4.7数组
4.7.1声明数组
4.7.2为数组分配元素
4.7.3数组元素的使用
4.7.4length的使用
4.7.5数组的初始化
4.7.6数组的引用
4.7.7遍历数组
4.8上机实践
习题
第5章类与对象
5.1面向对象的特性
5.2类
5.2.1类声明
5.2.2类体
5.2.3成员变量
5.2.4方法
5.2.5需要注意的问题
5.2.6类的UML类图
5.3构造方法与对象的创建
5.3.1构造方法
5.3.2创建对象
5.3.3使用对象
5.3.4对象的引用和实体
5.4参数传值
5.4.1传值机制
5.4.2基本数据类型参数的传值
5.4.3引用类型参数的传值
5.5对象的组合
5.5.1由矩形和圆组合而成的图形
5.5.2关联关系和依赖关系的UML图
5.6实例成员与类成员
5.6.1实例变量和类变量的声明
5.6.2实例变量和类变量的区别
5.6.3实例方法和类方法的定义
5.6.4实例方法和类方法的区别
5.7方法重载与多态
5.8this关键字
5.8.1在构造方法中使用this
5.8.2在实例方法中使用this
5.9包
5.9.1包语句
5.9.2有包名的类的存储目录
5.9.3运行有包名的主类
5.10import语句
5.10.1引入类库中的类
5.10.2引入自定义包中的类
5.11访问权限
5.11.1何谓访问权限
5.11.2私有变量和私有方法
5.11.3共有变量和共有方法
5.11.4友好变量和友好方法
5.11.5受保护的成员变量和方法
5.11.6public类与友好类
5.12基本类型的类包装
5.12.1Double和Float类
5.12.2Byte、Short 、Integer、Long类
5.12.3Character类
5.13可变参数
5.14上机实践
习题
第6章子类与继承
6.1子类与父类
6.2子类的继承性
6.2.1子类和父类在同一包中的继承性
6.2.2子类和父类不在同一包中的继承性
6.2.3继承关系(Generalization)的UML图
6.3成员变量的隐藏和方法重写
6.3.1成员变量的隐藏
6.3.2方法重写(Override)
6.4super关键字
6.4.1用super操作被隐藏的成员变量和方法
6.4.2使用super调用父类的构造方法
6.5final关键字
6.5.1final类
6.5.2final方法
6.5.3常量
6.6对象的上转型对象
6.7继承与多态
6.8abstract类和abstract方法
6.9面向抽象编程
6.10开闭原则
6.11上机实践
习题
第7章接口与实现
7.1接口
7.2实现接口
7.3理解接口
7.4接口的UML图
7.5接口回调
7.6接口与多态
7.7接口变量做参数
7.8abstract类与接口的比较
7.9面向接口编程
7.10上机实践
习题
第8章内部类与异常类
8.1内部类
8.2匿名类
8.2.1和子类有关的匿名类
8.2.2和接口有关的匿名类
8.3异常类
8.3.1trycatch语句
8.3.2自定义异常类
8.3.3finally子语句
8.4断言
8.5上机实践
习题
第9章常用实用类
9.1String类
9.1.1构造字符串对象
9.1.2String类的常用方法
9.1.3字符串与基本数据的相互转化
9.1.4对象的字符串表示
9.1.5字符串与字符、字节数组
9.1.6正则表达式及字符串的替换与分解
9.2StringBuffer类
9.2.1StringBuffer对象的创建
9.2.2StringBuffer类的常用方法
9.3StringTokenizer类
9.4Date类
9.4.1构造Date对象
9.4.2日期格式化
9.5Calendar类
9.6Math和BigInteger类
9.6.1Math类
9.6.2BigInteger类
9.7DecimalFormat类
9.7.1格式化数字
9.7.2将格式化字符串转化为数字
9.8Pattern与Match类
9.8.1模式对象
9.8.2匹配对象
9.9Scanner类
9.10上机实践
习题
第10章输入输出流
10.1File类
10.1.1文件的属性
10.1.2目录
10.1.3文件的创建与删除
10.1.4运行可执行文件
10.2字节流与字符流
10.2.1InputStream类与OutputStream类
10.2.2Reader类与Writer类
10.2.3关闭流
10.3文件字节流
10.3.1文件字节输入流
10.3.2文件字节输出流
10.4文件字符流
10.5缓冲流
10.6随机流
10.7数组流
10.8数据流
10.9对象流
10.10序列化与对象克隆
10.11文件锁
10.12使用Scanner解析文件
10.13上机实践
习题
第11章组件及事件处理
11.1Java Swing概述
11.2窗口
11.2.1JFrame常用方法
11.2.2菜单条、菜单、菜单项
11.3常用组件与布局
11.3.1常用组件
11.3.2常用容器
11.3.3常用布局
11.3.4选项卡窗格
11.4处理事件
11.4.1事件处理模式
11.4.2ActionEvent事件
11.4.3ItemEvent事件
11.4.4DocumentEvent事件
11.4.5MouseEvent事件
11.4.6焦点事件
11.4.7键盘事件
11.4.8匿名类实例或窗口做监视器
11.4.9事件总结
11.5使用MVC结构
11.6对话框
11.6.1消息对话框
11.6.2输入对话框
11.6.3确认对话框
11.6.4颜色对话框
11.6.5文件对话框
11.6.6自定义对话框
11.7发布GUI程序
11.8上机实践
习题
第12章Java多线程机制
12.1进程与线程
12.1.1操作系统与进程
12.1.2进程与线程
12.2Java中的线程
12.2.1Java的多线程机制
12.2.2线程的状态与生命周期
12.2.3线程调度与优先级
12.3Thread类与线程的创建
12.3.1使用Thread的子类
12.3.2使用Thread类
12.3.3关于run方法启动的次数
12.4线程的常用方法
12.5线程同步
12.6在同步方法中使用wait()、notify()和notifyAll()方法
12.7线程联合
12.8上机实践
习题
第13章Java网络编程
13.1URL类
13.1.1URL的构造方法
13.1.2读取URL中的资源
13.2InetAddress类
13.2.1地址的表示
13.2.2获取地址
13.3套接字
13.3.1套接字概述
13.3.2客户端套接字
13.3.3ServerSocket对象与服务器端套接字
13.3.4使用多线程技术
13.4UDP数据报
13.4.1发送数据包
13.4.2接收数据包
13.5广播数据报
13.6Java远程调用(RMI)
13.6.1远程对象及其代理
13.6.2RMI的设计细节
13.7上机实践
习题
第5章
类 与 对 象
主要内容
面向对象的特性;
类;
构造方法与对象的创建;
参数传值;
对象的组合;
实例成员与类成员;
方法重载与多态;
this关键字;
包;
import语句;
访问权限。
面向对象语言有三个重要特性: 封装、继承和多态。学习面向对象编程要掌握怎样通过抽象得到类,继而学习怎样编写类的子类来体现继承和多态。本章主要讲述类和对象,即学习面向对象的第一个特性: 封装,下一章学习面向对象的另外两个特性: 继承和多态。
5.1面向对象的特性
随着计算机硬件设备功能的进一步提高,使得基于对象的编程成为可能。基于对象的编程更加符合人的思维模式,编写的程序更加健壮和强大,更重要的是,面向对象编程鼓励创造性的程序设计。面向对象编程是一种先进的编程思想,更加容易解决复杂的问题,面向对象编程主要体现下面三个特性。
1. 封装性
面向对象编程核心思想之一就是将数据和对数据的操作封装在一起。通过抽象,即从具体的实例中抽取共同的性质形成一般的概念,例如类的概念。
在实际生活中,我们每时每刻都与“对象”在打交道。我们用的钢笔,骑的自行车,乘的公共汽车等。而我们经常见到的卡车、公共汽车、轿车等都会涉及以下几个重要的物理量,可乘载的人数、运行速度、发动机的功率、耗油量、自重、轮子数目等。另外,还有几个重要的功能: 加速功能、减速功能、刹车、转弯功能等。我们也可以把这些功能称作是他们具有的方法,而物理量是它们的状态描述,仅仅用物理量或功能不能很好地描述它们。在现实生活中,我们用这些共有的属性和功能给出一个概念: 机动车类。也就是说,人们经常谈到的机动车类就是从具体的实例中抽取共同的属性和功能形成的一个概念,那么一个具体的轿车就是机动车类的一个实例,即对象。一个对象将自己的数据和对这些数据的操作合理有效地封装在一起,例如,每辆轿车调用“加大油门”改变的都是自己的运行速度。
2. 继承性
继承体现了一种先进的编程模式。子类可以继承父类的属性和功能,即继承了父类具有的数据和数据上的操作,同时又可以增添子类独有的数据和数据上的操作。例如,“人类”自然继承了“哺乳类”的属性和功能,同时又增添了人类独有的属性和功能。
3. 多态性
多态是面向对象编程的又一重要特征。有两种意义的多态: 一种是操作名称的多态,即有多个操作具有相同的名字,但这些操作所接收的消息类型必须不同。例如,让一个人执行“求面积”操作时,他可能会问你求什么面积。所谓操作名称的多态是指可以向操作传递不同消息,以便让对象根据相应的消息来产生一定的行为。另一种多态是和继承有关的多态,是指同一个操作被不同类型对象调用时可能产生不同的行为。例如,狗和猫都具有哺乳类的功能: “喊叫”,当狗操作“喊叫”时产生的声音是“汪汪… ”; 而当猫操作“喊叫”时产生的声音是“喵喵…”。
5.2类
类是组成Java程序的基本要素,一个Java应用程序就是由若干个类构成的(见第2章)。类是Java语言中最重要的“数据类型”,类声明的变量被称作对象,即类是用来创建对象的“模板”。
类的定义包括两部分: 类声明和类体。基本格式为:
class类名{
类体的内容
}
class是关键字,用来定义类。“class 类名”是类的声明部分,类名必须是合法的Java标识符。两个大括号以及之间的内容是类体。
5.2.1类声明
以下是两个类声明的例子。
class People {
…
}
class植物{
…
}
“class People”和“class植物”叫作类声明; “People”和“植物”分别是类名。类的名字要符合标识符规定,即名字可以由字母、下划线、数字或美元符号组成,并且第一个字符不能是数字(这是语法要求的)。给类命名时,遵守下列编程风格(这不是语法要求的,但应当遵守)。
(1) 如果类名使用拉丁字母,那么名字的首字母使用大写字母,如Hello,Time等。
(2) 类名最好容易识别、见名知意。当类名由几个单词复合而成时,每个单词的首字母使用大写,如ChinaMade,AmericanVehicle,HelloChina等。
5.2.2类体
写类的目的是根据抽象描述一类事物共有的属性和功能,即给出用于创建具体实例(对象)的一种数据类型,描述过程由类体实现。类声明之后的一对大括号“{”,“}”以及它们之间的内容称作类体,大括号之间的内容称作类体的内容。
抽象的关键是抓住事物的两个方面: 属性和功能,即数据以及在数据上进行的操作,因此类体的内容由两部分构成。
变量的声明: 用来描述数据(体现对象的属性)。
方法: 方法可以对类中声明的变量进行操作,即给出算法(体现对象具有的功能)。
下面是一个类名为Lader的类(用来描述梯形),类体内容的变量定义部分定义了4个float类型变量: above、bottom、height和area; 方法定义部分定义了两个方法: computerArea和setHeight。
……