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

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

查阅电子书
手机扫码
  • 微信扫一扫

    关注微信公众号

编辑推荐

Java10全面解析:技术解惑与实例演练

内容简介

本书专门介绍Java编程,主要内容包括:Java基础知识、Java语法基础、条件语句、循环语句、数组、Java面向对象编程、集合、常用的类库、泛型、异常处理、I/O文件处理和流程、AWT、Swing、JavaFX基础知识、UI组件、事件处理程序、基于JavaFX框架的Web和多媒体开发、数据库编程、网络与通信编程、多线程和进程等。本书适合Java开发人员阅读,也适合计算机相关专业的师生阅读。

作者简介

扶松柏,上海大学计算机科学技术学院硕士,通信工程博士,精通Java、C语言、C程序开发,擅长底层技术和应用程序的结合。具有丰富的Java开发经验和编程心得。

章节目录

版权信息

内容提要

前言

选择一本合适的书

本书特色

本书内容

各章的模块

本书读者对象

致谢

资源与支持

配套资源

提交勘误

与我们联系

关于异步社区和异步图书

第1章 计算机基础和Java开发入门

1.1 计算机基础

1.1.1 中央处理器

1.1.2 比特和字节

1.比特

2.字节

1.1.3 二进制

1.1.4 编码格式

1.ASCII格式

2.Unicode格式

3.UTF-8格式

1.2 初识Java

1.2.1 何谓Java

1.2.2 Java的特点

1.2.3 Java的地位

1.3 技术解惑

1.3.1 对初学者的建议

1.3.2 理解Java的垃圾回收机制

1.3.3 充分利用Java API文档

1.4 课后练习

第2章 第一段Java程序

2.1 搭建Java开发环境

2.1.1 安装JDK

2.1.2 配置开发环境——Windows 7

2.1.3 配置开发环境——Windows 10

2.2 编写第一段Java程序

2.2.1 第一段Java代码

2.2.2 关键字

2.2.3 标识符

2.2.4 注释

2.2.5 main()方法

2.2.6 控制台的输入和输出

2.3 编译并运行Java程序

2.3.1 编译Java程序

2.3.2 运行Java程序

2.3.3 Java 11新特性:新的程序运行方式

2.4 使用IDE工具——Eclipse

2.4.1 Eclipse

2.4.2 获得并安装Eclipse

2.4.3 新建一个Eclipse项目

2.4.4 编译并运行Eclipse项目

2.4.5 使用Eclipse打开一个Java项目

2.5 Java的运行机制

2.5.1 编译型/解释型语言的运行机制

1.编译型语言

2.解释型语言

2.5.2 Java程序则要先编译、后运行

2.6 技术解惑

2.6.1 遵循Java源文件的命名规则

2.6.2 忽视系统文件的扩展名

2.6.3 环境变量的问题

2.6.4 大小写的问题

2.6.5 main()方法的问题

2.6.6 注意空格问题

2.6.7 到底用不用IDE工具

2.6.8 区分JRE和JDK

2.7 课后练习

第3章 Java语法基础

3.1 常量和变量

3.1.1 常量

实例3-1 定义几个Java常量

3.1.2 变量

1.局部变量

实例3-2 用变量计算三角形、正方形和长方形的面积

2.全局变量

实例3-3 输出设置的变量值

3.2 数据类型

3.2.1 为什么要使用数据类型

3.2.2 简单数据类型的取值范围

3.2.3 字符型

实例3-4 输出字符型变量的值

3.2.4 整型

实例3-5 通过整型计算正方形和三角形的面积

3.2.5 浮点型

1.单精度浮点型——float

2.双精度浮点型——double

实例3-6 使用浮点型计算圆的面积

3.2.6 布尔型

实例3-7 复制布尔型变量并输出结果

3.3 运算符

3.3.1 算术运算符

1.基本运算符

实例3-8 使用基本运算符的加减乘除4种运算

2.取余运算符

实例3-9 使用“%”运算符

3.递增和递减运算符

实例3-10 使用递增和递减运算符

3.3.2 关系运算符和逻辑运算符

1.关系运算符

2.逻辑运算符

实例3-11 使用关系运算符

3.3.3 位逻辑运算符

实例3-12 使用位逻辑运算符

3.3.4 条件运算符

实例3-13 使用条件运算符

3.3.5 赋值运算符

实例3-14 演示赋值类型不匹配的错误

3.3.6 运算符的优先级

实例3-15 使用表达式与运算符

3.4 字符串

3.4.1 字符串的初始化

实例3-16 初始化一个字符串

3.4.2 String类

1.索引

2.追加字符串

实例3-17 使用索引方法

3.比较字符串

4.取字符串长度

实例3-18 使用字符串比较方法

5.替换字符串

6.字符串的截取

实例3-19 使用字符串替换方法

7.字符串大小写互转

8.消除字符串中的空格字符

实例3-20 将大写字母转换成小写字母

3.4.3 StringBuffer类

1.追加字符

2.插入字符

3.颠倒字符

实例3-21 使用字符追加函数

3.5 类型转换

3.5.1 自动类型转换

实例3-22 演示Java的自动类型转换

3.5.2 强制类型转换

实例3-23 演示Java的强制类型转换

3.6 Java 11新特性:新增的String函数

实例3-24 使用Java 11新增字符串函数

3.7 技术解惑

3.7.1 定义常量时的注意事项

3.7.2 char类型中单引号的意义

3.7.3 正无穷和负无穷的问题

3.7.4 移位运算符的限制

3.8 课后练习

第4章 条件语句

4.1 if语句详解

4.1.1 if语句

实例4-1 判断成绩是否及格

4.1.2 if语句的延伸

实例4-2 对两种条件给出不同的答案

4.1.3 有多个条件判断的if语句

实例4-3 判断多个条件,然后给出不同的值

4.2 switch语句详解

4.2.1 switch语句的形式

实例4-4 使用switch语句

4.2.2 无break的情况

实例4-5 在switch语句中去掉break

4.2.3 case语句后没有执行语句

实例4-6 在case语句后没有执行语句

4.2.4 default可以不在末尾

实例4-7 default可以不在末尾

4.3 条件语句演练

4.3.1 正确使用switch语句

实例4-8 正确使用switch语句

4.3.2 正确使用if语句

实例4-9 正确使用if语句

4.3.3 switch语句的执行顺序

4.4 技术解惑

4.4.1 if…else语句的意义

4.4.2 使用switch语句时的几个注意事项

4.4.3 switch语句和if…else if语句的选择

4.5 课后练习

第5章 循环语句

5.1 循环语句

5.1.1 for循环

1.书写格式

实例5-1 使用for循环语句输出整数0~9

实例5-2 在for循环表达式中有多个变量

2.for语句的嵌套

实例5-3 for语句的嵌套用法

