Java 开发从入门到精通 第2版

作者
扶松柏 王洋 陈小玉
丛书名
出版社
人民邮电出版社
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
















有问题微信扫码联系

推荐

Understand China
桂ICP备20004708号-4