| 作者 |
| 扶松柏 王洋 陈小玉 |
| 丛书名 |
| 出版社 |
| 人民邮电出版社 |
| ISBN |
| 9787115504104 |
| 简要 |
| 简介 |
| 内容简介书籍计算机书籍 本书专门介绍Java编程,主要内容包括:Java基础知识、Java语法基础、条件语句、循环语句、数组、Java面向对象编程、集合、常用的类库、泛型、异常处理、I/O文件处理和流程、AWT、Swing、JavaFX基础知识、UI组件、事件处理程序、基于JavaFX框架的Web和多媒体开发、数据库编程、网络与通信编程、多线程和进程等。本书适合Java开发人员阅读,也适合计算机相关专业的师生阅读。 |
| 目录 |
第 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 |