实例5-4 在屏幕上输出用“*”摆放的4*5图形

5.1.2 while循环语句

实例5-5 循环输出18个数字

5.1.3 do…while循环语句

1.书写格式

实例5-6 使用do...while语句

2.应用举例

实例5-7 计算不大于120的所有自然数的累加和

5.2 跳转语句

5.2.1 break语句的应用

1.无标号退出循环

实例5-8 演示无标号退出循环的用法

实例5-9 在while循环语句中使用break语句

2.有标号的break语句

实例5-10 使用有标号的break语句

5.2.2 return语句的应用

实例5-11 使用return语句

5.2.3 continue语句

实例5-12 使用continue语句

5.3 技术解惑

5.3.1 使用for循环的技巧

5.3.2 跳转语句的选择技巧

5.4 课后练习

第6章 数组

6.1 简单的一维数组

6.1.1 声明一维数组

6.1.2 创建一维数组

实例6-1 创建并输出一维数组中的数据

6.1.3 初始化一维数组

实例6-2 初始化一维数组,并将数组中的值输出

6.2 二维数组

6.2.1 声明二维数组

6.2.2 创建二维数组

实例6-3 创建二维数组并输出里面的数据

6.2.3 初始化二维数组

实例6-4 求二维数组中的最大值

6.3 三维数组

6.3.1 声明三维数组

6.3.2 创建三维数组的方法

6.3.3 初始化三维数组

实例6-5 使用三层循环遍历三维数组

6.4 操作数组

6.4.1 复制数组

实例6-6 复制一维数组中的元素

6.4.2 比较数组

实例6-7 比较两个一维数组

6.4.3 排序数组

实例6-8 使用sort()排序数组内的元素

6.4.4 搜索数组中的元素

实例6-9 使用binarySearch()搜索数组内的元素

6.4.5 填充数组

实例6-10 使用fill()方法向数组中填充元素

6.4.6 遍历数组

实例6-11 使用foreach遍历数组元素

6.5 技术解惑

6.5.1 动态初始化数组的规则

6.5.2 引用类型

1.强引用

2.软引用

6.5.3 数组的初始化

6.6 课后练习

第7章 Java的面向对象(上)

7.1 面向对象的基础

7.1.1 面向对象的定义

7.1.2 Java的面向对象编程

7.1.3 一切皆为对象

7.1.4 Java面向对象的几个核心概念

1.类

2.对象

3.Java中的对象

4.属性

5.方法

6.类的成员

7.2 创建类

7.2.1 定义类

7.2.2 定义属性

7.2.3 定义方法

7.2.4 定义构造器

7.3 修饰符

7.3.1 public修饰符

实例7-1 在类中创建public的属性和方法

7.3.2 private修饰符

实例7-2 私有属性和私有方法可以在本类中发挥作用

7.3.3 protected修饰符

实例7-3 使用protected修饰符

7.3.4 其他修饰符

实例7-4 使用默认修饰符创建属性和方法

7.4 方法详解

7.4.1 方法与函数的关系

7.4.2 传递方法参数

实例7-5 演示传递方法的参数

7.4.3 长度可变的方法

实例7-6 定义一个形参长度可变的方法

7.4.4 不使用void关键字构造方法名

实例7-7 在类中创建一个构造方法

7.4.5 递归方法

实例7-8 使用递归方法fn计算f(10)的值

7.5 使用this

实例7-9 讲解this的用法

7.6 使用类和对象

7.6.1 创建和使用对象

实例7-10 在类中创建和使用对象

7.6.2 使用静态变量和静态方法

实例7-11 使用静态变量和静态方法

7.7 抽象类和抽象方法

7.7.1 抽象类和抽象方法的基础

实例7-12 使用抽象类和抽象方法

7.7.2 抽象类必须有一个抽象方法

实例7-13 抽象类必须有一个抽象方法

7.7.3 抽象类的作用

实例7-14 演示抽象类的作用

7.8 软件包

7.8.1 软件包的定义

7.8.2 在Eclipse中定义软件包

7.8.3 在程序里插入软件包

实例7-15 在类中插入一些特定的包

7.9 技术解惑

7.9.1 在Java中传递引用类型的实质

7.9.2 掌握this的好处

7.9.3 推出抽象方法的原因

7.9.4 使用抽象类的时机

7.9.5 static修饰的作用

7.9.6 数组内是同一类型的数据

7.10 课后练习

第8章 Java的面向对象(中)

8.1 类的继承

8.1.1 继承的定义

8.1.2 父类和子类

实例8-1 新建两个类,让其中一个类继承另一个类

8.1.3 调用父类的构造方法

实例8-2 在子类中调用父类的构造方法

8.1.4 访问父类的属性和方法

实例8-3 用子类去访问父类的属性

8.1.5 多重继承

实例8-4 使用多重继承

8.1.6 重写父类的方法

实例8-5 重写父类中的方法

8.2 重写和重载

8.2.1 重写

实例8-6 使用方法重写

实例8-7 注意重写方法的权限问题

8.2.2 重载

实例8-8 演示方法的重载

8.3 隐藏和封装

8.3.1 Java中的封装

8.3.2 访问控制符

实例8-9 使用访问控制符

8.3.3 Java中的包

8.3.4 import

8.4 接口

8.4.1 定义接口

8.4.2 接口里的常量和方法

1.接口里的量

实例8-10 在接口里定义常量

2.接口里的方法

实例8-11 实现并使用接口方法

8.4.3 引用接口

实例8-12 编写一个类去实现一个接口

实例8-13 使用接口类型的引用

8.4.4 接口间的继承

实例8-14 演示接口之间的继承

8.4.5 接口的私有方法

实例8-15 使用接口中的私有方法

8.5 技术解惑

8.5.1 重写方法的注意事项

8.5.2 重写和重载的区别

8.5.3 举例理解类的意义

8.5.4 Java包的一些规则

8.5.5 探讨package和import机制

1.package机制

2.import机制

8.5.6 接口编程的机理

8.5.7 接口和抽象类的区别和联系

8.6 课后练习

第9章 Java的面向对象(下)

9.1 构造器详解

9.1.1 初始化构造器

实例9-1 定义一个构造器

9.1.2 构造器重载

实例9-2 构造器的重载

9.1.3 调用父类构造器

实例9-3 调用父类中的构造器

9.2 多态

9.2.1 多态的定义

1.强制的多态

2.重载的多态

3.参数的多态

4.包含的多态

9.2.2 演示Java中的多态

实例9-4 在Java程序中使用多态

9.2.3 使用instanceof运算符

实例9-5 使用instanceof运算符

9.3 引用类型

9.3.1 4种引用类型

实例9-6 使用弱引用

9.3.2 引用变量的强制类型转换

实例9-7 使用强制转换

9.4 组合

