译者序
前言
第1章 面向对象程序设计
1.1 面向对象程序设计和过程型程序设计
1.1.1 自顶向下设计和过程型程序设计
1.1.2 自顶向下设计的问题
1.1.3 类和对象
1.1.4 域和方法
1.1.5 实例与类成员
1.1.6 类的设计
1.1.7 类与对象的关系
1.2 类和抽象数据类型
1.2.1 信息隐藏
1.2.2 封装
1.2.3 抽象数据类型
1.3 客户/服务器模型和消息传递
1.3.1 客户/服务器模型
1.3.2 消息传递和方法调用
1.4 继承和多态
1.4.1 继承
1.4.2 多态
1.4.3 多态和递归
1.5 接口和组件
1.6 面向对象的建模和统一建模语言
1.6.1 示例模型
1.6.2 从统一建模语言模型到程序代码
第2章 入门程序
2.1 第一个程序
2.2 基本的编程结构
2.2.1 求最小整数和最大整数
2.2.2 import语句的便利之处
2.2.3 产生随机整数
2.2.4 while循环
2.2.5 if语句
2.2.6 编译和运行BigAndSmall程序
2.2.7 从一个磁盘文件读取输入
2.2.8 填充数组并对其排序
2.2.9 确保一个程序被正确地调用
2.2.10 构造、填充并排序一个数组
2.2.11 填充、打印并排序一个数组
2.2.12 把输出写入一个磁盘文件
2.2.13 为一个游戏确定最佳策略
2.2.14 for循环
2.2.15 绝对值和余数
2.3 字符串
2.3.1 toString方法
2.3.2 一个String类的测试客户程序
2.3.3 字符串的转换方法
2.3.4 包装类和类型转换
2.3.5 StringBuffer类
2.4 程序员定义的类
2.5 输入和输出
2.5.1 输入/输出流
2.5.2 IOException
2.5.3 二进制输入:统计一个文件的字节数
2.5.4 辨别字母和数字
2.5.5 把标准输入回送到标准输出
2.6 实用程序类
2.6.1 StringTokenizer类
2.6.2 Vector类
2.6.3 Hashtable类
2.7 Java补充材料
2.8 通常错误和安全实践
2.9 编程练习
第3章 程序和包
3.1 程序类型
3.1.1 Java虚拟机
3.1.2 应用程序
3.1.3 applet
3.1.4 servlet
3.1.5 bean
3.1.6 程序类型小结
3.2 回顾源文件和类文件
3.3 包
3.3.1 import语句
3.3.2 import语句的使用
3.3.3 包与命名冲突
3.3.4 默认包和命名的包
3.3.5 package语句
3.3.6 环境变量CLASSPATH
3.3.7 子目录作为子包
3.4 应用举例:产生非负整数
3.4.1 问题
3.4.2 输出
3.4.3 解决方法
3.4.4 Java实现
3.4.5 讨论
3.4.6 回顾构造函数和方法
3.4.7 编译并运行例子程序
3.5 通常错误和安全实践
3.6 编程练习
第4章 语言基础
4.1 标识符、变量和值
4.1.1 变量和值
4.1.2 域和默认值
4.1.3 对象引用的默认值null
4.1.4 局部变量
4.1.5 final变量
4.2 构造函数和方法
4.2.1 构造函数和方法重载
4.2.2 方法的语法
4.2.3 方法之间的区别
4.3 基本数据类型和运算符
4.3.1 整数类型
4.3.2 浮点类型
4.3.3 强制类型转换操作
4.3.4 算术运算符
4.3.5 移位和位运算符
4.3.6 赋值、增量和减量运算符
4.3.7 浮点数的算术运算符
4.3.8 char类型
4.3.9 char类型和整数类型混合使用的问题
4.3.10 对char类型的算术运算
4.3.11 字符串文字
4.3.12 boolean类型
4.3.13 关系运算符
4.3.14 关于等于运算符= =的特别注释
4.3.15 等于运算符和对象引用
4.3.16 逻辑运算符
4.3.17 运算符instanceof
4.4 数组
4.4.1 边界检查
4.4.2 数组的数组
4.4.3 数组作为返回类型
4.5 控制结构
4.5.1 程序块
4.5.2 同一名字的域、参数和局部变量
4.5.3 嵌套程序块
4.5.4 if语句
4.5.5 switch语句
4.5.6 while循环和do while循环
4.5.7 for循环
4.6 应用举例:产生非重复的整数
4.6.1 问题
4.6.2 输出
4.6.3 解决方法
4.6.4 Java实现
4.6.5 讨论
4.6.6 Set接口和HashSet实现
4.7 异常
4.7.1 finally语句
4.7.2 在程序中故意抛出一个异常
4.7.3 throws语句
4.7.4 异常和调试
4.8 Java补充材料
4.8.1 整数的二进制补码表示
4.8.2 垃圾回收
4.8.3 按位/逻辑运算符
4.8.4 条件运算符
4.9 通常错误和安全实践
4.10 编程练习
第5章 类
5.1 类和类成员的作用域
5.1.1 类作用域
5.1.2 成员作用域
5.1.3 类和成员作用域小结
5.2 构造函数、方法和域
5.2.1 构造函数
5.2.2 无参数的构造函数
5.2.3 通过构造函数限制对象的构造
5.2.4 构造函数和非引用对象
5.2.5 方法
5.2.6 属性和get/set方法
5.2.7 方法和各种不同的功能
5.2.8 从构造函数中调用方法
5.2.9 从带返回类型的方法中返回值
5.2.10 通过构造方法构造对象
5.2.11 域
5.2.12 实例域和对象的状态
5.2.13 域的初始化
5.2.14 static方法和域
5.2.15 访问static成员的一种工作方法
5.2.16 static成员的使用
5.2.17 遭反对的特性
5.3 学习类库
5.4 应用举例:基本的输入/输出类
5.4.1 问题
5.4.2 输入/输出
5.4.3 解决方法
5.4.4 Java实现
5.4.5 讨论
5.5 应用举例:一个用于文件复制的实用工具类
5.5.1 问题
5.5.2 输出举例
5.5.3 解决方法
5.5.4 Java实现
5.5.5 讨论
5.6 Java补充材料
5.7 通常错误和安全实践
5.8 编程练习
第6章 继承、接口和抽象类
6.1 继承的基本概念
6.1.1 类Object
6.1.2 一些重要的Object方法
6.1.3 作用域和继承
6.1.4 作用域和继承的相互作用
6.1.5 改变一个继承成员的作用域
6.1.6 在继承下的构造函数
6.1.7 名字隐藏
6.1.8 用修饰符final禁用继承
6.1.9 强制类型转换和类型安全
6.1.10 向下强制类型转换的危险
6.2 多态
6.2.1 覆盖toString方法
6.2.2 覆盖和名字隐藏
6.2.3 方法覆盖调用超类方法
6.2.4 用修饰符final禁用覆盖
6.2.5 覆盖与重载
6.3 应用举例:多态的输入和输出
6.3.1 问题
6.3.2 输入/输出举例
6.3.3 解决方法
6.3.4 Java实现
6.3.5 讨论
6.4 接口
6.4.1 接口和继承
6.4.2 接口作为引用数据类型
6.4.3 嵌套的接口
6.4.4 应用程序接口
6.5 抽象类
6.5.1 创建一个抽象类的三种方法
6.5.2 具体类、抽象类和接口的小结
6.6 Java补充材料
6.7 通常错误和安全实践
6.8 编程练习
第7章 图形与事件处理
7.1 AWT和Swing组件集概述
7.1.1 模型视图控制器结构
7.1.2 AWT和Swing组件集的共同特性
7.2 事件驱动的程序设计
7.2.1 事件委托模型
7.2.2 Action接口
7.3 组件和容器
7.3.1 JFrame窗口
7.3.2 通过关闭顶层窗口结束应用程序
7.3.3 Action接口和AbstractAction类
7.3.4 菜单、弹出式菜单和子菜单
7.3.5 键盘快捷键
7.3.6 弹出式菜单
7.3.7 工具条
7.3.8 对话框窗口
7.4 应用举例:辅助目录
7.4.1 问题
7.4.2 输出举例
7.4.3 解决方法
7.4.4 Java实现
7.4.5 讨论 277
7.4.6 创建树结构
7.4.7 事件处理
7.5 模型视图控制器结构
7.5.1 一个组件视图和控制器的集成
7.5.2 组件的外观和效果
7.5.3 画图和重画
7.5.4 合法和无效
7.6 应用举例:一个图形表格编辑器
7.6.1 问题
7.6.2 输入举例
7.6.3 解决方法
7.6.4 Java实现
7.6.5 讨论
7.6.6 编辑雇员记录
7.7 通常错误和安全实践
7.8 编程练习
第8章 三种接口:可复制的、可系列化的和可运行的接口
8.1 复制对象
8.1.1 clone方法的默认实现
8.1.2 默认clone方法的问题
8.1.3 复制数组
8.1.4 禁用复制
8.2 系列化
8.2.1 系列化的基本概念
8.2.2 系列化的规则
8.2.3 系列化与对象图形
8.2.4 带有可系列化子类的不可系列化超类
8.2.5 对象的输入流和输出流
8.2.6 系列化、数组和基本类型
8.2.7 基本类型与对象流
8.2.8 系列化和String
8.2.9 系列化和static域与transient域
8.2.10 定制系列化
8.2.11 关于系列化的特别注释
8.2.12 系列版本号
8.2.13 Externalizable接口
8.2.14 禁用系列化
8.3 应用举例:一个可系列化的时间片
8.3.1 问题
8.3.2 输出举例
8.3.3 解决方法
8.3.4 Java实现
8.3.5 讨论
8.4 多线程程序
8.4.1 从单线程执行到多线程执行
8.4.2 交叉的线程执行
8.4.3 线程执行的小结
8.4.4 多线程的优点
8.4.5 使程序成为多线程的两种方法
8.4.6 多线程和程序终止
8.4.7 用户线程和守护线程
8.4.8 线程优先级
8.4.9 线程状态
8.4.10 线程组
8.4.11 线程同步
8.4.12 join方法
8.4.13 线程同步的需要
8.4.14 临界区和互斥
8.4.15 同步线程间的通信
8.4.16 wait方法和通知
8.4.17 notify和notifyAll方法
8.4.18 死锁
8.4.19 不遭反对的Thread构造函数和方法小结
8.5 应用举例:哲学家进餐问题
8.5.1 问题
8.5.2 输出举例
8.5.3 解决方法
8.5.4 Java实现
8.5.5 讨论
8.5.6 对临界区问题的解决方法
8.6 Java补充材料
8.6.1 遭反对的线程方法
8.6.2 线程、编译器优化和Volatile修饰符
8.7 通常错误和安全实践
8.8 编程练习
第9章 网络编程
9.1 基本概念
9.1.1 IP地址
9.1.2 包结构
9.1.3 端口号
9.1.4 套接字
9.1.5 可靠传输和最佳试验传输
9.1.6 防火墙和代理服务器
9.2 套接字
9.2.1 客户套接字
9.2.2 服务器套接字
9.2.3 数据报套接字
9.2.4 系列化与套接字
9.2.5 组播套接字
9.2.6 Java安全套接字扩充
9.2.7 在一台独立运行的机器上测试分布式应用程序
9.3 应用举例:一个多线程的俗语服务器
9.3.1 问题
9.3.2 输入/输出举例
9.3.3 解决方法
9.3.4 Java实现
9.3.5 讨论
9.3.6 客户
9.4 applet
9.4.1 Applet和JApplet类
9.4.2 初始化、开始和结束一个applet
9.4.3 appletviewer实用程序
9.4.4 通信applet
9.4.5 JAR文件
9.4.6 applet的安全性和沙盒机制
9.4.7 Java应用程序作为applet的主机程序
9.5 应用举例:MACE作为带套接字的applet
9.5.1 问题
9.5.2 输入/输出举例
9.5.3 解决方法
9.5.4 Java实现
9.5.5 讨论
9.6 远程方法调用
9.6.1 RMI服务器和客户举例
9.6.2 RMI客户
9.6.3 安全许可
9.6.4 RMI服务器
9.6.5 RMI的激活
9.6.6 RMI和Jini
9.7 应用举例:矩阵的代数运算
9.7.1 问题
9.7.2 输入/输出举例
9.7.3 解决方法
9.7.4 Java实现
9.7.5 讨论
9.7.6 矩阵加法和乘法的时间复杂性
9.8 对象请求代理程序和CORBA
9.8.1 CORBA应用程序举例
9.8.2 IDL文件
9.8.3 服务器程序
9.8.4 CORBA命名服务
9.8.5 客户程序
9.8.6 运行应用程序
9.8.7 动态调用接口
9.8.8 联网技术小结
9.9 Java补充材料
9.9.1 jar实用程序
9.9.2 applet作为CORBA客户程序的安全问题
9.10 通常错误和安全实践
9.11 编程练习
第10章 精选主题
10.1 bean
10.1.1 组件属性的动态编辑
10.1.2 属性改变事件
10.1.3 bean box
10.1.4 Enterprise Java Bean
10.2 安全和密码技术
10.2.1 基本安全结构
10.2.2 安全管理器
10.2.3 访问控制器
10.2.4 权限
10.2.5 安全策略文件
10.2.6 密码技术
10.2.7 消息摘要和数字签名
10.2.8 私人密钥系统和公共密钥系统
10.2.9 产生与验证数字签名
10.2.10 Java密码技术的扩展
10.3 反射
10.3.1 系列化检测
10.3.2 获取运行时的类信息
10.3.3 反射和bean
10.4 servlet和数据库
10.4.1 servlet的基本概念
10.4.2 动作标签
10.4.3 doGet和doPost回调
10.4.4 JDBC的基本概念
10.5 应用举例:数据库网上访问
10.5.1 问题
10.5.2 输入/输出举例
10.5.3 解决方法
10.5.4 Java实现
10.5.5 讨论
10.5.6 servlet Products
10.5.7 SalesServlet
10.6 Java补充材料
10.6.1 bean box工具
10.6.2 Java Servlet开发工具包
10.6.3 为访问数据库Northwind, 建立从JDBC到ODBC的桥
10.7 通常错误和安全实践
10.8 编程练习
附录A 奇数练习题的提示及解答