Java 开发从入门到精通 第2版
书籍作者:扶松柏 |
ISBN:9787115504104 |
书籍语言:简体中文 |
连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 |
下载次数:5099 |
创建日期:2021-02-14 |
发布日期:2021-02-14 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
内容简介
本书专门介绍Java编程,主要内容包括:Java基础知识、Java语法基础、条件语句、循环语句、数组、Java面向对象编程、集合、常用的类库、泛型、异常处理、I/O文件处理和流程、AWT、Swing、JavaFX基础知识、UI组件、事件处理程序、基于JavaFX框架的Web和多媒体开发、数据库编程、网络与通信编程、多线程和进程等。本书适合Java开发人员阅读,也适合计算机相关专业的师生阅读。
作者简介
扶松柏,上海大学计算机科学技术学院硕士,通信工程博士,精通Java、C语言、C++程序开发,擅长底层技术和应用程序的结合。具有丰富的Java开发经验和编程心得。
编辑推荐
Java是一门神奇的编程语言,一直雄踞各编程语言排行榜的榜首,用它开发的软件遍布各行各业。本书作为一本Java的入门书籍,其丰富的配套资源让一样的编程语言有不一样的学法:
·770 个实例,使读者有更多的实践演练机会
·300 多个拓展实例,真正地做到举一反三
·2000 多分钟的视频讲解,帮助读者降低学习难度
·100 多个技术解惑 ,破解学习的难点
与市面上同类图书相比,我们这本书根据读者的学习习惯、结合程序设计专业的教学特点,以“技术讲解”→ 范例演练”→“技术解惑”贯穿全书,帮助零基础读者全面掌握Java 语言开发。
● 技术讲解:详细介绍Java 9、Java 10 和Java 11 的新特性和各个知识点
● 范例演练:1070 多个实例, 让读者在实践中学会Java 语言
● 技术解惑:把容易混淆的概念单独讲解和剖析,帮助读者绕过学习中的陷阱
QQ 群+ 网站论坛实现教学互动,形成互帮互学的朋友圈
● 网站论坛:作者答疑/学习辅导/ PPT 资源下载
● 答疑QQ 群:疑惑快速解答/和作者直接交流
另外,我们这本书在内容和服务上,有以下优势:
1.提供100个提高程序性能的技巧,让读者少走弯路;
2.增加课后练习模块 ,巩固读者所学内容;
3.1本书的内容,3本书的容量,让读者买得值,学得会;
4.按照Java10新版本写作,让读者真正和现实项目结合起来;
5.全视频讲解,不会的地方看视频更容易;
6.不定期开设辅导读者的视频课,学习更高效。
目录
目 录
第 1章 计算机基础和Java开发入门 1
1.1 计算机基础 2
1.1.1 中央处理器 2
1.1.2 比特和字节 2
1.1.3 二进制 3
1.1.4 编码格式 3
1.2 初识Java 4
1.2.1 何谓Java 4
1.2.2 Java的特点 5
1.2.3 Java的地位 5
1.3 技术解惑 6
1.3.1 对初学者的建议 6
1.3.2 理解Java的垃圾回收
机制 6
1.3.3 充分利用Java API文档 7
1.4 课后练习 7
第 2章 第 一段Java程序 8
2.1 搭建Java开发环境 9
2.1.1 安装JDK 9
2.1.2 配置开发环境—
Windows 7 11
2.1.3 配置开发环境—
Windows 10 11
2.2 编写第 一段Java程序 13
2.2.1 第 一段Java代码 13
2.2.2 关键字 13
2.2.3 标识符 14
2.2.4 注释 14
2.2.5 main()方法 15
2.2.6 控制台的输入和输出 15
2.3 编译并运行Java程序 15
2.3.1 编译Java程序 15
2.3.2 运行Java程序 16
2.3.3 Java 11新特性:新的程序
运行方式 16
2.4 使用IDE工具—Eclipse 17
2.4.1 Eclipse 17
2.4.2 获得并安装Eclipse 17
2.4.3 新建一个Eclipse项目 20
2.4.4 编译并运行Eclipse项目 23
2.4.5 使用Eclipse打开一个
Java项目 24
2.5 Java的运行机制 25
2.5.1 编译型/解释型语言的
运行机制 25
2.5.2 Java程序则要先编译、
后运行 25
2.6 技术解惑 26
2.6.1 遵循Java源文件的
命名规则 26
2.6.2 忽视系统文件的扩展名 26
2.6.3 环境变量的问题 26
2.6.4 大小写的问题 27
2.6.5 main()方法的问题 27
2.6.6 注意空格问题 27
2.6.7 到底用不用IDE工具 27
2.6.8 区分JRE和JDK 28
2.7 课后练习 28
第3章 Java语法基础 29
3.1 常量和变量 30
3.1.1 常量 30
3.1.2 变量 31
3.2 数据类型 33
3.2.1 为什么要使用数据类型 33
3.2.2 简单数据类型的
取值范围 34
3.2.3 字符型 34
3.2.4 整型 35
3.2.5 浮点型 36
3.2.6 布尔型 37
3.3 运算符 38
3.3.1 算术运算符 38
3.3.2 关系运算符和逻辑
运算符 41
3.3.3 位逻辑运算符 42
3.3.4 条件运算符 43
3.3.5 赋值运算符 44
3.3.6 运算符的优先级 45
3.4 字符串 46
3.4.1 字符串的初始化 46
3.4.2 String类 47
3.4.3 StringBuffer类 49
3.5 类型转换 50
3.5.1 自动类型转换 50
3.5.2 强制类型转换 51
3.6 Java 11新特性:新增的
String函数 51
3.7 技术解惑 54
3.7.1 定义常量时的注意事项 54
3.7.2 char类型中单引号的
意义 54
3.7.3 正无穷和负无穷的
问题 55
3.7.4 移位运算符的限制 55
3.8 课后练习 55
第4章 条件语句 56
4.1 if语句详解 57
4.1.1 if语句 57
4.1.2 if语句的延伸 58
4.1.3 有多个条件判断的if
语句 59
4.2 switch语句详解 60
4.2.1 switch语句的形式 61
4.2.2 无break的情况 62
4.2.3 case语句后没有
执行语句 62
4.2.4 default可以不在末尾 63
4.3 条件语句演练 64
4.3.1 正确使用switch语句 64
4.3.2 正确使用if语句 64
4.3.3 switch语句的执行顺序 65
4.4 技术解惑 66
4.4.1 if…else语句的意义 66
4.4.2 使用switch语句时的
几个注意事项 67
4.4.3 switch语句和if…else if
语句的选择 68
4.5 课后练习 68
第5章 循环语句 69
5.1 循环语句 70
5.1.1 for循环 70
5.1.2 while循环语句 72
5.1.3 do…while循环语句 73
5.2 跳转语句 74
5.2.1 break语句的应用 74
5.2.2 return语句的应用 76
5.2.3 continue语句 77
5.3 技术解惑 77
5.3.1 使用for循环的技巧 77
5.3.2 跳转语句的选择技巧 78
5.4 课后练习 79
第6章 数组 80
6.1 简单的一维数组 81
6.1.1 声明一维数组 81
6.1.2 创建一维数组 81
6.1.3 初始化一维数组 82
6.2 二维数组 83
6.2.1 声明二维数组 83
6.2.2 创建二维数组 83
6.2.3 初始化二维数组 84
6.3 三维数组 85
6.3.1 声明三维数组 86
6.3.2 创建三维数组的方法 86
6.3.3 初始化三维数组 86
6.4 操作数组 87
6.4.1 复制数组 87
6.4.2 比较数组 87
6.4.3 排序数组 88
6.4.4 搜索数组中的元素 89
6.4.5 填充数组 89
6.4.6 遍历数组 90
6.5 技术解惑 90
6.5.1 动态初始化数组的规则 90
6.5.2 引用类型 91
6.5.3 数组的初始化 91
6.6 课后练习 91
第7章 Java的面向对象(上) 93
7.1 面向对象的基础 94
7.1.1 面向对象的定义 94
7.1.2 Java的面向对象编程 94
7.1.3 一切皆为对象 94
7.1.4 Java面向对象的几个
核心概念 95
7.2 创建类 96
7.2.1 定义类 96
7.2.2 定义属性 97
7.2.3 定义方法 97
7.2.4 定义构造器 98
7.3 修饰符 98
7.3.1 public修饰符 98
7.3.2 private修饰符 99
7.3.3 protected修饰符 100
7.3.4 其他修饰符 100
7.4 方法详解 101
7.4.1 方法与函数的关系 101
7.4.2 传递方法参数 102
7.4.3 长度可变的方法 102
7.4.4 不使用void关键字
构造方法名 103
7.4.5 递归方法 104
7.5 使用this 105
7.6 使用类和对象 105
7.6.1 创建和使用对象 106
7.6.2 使用静态变量和
静态方法 106
7.7 抽象类和抽象方法 107
7.7.1 抽象类和抽象方法的
基础 107
7.7.2 抽象类必须有一个
抽象方法 108
7.7.3 抽象类的作用 109
7.8 软件包 110
7.8.1 软件包的定义 110
7.8.2 在Eclipse中定义
软件包 110
7.8.3 在程序里插入软件包 111
7.9 技术解惑 112
7.9.1 在Java中传递引用类型的
实质 112
7.9.2 掌握this的好处 113
7.9.3 推出抽象方法的原因 114
7.9.4 使用抽象类的时机 114
7.9.5 static修饰的作用 115
7.9.6 数组内是同一类型的
数据 115
7.10 课后练习 115
第8章 Java的面向对象(中) 116
8.1 类的继承 117
8.1.1 继承的定义 117
8.1.2 父类和子类 117
8.1.3 调用父类的构造方法 118
8.1.4 访问父类的属性和方法 119
8.1.5 多重继承 120
8.1.6 重写父类的方法 121
8.2 重写和重载 122
8.2.1 重写 122
8.2.2 重载 124
8.3 隐藏和封装 125
8.3.1 Java中的封装 125
8.3.2 访问控制符 125
8.3.3 Java中的包 127
8.3.4 import 129
8.4 接口 129
8.4.1 定义接口 129
8.4.2 接口里的常量和方法 130
8.4.3 引用接口 132
8.4.4 接口间的继承 134
8.4.5 接口的私有方法 134
8.5 技术解惑 137
8.5.1 重写方法的注意事项 137
8.5.2 重写和重载的区别 138
8.5.3 举例理解类的意义 138
8.5.4 Java包的一些规则 138
8.5.5 探讨package和import
机制 138
8.5.6 接口编程的机理 139
8.5.7 接口和抽象类的区别和
联系 140
8.6 课后练习 141
第9章 Java的面向对象(下) 142
9.1 构造器详解 143
9.1.1 初始化构造器 143
9.1.2 构造器重载 143
9.1.3 调用父类构造器 144
9.2 多态 145
9.2.1 多态的定义 145
9.2.2 演示Java中的多态 147
9.2.3 使用instanceof运算符 148
9.3 引用类型 149
9.3.1 4种引用类型 150
9.3.2 引用变量的强制
类型转换 151
9.4 组合 152
9.5 初始化块 154
9.5.1 初始化块概述 154
9.5.2 静态初始化块 155
9.6 包装类 156
9.7 final修饰符 157
9.7.1 用final修饰变量 158
9.7.2 final方法 159
9.8 内部类 160
9.8.1 内部类概述 160
9.8.2 非静态内部类 160
9.8.3 成员内部类 162
9.8.4 局部内部类 162
9.8.5 静态内部类 163
9.9 匿名类 163
9.9.1 定义匿名类 164
9.9.2 匿名内部类 164
9.9.3 匿名内部类使用final
形参 165
9.10 枚举类 166
9.10.1 枚举类的方法 166
9.10.2 模拟枚举类 167
9.10.3 枚举类型 168
9.11 Java 11新特性:嵌套访问
控制 170
9.12 技术解惑 172
9.12.1 构造器和方法的区别 172
9.12.2 this在构造器中的
作用 173
9.12.3 子类构造器调用父类
构造器的情况 173
9.12.4 强制类型转换的
局限性 174
9.12.5 继承和组合的选择 174
9.12.6 发生异常的原因 174
9.12.7 用final修饰基本类型和
引用类型变量之间的
区别 174
9.12.8 类的4种权限 174
9.12.9 手工实现枚举类的
缺点 175
9.13 课后练习 175
第 10章 集合 176
10.1 Java中的集合类 177
10.2 Collection接口和Iterator
接口 178
10.2.1 Collection接口概述 178
10.2.2 Iterator接口概述 179
10.2.3 使用Collection接口中的
方法来操作集合里的
元素 179
10.3 Set接口 180
10.3.1 Set接口概述 180
10.3.2 使用HashSet 183
10.3.3 使用TreeSet类 184
10.3.4 使用EnumSet类 186
10.4 List接口 188
10.4.1 List接口概述 188
10.4.2 根据索引操作集合内的
元素 190
10.4.3 使用ArrayList和
Vector类 191
10.5 Map接口 192
10.5.1 Map接口中的方法 192
10.5.2 Map接口中的
接口和类 193
10.5.3 使用HashMap和Hashtable
实现类 196
10.5.4 使用SortedMap接口和
TreeMap实现类 197
10.5.5 使用WeakHashMap类 199
10.5.6 使用IdentityHash
Map类 200
10.5.7 使用EnumMap类 201
10.6 Queue接口 201
10.6.1 LinkedList类 202
10.6.2 PriorityQueue类 203
10.7 集合工具类Collections 203
10.7.1 排序操作 203
10.7.2 查找和替换操作 204
10.8 其他集合类 205
10.8.1 Stack类 205
10.8.2 属性类Properties 206
10.9 创建不可变的List、Set和
Map(Java 9新增功能) 209
10.9.1 Java 9以前版本的
解决方案 209
10.9.2 Java 9版本的解决
方案 209
10.10 使用var类型推断(Java 10
新增功能) 211
10.11 技术解惑 212
10.11.1 Collection集合元素的
改变问题 212
10.11.2 深入理解HashSet 212
10.11.3 使用类EnumSet的
注意事项 213
10.11.4 ArrayList和Vector的
区别 213
10.11.5 TreeMap判断两个元素
相等的标准 213
10.11.6 分析Map类的性能 213
10.11.7 LinkedList、ArrayList、
Vector的性能问题 214
10.11.8 用swap()方法交换集合
中两个位置的内容 214
10.12 课后练习 214
第 11章 常用的类库 215
11.1 StringBuffer类 216
11.1.1 StringBuffer类概述 216
11.1.2 使用StringBuffer类 216
11.2 Runtime类 218
11.2.1 Runtime类概述 218
11.2.2 使用Runtime类 218
11.3 程序国际化 220
11.3.1 国际化基础 220
11.3.2 Locale类 221
11.3.3 ResourceBundle类 221
11.3.4 处理动态文本 222
11.3.5 使用类代替资源文件 223
11.4 System类 224
11.4.1 使用System类 224
11.4.2 垃圾对象的回收 225
11.5 Date类 225
11.5.1 使用Date类 226
11.5.2 使用Calendar类 226
11.5.3 使用DateFormat类 227
11.5.4 使用SimpleDate
Format类 228
11.6 Math类 229
11.7 Random类 230
11.8 NumberFormat类 231
11.9 BigInteger类 232
11.10 BigDecimal类 233
11.11 复制对象 235
11.12 Arrays类 235
11.13 Comparable接口 236
11.13.1 Comparable接口
概述 236
11.13.2 使用Comparable
接口 238
11.13.3 使用Comparator
接口 238
11.14 Observable类和Observer
接口 239
11.15 正则表达式 241
11.15.1 正则表达式概述 241
11.15.2 Java中的正则
表达式类 242
11.15.3 使用Pattern类和
Matcher类 243
11.15.4 String类和正则
表达式 243
11.15.5 Java 9新增的正则
表达式方法 244
11.15.6 Java 11新特性:正则
表达式参数的局部
变量语法 245
11.16 Timer类和TimerTask类 245
11.16.1 Timer类 246
11.16.2 TimerTask类 246
11.17 技术解惑 247
11.17.1 StringBuffer和String的
异同 247
11.17.2 通过System类获取本机
的全部环境属性 247
11.17.3 分析对象的
生命周期 248
11.17.4 若未实现Comparable
接口会出现异常 248
11.17.5 正则表达式的好处 248
11.18 课后练习 249
第 12章 泛型 250
12.1 泛型概述 251
12.1.1 泛型的优点 251
12.1.2 类型检查 251
12.1.3 使用泛型 253
12.2 泛型详解 253
12.2.1 定义泛型接口和类 253
12.2.2 派生子类 254
12.2.3 并不存在泛型类 255
12.3 类型通配符 255
12.3.1 设置类型实参的上限 256
12.3.2 设置类型形参的上限 257
12.3.3 设置通配符的下限 258
12.4 泛型方法 258
12.5 泛型接口 260
12.6 泛型继承 261
12.6.1 以泛型类为父类 261
12.6.2 以非泛型类为父类 262
12.7 强制类型转换 263
12.8 擦除 263
12.8.1 擦除的定义 263
12.8.2 擦除带来的问题 265
12.9 技术解惑 266
12.9.1 Java语言中泛型的
本质 266
12.9.2 泛型方法和类型通配符的
区别 267
12.9.3 泛型类的继承规则 268
12.9.4 类型擦除和泛型特性
之间的联系 268
12.9.5 使用原则和注意事项 268
12.10 课后练习 268
第 13章 异常处理 270
13.1 异常概述 271
13.1.1 认识异常 271
13.1.2 Java提供的异常
处理类 271
13.2 异常处理方式 272
13.2.1 try…catch语句 272
13.2.2 处理多个异常 273
13.2.3 finally语句 274
13.2.4 访问异常信息 275
13.3 抛出异常 276
13.3.1 使用throws抛出异常 276
13.3.2 使用throw抛出异常 278
13.4 自定义异常 279
13.4.1 Throwable类及其子类 279
13.4.2 使用Throwable类
自定义异常 281
13.5 Checked异常和Runtime异常的
区别 282
13.5.1 机制上的差异 282
13.5.2 逻辑上的差异 283
13.6 技术解惑 283
13.6.1 使用嵌套异常处理是更
合理的方法 283
13.6.2 区别throws关键字和
throw关键字 284
13.6.3 异常类的继承关系 284
13.6.4 子类Error和
Exception 284
13.7 课后练习 284
第 14章 I/O文件处理和流处理 285
14.1 Java I/O概述 286
14.2 File类 286
14.2.1 File类中的方法 286
14.2.2 使用File类操作文件 287
14.3 RandomAccessFile类 290
14.3.1 RandomAccessFile类的
常用方法 290
14.3.2 使用
RandomAccessFile类 291
14.4 字节流与字符流 292
14.4.1 字节流类和字符流类 292
14.4.2 使用字节流 292
14.4.3 使用字符流 296
14.5 字节转换流 299
14.6 内存操作流 299
14.7 管道流 301
14.8 打印流 302
14.8.1 打印流概述 302
14.8.2 使用打印流 303
14.9 System类 303
14.9.1 System.out 304
14.9.2 System.err 304
14.9.3 System.in 305
14.9.4 输入/输出重定向 305
14.10 BufferedReader类 307
14.10.1 BufferedReader类
概述 307
14.10.2 使用
BufferedReader类 308
14.11 Scanner类 309
14.11.1 Scanner类概述 310
14.11.2 使用Scanner类 310
14.12 数据操作流 312
14.12.1 DataOutputStream类 313
14.12.2 DataInputStream类 313
14.13 合并流 315
14.14 压缩流 316
14.14.1 ZIP压缩输入/
输出流概述 316
14.14.2 ZipOutputStream类 316
14.14.3 ZipFile类 319
14.14.4 ZipInputStream类 319
14.15 回退流 320
14.16 字符编码 321
14.16.1 得到本机编码 322
14.16.2 产生乱码 322
14.17 对象序列化 323
14.17.1 Serializable接口 323
14.17.2 对象输出流
ObjectOutputStream 324
14.17.3 对象输入流
ObjectInputStream 324
14.17.4 Externalizable接口 325
14.17.5 关键字transient 326
14.17.6 序列化一组对象 327
14.18 Buffer类 328
14.18.1 Buffer类中的
主要方法 329
14.18.2 使用Buffer类 330
14.19 Channel类 331
14.20 使用流API 333
14.20.1 Java 8中的流 333
14.20.2 Java 9中新增的
Stream 335
14.21 使用try…with…resources
语句 337
14.21.1 try…with…resources
语句概述 337
14.21.2 try…with…resources的
改进(Java 9新增
功能) 338
14.22 技术解惑 341
14.22.1 使用File.separator
表示分隔符 341
14.22.2 综合演练创建和
删除文件 341
14.22.3 File类的复杂用法 342
14.22.4 字节流和字符流的
区别 342
14.22.5 System.err和
System.out的选择 344
14.22.6 使用I/O实现一个简单的
菜单效果 344
14.22.7 对象序列化和对象反
序列化操作时的版本
兼容性问题 345
14.22.8 不能让所有的类都实现
Serializable接口 346
14.23 课后练习 346
第 15章 AWT的奇幻世界 347
15.1 GUI框架概述 348
15.1.1 AWT框架 348
15.1.2 Swing框架 348
15.1.3 JavaFX框架 348
15.2 AWT框架的结构 349
15.3 容器 350
15.3.1 容器概述 350
15.3.2 容器中的常用组件 351
15.4 布局管理器 352
15.4.1 FlowLayout布局 353
15.4.2 BorderLayout布局 353
15.4.3 GridLayout布局 355
15.4.4 GridBagLayout布局 356
15.4.5 CardLayout布局 356
15.4.6 BoxLayout布局
管理器 357
15.5 AWT中的常用组件 357
15.5.1 AWT组件概览 358
15.5.2 使用组件 358
15.6 AWT中的对话框 360
15.6.1 AWT对话框概述 360
15.6.2 使用AWT对话框 360
15.7 使用图像多分辨率API 361
15.7.1 图像多分辨率概述 361
15.7.2 图像多分辨率API
详解 361
15.7.3 图像多分辨率API
实战 362
15.8 javax.imageio.plugins.tiff 364
15.8.1 ImageIO模块概述 364
15.8.2 TIFF接口 366
15.9 技术解惑 367
15.9.1 使用绝对定位 367
15.9.2 对事件处理模型的
简化 368
15.9.3 使用AWT开发动画 368
15.9.4 图片缩放在现实中的
意义 368
15.9.5 AWT和Swing是窗体
编程的两个主角 368
15.9.6 AWT中的菜单组件不能
创建图标菜单 368
15.9.7 Java的事件模型 368
15.9.8 事件和事件监听器 370
15.10 课后练习 372
第 16章 Swing 373
16.1 Swing概述 374
16.2 Swing的组件 375
16.2.1 Swing组件的层次
结构 375
16.2.2 Swing实现AWT
组件 376
16.3 拖放处理 380
16.4 实现进度条效果 381
16.4.1 创建一个进度条 381
16.4.2 使用ProgressMonitor创建
进度条对话框 383
16.5 技术解惑 383
16.5.1 贯穿Java开发的MVC
模式 383
16.5.2 Swing的优势 383
16.5.3 使用JSlider和
BoundedRangeModel测试
滑动条效果 384
16.5.4 使用ListCellRenderer改变
窗体中列表项的外观 385
16.6 课后练习 385
第 17章 JavaFX开发基础 386
17.1 JavaFX概述 387
17.1.1 JavaFX的特色 387
17.1.2 安装e(fx)clipse插件 387
17.1.3 认识第 一个JavaFX
程序 389
17.2 JavaFX界面结构 389
17.2.1 窗体结构剖析 389
17.2.2 属性绑定 391
17.2.3 样式属性和角度属性 392
17.3 使用Color类设置颜色 393
17.3.1 设置颜色的方法 393
17.3.2 使用RGB方式设置
颜色 395
17.3.3 使用Web方式设置
颜色 395
17.4 绘制文字 396
17.4.1 Text包概述 396
17.4.2 绘制指定样式的文本 397
17.5 绘制形状 398
17.5.1 使用Line绘制线条 398
17.5.2 使用Rectangle
绘制矩形 399
17.5.3 使用Circle绘制圆 401
17.5.4 使用Ellipse绘制椭圆 402
17.5.5 使用Arc绘制圆弧 403
17.5.6 使用Polygon绘制
多边形 404
17.5.7 使用Polyline绘制
折线 405
17.5.8 使用CubicCurve绘制三次
曲线 406
17.5.9 使用QuadCurve绘制二次
曲线 407
17.6 显示图像 408
17.6.1 使用Image显示图像 408
17.6.2 使用ImageView显示
图像 409
17.7 界面布局 410
17.7.1 使用Pane的画布功能 411
17.7.2 使用StackPane实现特定
面板功能 412
17.7.3 使用FlowPane实现
序列放置 412
17.7.4 使用GridPane实现
网格布局 414
17.7.5 使用BorderPane实现
区域布局 415
17.7.6 使用HBox实现水平
布局 417
17.7.7 使用VBox实现垂直
布局 418
17.8 技术解惑 419
17.8.1 Swing、AWT和JavaFX的
区别 419
17.8.2 JavaFX的属性类型 419
17.9 课后练习 420
第 18章 使用JavaFX UI组件 421
18.1 使用标签组件 422
18.1.1 标签属性和方法 422
18.1.2 标签组件实战演练 423
18.2 使用按钮组件 424
18.2.1 按钮属性和方法 424
18.2.2 按钮组件实战演练 425
18.3 使用复选框组件 426
18.3.1 复选框属性和方法 426
18.3.2 复选框组件实战演练 427
18.4 使用单选按钮组件 428
18.4.1 单选按钮属性和方法 428
18.4.2 单选按钮组件实战
演练 429
18.5 使用文本框组件 430
18.5.1 文本框的属性和方法 430
18.5.2 文本框组件实战演练 431
18.6 使用文本域组件 432
18.6.1 文本域的属性和方法 432
18.6.2 文本域组件实战演练 432
18.7 使用选择框组件 434
18.7.1 选择框的属性和方法 434
18.7.2 选择框组件实战演练 434
18.8 使用密码框组件 435
18.8.1 密码框的属性和方法 435
18.8.2 密码框组件实战演练 436
18.9 使用组合框组件 437
18.9.1 组合框的属性和方法 437
18.9.2 组合框实战演练 438
18.10 使用列表视图组件 439
18.10.1 列表视图的属性和
方法 439
18.10.2 列表视图组件实战
演练 440
18.11 使用滚动条组件 442
18.11.1 滚动条的属性和
方法 442
18.11.2 滚动条组件实战
演练 442
18.12 使用滑块组件 444
18.12.1 滑块的属性和方法 444
18.12.2 滑块组件实战演连 445
18.13 使用树视图组件 446
18.13.1 树视图的属性和
方法 446
18.13.2 树视图组件实战
演练 447
18.14 使用进度组件 448
18.14.1 进度指示器 448
18.14.2 进度条 448
18.14.3 进度组件实战演练 448
18.15 使用HTML编辑器组件 449
18.15.1 HTML编辑器组件
概述 450
18.15.2 HTML编辑器组件实战
演练 450
18.16 使用菜单组件 451
18.16.1 菜单组件概述 451
18.16.2 创建菜单栏 452
18.17 使用文件选择框组件 453
18.17.1 文件选择框概述 453
18.17.2 文件选择框组件
实战演练 454
18.18 使用颜色选择器组件 456
18.18.1 颜色选择器概述 456
18.18.2 颜色选择器组件
实战演练 458
18.19 技术解惑 459
18.19.1 制作圆形按钮 459
18.19.2 设置按钮的内容 460
18.19.3 树表视图 460
18.20 课后练习 460
第 19章 JavaFX事件处理程序 461
19.1 JavaFX事件处理系统概述 462
19.1.1 Java的事件模型 462
19.1.2 JavaFX中的事件 462
19.1.3 事件处理机制的流程 463
19.1.4 事件处理 465
19.1.5 事件和事件源 465
19.2 使用快捷方法实现事件处理 467
19.2.1 快捷方法概述 467
19.2.2 处理按钮事件 468
19.3 处理鼠标事件 469
19.3.1 鼠标事件概述 469
19.3.2 使用鼠标事件 469
19.4 处理键盘事件 470
19.4.1 键盘事件概述 470
19.4.2 使用键盘事件 471
19.5 使用事件过滤器 472
19.5.1 注册和移除事件
过滤器 472
19.5.2 使用事件过滤器 473
19.6 使用事件处理程序 475
19.6.1 注册和移除事件
处理程序 475
19.6.2 使用事件处理程序 476
19.7 使用可触摸设备的事件 477
19.7.1 手势和触摸事件 477
19.7.2 手势事件实战 478
19.8 技术解惑 483
19.8.1 实现鼠标移到按钮上
按钮变大的效果 483
19.8.2 实现JavaFX绑定 483
19.9 课后练习 483
第 20章 JavaFX框架下的Web开发 484
20.1 JavaFX内嵌浏览器概述 485
20.2 使用WebView组件 486
20.2.1 WebView组件概述 486
20.2.2 WebView组件
实战演练 487
20.3 使用WebEngine接口 488
20.3.1 WebEngine概述 488
20.3.2 在JavaFX中执行
JavaScript程序 489
20.3.3 在Web页面中调用
JavaFX程序 492
20.3.4 实现弹出式窗口 493
20.4 管理Web历史记录 495
20.4.1 WebHistory概述 495
20.4.2 网页浏览历史记录
实战 495
20.5 使用CSS文件 496
20.6 使用FXML 499
20.6.1 FXML概述 499
20.6.2 FXML实战演练 500
20.7 技术解惑 504
20.7.1 JavaFX集合 504
20.7.2 使用标题面板 505
20.8 课后练习 505
第 21章 JavaFX框架下的多媒体开发 506
21.1 变换操作 507
21.1.1 变换概述 507
21.1.2 变换操作 507
21.2 动画效果 510
21.2.1 过渡动画 510
21.2.2 时间轴动画 512
21.3 视觉特效 514
21.3.1 混合特效 514
21.3.2 发光特效 515
21.3.3 模糊特效 517
21.3.4 阴影特效 519
21.3.5 内阴影特效 520
21.3.6 倒影特效 522
21.3.7 光照特效 523
21.4 3D特效 524
21.4.1 JavaFX 3D概述 524
21.4.2 使用3D形状 524
21.4.3 3D镜头 525
21.4.4 使用子场景 527
21.4.5 使用光照 529
21.4.6 使用材质 530
21.5 音频和视频 532
21.5.1 使用Media获取获得
媒体源 532
21.5.2 使用MediaPlayer播放并
控制媒体 532
21.5.3 使用MediaView
显示视频 533
21.5.4 控制播放的视频演练 533
21.6 CSS API(Java 9新增功能) 535
21.6.1 使用传统方式 535
21.6.2 使用Skin API 536
21.7 技术解惑 538
21.7.1 注册一个事件
处理程序 538
21.7.2 注意场景背景图的
问题 539
21.7.3 y-down坐标系和y-up
坐标系 539
21.8 课后练习 539
第 22章 数据库编程 540
22.1 SQL基础 541
22.1.1 数据定义 541
22.1.2 数据操纵 542
22.2 初识JDBC 544
22.2.1 JDBC API 544
22.2.2 JDBC驱动类型 544
22.2.3 JDBC的常用接口
和类 545
22.2.4 JDBC编程的一般
步骤 547
22.3 连接Access数据库 549
22.3.1 Access数据库概述 549
22.3.2 连接本地Access
数据库 550
22.4 连接SQL Server数据库 552
22.4.1 下载并安装
SQL Sever 2016驱动 552
22.4.2 测试连接 553
22.4.3 获取SQL Server数据库中
指定的表 554
22.5 连接MySQL数据库 555
22.5.1 下载并配置MySQL
驱动 555
22.5.2 将MySQL驱动加载到
Eclipse中 556
22.5.3 测试连接 557
22.6 技术解惑 557
22.6.1 连接池的功效 557
22.6.2 服务器自带连接池的
问题 557
22.6.3 连接池模型 559
22.6.4 数据模型、概念模型和
关系数据模型 559
22.6.5 数据库系统的结构 560
22.7 课后练习 560
第 23章 网络与通信编程 561
23.1 Java中的网络包 562
23.1.1 InetAddress类 562
23.1.2 URLDecoder类和
URLEncoder类 562
23.1.3 URL类和
URLConnection类 563
23.1.4 实践演练 564
23.2 TCP编程 567
23.2.1 使用ServerSocket 567
23.2.2 使用Socket 568
23.2.3 TCP中的多线程 569
23.3 UDP编程 572
23.3.1 使用DatagramSocket 572
23.3.2 使用MulticastSocket 574
23.4 代理服务器 577
23.4.1 代理服务器概述 577
23.4.2 使用Proxy创建
连接 578
23.4.3 使用ProxySelector
选择代理服务器 579
23.5 HTTP/2 Client API(Java 10的
改进) 581
23.5.1 孵化器模块usergrid
概述 581
23.5.2 HTTP/2 Client API
概述 582
23.5.3 处理HTTP请求 582
23.6 技术解惑 584
23.6.1 使用异常处理完善
程序 584
23.6.2 使用ServerSocketChannel
的弊端 584
23.6.3 体会复杂的
DatagramPacket 585
23.6.4 MulticastSocket类的
重要意义 585
23.6.5 继承ProxySelector时需
要做的工作 585
23.6.6 代理服务无止境 585
23.6.7 生成jdk.incubator.httpclient
模块的Javadoc 586
23.7 课后练习 586
第 24章 多线程和进程 587
24.1 线程概述 588
24.1.1 线程与进程 588
24.1.2 线程的意义 588
24.1.3 Java的线程模型 589
24.2 创建线程 590
24.2.1 使用Thread类创建
线程 590
24.2.2 使用Runnable接口创建
线程 592
24.2.3 使用Thread.onSpinWait()
方法实现循环等待 593
24.3 线程的生命周期 594
24.3.1 线程的运行与停止 594
24.3.2 线程的挂起和唤醒 595
24.3.3 终止线程的3种
方法 596
24.3.4 线程的阻塞 597
24.3.5 线程的死亡 597
24.4 控制线程 598
24.4.1 使用join方法 599
24.4.2 慎重使用volatile
关键字 599
24.4.3 后台、让步和睡眠 602
24.5 线程传递数据 603
24.5.1 向线程传递数据的
方法 603
24.5.2 线程中返回数据的
方法 605
24.6 进程 606
24.6.1 使用类ProcessBuilder 606
24.6.2 使用类Process 609
24.6.3 使用类ProcessHandle
(Java 9新增功能) 609
24.7 技术解惑 612
24.7.1 线程和函数的关系 612
24.7.2 在run方法中使用线程名
时产生的问题 612
24.7.3 继承Thread类或实现
Runnable接口的比较 612
24.7.4 start()和run()的区别 613
24.7.5 使用sleep()方法的
注意事项 613
24.7.6 线程的优先级 613
24.7.7 如何确定发生死锁 613
24.7.8 关键字synchronized和
volatile的区别 614
24.7.9 sleep()方法和yield()
方法的区别 614
24.7.10 分析Swing的多线程
死锁问题 614
24.8 课后练习 615
第 25章 大数据综合实战:爬取并分析
知乎用户信息 616
25.1 系统设计 617
25.1.1 系统目标 617
25.1.2 系统功能结构 617
25.2 数据库设计 618
25.3 知乎爬虫请求分析 618
25.4 系统文件夹组织结构 621
25.5 系统详细运行流程图 622
25.6 具体编码 623
25.6.1 核心模块代码的编写 623
25.6.2 知乎抓取功能模块 629
25.6.3 代理功能模块 637
25.7 知乎用户大数据分析 645
25.7.1 数据展示模块 645
25.7.2 运行展示 646
25.8 项目开发难点分析 648