实例9-8 对比继承与组合这两种重用形式

9.5 初始化块

9.5.1 初始化块概述

实例9-9 在类中同时包含构造器和初始化块

9.5.2 静态初始化块

实例9-10 使用静态初始化块

9.6 包装类

实例9-11 把基本类型变量转换成对应包装类对象

9.7 final修饰符

9.7.1 用final修饰变量

1.用final修饰成员变量

2.用final修饰局部变量

实例9-12 使用final修饰成员变量

9.7.2 final方法

实例9-13 重写final修饰方法的测试

9.8 内部类

9.8.1 内部类概述

9.8.2 非静态内部类

实例9-14 演示非静态内部类的用法

9.8.3 成员内部类

实例9-15 演示非静态内部类的用法

9.8.4 局部内部类

实例9-16 演示局部内部类的用法

9.8.5 静态内部类

9.9 匿名类

9.9.1 定义匿名类

实例9-17 使用成员匿名类和局部匿名类

9.9.2 匿名内部类

实例9-18 使用匿名内部类

9.9.3 匿名内部类使用final形参

实例9-19 匿名内部类使用final形参

9.10 枚举类

9.10.1 枚举类的方法

9.10.2 模拟枚举类

实例9-20 模拟一个枚举类

9.10.3 枚举类型

实例9-21 演示枚举类的使用

9.11 Java 11新特性:嵌套访问控制

实例9-22 访问嵌套成员

实例9-23 同时嵌套两个类的访问情形

9.12 技术解惑

9.12.1 构造器和方法的区别

1.功能和作用的不同

2.修饰符和返回值的不同

3.命名方式不同

4.使用this用法的区别

9.12.2 this在构造器中的作用

9.12.3 子类构造器调用父类构造器的情况

9.12.4 强制类型转换的局限性

9.12.5 继承和组合的选择

9.12.6 发生异常的原因

9.12.7 用final修饰基本类型和引用类型变量之间的区别

9.12.8 类的4种权限

9.12.9 手工实现枚举类的缺点

9.13 课后练习

第10章 集合

10.1 Java中的集合类

10.2 Collection接口和Iterator接口

10.2.1 Collection接口概述

10.2.2 Iterator接口概述

10.2.3 使用Collection接口中的方法来操作集合里的元素

实例10-1 使用Collection接口中的方法来操作集合里的元素

10.3 Set接口

10.3.1 Set接口概述

1.散列表

2.Comparable接口和Comparator接口

3.SortedSet接口

4.AbstractSet抽象类

5.HashSet类和TreeSet类

6.LinkedHashSet类

10.3.2 使用HashSet

实例10-2 使用HashSet判断集合元素是否相同

10.3.3 使用TreeSet类

实例10-3 使用TreeSet类

1.自然排序

2.定制排序

实例10-4 演示TreeSet的自然排序用法

10.3.4 使用EnumSet类

实例10-5 使用EnumSet保存枚举类里的值

10.4 List接口

10.4.1 List接口概述

1.ListIterator接口

2.AbstractList和AbstractSequentialList抽象类

3.LinkedList类和ArrayList类

10.4.2 根据索引操作集合内的元素

实例10-6 根据索引来操作集合内的元素

10.4.3 使用ArrayList和Vector类

10.5 Map接口

10.5.1 Map接口中的方法

1.添加、删除操作

2.查询操作

3.视图(子集)操作(用于处理Map中key/value对)

10.5.2 Map接口中的接口和类

1.Entry接口

2.SortedMap接口

3.AbstractMap抽象类

4.HashMap类和TreeMap类

5.LinkedHashMap类

6.WeakHashMap类

7.IdentityHashMap类

8.Hashtable类

10.5.3 使用HashMap和Hashtable实现类

实例10-7 用null值作为HashMap的key和value

实例10-8 判断两个value是否相等

10.5.4 使用SortedMap接口和TreeMap实现类

实例10-9 使用TreeMap实现自然排序

实例10-10 使用SortedMap接口按key实现升序排序

10.5.5 使用WeakHashMap类

实例10-11 使用WeakHashMap类遍历数据

10.5.6 使用IdentityHashMap类

实例10-12 使用IdentityHashMap类

10.5.7 使用EnumMap类

10.6 Queue接口

10.6.1 LinkedList类

实例10-13 演示LinkedList类的用法

10.6.2 PriorityQueue类

10.7 集合工具类Collections

10.7.1 排序操作

实例10-14 使用Collections工具类来操作List集合

10.7.2 查找和替换操作

实例10-15 使用Collections实现查找处理

10.8 其他集合类

10.8.1 Stack类

实例10-16 实现入栈及出栈操作

10.8.2 属性类Properties

实例10-17 使用属性类Properties

10.9 创建不可变的List、Set和Map(Java 9新增功能)

10.9.1 Java 9以前版本的解决方案

实例10-18 创建不可变集合

10.9.2 Java 9版本的解决方案

实例10-19 使用of()静态工厂方法创建不可变的列表

10.10 使用var类型推断(Java 10新增功能)

实例10-20 使用var声明局部变量

10.11 技术解惑

10.11.1 Collection集合元素的改变问题

10.11.2 深入理解HashSet

10.11.3 使用类EnumSet的注意事项

10.11.4 ArrayList和Vector的区别

10.11.5 TreeMap判断两个元素相等的标准

10.11.6 分析Map类的性能

10.11.7 LinkedList、ArrayList、Vector的性能问题

10.11.8 用swap()方法交换集合中两个位置的内容

10.12 课后练习

第11章 常用的类库

11.1 StringBuffer类

11.1.1 StringBuffer类概述

11.1.2 使用StringBuffer类

实例11-1 通过append()方法将各种类型的数据转换成字符串

实例11-2 在任意位置处为StringBuffer添加内容

实例11-3 在任意位置处为StringBuffer替换内容

实例11-4 从StringBuffer中删除指定范围的字符串

11.2 Runtime类

11.2.1 Runtime类概述

11.2.2 使用Runtime类

1.得到JVM的内存空间信息

实例11-5 使用Runtime类查看JVM的空间情况

2.联合使用Runtime类与Process类

实例11-6 调用本机可执行程序

11.3 程序国际化

11.3.1 国际化基础

11.3.2 Locale类

11.3.3 ResourceBundle类

实例11-7 通过ResourceBundle取得资源文件中的内容

11.3.4 处理动态文本

实例11-8 使用MessageFormat格式化动态文本

11.3.5 使用类代替资源文件

11.4 System类

11.4.1 使用System类

实例11-9 计算一个程序的执行时间

11.4.2 垃圾对象的回收

实例11-10 使用System释放对象

11.5 Date类

11.5.1 使用Date类

实例11-11 获取当前的系统日期

11.5.2 使用Calendar类

实例11-12 获取当前的系统时间

