译者序
前言
开门见山的讲授方法
以恰到好处的时机介绍对象
教学功能
ACM建议
在线资源
致谢
第一部分 Java语言
第1章 Java编程基础
1.1 计算基础
1.1.1 计算机的硬件组成
1.1.2 位、字节和二进制
1.1.3 操作系统
1.2 程序
1.3 编程语言
1.4 Java语言
1.4.1 Java的起源
1.4.2 Java对互联网的贡献
1.4.3 Java applet
1.4.4 安全性
1.4.5 可移植性
1.4.6 Java的解决方案:字节码
1.4.7 Java的演进
1.5 面向对象编程的关键特性
1.5.1 封装
1.5.2 多态
1.5.3 继承
1.6 Java开发工具包
1.7 第一个简单的程序
1.7.1 输入程序
1.7.2 编译程序
1.7.3 运行程序
1.7.4 逐行解析第一个简单的程序
1.8 处理语法错误
1.9 第二个简单的程序
1.10 另一种数据类型
1.11 两种控制语句
1.11.1 if语句
1.11.2 for循环
1.12 创建代码块
1.13 分号和语句的位置
1.14 关于缩进
1.15 Java关键字
1.16 Java中的标识符
1.17 Java类库
1.18 习题
第2章 数据类型和运算符
2.1 为什么数据类型很重要
2.2 Java的基本数据类型
2.2.1 整数
2.2.2 浮点类型
2.2.3 字符
2.2.4 布尔类型
2.3 字面量
2.3.1 十六进制、八进制和二进制字面量
2.3.2 转义字符序列
2.3.3 字符串字面量
2.4 深入解析变量
2.4.1 初始化变量
2.4.2 动态初始化
2.5 变量的作用域和生命周期
2.6 运算符
2.7 算术运算符
2.8 关系运算符和逻辑运算符
2.9 具有“短路”功能的逻辑运算符
2.10 赋值运算符
2.11 速记赋值运算符
2.12 赋值中的类型转换
2.13 使用强制类型转换
2.14 运算符的优先级
2.15 表达式
2.15.1 表达式中的类型转换
2.15.2 空白和圆括号
2.16 习题
第3章 程序控制语句
3.1 从键盘输入字符
3.2 if语句
3.3 嵌套的if语句
3.4 if-else-if梯队
3.5 switch语句
3.6 嵌套的switch语句
3.7 for循环
3.8 for循环中的一些特殊情况
3.8.1 缺少部分
3.8.2 无限循环
3.8.3 没有循环体的循环
3.9 在for语句内部声明循环控制变量
3.10 增强的for循环
3.11 while循环
3.12 do-while循环
3.13 使用break语句退出循环
3.14 像使用goto语句一样使用break语句
3.15 使用continue语句
3.16 嵌套的循环
3.17 习题
第4章 类、对象和方法初探
4.1 类的基础知识
4.1.1 类的一般形式
4.1.2 定义类
4.2 如何创建对象
4.3 变量引用和赋值语句
4.4 方法
4.5 从方法返回
4.6 返回值
4.7 使用形参
4.8 构造函数
4.9 含有形参的构造函数
4.10 new运算符再探
4.11 垃圾回收和终结器
4.12 使用this关键字
4.13 习题
第5章 更多数据类型和运算符
5.1 数组
5.2 多维数组
5.2.1 二维数组
5.2.2 不规则数组
5.2.3 三维或多维数组
5.2.4 初始化多维数组
5.3 其他声明数组的语法
5.4 对数组的引用赋值
5.5 使用成员length
5.6 for-each风格的for循环
5.6.1 遍历多维数组
5.6.2 应用增强for循环
5.7 字符串
5.7.1 构造字符串
5.7.2 操作字符串
5.7.3 字符串数组
5.7.4 字符串是不可改变的
5.7.5 使用字符串控制switch语句
5.8 使用命令行参数
5.9 按位运算
5.9.1 按位与、按位或、按位异或、按位非运算符
5.9.2 移位运算符
5.9.3 位速记赋值运算符
5.10 问号运算符
5.11 习题
第6章 深入解析类和方法
6.1 控制对类成员的访问
6.2 向方法传递对象
6.3 如何传递实参
6.4 返回对象
6.5 重载方法
6.6 重载构造函数
6.7 递归
6.8 理解关键字static
6.8.1 静态变量
6.8.2 静态方法
6.8.3 静态代码块
6.9 嵌套类和内部类
6.10 长度可变的实参vararg
6.10.1 vararg基础
6.10.2 重载varargs方法
6.10.3 vararg和二义性
6.11 习题
第7章 继承
7.1 继承基础
7.2 成员访问和继承
7.3 构造函数和继承
7.4 用super关键字调用超类的构造函数
7.5 用super关键字访问超类成员
7.6 创建多层层次结构
7.7 执行构造函数的时机
7.8 超类引用与子类对象
7.9 方法重写
7.10 用重写方法支持多态
7.11 为什么要重写方法
7.12 使用抽象类
7.13 使用final关键字
7.13.1 用final关键字防止方法重写
7.13.2 用final关键字防止继承
7.13.3 对数据成员使用final关键字
7.14 Object类
7.15 习题
第8章 接口
8.1 接口的基础知识
8.2 创建接口
8.3 实现接口
8.4 使用接口引用
8.5 实现多个接口
8.6 接口中的常量
8.7 可扩展的接口
8.8 嵌套的接口
8.9 关于接口的最后思考
8.10 习题
第9章 包
9.1 包的基础知识
9.1.1 定义包
9.1.2 寻找包与环境变量CLASSPATH
9.1.3 一个短小的包例子
9.2 包与成员访问
9.2.1 一个包访问的例子
9.2.2 受保护的成员
9.3 导入包
9.4 静态导入
9.5 习题
第10章 异常处理
10.1 异常层次结构
10.2 异常处理基础
10.2.1 使用关键字try和catch
10.2.2 一个简单的异常处理例子
10.3 未捕获异常的后果
10.4 异常可以优雅地处理错误
10.5 使用多个catch子句
10.6 捕获子类异常
10.7 嵌套的try块
10.8 抛出异常
10.9 进一步解读Throwable类
10.10 使用finally块
10.11 使用throws关键字
10.12 Java的内置异常
10.13 JDK 7中新添加的异常特性
10.14 创建异常子类
10.15 习题
第11章 使用输入/输出
11.1 Java的输入/输出是建立在流上的
11.2 字节流和字符流
11.3 字节流类
11.4 字符流类
11.5 预定义的流
11.6 使用字节流
11.6.1 读控制台输入
11.6.2 写控制台输出
11.7 使用字节流读写文件
11.7.1 从文件中输入
11.7.2 写文件
11.8 自动关闭文件
11.9 读写二进制数据
11.10 随机访问文件
11.11 使用Java字符流
11.11.1 用控制台获得字符流输入
11.11.2 使用字符流进行控制台输出
11.12 使用字符流进行文件输入/输出
11.12.1 使用FileWriter类
11.12.2 使用FileReader类
11.12.3 File类
11.12.4 获得文件属性
11.12.5 获得目录列表
11.12.6 使用FilenameFilter接口
11.12.7 listFiles()方法
11.12.8 多种文件实用方法
11.13 使用Java的类型包装器来转换数值字符串
11.14 习题
第12章 多线程编程
12.1 多线程基础
12.2 Thread类和Runnable接口
12.3 创建线程
12.4 创建多个线程
12.5 判定线程终止的时间
12.6 线程的优先级
12.7 同步
12.8 使用同步方法
12.9 synchronized语句
12.10 使用方法notify()、wait()和notifyAll()进行线程通信
12.11 线程挂起、恢复和终止
12.12 习题
第13章 枚举、自动装箱和注解
13.1 枚举
13.2 Java的枚举是类类型
13.3 values()方法和valueOf()方法
13.4 构造函数、方法、实例变量和枚举
13.5 从Enum类继承枚举
13.6 自动装箱
13.6.1 类型包装器和装箱
13.6.2 自动装箱基础
13.6.3 装箱与方法
13.6.4 表达式中的自动装箱和自动拆箱
13.6.5 警告
13.7 注解(元数据)
13.7.1 创建和使用注解
13.7.2 内置注解
13.8 习题
第14章 泛型
14.1 泛型基础
14.1.1 一个简单的泛型例子
14.1.2 泛型只能用于对象
14.1.3 基于不同类型实参的不同泛型类型
14.1.4 有两个类型形参的泛型类
14.1.5 泛型类的一般形式
14.2 有界的类型
14.3 使用有通配符的实参
14.4 有界的通配符
14.5 泛型方法
14.6 泛型构造函数
14.7 泛型的类层次结构
14.8 泛型接口
14.9 原始类型和遗留代码
14.10 带有菱形运算符的类型推断
14.11 清除
14.12 二义性错误
14.13 泛型的一些限制
14.13.1 不能实例化类型形参
14.13.2 对静态成员的限制
14.13.3 泛型数组的限制
14.13.4 泛型异常的限制
14.14 习题
第15章 applet与剩余的Java关键字
15.1 applet基础
15.2 applet的完整骨架
15.3 applet的初始化和终止
15.4 applet架构的关键点
15.5 请求重绘
15.6 使用状态窗口
15.7 向applet传递形参
15.8 剩余的Java关键字
15.8.1 修饰符volatile
15.8.2 修饰符transient
15.8.3 关键字instanceof
15.8.4 关键字strictfp
15.8.5 关键字assert
15.8.6 原生方法
15.9 习题
第16章 面向对象设计介绍
16.1 优雅的软件及其重要性
16.2 优雅的方法
16.2.1 命名约定
16.2.2 方法的内聚
16.2.3 形式良好的对象
16.2.4 内部文档
16.2.5 外部文档
16.3 优雅的类
16.3.1 类的内聚和专家模式
16.3.2 避免重复
16.3.3 完整的接口
16.3.4 设计时要考虑变化
16.3.5 最少知识原则
16.4 继承与委托的比较
16.4.1 UML类图
16.4.2 从代码重用的角度看
16.4.3 is-a关系
16.4.4 类似的行为
16.4.5 多态
16.4.6 继承的代价
16.5 设计模式
16.5.1 适配者模式
16.5.2 观察者模式
16.6 习题
第二部分 利用Swing工具箱进行GUI编程
第17章 Swing基础
17.1 Swing的起源和设计理念
17.2 组件和容器
17.2.1 组件
17.2.2 容器
17.2.3 顶级容器窗格
17.3 布局管理器
17.4 第一个简单的Swing程序
17.5 事件处理
17.5.1 事件
17.5.2 事件源
17.5.3 事件侦听器
17.5.4 事件类和侦听器接口
17.5.5 适配器类
17.6 使用按钮
17.7 JTextField类介绍
17.8 使用匿名内部类来处理事件
17.9 习题
第18章 探索Swing控件
18.1 JLabel类和ImageIcon类
18.2 Swing按钮
18.2.1 处理动作事件
18.2.2 处理项事件
18.2.3 JButton类
18.2.4 JToggleButton类
18.2.5 复选框
18.2.6 单选按钮
18.3 JTextField类
18.4 JScrollPane类
18.5 JList类
18.6 JComboBox类
18.7 树
18.8 JTable类
18.9 模型简介
18.10 习题
第19章 使用菜单
19.1 菜单基础
19.2 JMenuBar类、JMenu类和JMenuItem类概览
19.2.1 JMenuBar类
19.2.2 JMenu类
19.2.3 JMenuItem类
19.3 创建主菜单
19.4 为菜单项添加助记键和快捷键
19.5 为菜单项添加图像和工具提示
19.6 使用JRadioButtonMenuItem类和JCheckBoxMenuItem类
19.7 习题
第20章 对话框
20.1 JOptionPane类
20.2 showMessageDialog()方法
20.3 showConfirmDialog()方法
20.4 showInputDialog()方法
20.5 showOptionDialog()方法
20.6 JDialog类
20.7 创建无模式的对话框
20.8 用JFileChooser类选择文件
20.9 习题
第21章 线程、applet和绘图
21.1 Swing中的多线程
21.2 使用Timer类
21.3 创建Swing的applet
21.4 绘图
21.4.1 绘图基础
21.4.2 图形上下文
21.4.3 计算可绘图区域
21.4.4 请求绘图
21.4.5 绘图的例子
21.5 习题
第三部分 畅游Java API库
第22章 处理字符串
22.1 字符串的基础知识
22.2 字符串的构造函数
22.3 三个与字符串有关的语言特性
22.3.1 字符串字面量
22.3.2 字符串拼接
22.3.3 字符串与其他数据类型拼接
22.3.4 重写toString()方法
22.4 length()方法
22.5 获得字符串中的字符
22.5.1 charAt()方法
22.5.2 getChars()方法
22.5.3 toCharArray()方法
22.6 字符串比较
22.6.1 equals()方法和equalsIgnoreCase()方法
22.6.2 equals()方法与“==”运算符的比较
22.6.3 regionMatches()方法
22.6.4 startsWith()方法和endsWith()方法
22.6.5 compareTo()方法和compareToIgnoreCase()方法
22.7 使用indexOf()方法和lastIndexOf()方法
22.8 获得修改的字符串
22.8.1 substring()方法
22.8.2 replace()方法
22.8.3 trim()方法
22.9 改变字符串中字符的大小写
22.10 StringBuffer类和StringBuilder类
22.11 习题
第23章 探索java.lang包
23.1 基本类型包装器
23.1.1 Number类
23.1.2 Double类和Float类
23.1.3 Byte类、Short类、Integer类和Long类
23.1.4 Character类
23.1.5 Boolean类
23.1.6 自动装箱和类型包装器
23.2 Math类
23.3 Process类
23.4 ProcessBuilder类
23.5 Runtime类
23.6 System类
23.6.1 使用currentTimeMillis()方法测量程序执行的时间
23.6.2 使用arraycopy()方法
23.6.3 获得属性值
23.6.4 重定向标准输入流和标准输出流
23.7 Object类
23.8 Class类
23.9 Enum类
23.10 与线程有关的类和Runnable接口
23.11 其他类
23.12 java.lang包中的接口
23.12.1 Comparable接口
23.12.2 Appendable接口
23.12.3 Iterable接口
23.12.4 Readable接口
23.12.5 CharSequence接口
23.12.6 AutoCloseable接口
23.13 习题
第24章 探索java.util包
24.1 Locale类
24.2 使用日期和时间
24.2.1 Date类
24.2.2 Calendar类和GregorianCalendar类
24.3 用Formatter类格式化输出
24.3.1 Formatter类的构造函数
24.3.2 格式化基础
24.3.3 格式化字符串和字符
24.3.4 格式化数字
24.3.5 格式化日期和时间
24.3.6 说明符%n和说明符%%
24.3.7 指定最小的域宽度
24.3.8 指定精度
24.3.9 使用格式标志
24.3.10 大写字母选项
24.3.11 使用实参索引
24.3.12 为不同的地区设置格式化
24.3.13 关闭Formatter对象
24.4 格式化和printf()方法
24.5 Scanner类
24.5.1 Scanner类的构造函数
24.5.2 Scanner类的基础知识
24.5.3 Scanner类的例子
24.5.4 Scanner类的其他特性
24.6 Random类
24.7 使用Observable类和Observer接口
24.8 Timer类和TimerTask类
24.9 其他混杂的应用类和接口
24.10 习题
第25章 使用集合框架中的数据结构
25.1 数据结构概览
25.1.1 栈和队列
25.1.2 链表
25.1.3 树
25.1.4 散列表
25.1.5 选择数据结构
25.2 集合概览
25.3 集合接口
25.3.1 Collection接口
25.3.2 List接口
25.3.3 Set接口
25.3.4 SortedSet接口
25.3.5 NavigableSet接口
25.3.6 Queue接口
25.3.7 Deque接口
25.4 集合类
25.4.1 ArrayList类
25.4.2 LinkedList类
25.4.3 HashSet类
25.4.4 TreeSet类
25.4.5 LinkedHashSet类
25.4.6 ArrayDeque类
25.4.7 PriorityQueue类
25.5 通过迭代器访问集合
25.5.1 使用迭代器
25.5.2 用for-each风格的循环代替迭代器
25.6 使用映射
25.6.1 映射接口
25.6.2 映射类
25.7 比较器
25.8 集合算法
25.9 Arrays类
25.10 遗留类和遗留接口
25.10.1 Enumeration接口
25.10.2 Vector类
25.10.3 Stack类
25.10.4 Dictionary类
25.10.5 Hashtable类
25.10.6 Properties类
25.11 习题
第26章 使用java.net包进行网络编程
26.1 网络基础
26.2 网络类和网络接口
26.3 InetAddress类
26.4 Socket类
26.5 URL类
26.6 URLConnection类
26.7 HttpURLConnection类
26.8 数据报
26.8.1 DatagramSocket类
26.8.2 DatagramPacket类
26.8.3 数据报的例子
26.9 习题
第27章 并发实用工具
27.1 并发API包
27.1.1 java.util.concurrent包
27.1.2 java.util.concurrent.atomic包
27.1.3 java.util.concurrent.locks包
27.2 使用同步对象
27.2.1 Semaphore类
27.2.2 CountDownLatch类
27.2.3 CyclicBarrier类
27.2.4 Exchanger类
27.2.5 Phaser类
27.3 使用执行器
27.4 使用Callable接口和Future接口
27.5 TimeUnit枚举
27.6 并发集合
27.7 锁
27.8 原子操作
27.9 通过Fork/Join框架并行编程
27.10 主要的Fork/Join类
27.10.1 ForkJoinTask<V>类
27.10.2 RecursiveAction类
27.10.3 RecursiveTask<V>类
27.10.4 ForkJoinPool类
27.11 分治策略
27.11.1 第一个简单的Fork/Join示例
27.11.2 理解并行度的影响
27.11.3 使用RecursiveTask<V>类的一个例子
27.11.4 异步执行任务
27.12 并发实用工具与Java的传统方法的比较
27.13 习题
附录A 使用Java文档注释
A.1 Javadoc标签
A.1.1 @author
A.1.2 {@code}
A.1.3 @deprecated
A.1.4 {@docRoot}
A.1.5 @exception
A.1.6 {@inheritDoc}
A.1.7 {@link}
A.1.8 {@linkplain}
A.1.9 {@literal}
A.1.10 @param
A.1.11 @return
A.1.12 @see
A.1.13 @serial
A.1.14 @serialData
A.1.15 @serialField
A.1.16 @since
A.1.17 @throws
A.1.18 {@value}
A.1.19 @version
A.2 文档注释的一般形式
A.3 javadoc程序输出了什么
A.4 使用文档注释的例子
附录B 正则表达式介绍
B.1 Pattern类
B.2 Matcher类
B.3 正则表达式语法基础
B.4 演示字符串匹配
B.5 使用通配字符和限定符
B.6 使用字符类
B.7 使用replaceAll()方法
B.8 与String类连接
B.9 更多内容
附录C 部分习题的参考答