展开全部

主编推荐语

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

内容简介

本书用Java10最新版本写作,由浅入深地详细讲解了Java的开发技术,并通过具体实例的实现过程演练了各个知识点的具体使用流程。即包括新版本的技术,也包括典型的热点案例,如网络爬虫和模块化系统等内容。本书内容循序渐进,以“技术解惑”和“范例演练”贯穿全书,引领读者全面掌握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 项目开发难点分析
展开全部

评分及书评

尚无评分
目前还没人评分

出版方

人民邮电出版社

人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。