11.5.3 使用DateFormat类

实例11-13 演示DateFormat中的默认操作

11.5.4 使用SimpleDateFormat类

实例11-14 演示格式化日期操作

11.6 Math类

实例11-15 使用Math类实现基本运算

11.7 Random类

实例11-16 生成10个不大于100的随机数字

11.8 NumberFormat类

实例11-17 演示格式化数字操作

11.9 BigInteger类

实例11-18 使用BigInteger类实现大数运算

11.10 BigDecimal类

实例11-19 使用BigDecimal类实现四舍五入运算

11.11 复制对象

实例11-20 使用clone()方法实现对象复制

11.12 Arrays类

实例11-21 使用Arrays类

11.13 Comparable接口

11.13.1 Comparable接口概述

实例11-22 使用Arrays类中的sort()方法进行排序操作

11.13.2 使用Comparable接口

实例11-23 使用Integer实例化Comparable接口

11.13.3 使用Comparator接口

实例11-24 使用Comparator接口进行排序操作

11.14 Observable类和Obschmerver接口

实例11-25 使用Observable类实现观察者模式

11.15 正则表达式

11.15.1 正则表达式概述

11.15.2 Java中的正则表达式类

11.15.3 使用Pattern类和Matcher类

实例11-26 验证一个字符串是否为合法的日期格式

11.15.4 String类和正则表达式

实例11-27 使用String修改之前的操作

11.15.5 Java 9新增的正则表达式方法

实例11-28 使用Java 9新正则表达式方法

11.15.6 Java 11新特性:正则表达式参数的局部变量语法

11.16 Timer类和TimerTask类

11.16.1 Timer类

11.16.2 TimerTask类

实例11-29 建立TimerTask的子类,建立测试类进行任务调度

11.17 技术解惑

11.17.1 StringBuffer和String的异同

11.17.2 通过System类获取本机的全部环境属性

11.17.3 分析对象的生命周期

11.17.4 若未实现Comparable接口会出现异常

11.17.5 正则表达式的好处

11.18 课后练习

第12章 泛型

12.1 泛型概述

12.1.1 泛型的优点

12.1.2 类型检查

实例12-1 不检查类型会引发异常

实例12-2 创建一个只能存放String对象的StrList集合类

12.1.3 使用泛型

实例12-3 使用泛型

12.2 泛型详解

12.2.1 定义泛型接口和类

实例12-4 定义泛型接口和类

12.2.2 派生子类

12.2.3 并不存在泛型类

12.3 类型通配符

12.3.1 设置类型实参的上限

实例12-5 定义泛型接口和类

12.3.2 设置类型形参的上限

实例12-6 设置类型形参上限

12.3.3 设置通配符的下限

12.4 泛型方法

实例12-7 演示泛型方法的完整用法

12.5 泛型接口

实例12-8 定义并使用泛型接口

12.6 泛型继承

12.6.1 以泛型类为父类

实例12-9 将泛型类作为父类

12.6.2 以非泛型类为父类

12.7 强制类型转换

实例12-10 使用强制类型转换

12.8 擦除

12.8.1 擦除的定义

实例12-11 演示擦除的用法

12.8.2 擦除带来的问题

1.静态成员共享问题

2.重载冲突问题

3.接口实现问题

12.9 技术解惑

12.9.1 Java语言中泛型的本质

12.9.2 泛型方法和类型通配符的区别

12.9.3 泛型类的继承规则

12.9.4 类型擦除和泛型特性之间的联系

12.9.5 使用原则和注意事项

12.10 课后练习

第13章 异常处理

13.1 异常概述

13.1.1 认识异常

13.1.2 Java提供的异常处理类

13.2 异常处理方式

13.2.1 try…catch语句

实例13-1 使用try…catch语句进行异常处理

13.2.2 处理多个异常

实例13-2 处理多个异常

13.2.3 finally语句

实例13-3 演示finally语句的使用

13.2.4 访问异常信息

实例13-4 演示如何访问异常信息

13.3 抛出异常

13.3.1 使用throws抛出异常

实例13-5 演示如何用throws关键字将异常抛出

13.3.2 使用throw抛出异常

实例13-6 使用throw抛出异常

13.4 自定义异常

13.4.1 Throwable类及其子类

实例13-7 演示如何使用常见的异常类

13.4.2 使用Throwable类自定义异常

实例13-8 演示如何编写自定义异常类并使用它

13.5 Checked异常和Runtime异常的区别

13.5.1 机制上的差异

13.5.2 逻辑上的差异

13.6 技术解惑

13.6.1 使用嵌套异常处理是更合理的方法

13.6.2 区别throws关键字和throw关键字

13.6.3 异常类的继承关系

13.6.4 子类Error和Exception

13.7 课后练习

第14章 I/O文件处理和流处理

14.1 Java I/O概述

14.2 File类

14.2.1 File类中的方法

14.2.2 使用File类操作文件

1.创建文件

实例14-1 使用File类创建文件

实例14-2 使用File中的两个常量

实例14-3 使用File类创建文件的另一个方案

2.删除文件

实例14-4 使用File类删除文件

3.创建文件夹

实例14-5 使用File类创建文件夹

4.列出目录中的全部文件

实例14-6 使用list()方法列出一个目录中的全部内容

5.判断一个给定路径是否是目录

实例14-7 判断一个给定的路径是否是目录

14.3 RandomAccessFile类

14.3.1 RandomAccessFile类的常用方法

14.3.2 使用RandomAccessFile类

实例14-8 使用RandomAccessFile类写入数据

14.4 字节流与字符流

14.4.1 字节流类和字符流类

14.4.2 使用字节流

1.字节输出流OutputStream

实例14-9 向文件中写入字符串

2.追加新内容

3.字节输入流InputStream

实例14-10 从文件中读取内容

4.开辟指定大小的byte数组

实例14-11 使用length()方法获取文件的长度

实例14-12 使用read()方法进行了循环读取操作

实例14-13 未知内容时读取文件的内容

14.4.3 使用字符流

1.字符输出流Writer

实例14-14 向指定文件中写入数据

2.使用FileWriter追加文件内容

实例14-15 追加文件内容

3.字符输入流Reader

实例14-16 使用循环方式读取文件内容

14.5 字节转换流

实例14-17 将字节输出流变为字符输出流

14.6 内存操作流

实例14-18 使用内存操作流将一个大写字母转换为小写字母

14.7 管道流

实例14-19 使用管道流实现线程连接

14.8 打印流

14.8.1 打印流概述

14.8.2 使用打印流

实例14-20 使用PrintStream输出

14.9 System类

14.9.1 System.out

实例14-21 使用System.out向屏幕上输出指定信息

14.9.2 System.err

实例14-22 使用System.err输出错误信息

14.9.3 System.in

