第1章 Java语言基础 1
1.1 Java语言介绍 1
1.1.1 Java语言的发展历程 1
1.1.2 Java语言的体系 2
1.1.3 Java语言的特点 2
1.1.4 Java语言的地位 3
1.2 搭建Java开发环境 3
1.2.1 安装JDK 3
1.2.2 在Windows 7配置Java环境 6
1.2.3 在Windows 10配置Java环境 6
1.2.4 充分利用Java API文档 8
1.3 第一个Java程序 9
1.3.1 编写第一个Java代码 9
实例1-1:第一个Java程序代码 9
1.3.2 编译Java程序 9
1.3.3 运行Java代码 10
1.3.4 Java 11新特性:新的程序运行方式 11
第2章 使用IDE开发工具 12
2.1 使用Eclipse 12
2.1.1 IDE介绍 12
2.1.2 下载并安装Eclipse 12
2.1.3 新建一个Eclipse项目 16
2.1.4 编译并运行Eclipse项目 17
2.1.5 使用Eclipse打开一个Java工程——打开下载包中的项目 18
2.2 使用Intellij IDEA 19
2.2.1 搭建IntelliJ IDEA开发环境 19
2.2.2 使用IntelliJ IDEA新建Java工程 21
2.2.3 使用IntelliJ IDEA运行Java程序 22
第3章 Java基础语法 23
3.1 关键字、标识符和注释 23
3.1.1 关键字 23
3.1.2 标识符 24
3.1.3 注释 24
3.2 变量和常量 25
3.2.1 常量 25
实例3-1:定义几个Java常量 25
3.2.2 变量 26
实例3-2:计算三角形、正方形和长方形的面积 27
实例3-3:输出各种变量的值 27
3.3 数据类型 28
3.3.1 为什么引入数据类型 29
3.3.2 基本数据类型的取值范围 29
3.3.3 字符型 30
实例3-4:输出三种特殊符号 30
3.3.4 整型 31
实例3-5:通过整型类型计算图形周长和面积 31
3.3.5 浮点型 32
实例3-6:计算圆的面积 33
3.3.6 布尔型 33
实例3-7:比较两个数的大小 33
3.4 运算符 34
3.4.1 算术运算符 34
实例3-8:基本的数学运算(加、减、乘、除) 34
实例3-9:使用“%”运算符 35
实例3-10:使用递增与递减运算符 36
3.4.2 关系运算符和逻辑运算符 36
实例3-11:使用关系运算符比较数字和字符 37
3.4.3 位运算符 38
实例3-12:对两个整数实现位运算 39
3.4.4 条件运算符 39
实例3-13:使用条件运算符判断成绩是否优秀 39
3.4.5 赋值运算符 40
实例3-14:赋值类型不匹配的错误 40
3.4.6 运算符的优先级 40
实例3-15:四则混合运算 41
3.5 类型转换 42
3.5.1 自动类型转换 42
实例3-16:将整数自动转换为float类型 42
3.5.2 强制转换 43
实例3-17:实现int、byte和double类型之间的强制转换 43
第4章 使用条件语句 44
4.1 使用if语句 44
4.1.1 if语句介绍 44
实例4-1:判断成绩是否及格 45
4.1.2 if语句的延伸 45
实例4-2:对两种条件给出不同的答案 46
4.1.3 多个条件判断的if语句 46
实例4-3:模拟抽奖系统 47
4.2 使用switch语句 47
4.2.1 switch语句基础 48
实例4-4:判断数字的大小 48
4.2.2 没有break时的情形 49
实例4.5:执行switch后面的所有分支条件语句 49
4.2.3 case没有执行语句 49
实例4-6:在case语句后没有执行的代码 50
4.2.4 default可以不在末尾 50
实例4-7:将default放在第一个case分支中 50
第5章 使用循环语句 51
5.1 使用for循环语句 51
5.1.1 for循环介绍 51
实例5-1:输出整数0到9 52
5.1.2 嵌套使用for循环 52
实例5-2:使用嵌套for语句显示人民币符号和美元符号 53
实例5-3:在屏幕中输出一个用“*”摆放的菱形 53
5.2 使用while循环语句 54
5.2.1 while循环基础 54
实例5-4:循环输出18个数字 54
实例5-5:输出能够整除7的数字 55
5.2.2 do-while循环语句 55
实例5-6:使用do-while语句输出0到7 56
实例5-7:计算1+2+3+…+100的和 56
5.3 使用跳转语句 57
5.3.1 break语句 57
实例5-8:使用break终止循环的执行 57
实例5-9:在while循环语句中使用break 57
实例5-10:使用有标号的break语句 58
5.3.2 使用return语句 59
实例5-11:使用return语句结束循环的执行 59
5.3.3 使用continue跳转语句 59
实例5-12:使用continue改变for循环的运行结果 59
第6章 操作字符串 61
6.1 Java字符串的初始化 61
实例6-1:实现Java字符串的初始化 61
6.2 使用String类操作字符串 62
6.2.1 获取指定索引位置的字符 62
实例6-2:返回某个字符串指定索引的字符 62
6.2.2 追加字符串 63
实例6-3:在字符串后面追加字符串(好好+学习) 63
6.2.3 连接多个字符串 63
实例6-4:使用“+”连接两个对象 63
6.2.4 比较字符串 63
实例6-5:判断两个指定的字符串是否相等 64
6.2.5 获得字符串长度 64
实例6-6:获取字符串的长度 64
6.2.6 替换字符串 65
实例6-7:替换字符串中的某一个文字 65
6.2.7 截取字符串 65
实例6-8:截取一个字符串,并输出截取后的结果 65
6.2.8 字符串的大小写互转 66
实例6-9:对指定的字符串实现大小写转换 66
6.2.9 消除字符串中的空白字符 66
实例6-10:去掉字符串开头的空白字符 66
6.2.10 查找字符串 67
实例6-11:查找字符串str中空字符的位置 68
6.3 使用类StringBuffer 68
实例6-12:使用追加字符函数 69
第7章 使用数组 70
7.1 最简单的一维数组 70
7.1.1 声明一维数组 70
7.1.2 创建一维数组 70
实例7-1:创建并输出一维数组中的数据 71
7.1.3 初始化一维数组 72
实例7-2:初始化一维数组,并将数组值输出打印 72
7.2 二维数组 73
7.2.1 声明二维数组 73
7.2.2 创建二维数组 73
实例7-3:创建二维数组并输出打印里面的数据 74
7.2.3 初始化二维数组 74
实例7-4:打印输出二维数组中的数据 75
7.3 三维数组 76
7.3.1 声明三维数组 76
7.3.2 初始化三维数组 76
实例7-5:创建三维数组,然后输出打印数组内元素 77
7.4 操作数组 77
7.4.1 复制数组 78
实例7-6:复制一维数组中的元素 78
7.4.2 比较数组 79
实例7-7:比较两个一维数组 79
7.4.3 搜索数组中的元素 79
实例7-8:使用binarySearch()搜索数组内元素 79
7.4.4 排序数组 80
实例7-9:使用sort()排序数组内元素 80
7.4.5 填充数组 80
实例7-10:使用fill()向数组中添加新的元素 80
7.5 数组的高级用法 81
7.5.1 动态数组 81
实例7-11:将ArrayList作为Java动态数组 82
7.5.2 使用foreach循环 82
实例7-12:使用foreach遍历输出数组中的元素 83
7.5.3 数组和内存 83
实例7-13:初始化基本类型数组 84
第8章 类和方法 86
8.1 面向对象基础 86
8.1.1 面向对象介绍 86
8.1.2 Java的面向对象编程 87
8.1.3 Java面向对象的几个核心概念 87
8.2 类 88
8.2.1 定义类 89
8.2.2 定义属性 89
8.2.3 定义方法 90
8.2.4 定义构造器 91
8.3 修饰符 91
8.3.1 public修饰符 91
实例8-1:输出显示歼20的飞行里程 91
8.3.2 使用private修饰修饰符 92
实例8-2:使用private修饰符输出姓名和学号 92
8.3.3 使用protected保护修饰符 93
实例8-3:输出显示歼20列装和形成战力的年份 93
8.3.4 其他修饰符 93
实例8-4:使用默认修饰符创建属性和方法 93
8.4 使用方法 94
8.4.1 方法的所属性 94
8.4.2 传递方法参数 95
实例8-5:传递方法的参数 95
8.4.3 长度可变的方法 96
实例8-6:定义一个形参长度可变的方法 96
8.4.4 构造方法 97
实例8-7:在类中创建一个构造方法 97
8.4.5 递归方法 97
实例8-8:使用递归计算f(10)的值 97
8.5 使用this关键字 98
实例8-9:使用this引用全局变量 98
8.6 使用类和对象 99
8.6.1 创建和使用对象 99
实例8-10:在类中创建和使用对象 99
8.6.2 使用静态变量和静态方法 100
实例8-11:输出显示飞机的当前坐标 100
8.7 抽象类和抽象方法 101
8.7.1 抽象类和抽象方法基础 101
实例8-12:收获苹果和桔子 101
8.7.2 抽象类必须有一个抽象方法 102
实例8-13:展示汽车的油量变化 102
8.7.3 抽象类的作用 103
实例8-14:父类把一个或多个方法留给其子类实现 103
8.8 软件包 104
8.8.1 定义软件包 105
8.8.2 在Eclipse定义软件包 105
8.8.3 在程序里插入软件包 106
实例8-15:在类中插入一些特定的包 106
第9章 继承、重载、接口和构造器 108
9.1 类的继承 108
9.1.1 父类和子类 108
实例9-1:使用类的继承 108
9.1.2 调用父类的构造方法 109
实例9-2:输出品类为商业大佬自传的图书信息 109
9.1.3 访问父类的属性和方法 110
实例9-3:使用子类访问父类的属性 110
9.1.4 多重继承 111
实例9-4:实现3个类的多重继承 111
9.1.5 重写父类方法 113
实例9-5:过滤掉父类中的方法 113
9.2 重写和重载 114
9.2.1 重写 114
实例9-6:一个没有具体意义方法重写 114
实例9-7:输出显示××集团的信息 115
9.2.2 重载 116
实例9-8:显示继承人的信息 116
9.2.3 联合使用重写与重载 116
实例9-9:××集团的财产继承分配方案 117
9.3 隐藏和封装 118
9.3.1 Java中的封装 118
9.3.2 使用访问控制符 118
实例9-10:使用访问控制符改变程序的执行效果 119
9.4 接口 120
9.4.1 定义接口 120
9.4.2 接口中的量和方法 120
实例9-11:在接口中使用常量 121
实例9-12:在接口中使用方法 121
9.4.3 实现接口 122
实例9-13:通过接口实现数学运算 122
9.4.4 引用接口 123
实例9-14:引用接口计算数学题 123
9.4.5 接口的继承 124
实例9-15:实现三个接口之间的继承 125
第10章 多态、包装类、内部类和枚举类 126
10.1 多态 126
10.1.1 何谓多态 126
10.1.2 演示Java中的多态 128
实例10-1:认识第一个多态程序 128
10.2 引用类型 130
10.2.1 四种引用类型 130
实例10-2:使用引用类型回收资源 131
10.2.2 使用instanceof运算符 133
实例10-3:某某的出场费最高吗 133
10.2.3 引用变量的强制类型转换 134
实例10-4:实现Object类型和String类型之间的强制转换 134
10.3 组合 135
实例10-5:实现代码复用 135
10.4 初始化块 136
10.4.1 何谓初始化块 136
实例10-6:老同学之间的对话 137
10.4.2 静态初始化块 137
实例10-7:优先执行静态初始化块 138
10.5 使用final修饰符 139
10.5.1 用final修饰变量 139
实例10-8:使用final修饰成员变量 140
10.5.2 使用final方法 141
实例10-9:在子类中设置不重写父类中的某个方法 141
10.5.3 使用final类 142
实例10-10:设置一个不允许被任何类继承的类 142
10.6 内部类 143
10.6.1 何谓内部类 143
10.6.2 非静态内部类 144
实例10-11:设置衣服的颜色和具体位置 144
10.6.3 成员内部类 145
实例10-12:在外部类或外部类的非静态方法中实现内部类对象实例 145
10.6.4 局部内部类 146
实例10-13:使用局部内部类访问当前代码块内的常量 146
10.7 枚举类 146
10.7.1 枚举类的方法 146
10.7.2 手动实现枚举类 147
实例10-14:输出显示“秋天是一个天高云淡的季节” 147
10.7.3 枚举类型 148
实例10-15:使用枚举类型显示当前的季节 148
第11章 集合 150
11.1 Java集合概述 150
11.2 Collection接口和Iterator接口 151
11.2.1 基础知识介绍 151
11.2.2 使用Collection接口和Iterator接口 153
实例11-1:使用Collection方法操作集合中的元素 153
11.3 Set接口 154
11.3.1 基础知识介绍 154
11.3.2 使用HashSet 157
实例11-2:使用HashSet判断集合元素相同的标准 157
11.3.3 使用TreeSet类 158
实例11-3:添加、删除TreeSet中的数据 158
实例11-4:演示TreeSet的自然排序用法 159
11.3.4 使用EnumSet类 160
实例11-5:使用EnumSet保存枚举类中的值 161
11.4 List接口 161
11.4.1 List接口介绍 162
11.4.2 使用List接口和ListIterator接口 164
实例11-6:使用List根据索引来操作集合内元素 164
11.4.3 使用ArrayList和Vector类 165
实例11-7:将Vector作为“栈”功能来使用 165
11.5 Map接口 166
11.5.1 基本知识介绍 166
11.5.2 使用HashMap和Hashtable实现类 169
实例11-8:将null作为HashMap的key值和value值 169
实例11-9:使用Hashtable判断两个value是否相等 170
11.5.3 使用SortedMap接口和TreeMap实现类 171
实例11-10:使用TreeMap实现自然排序 171
11.5.4 使用类IdentityHashMap 173
实例11-11:使用类IdentityHashMap添加数据 173
11.5.5 使用类EnumMap 173
实例11-12:使用类EnumMap添加数据 174
11.6 模拟队列数据结构的Queue接口 174
11.6.1 使用类LinkedList 175
实例11-13:使用类LinkedList操作列表中的数据 175
11.6.2 处理优先级的类PriorityQueue 176
实例11-14:找出队列中的最小值 176
11.7 集合工具类Collections 177
11.7.1 排序操作 177
实例11-15:使用Collections操作List集合 177
11.7.2 查找和替换操作 178
实例11-16:使用Collections查找集合中的元素 178
11.8 其他集合类 179
11.8.1 Stack类 179
实例11-17:实现入栈和出栈操作 180
11.8.2 属性类Properties 180
第12章 常用的内置类库 182
12.1 使用StringBuffer类 182
12.1.1 StringBuffer类基础 182
12.1.2 通过append连接各种类型的数据 183
实例12-1:将“我爱,学习,Java,1个月了”等数据连接起来 183
12.1.3 在任意位置为StringBuffer添加内容 183
实例12-2:在“Java”前后分别添加“我学习”和“3个月”了 184
12.1.4 替换StringBuffer的内容 184
实例12-3:将“Hello World”中的“World”替换为“AAA” 184
12.1.5 从StringBuffer中删除指定范围的字符串 184
实例12-4:将“Hello AAA”中的“AAA”删除 184
12.2 使用Runtime类 185
12.2.1 Runtime类介绍 185
12.2.2 得到JVM的内存空间信息 186
实例12-5:查看JVM的空间情况 186
12.2.3 联合使用Runtime类与Process类 186
实例12-6:调用本机可执行程序(记事本) 186
12.3 实现程序国际化 187
12.3.1 国际化基础 187
12.3.2 使用Locale类 188
12.3.3 使用ResourceBundle类 189
实例12-7:通过ResourceBundle取得资源文件中的内容 189
12.3.4 处理动态文本 189
实例12-8:使用MessageFormat格式化动态文本 190
12.3.5 使用类代替资源文件 191
实例12-9:使用类设置资源文件的信息 191
12.4 使用System类 192
12.4.1 System类基础 192
实例12-10:计算一个程序的执行时间 192
12.4.2 通过System类获取本机的全部环境属性 193
实例12-11:获取本机的全部环境属性 193
12.4.3 垃圾对象的回收 194
实例12-12:释放观察对象 194
12.5 使用Date类 195
12.5.1 使用Date类 195
实例12-13:得到当前系统日期 195
12.5.2 使用Calendar类 196
实例12-14:获取系统的当前日期 196
12.5.3 使用DateFormat类 197
实例12-15:演示DateFormat中的默认操作 197
12.5.4 使用SimpleDateFormat类 198
实例12-16:格式化显示日期 198
12.6 几个核心类 199
12.6.1 使用Math类 199
实例12-17:使用类Math实现基本数学运算 200
12.6.2 使用Random类 200
实例12-18:生成10个不大于100的随机数字 201
12.6.3 使用NumberFormat类 201
实例12-19:格式化显示数字 202
12.6.4 使用BigInteger类 203
实例12-20:使用类BigInteger实现数学运算 203
12.6.5 BigDecimal类 204
实例12-21:实现四舍五入四则运算 204
第13章 使用泛型 206
13.1 泛型基础 206
13.1.1 泛型的好处 206
13.1.2 类型检查 207
实例13-1:输出显示BESTSELLER旗下的品牌 207
13.1.3 类型扩展 207
实例13-2:创建了一个只能存放String对象的StrList集合类 208
13.1.4 使用泛型 208
实例13-3:使用泛型改进程序 208
13.2 泛型类 209
13.2.1 定义泛型接口和类 209
实例13-4:在类中包含一个泛型声明 210
13.2.2 派生子类 210
13.2.3 并不存在泛型类 211
13.3 类型通配符 212
13.3.1 类型通配符基础 212
13.3.2 设置类型通配符的上限 213
实例13-5:绘制三个形状 213
13.3.3 设置类型形参的上限 214
13.4 泛型方法 215
13.4.1 定义泛型方法 215
实例13-6:演示泛型方法的完整用法 216
13.4.2 设置通配符下限 218
13.5 泛型接口 219
实例13-7:创建并使用泛型接口 219
第14章 异常处理 220
14.1 什么是异常 220
14.1.1 认识异常 220
14.1.2 Java提供的异常处理类 221
14.2 异常处理方式 222
14.2.1 使用try...catch处理异常 222
实例14-1:分母不能为零 222
14.2.2 处理多个异常 223
实例14-2:同时处理三种类型的异常 223
14.2.3 在异常中使用finally关键字 223
实例14-3:使用finally关键字输出异常信息 224
14.2.4 总是被执行的finally代码块 224
实例14-4:输出显示finally代码块中的内容 224
14.2.5 访问异常信息 225
实例14-5:演示程序如何访问异常信息 225
14.3 抛出异常 226
14.3.1 使用throws抛出异常 226
实例14-6:使用关键字throws处理多种异常 227
14.3.2 使用throw抛出异常 228
实例14-7:使用关键字throw将异常抛给上一级调用 228
14.4 自定义异常 228
14.4.1 Throwable类介绍 229
14.4.2 在Java程序中使用异常类 230
实例14-8:使用内置异常类处理多种异常 230
14.4.3 使用Throwable类自定义异常 231
实例14-9:编写自定义异常程序 231
第15章 文件处理 233
15.1 Java I/O基础 233
15.2 使用类File 234
15.2.1 File类中方法 234
15.2.2 使用File类创建文件 234
实例15-1:在H盘上创建一个名为“奔驰GLA.txt”的文件 234
15.2.3 使用File类删除文件 235
实例15-2:在H盘上删除名为“奔驰GLA.txt”的文件 235
15.2.4 使用类File创建文件夹 235
实例15-3:创建一个名为“奔驰Smart”文件夹 235
15.2.5 使用File类列出目录中的全部文件 236
实例15-4:使用list()方法列出一个目录中的全部内容 236
15.3 RandomAccessFile类 237
15.3.1 类RandomAccessFile的常用方法 237
15.3.2 使用类RandomAccessFile 237
实例15-5:向文件中写入数据 237
15.4 字节流与字符流 238
15.4.1 节流类和字符流类 238
15.4.2 使用字节输出流OutputStream 239
实例15-6:向文件中写入字符串 239
15.4.3 使用字节输入流InputStream 240
实例15-7:读取并显示文件中的内容 241
15.4.4 开辟指定大小的byte数组 241
实例15-8:根据文件的数据量来选择开辟空间的大小 241
实例15-9:使用方法read()读取内容 242
实例15-10:通过判断是否读到文件末尾的方式来读取文件 243
15.4.5 使用字符流类Writer写入文件内容 243
实例15-11:使用字符流Writer向文件中写入内容 244
15.4.6 使用类FileWriter追加文件的内容 245
实例15-12:向文件中追加指定的内容 245
15.5 使用类BufferedReader 245
15.5.1 类BufferedReader基础 246
实例15-13:使用方法readLine()读取用户输入的信息 246
15.5.2 使用BufferedReader类 246
实例15-14:输入两个数字,并让两个数字相加。 246
15.6 数据操作流 247
15.6.1 使用类DataOutputStream 247
实例15-15:将订单数据写入到文件order.txt中 248
15.6.2 DataInputStream类 248
实例15-16:读取文件order.txt中的订单信息 249
15.7 合并流 250
实例15-17:合并两个文件 250
15.8 压缩流 251
15.8.1 ZIP压缩输入/输出流简介 251
15.8.2 ZipOutputStream类 251
实例15-18:压缩指定的文件 252
实例15-19:压缩D盘中的文件夹www 253
15.8.3 类ZipFile 254
实例15-20:实例化ZipFile类对象 254
15.8.4 ZipInputStream类 255
实例15-21:取得www.zip中的一个ZipEntry 255
第16章 使用Annotation 256
16.1 Class类与Java反射 256
16.1.1 反射中的方法 256
16.1.2 访问构造方法 257
实例16-1:使用Constructor对象访问构造方法 258
16.1.3 访问成员变量 260
实例16-2:使用类Field访问成员变量 261
16.1.4 访问方法 262
实例16-3:使用类Method访问方法 263
16.2 使用Annotation注解 265
16.2.1 使用系统内置的Annotation 265
实例16-4:使用注解@Override 266
实例16-5:使用注解@Deprecated取消错误信息 266
实例16-6:使用@SuppressWarnings取消警告信息 267
16.2.2 自定义Annotation 267
实例16-7:访问自定义的Annotation 269
第17章 使用AWT开发GUI程序 273
17.1 AWT基础 273
17.2 容器 275
17.2.1 容器基础 275
17.2.2 使用容器中组件:Frame 275
实例17-1:使用Frame创建一个窗口 276
17.2.3 使用容器中组件:Panel 276
实例17-2:使用Panel作为容器盛装了一个文本框和一个按钮 277
17.2.4 使用容器中组件:ScrollPane 277
实例17-3:使用ScrollPane容器代替了本节前面的Panel容器 277
17.3 布局管理器 278
17.3.1 布局利器FlowLayout 278
实例17-4:使用FlowLayout布局 279
17.3.2 布局利器BorderLayout 279
实例17-5:使用BorderLayout布局 280
17.3.3 布局利器GridLayout 281
实例17-6:使用GridLayout布局 281
17.4 AWT的常用组件 282
17.4.1 AWT中的组件 282
实例17-7:使用AWT的基本组件进行各类操作 283
17.4.2 AWT中的对话框 285
实例17-8:使用模式对话框和非模式对话框 285
第18章 使用Swing开发GUI程序 287
18.1 Swing基础 287
18.2 Swing的组件 288
18.2.1 Swing组件的层次结构 288
18.2.2 Swing实现AWT组件 289
实例18-1:使用Swing组件创建窗口 290
18.2.3 Jframe、JscrollPane和边框 294
实例18-2:为Panel容器分别添加了几种边框 295
18.2.4 使用JToolBar创建工具条 296
实例18-3:实现“复制”和“粘贴”功能 297
18.2.5 使用JColorChooser和JFileChooser 299
实例18-4:实现一个颜色选择对话框效果 300
18.3 使用进度条组件 302
18.3.1 创建一个进度条 302
实例18-5:实现一个进度条效果 303
18.3.2 使用ProgressMonitor创建进度条对话框 304
实例18-6:使用SimulatedTarget模拟了一个耗时任务 304
第19章 使用JavaFX开发GUI程序 307
19.1 JavaFX介绍 307
19.1.1 JavaFX的特色 307
19.1.2 安装e(fx)clipse插件 308
19.1.3 认识第一个JavaFX程序 310
实例19-1:在JavaFX界面中输出打折信息 310
19.2 JavaFX开发基础 311
19.2.1 窗体结构 311
实例19-2:单击我提交订单 312
19.2.2 属性绑定 313
实例19-3:使用属性绑定功能 313
19.3 基本属性设置 314
19.3.1 使用Color类设置颜色 314
实例19-4:使用RGB方式设置颜色 316
实例19-5:使用Web方式设置颜色 317
19.3.2 使用Text类绘制文字 318
实例19-6:在窗体中绘制指定样式文本 319
19.4 使用Shape类绘制形状 320
19.4.1 使用Line绘制线条 320
实例19-7:使用Line绘制直线 321
19.4.2 使用Rectangle绘制矩形 322
实例19-8:绘制多个样式的矩形 322
19.5 使用面板实现界面布局 323
19.5.1 使用Pane的画布功能 324
实例19-9:在类javafx.scene.layout.Pane中绘制一个圆 324
19.5.2 使用StackPane实现特定面板功能 325
实例19-10:在面板中放置一个按钮 325
19.5.3 使用FlowPane实现序列放置 325
实例19-11:在面板中同时添加标签和文本 326
19.6 使用JavaFX UI组件 327
19.6.1 使用标签组件 327
实例19-12:使用标签组件创建有文本和图片的标签 327
19.6.2 使用按钮组件 329
实例19-13:使用按钮控制一段文本的左右移动 329
第20章 开发网络程序 331
20.1 Java中的网络包 331
20.1.1 InetAddress类详解 331
20.1.2 URLDecoder类和URLEncoder类详解 332
20.1.3 URL和URLConnection 332
20.1.4 实践演练 334
实例20-1:使用类InetAddress发送信息 335
实例20-2:图片下载系统 335
20.2 TCP编程 338
20.2.1 使用ServletSocket 338
20.2.2 使用Socket 338
实例20-3:创建一个TCP协议的服务器端 339
20.2.3 TCP中的多线程 340
实例20-4:开发一个聊天室程序 340
20.3 UDP编程 343
20.3.1 使用DatagramSocket 343
实例20-5:使用UDP开发一个聊天系统 344
20.3.2 使用MulticastSocket 345
实例20-6:实现一个基于广播的多网友用户聊天室 347
第21章 开发数据库程序 349
21.1 SQL语言基础 349
21.1.1 数据定义 349
21.1.2 数据操纵 351
21.2 JDBC基础 353
21.2.1 JDBC驱动类型 353
21.2.2 JDBC的常用接口和类 354
21.3 连接SQL Server数据库 356
21.3.1 下载并安装SQL Server 2016驱动 356
21.3.2 测试连接 358
实例21-1:连接SQL Server数据库 358
21.3.3 获取指定SQL Server数据库中的表 359
实例21-2:输出显示某个SQL Server数据库中包含的表 359
21.4 连接MySQL数据库 360
21.4.1 下载并配置MySQL驱动 360
21.4.2 将MySQL驱动加载到Eclipse 361
21.4.3 测试连接 362
实例21-3:输出显示连接MySQL数据库是否成功 362
第22章 开发多线程程序 363
22.1 线程基础 363
22.1.1 什么是线程 363
22.1.2 Java的线程模型 364
22.2 创建线程 364
22.2.1 使用Thread类创建线程 364
实例22-1:使用类Thread建立线程 365
实例22-2:设置线程名字(使用类Thread) 366
22.2.2 使用Runnable接口创建线程 367
实例22-3:设置线程名字 367
22.3 线程的生命周期 368
22.3.1 创建并运行线程 368
实例22-4:线程的创建、运行和停止三个状态之间的切换 368
22.3.2 挂起和唤醒线程 369
实例22-5:使用sleep()、suspend()和resume() 369
22.3.3 终止线程的三种方法 370
实例22-6:使用退出标志终止线程 370
22.3.4 线程阻塞 371
22.3.5 线程死亡 372
实例22-7:演示线程的死亡 372
22.4 控制线程 373
22.4.1 使用join方法 373
实例22-8:返回某个字符串指定索引的字符 373
22.4.2 使用volatile关键字 374
实例22-9:实现原子操作 374
第23章 航空订票管理系统 376
23.1 系统概述和总体设计 376
23.1.1 系统需求分析 376
23.1.2 系统demo流程 377
23.2 数据库设计 378
23.2.1 选择数据库 378
23.2.2 数据库结构的设计 378
23.3 系统框架设计 380
23.3.1 设计主界面 380
23.3.2 设计菜单 384
23.3.3 配置Hibernate访问类 386
23.3.4 系统登录模块设计 389
23.4 航班信息管理模块 391
23.4.1 添加飞机管理 391
23.4.2 添加航班管理信息 392
23.4.3 添加航班计划 393
23.5 网点管理模块 396
23.5.1 网点添加管理 396
23.5.2 删除网点管理 397
23.6 订票管理模块 398
23.6.1 网点登录管理 399
23.6.2 订票信息管理 400
23.7 系统测试 402