实例14-23 从键盘上读取数据

14.9.4 输入/输出重定向

实例14-24 为System.out输出重定向

实例14-25 设置System.in的输入重定向内容

14.10 BufferedReader类

14.10.1 BufferedReader类概述

实例14-26 设置System.in的输入重定向内容

14.10.2 使用BufferedReader类

实例14-27 输入两个数字,并让两个数字相加

实例14-28 实现一个专门的输入数据类

14.11 Scanner类

14.11.1 Scanner类概述

14.11.2 使用Scanner类

实例14-29 输入数据

实例14-30 使用方法hasNextXxx()进行验证

实例14-31 使用正则表达式获取日期

实例14-32 读取文件“d:\test.txt”中的内容

14.12 数据操作流

14.12.1 DataOutputStream类

实例14-33 将订单数据写入到文件order.txt中

14.12.2 DataInputStream类

实例14-34 读取文件order.txt中的订单数据

14.13 合并流

实例14-35 合并两个文件

14.14 压缩流

14.14.1 ZIP压缩输入/输出流概述

14.14.2 ZipOutputStream类

实例14-36 将指定文件压缩成文件www.zip

实例14-37 压缩D盘中的文件夹www

14.14.3 ZipFile类

实例14-38 实例化ZipFile类对象

14.14.4 ZipInputStream类

实例14-39 获取www.zip中的一个ZipEntry

14.15 回退流

实例14-40 演示回退流的用法

14.16 字符编码

14.16.1 得到本机编码

实例14-41 获取JVM的默认编码

14.16.2 产生乱码

实例14-42 使用getBytes()方法产生乱码

14.17 对象序列化

14.17.1 Serializable接口

实例14-43 定义一个可序列化的类

14.17.2 对象输出流ObjectOutputStream

实例14-44 将Person类的对象保存在文件中

14.17.3 对象输入流ObjectInputStream

实例14-45 将Person对象实现反序列化(读取)操作

14.17.4 Externalizable接口

实例14-46 修改Person类并实现Externalizable接口

14.17.5 关键字transient

实例14-47 设置Person中的name属性不希望被序列化

实例14-48 重新保存并再次读取对象

14.17.6 序列化一组对象

实例14-49 序列化多个Person对象

14.18 Buffer类

14.18.1 Buffer类中的主要方法

14.18.2 使用Buffer类

实例14-50 使用Buffer类中的常规操作方法

14.19 Channel类

实例14-51 将FileChannel中的全部数据映射成ByteBuffer

实例14-52 复制文件a.txt中的内容并追加在该文件后面

14.20 使用流API

14.20.1 Java 8中的流

实例14-53 使用Stream.of()方法将参数转换为一个流

14.20.2 Java 9中新增的Stream

实例14-54 在Stream接口中使用Java 9的新方法

14.21 使用try…with…resources语句

14.21.1 try…with…resources语句概述

实例14-55 使用try…with…resources语句自动关闭资源

14.21.2 try…with…resources的改进(Java 9新增功能)

实例14-56 模拟对银行客户的管理

14.22 技术解惑

14.22.1 使用File.separator表示分隔符

14.22.2 综合演练创建和删除文件

14.22.3 File类的复杂用法

14.22.4 字节流和字符流的区别

14.22.5 System.err和System.out的选择

14.22.6 使用I/O实现一个简单的菜单效果

14.22.7 对象序列化和对象反序列化操作时的版本兼容性问题

14.22.8 不能让所有的类都实现Serializable接口

14.23 课后练习

第15章 AWT的奇幻世界

15.1 GUI框架概述

15.1.1 AWT框架

15.1.2 Swing框架

15.1.3 JavaFX框架

15.2 AWT框架的结构

15.3 容器

15.3.1 容器概述

15.3.2 容器中的常用组件

1.Frame

实例15-1 用Frame创建一个窗口

2.Panel

实例15-2 使用Panel作为容器盛装一个文本框和一个按钮

3.ScrollPane

实例15-3 使用ScrollPane容器代替Panel容器

15.4 布局管理器

15.4.1 FlowLayout布局

实例15-4 使用FlowLayout布局

15.4.2 BorderLayout布局

实例15-5 使用BorderLayout布局

15.4.3 GridLayout布局

实例15-6 使用GridLayout布局

15.4.4 GridBagLayout布局

15.4.5 CardLayout布局

15.4.6 BoxLayout布局管理器

实例15-7 使用BoxLayout布局

15.5 AWT中的常用组件

15.5.1 AWT组件概览

15.5.2 使用组件

实例15-8 使用AWT的基本组件

15.6 AWT中的对话框

15.6.1 AWT对话框概述

15.6.2 使用AWT对话框

实例15-9 演示模式对话框和非模式对话框的用法

15.7 使用图像多分辨率API

15.7.1 图像多分辨率概述

15.7.2 图像多分辨率API详解

1.类java.awt.Graphics

2.类java.awt.image.AbstractMultiResolutionImage

3.类java.awt.image.BaseMultiResolutionImage

4.类java.awt.image.MultiResolutionImage

15.7.3 图像多分辨率API实战

实例15-10 获取每一个特定分辨率图像的变体

15.8 javax.imageio.plugins.tiff

15.8.1 ImageIO模块概述

实例15-11 使用ImageReader和BufferedImage获取图片的大小

15.8.2 TIFF接口

实例15-12 使用TIFF接口处理TIFF图像

15.9 技术解惑

15.9.1 使用绝对定位

15.9.2 对事件处理模型的简化

15.9.3 使用AWT开发动画

15.9.4 图片缩放在现实中的意义

15.9.5 AWT和Swing是窗体编程的两个主角

15.9.6 AWT中的菜单组件不能创建图标菜单

15.9.7 Java的事件模型

15.9.8 事件和事件监听器

1.事件种类

2.事件、监听器和处理程序

15.10 课后练习

第16章 Swing

16.1 Swing概述

16.2 Swing的组件

16.2.1 Swing组件的层次结构

16.2.2 Swing实现AWT组件

实例16-1 使用Swing组件创建窗口

16.3 拖放处理

实例16-2 演示Swing提供的拖放功能

16.4 实现进度条效果

16.4.1 创建一个进度条

实例16-3 演示实现进度条效果的方法

16.4.2 使用ProgressMonitor创建进度条对话框

16.5 技术解惑

16.5.1 贯穿Java开发的MVC模式

16.5.2 Swing的优势

16.5.3 使用JSlider和BoundedRangeModel测试滑动条效果

16.5.4 使用ListCellRenderer改变窗体中列表项的外观

16.6 课后练习

第17章 JavaFX开发基础

17.1 JavaFX概述

17.1.1 JavaFX的特色

17.1.2 安装e(fx)clipse插件

17.1.3 认识第一个JavaFX程序

实例17-1 第一个JavaFX程序

17.2 JavaFX界面结构

17.2.1 窗体结构剖析

实例17-2 将一个按钮置于一个面板中

17.2.2 属性绑定

实例17-3 使用属性绑定功能

17.2.3 样式属性和角度属性

1.style属性

2.rotate属性

实例17-4 创建指定样式的按钮

17.3 使用Color类设置颜色

17.3.1 设置颜色的方法

17.3.2 使用RGB方式设置颜色

实例17-5 使用RGB方式设置颜色

17.3.3 使用Web方式设置颜色

实例17-6 使用Web方式设置颜色

17.4 绘制文字

17.4.1 Text包概述

1.Text类的方法

2.Font类的方法

17.4.2 绘制指定样式的文本

实例17-7 绘制指定样式的文本

17.5 绘制形状

17.5.1 使用Line绘制线条

实例17-8 使用Line绘制直线

17.5.2 使用Rectangle绘制矩形

实例17-9 绘制多个样式的矩形

17.5.3 使用Circle绘制圆

实例17-10 使用Circle绘制圆

17.5.4 使用Ellipse绘制椭圆

实例17-11 使用Ellipse绘制指定样式的椭圆

17.5.5 使用Arc绘制圆弧

实例17-12 使用Arc绘制圆弧

17.5.6 使用Polygon绘制多边形

实例17-13 使用Polygon绘制多边形

17.5.7 使用Polyline绘制折线

实例17-14 使用Polyline绘制折线

17.5.8 使用CubicCurve绘制三次曲线

实例17-15 使用CubicCurve绘制三次曲线

17.5.9 使用QuadCurve绘制二次曲线

实例17-16 使用QuadCurve绘制二次曲线

17.6 显示图像

17.6.1 使用Image显示图像

实例17-17 加载设置指定的图像文件

17.6.2 使用ImageView显示图像

实例17-18 在3个图像视图中显示同一幅图像

17.7 界面布局

17.7.1 使用Pane的画布功能

实例17-19 在类javafx.scene.layout.Pane中绘制一个圆

17.7.2 使用StackPane实现特定面板功能

实例17-20 在面板中放置一个按钮

17.7.3 使用FlowPane实现序列放置

实例17-21 在面板中同时添加标签和文本

17.7.4 使用GridPane实现网格布局

实例17-22 将3个标签、3个文本域和1个按钮添加到网格中的特定位置

17.7.5 使用BorderPane实现区域布局

实例17-23 将5个按钮分别放置在BorderPane面板的5个区域

17.7.6 使用HBox实现水平布局

实例17-24 使用HBox实现水平布局

17.7.7 使用VBox实现垂直布局

实例17-25 使用VBox实现垂直布局

17.8 技术解惑

17.8.1 Swing、AWT和JavaFX的区别

17.8.2 JavaFX的属性类型

17.9 课后练习

第18章 使用JavaFX UI组件

18.1 使用标签组件

18.1.1 标签属性和方法

18.1.2 标签组件实战演练

实例18-1 使用标签组件创建有文本和图片的标签

18.2 使用按钮组件

18.2.1 按钮属性和方法

18.2.2 按钮组件实战演练

实例18-2 使用按钮控制一段文本的左右移动

18.3 使用复选框组件

18.3.1 复选框属性和方法

18.3.2 复选框组件实战演练

实例18-3 使用复选框设置窗体中文本的字体

18.4 使用单选按钮组件

18.4.1 单选按钮属性和方法

18.4.2 单选按钮组件实战演练

实例18-4 使用单选按钮控制窗体中文本的颜色

18.5 使用文本框组件

18.5.1 文本框的属性和方法

18.5.2 文本框组件实战演练

实例18-5 创建一个文本框供用户输入信息

18.6 使用文本域组件

18.6.1 文本域的属性和方法

18.6.2 文本域组件实战演练

实例18-6 使用文本域组件

18.7 使用选择框组件

18.7.1 选择框的属性和方法

18.7.2 选择框组件实战演练

实例18-7 用ChoiceBox控件实现一个选项选择器

18.8 使用密码框组件

18.8.1 密码框的属性和方法

18.8.2 密码框组件实战演练

实例18-8 演示密码框的使用

18.9 使用组合框组件

18.9.1 组合框的属性和方法

18.9.2 组合框实战演练

实例18-9 使用组合框组件ComboBox

18.10 使用列表视图组件

18.10.1 列表视图的属性和方法

18.10.2 列表视图组件实战演练

实例18-10 使用ListView列表视图组件

18.11 使用滚动条组件

18.11.1 滚动条的属性和方法

18.11.2 滚动条组件实战演练

实例18-11 使用水平滚动条和垂直滚动条控制面板中的文本

18.12 使用滑块组件

18.12.1 滑块的属性和方法

18.12.2 滑块组件实战演连

实例18-12 使用滑块组件移动面板中的文本

18.13 使用树视图组件

18.13.1 树视图的属性和方法

18.13.2 树视图组件实战演练

实例18-13 使用树视图组件TreeView

18.14 使用进度组件

18.14.1 进度指示器

18.14.2 进度条

18.14.3 进度组件实战演练

实例18-14 使用进度指示器和进度条

18.15 使用HTML编辑器组件

18.15.1 HTML编辑器组件概述

18.15.2 HTML编辑器组件实战演练

实例18-15 使用HTML编辑器组件

18.16 使用菜单组件

18.16.1 菜单组件概述

18.16.2 创建菜单栏

实例18-16 创建菜单栏并添加菜单和菜单项

18.17 使用文件选择框组件

18.17.1 文件选择框概述

18.17.2 文件选择框组件实战演练

实例18-17 使用文件选择框组件

18.18 使用颜色选择器组件

18.18.1 颜色选择器概述

1.颜色选择器的元素

2.调色板

3.自定义颜色对话框窗体

4.内置方法

18.18.2 颜色选择器组件实战演练

实例18-18 使用颜色选择器组件

18.19 技术解惑

18.19.1 制作圆形按钮

18.19.2 设置按钮的内容

18.19.3 树表视图

18.20 课后练习

第19章 JavaFX事件处理程序

19.1 JavaFX事件处理系统概述

19.1.1 Java的事件模型

19.1.2 JavaFX中的事件

1.事件类型

2.事件目标

19.1.3 事件处理机制的流程

1.目标选择

2.构造路径

3.事件捕获

4.事件冒泡

19.1.4 事件处理

1.事件过滤器

2.事件处理程序

19.1.5 事件和事件源

19.2 使用快捷方法实现事件处理

19.2.1 快捷方法概述

19.2.2 处理按钮事件

实例19-1 使用快捷方法处理事件

19.3 处理鼠标事件

19.3.1 鼠标事件概述

19.3.2 使用鼠标事件

实例19-2 使用鼠标事件

19.4 处理键盘事件

19.4.1 键盘事件概述

19.4.2 使用键盘事件

实例19-3 使用键盘中的上、下、左、右方向键控制字符的移动

19.5 使用事件过滤器

19.5.1 注册和移除事件过滤器

19.5.2 使用事件过滤器

实例19-4 创建一个可拖曳的面板

19.6 使用事件处理程序

19.6.1 注册和移除事件处理程序

19.6.2 使用事件处理程序

实例19-5 使用事件处理程序处理键盘事件

19.7 使用可触摸设备的事件

19.7.1 手势和触摸事件

1.手势的目标

2.生成的其他事件

19.7.2 手势事件实战

实例19-6 监听并操作屏幕中的长方形和椭圆

1.创建图形

2.处理事件

3.管理日志

19.8 技术解惑

19.8.1 实现鼠标移到按钮上按钮变大的效果

19.8.2 实现JavaFX绑定

19.9 课后练习

第20章 JavaFX框架下的Web开发

20.1 JavaFX内嵌浏览器概述

1.WebEngine

2.WebView

3.PopupFeatures

20.2 使用WebView组件

20.2.1 WebView组件概述

1.常用属性

2.常用方法

20.2.2 WebView组件实战演练

实例20-1 浏览指定的网页

20.3 使用WebEngine接口

20.3.1 WebEngine概述

1.常用属性

2.常用方法

20.3.2 在JavaFX中执行JavaScript程序

实例20-2 在JavaFX中执行JavaScript程序

20.3.3 在Web页面中调用JavaFX程序

实例20-3 在Web页面中调用JavaFX程序

20.3.4 实现弹出式窗口

实例20-4 展示在新窗口打开的链接页面

20.4 管理Web历史记录

20.4.1 WebHistory概述

20.4.2 网页浏览历史记录实战

实例20-5 将获取的历史记录放到ComboBox组件中

20.5 使用CSS文件

实例20-6 会员用户登录系统

20.6 使用FXML

20.6.1 FXML概述

20.6.2 FXML实战演练

实例20-7 创建一个通讯录系统

20.7 技术解惑

20.7.1 JavaFX集合

20.7.2 使用标题面板

20.8 课后练习

第21章 JavaFX框架下的多媒体开发

21.1 变换操作

21.1.1 变换概述

21.1.2 变换操作

实例21-1 实现一个木琴琴键特效

1.平移操作

2.旋转操作

3.缩放操作

4.错切操作

5.多重变换操作

21.2 动画效果

21.2.1 过渡动画

1.褪色过渡(fade transition)

2.路径过渡(path transition)

3.并行过渡(parallel transition)

4.串行过渡(sequential transition)

实例21-2 使用路径过渡动画实现一个升旗的动画效果

21.2.2 时间轴动画

实例21-3 使用时间轴动画实现一个闪烁的文本效果

21.3 视觉特效

21.3.1 混合特效

实例21-4 使用混合特效

21.3.2 发光特效

实例21-5 使用发光特效

21.3.3 模糊特效

1.方框模糊(box blur)

2.动感模糊(motion blur)

3.高斯模糊(gaussian blur)

实例21-6 实现3种模糊特效

21.3.4 阴影特效

实例21-7 使用阴影特效

21.3.5 内阴影特效

实例21-8 使用内阴影特效

21.3.6 倒影特效

实例21-9 使用倒影特效

21.3.7 光照特效

实例21-10 使用光照特效

21.4 3D特效

21.4.1 JavaFX 3D概述

21.4.2 使用3D形状

1.预定义形状

2.用户自定义形状

21.4.3 3D镜头

1.透视镜头(perspective camera)

2.视野范围(field of view)

3.裁剪面(clipping planes)

实例21-11 构建3D图形的摄像机场景

21.4.4 使用子场景

实例21-12 远近移动3D图形

21.4.5 使用光照

1.AmbientLight光源

2.PointLight光源

21.4.6 使用材质

实例21-13 联合使用材质、光照、子场景和3D形状

21.5 音频和视频

21.5.1 使用Media获取获得媒体源

21.5.2 使用MediaPlayer播放并控制媒体

21.5.3 使用MediaView显示视频

21.5.4 控制播放的视频演练

实例21-14 控制播放指定的视频文件

21.6 CSS API(Java 9新增功能)

21.6.1 使用传统方式

实例21-15 使用CSS样式实现一个手机拨号键盘效果

21.6.2 使用Skin API

实例21-16 实现指定样式的按钮效果

21.7 技术解惑

21.7.1 注册一个事件处理程序

21.7.2 注意场景背景图的问题

21.7.3 y-down坐标系和y-up坐标系

21.8 课后练习

第22章 数据库编程

22.1 SQL基础

22.1.1 数据定义

1.数据库操作

2.表操作

3.索引操作

22.1.2 数据操纵

1.SQL查询语句

2.SQL更新语句

22.2 初识JDBC

22.2.1 JDBC API

22.2.2 JDBC驱动类型

1.JDBC-ODBC桥

2.本地API驱动

3.网络协议驱动

4.本地协议驱动

22.2.3 JDBC的常用接口和类

1.DriverManager

2.Connection

3.Statement

4.PreparedStatement

5.ResultSet

22.2.4 JDBC编程的一般步骤

22.3 连接Access数据库

22.3.1 Access数据库概述

22.3.2 连接本地Access数据库

实例22-1 连接本地Access数据库

22.4 连接SQL Server数据库

22.4.1 下载并安装SQL Sever 2016驱动

22.4.2 测试连接

实例22-2 连接SQL Server数据库

22.4.3 获取SQL Server数据库中指定的表

实例22-3 获取SQL Server数据库中指定的表

22.5 连接MySQL数据库

22.5.1 下载并配置MySQL驱动

22.5.2 将MySQL驱动加载到Eclipse中

22.5.3 测试连接

实例22-4 测试MySQL数据库是否连接成功

22.6 技术解惑

22.6.1 连接池的功效

22.6.2 服务器自带连接池的问题

1.并发问题

2.多数据库服务器和多用户

3.事务处理

4.连接池的分配与释放

5.连接池的配置与维护

22.6.3 连接池模型

22.6.4 数据模型、概念模型和关系数据模型

22.6.5 数据库系统的结构

22.7 课后练习

第23章 网络与通信编程

23.1 Java中的网络包

23.1.1 InetAddress类

23.1.2 URLDecoder类和URLEncoder类

23.1.3 URL类和URLConnection类

23.1.4 实践演练

实例23-1 演示InetAddress的简单用法

实例23-2 通过InputStream实现多线程下载

23.2 TCP编程

23.2.1 使用ServerSocket

23.2.2 使用Socket

实例23-3 创建TCP的服务器端

23.2.3 TCP中的多线程

实例23-4 开发一个聊天室程序

23.3 UDP编程

23.3.1 使用DatagramSocket

实例23-5 实现UDP的服务器端

23.3.2 使用MulticastSocket

实例23-6 用MulticastSocket实现一个基于广播的多人聊天室

23.4 代理服务器

23.4.1 代理服务器概述

1.Java对代理的支持

2.监控HTTP传输过程

3.设计规划代理项目

23.4.2 使用Proxy创建连接

实例23-7 在URLConnection中使用代理服务器

23.4.3 使用ProxySelector选择代理服务器

实例23-8 通过改变系统属性来改变默认的代理服务器

23.5 HTTP/2 Client API(Java 10的改进)

23.5.1 孵化器模块usergrid概述

23.5.2 HTTP/2 Client API概述

23.5.3 处理HTTP请求

实例23-9 访问HTTP2网址

23.6 技术解惑

23.6.1 使用异常处理完善程序

23.6.2 使用ServerSocketChannel的弊端

23.6.3 体会复杂的DatagramPacket

23.6.4 MulticastSocket类的重要意义

23.6.5 继承ProxySelector时需要做的工作

23.6.6 代理服务无止境

23.6.7 生成jdk.incubator.httpclient模块的Javadoc

23.7 课后练习

第24章 多线程和进程

24.1 线程概述

24.1.1 线程与进程

24.1.2 线程的意义

24.1.3 Java的线程模型

24.2 创建线程

24.2.1 使用Thread类创建线程

实例24-1 使用类Thread创建线程

实例24-2 使用类Thread设置线程名

24.2.2 使用Runnable接口创建线程

实例24-3 使用Thread创建线程

24.2.3 使用Thread.onSpinWait()方法实现循环等待

实例24-4 使用onSpinWait()方法

24.3 线程的生命周期

24.3.1 线程的运行与停止

实例24-5 创建、运行和停止线程

24.3.2 线程的挂起和唤醒

实例24-6 使用方法sleep()、suspend()和resume()

24.3.3 终止线程的3种方法

1.使用退出标志终止线程

实例24-7 使用退出标志终止线程

2.使用stop()方法终止线程

3.使用interrupt()方法终止线程

实例24-8 在线程处于阻塞状态时使用interrupt()方法

24.3.4 线程的阻塞

24.3.5 线程的死亡

实例24-9 演示线程的死亡

24.4 控制线程

24.4.1 使用join方法

实例24-10 演示join()方法的基本用法

24.4.2 慎重使用volatile关键字

实例24-11 count不是原子级别的

实例24-12 使用volatile关键字

实例24-13 使用关键字synchronized实现原子性操作

24.4.3 后台、让步和睡眠

1.后台线程

2.睡眠线程

3.线程让步

实例24-14 演示Java的自动转换

24.5 线程传递数据

24.5.1 向线程传递数据的方法

1.通过构造方法传递数据

实例24-15 通过构造方法传递数据

2.通过变量和方法传递数据

实例24-16 使用方法setName()设置name变量

3.通过回调函数传递数据

实例24-17 通过回调函数传递数据

24.5.2 线程中返回数据的方法

1.通过类变量和方法返回数据

2.通过回调函数返回数据

24.6 进程

24.6.1 使用类ProcessBuilder

实例24-18 使用ProcessBuilder执行本地Windows系统中的命令

24.6.2 使用类Process

实例24-19 使用Process调用DOS命令打开记事本

24.6.3 使用类ProcessHandle(Java 9新增功能)

实例24-20 输出当前运行进程的相关信息

24.7 技术解惑

24.7.1 线程和函数的关系

24.7.2 在run方法中使用线程名时产生的问题

24.7.3 继承Thread类或实现Runnable接口的比较

24.7.4 start()和run()的区别

24.7.5 使用sleep()方法的注意事项

24.7.6 线程的优先级

24.7.7 如何确定发生死锁

24.7.8 关键字synchronized和volatile的区别

24.7.9 sleep()方法和yield()方法的区别

24.7.10 分析Swing的多线程死锁问题

24.8 课后练习

第25章 大数据综合实战:爬取并分析知乎用户信息

25.1 系统设计

25.1.1 系统目标

25.1.2 系统功能结构

25.2 数据库设计

25.3 知乎爬虫请求分析

25.4 系统文件夹组织结构

25.5 系统详细运行流程图

25.6 具体编码

25.6.1 核心模块代码的编写

1.Http请求的执行

2.数据库连接管理

3.数据库dao操作

4.相关实体类

25.6.2 知乎抓取功能模块

1.爬虫抓取初始化

2.知乎网页下载

3.知乎详情列表页的解析

25.6.3 代理功能模块

1.代理功能模块初始化

2.代理页面下载

3.代理页面解析

4.代理可用性检测

5.代理序列化

25.7 知乎用户大数据分析

25.7.1 数据展示模块

1.Http请求处理

2.展示数据查询

25.7.2 运行展示

25.8 项目开发难点分析

Java开发从入门到精通(第2版)是2019年由人民邮电出版社出版,作者王洋。

得书感谢您对《Java开发从入门到精通(第2版)》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。

你可能喜欢
Python编程从入门到精通 电子书
带你由浅入深地详细了解Python语言开发技术。
IT项目管理(第2版) 电子书
本书深入研究现代项目管理学,提供知识与技能并重的教材,涵盖IT项目管理全方位内容。
PADS 9.5电路设计与仿真从入门到精通 电子书
全书以PADS9.5为平台,全面讲解了电路设计的方法和技巧。全书共18章,第1章为绪论;第2章讲解了PADS9.5的安装;第3章讲解了PADS9.5的图形用户界面PADSLogic9.5;第4章讲解了PADSLogic9.5原理图设计;第5章讲解了原理图高级编辑;第6章讲解了PADSLogic9.5图形绘制;第7章讲解了PADS9.5的印制电路板界面;第8章讲解了PADSLayout9.5的基本操
西门子S7-200PLC从入门到精通 电子书
本书主要介绍西门子公司S7-200系列PLC的硬件资源、指令系统等基础知识,并详细讲解了编程软件的安装和使用方法、PLC控制系统的设计方法与步骤,并通过10个综合实例介绍了S7-200系列PLC在控制领域的应用与开发方法。本书采用图、表、文相结合的方法,使书中的内容通俗易懂又不失专业性。
Altium Designer 20 电路设计与仿真从入门到精通 电子书
全书以AltiumDesigner20为平台,讲解了电路设计的方法和技巧,主要包括AltiumDesigner20概述、原理图简介、原理图的环境设置、原理图的基础操作、原理图的高级应用、层次原理图设计、电路仿真系统、PCB设计入门、PCB的高级编辑、电路板的后期制作、信号完整性分析、创建元器件库及元器件封装等内容。