写给未来的程序员 1
前言 1
第一篇 Java语言基础 1
第1章 Java语言概述 1
1.1 Java语言的特点 1
1.1.1 Java语言与C、C++语言的区别 1
1.1.2 Java面向对象的特性和多态性 2
1.1.3 Java的平台无关性 3
1.1.4 Java分布式应用和多线程的特点 4
1.1.5 Java程序的可靠性和安全性 5
1.1.6 Java小程序和应用程序 5
1.2 Java的不同版本 6
1.3 如何才能学好Java 6
1.4 什么是面向对象的程序设计 6
1.4.1 什么是面向对象 7
1.4.2 模型分析:造房子 7
1.4.3 设计面向对象程序的思路 8
1.4.4 设计面向对象程序的技巧 8
1.4.5 面向对象设计与面向过程设计的不同 8
1.5 常见疑难解答 10
1.5.1 初学者如何选择Java参考书 10
1.5.2 Java应用在哪些方面 10
第2章 最简单的Java程序 11
2.1 Java程序的开发流程 11
2.2 开发工具的选择 11
2.2.1 开发工具的种类 12
2.2.2 开发工具的安装 13
2.2.3 开发工具的使用 14
2.3 Java编程环境 16
2.3.1 J2SE的下载和安装 16
2.3.2 如何设置ClassPath变量 17
2.3.3 如何设置Path变量 17
2.3.4 如何测试环境变量 17
2.4 一个最简单的Java程序 18
2.4.1 编写程序代码 18
2.4.2 分析程序代码 19
2.5 常见疑难解答 19
2.5.1 Javac xxx.java顺利通过,但Java xxx显示“NoClassDefFoundError?” 19
2.5.2 导致错误“Exception in thread main java.lang.NoSuchMethodError:main”的原因 19
第3章 Java语言中的数据与运算符 20
3.1 数制 20
3.1.1 基本概念 20
3.1.2 Java语言中的数制表现形式 20
3.2 数据类型 21
3.2.1 整型 21
3.2.2 字符型 23
2.2.3 浮点型 24
2.2.4 布尔型 25
3.3 变量 26
3.3.1 变量的声明 26
3.3.2 变量的含义 26
3.3.3 变量的分类 26
3.3.4 变量的初始化 28
3.4 常量 30
3.5 运算符 30
3.5.1 算术运算符 31
3.5.2 关系运算符 34
3.5.3 逻辑运算符 35
3.5.4 位运算符 36
3.5.5 移位运算符 38
3.5.6 赋值运算符 39
3.5.7 三元运算符 40
3.5.8 逗号运算符 41
3.5.9 转型运算符 41
3.5.10 运算符的优先级别 41
3.6 常见疑难解答 42
3.6.1 如何将十进制转换成二进制 42
3.6.2 转型运算符会引起精度问题,为什么还要使用它 42
第4章 程序设计中的流程控制 43
4.1 编程风格 43
4.2 条件语句 44
4.2.1 条件语句的种类 44
4.2.2 如何使用好条件语句 49
4.3 循环语句 49
4.3.1 for语句 50
4.3.2 while 语句 52
4.3.3 do/while语句 55
4.4 中断控制语句与继续语句 56
4.4.1 中断控制语句 56
4.4.2 继续语句 58
4.5 分支语句 59
4.6 返回语句 61
4.7 常见疑难解答 62
4.7.1 普通循环是使用for语句还是while语句 62
4.7.2 一般的程序可否用分支语句来代替条件语句 62
第5章 数组 63
5.1 数组概述 63
5.1.1 实例的引入 63
5.1.2 数组的概念 63
5.1.3 数组的简单实例 64
5.2 基本类型的数组 64
5.2.1 基本类型数组的声明 64
5.2.2 基本类型数组的初始化 65
5.3 由实例引出不同数组及其使用 66
5.3.1 由实例引出一维数组及其使用 66
5.3.2 由实例引出二维数组及其使用 68
5.4 数组的综合实例 69
5.5 常见疑难解答 72
5.5.1 声明数组需要注意什么 72
5.5.2 数组在平时的程序代码中使用是否频繁 72
第6章 字符串的处理 73
6.1 字符串的基本概念 73
6.2 字符串处理的类库 74
6.2.1 字符串的赋值 74
6.2.2 字符串处理类String 74
6.2.3 字符串的处理方法 77
6.2.4 缓冲字符串处理类StringBuffer 83
6.2.5 缓冲字符串的处理方法 85
6.2.6 缓冲字符串类的特点 88
6.3 用实例演示如何处理字符串 88
6.4 格式化输出 89
6.5 常见疑难解答 90
6.5.1 equals和==的区别 90
6.5.2 String类为何被定义成final约束 90
6.5.3 如何将char类型转换成int类型以及整数int转换成字符串 90
第二篇 Java语言特色 91
第7章 类 91
7.1 JDK 5和JDK 6的特性 91
7.1.1 什么是JDK 91
7.1.2 JDK 5的特点 91
7.1.3 JDK 6的特点 92
7.1.4 JDK 5和JDK 6的比较 92
7.2 用比较法阐述类的概念 92
7.3 Java中已有的类 92
7.3.1 数学运算处理类Math 93
7.3.2 测试时间和日期的类Date 94
7.3.3 测试日历的类GregorianCalendar 96
7.3.4 日历处理的实例解析 97
7.4 用实例分析一个类的流程 99
7.4.1 如何在实际程序设计中提取一个类 99
7.4.2 设置器和访问器 106
7.4.3 小结 107
7.5 常见疑难解答 107
7.5.1 类在程序语言中起到了什么作用 107
7.5.2 设置器和访问器的作用是什么 107
第8章 对象和包 108
8.1 对象 108
8.1.1 什么是对象 108
8.1.2 操作对象 109
8.1.3 初始化对象 109
8.2 对象家族中的成员 110
8.2.1 对象的成员方法 110
8.2.2 对象的成员变量 114
8.3 对象中访问控制符的重要性 114
8.3.1 什么是访问控制符 115
8.3.2 使用访问控制符及其重要性 117
8.4 重载 118
8.4.1 什么是重载 118
8.4.2 用实例来说明重载的意义 119
8.5 包 120
8.5.1 什么是包 120
8.5.2 如何实现包 120
8.5.3 什么是类路径和默认包 121
8.5.4 包的作用域 122
8.6 注释及嵌入文档 122
8.6.1 如何添加注释 122
8.6.2 类、方法、字段等注释的方法 122
8.7 常见疑难解答 123
8.7.1 包在实际编程中究竟有什么作用 123
8.7.2 访问控制符在实际开发中有什么作用 123
第9章 继承 124
9.1 继承概述 124
9.1.1 继承的引出 124
9.1.2 继承的概念 124
9.1.3 Java中的单继承性 125
9.2 如何实现继承 125
9.3 构造器的使用 127
9.3.1 什么是构造器 127
9.3.2 构造器的初始化 128
9.3.3 替代父类和本身的方式 129
9.4 继承中的覆盖现象 130
9.5 类之间的关系 130
9.5.1 依赖 131
9.5.2 聚合 131
8.5.3 继承 131
9.6 继承层次图 131
9.7 如何设计好继承 131
9.8 常见疑难解答 132
9.8.1 如何处理一个类继承多个父类的情况 132
9.8.2 如果出现了带参数的构造器,可否不在代码中写出来 132
第10章 多态 133
10.1 多态的产生 133
10.2 多态概述 134
10.2.1 使用多态编写程序 135
10.2.2 覆盖的应用 136
10.2.3 重载与覆盖的实例对比 137
10.2.4 覆盖的多态性 138
10.2.5 传值引用和传址引用 139
10.3 通过实例熟悉多态的用法 140
10.4 绑定 143
10.4.1 静态绑定 143
10.4.2 动态绑定 143
10.5 超类 144
10.5.1 什么是超类 144
10.5.2 equals方法的使用 145
10.5.3 通用编程 145
10.6 常见疑难解答 145
10.6.1 动态编译和静态编译是什么 145
10.6.2 绑定与多态的联系是什么 145
第11章 接口与内部类 146
11.1 接口 146
11.1.1 接口的引入 146
11.1.2 接口的概念 146
11.1.3 接口的声明 146
11.1.4 接口的实现 147
11.1.5 接口的多重实现 152
11.1.6 接口的属性 157
11.1.7 接口的继承 158
11.1.8 接口的意义 163
11.2 内部类 163
11.2.1 使用内部类来访问对象 163
11.2.2 局部内部类 166
11.2.3 静态内部类 168
11.2.4 匿名内部类 169
11.3 常见疑难解答 169
11.3.1 如何在程序中使用匿名类 169
11.3.2 接口与继承有什么区别 169
第12章 抽象 170
12.1 抽象概述 170
12.1.1 什么是抽象 170
12.1.2 抽象的综合实例 171
12.2 抽象类 173
12.2.1 什么是抽象类 173
12.2.2 抽象类的实例 174
12.3 抽象与接口的区别 179
12.4 常见疑难解答 179
12.4.1 抽象类和接口在概念上有什么区别 179
12.4.2 如何从设计理念上看待抽象类和接口 180
第13章 线程 183
13.1 线程概述 183
13.1.1 进程及其使用环境 183
13.1.2 线程及其使用环境 183
13.2 线程的创建 183
13.2.1 如何创建线程 183
13.2.2 通过实例熟悉线程的创建 187
13.3 线程的使用 191
13.3.1 线程的优先级 191
13.3.2 线程的休眠与唤醒 193
13.3.3 线程让步 197
13.3.4 线程同步 199
13.3.5 同步块 201
13.3.6 同步化方法 204
13.4 实例分析 205
13.4.1 生产者与消费者的模拟程序设计及分析 205
13.4.2 多消费者的模拟程序设计及分析 208
13.4.3 多生产者的模拟程序设计及分析 211
13.5 常见疑难解答 217
13.5.1 线程与线程之间怎么通信 217
13.5.2 什么是进程的死锁和饥饿 217
13.5.3 何时会涉及线程程序 218
第14章 封装 219
14.1 封装概述 219
14.2 在程序设计中为什么要用封装 222
14.3 结合实例讲述如何设计封装 224
14.4 在程序设计中设计封装的注意点 229
14.5 常见疑难解答 230
14.5.1 封装在现实开发中给程序员带来什么启发 230
14.5.2 封装在实际开发中的应用有哪些 230
第三篇 Java程序设计数据处理 231
第15章 Java输入与输出 231
15.1 输入与输出的重要性 231
15.2 重要的输入/输出类 231
15.3 文件或目录信息的处理类File 232
15.3.1 File类常用的操作方法 232
15.3.2 文件处理方法的应用 233
15.3.3 文件和目录的完全处理 233
15.4 读取数据的媒介之一—流 235
15.4.1 什么是流 236
15.4.2 什么是输入流和输出流 236
15.4.3 字节输入流及输出流 236
15.4.4 使用文件字节输入流读取文件 236
15.4.5 使用文件字节输出流输出文件 238
15.5 多字节数据读取类Filter 239
15.5.1 Filter类的概念 239
15.5.2 处理字节类型外的文件流 240
15.5.3 字节类型外的文件输出 240
15.5.4 增强的多字节输出流DataOutput 241
15.5.5 增强的多字节输入流DataInput 242
15.6 读取数据的媒介之二—字符流 245
15.6.1 字符流的概念 245
15.6.2 抽象字符输入流Reader类的使用 245
15.6.3 抽象字符输出流Writer类的使用 246
15.6.4 读取带缓存的BufferedReader字符流 246
15.6.5 带缓存的字符输出流BufferedWriter类 247
15.6.6 字符输入流FileReader类和FileWriter类的使用 250
15.6.7 用标准输入流System.in来获取数据 252
15.6.8 打印输入流PrintWriter类与PrintStream类的区别 252
15.6.9 随机文件访问类RandomAccessFile的使用 253
15.7 利用对象序列化控制输入/输出 256
15.7.1 什么是对象序列化 256
15.7.2 基本数据和对象数据读写ObjectInput接口与ObjectOutput接口 256
15.7.3 对象序列化处理类ObjectOutputStream的使用 257
15.7.4 对象序列化处理类ObjectInputStream的使用 257
15.8 常见疑难解答 258
15.8.1 字节流与字符流的主要区别 258
15.8.2 输入流与输出流如何区分,各有什么作用 259
15.8.3 什么是管道流 259
第16章 异常及内存管理 260
16.1 异常概述 260
16.1.1 异常的分类 260
16.1.2 异常的声明 260
16.1.3 异常的抛出 262
16.2 异常的捕获 264
16.2.1 捕获多个异常 264
16.2.2 自定义异常 266
16.3 内存的管理和回收 267
16.4 常见疑难解答 268
16.4.1 为什么要声明方法抛出异常 268
16.4.2 为什么抛出的异常一定是已检查异常 269
第17章 Java中对数据的处理 270
17.1 将基本数据类型转换为对象 270
17.1.1 为什么要将基本数据转换为对象 270
17.1.2 wrapper类的构造函数 271
17.1.3 wrapper类的常用函数 271
17.2 处理随机性的数据 273
17.2.1 Random类的使用场合 274
17.2.2 通过实例熟悉Random类的常用方法 274
17.3 对数据进行排列和整理 277
17.3.1 Arrays类的常用方法 277
17.3.2 实例分析 280
17.4 常见疑难解答 283
17.4.1 Random类函数在现实生活中有什么用处 283
17.4.2 数据的排列和整理数据在实际应用中有什么用处 283
第四篇 Java数据结构 285
第18章 数据结构的接口 285
18.1 数据结构接口及实现 285
18.1.1 数据结构接口的实质 285
18.1.2 用实例来熟悉数据结构接口的实现 286
18.2 Collection集合接口与Iterator迭代器接口 287
18.2.1 Collection集合接口 287
18.2.2 Map映射接口 288
18.2.3 Iterator迭代器接口 289
18.2.4 通过实例来认识迭代器的实现 290
18.3 常见疑难解答 292
18.3.1 Collection集合接口和Collections集合类的区别 292
18.3.2 ArrayList数据列表类和Vector存储类的区别 293
18.3.3 HashMap哈希映射和Hashtable哈希表的区别 293
18.3.4 数据结构的种类有哪些 293
18.3.5 List链表接口和Set接口的区别 293
第19章 Java中的数据结构 294
19.1 链表 294
19.1.1 什么是链表 294
19.1.2 用程序代码段实现对链表的添加 295
19.1.3 用程序代码段实现对链表的删除 296
19.2 数组列表类 301
19.2.1 什么是数组列表类 301
19.2.2 通过实例熟悉数组列表如何存储数据 301
19.3 散列表 306
19.3.1 什么是散列表 306
19.3.2 通过实例熟悉散列表如何存储数据 306
19.4 散列集 310
19.4.1 什么是散列集 311
19.4.2 通过实例熟悉散列集如何存储数据 311
19.5 树集 316
19.5.1 什么是树集 317
19.5.2 通过实例熟悉树集如何存储数据 317
19.6 映像 321
19.6.1 什么是映像 321
19.6.2 通过实例熟悉映像如何存储数据 321
19.7 枚举 325
19.8 属性集 325
19.9 常见疑难解答 326
19.9.1 哪些是线程安全的数据结构 326
19.9.2 Vector是什么样的数据结构 327
第20章 XML基础 328
20.1 XML的产生及与HTML的比较 328
20.2 XML的编辑工具 329
20.3 XML文档 329
20.3.1 XML的声明 330
20.3.2 文档类型的声明 330
20.3.3 元素 331
20.3.4 注释 332
20.3.5 处理指令 332
20.3.6 空白处理 333
20.3.7 行尾处理 333
20.3.8 语言标识 333
20.3.9 一个简单的XML实例 333
20.4 格式良好的XML 334
20.5 什么是DTD 334
20.5.1 在XML文档中加入DTD 334
20.5.2 DTD的结构 335
20.5.3 几个简单的DTD实例 337
20.6 有效的XML 339
20.7 XML处理器/解析器 339
20.8 常见疑难解答 339
20.8.1 XML与HTML的区别 339
20.8.2 XML有哪些显示数据的方式 340
第五篇 Java高级应用 341
第21章 JDBC及其应用 341
21.1 数据库基础知识 341
21.1.1 什么是数据库 341
21.1.2 数据库的分类及功能 342
21.1.3 关系数据库的设计 342
21.1.4 数据库设计技巧 343
21.2 JDBC概述 344
21.2.1 什么是JDBC 344
21.2.2 JDBC驱动程序的分类 344
21.2.3 JDBC的用处 345
21.3 SQL数据库技术 345
21.3.1 什么是SQL数据库 345
21.3.2 如何操作SQL数据库 346
21.3.3 安装SQL Server 2005 347
21.3.4 使用SQL创建数据库 351
21.4 JDBC基本编程 352
21.4.1 如何建立数据库 352
21.4.2 如何操作数据库 354
21.4.3 高级SQL类型 360
21.5 事务处理 360
21.5.1 什么是事务处理 360
21.5.2 事务处理的过程演练 361
21.6 预查询 363
21.7 常见疑难解答 364
21.7.1 操作数据库的具体步骤是什么 364
21.7.2 数据库中的视图、图表、默认值、规则、触发器、存储过程的意义 365
第22章 图形编程基础 366
22.1 图形编程的概念 366
22.1.1 通过实例认识图形编程 366
22.1.2 组件类 367
22.1.3 布局管理器 369
22.1.4 按钮组件的设计 372
22.1.5 标签组件的设计 374
22.1.6 单行文本框组件的设计 375
22.1.7 多行文本框组件的设计 376
22.1.8 列表框组件的设计 378
22.1.9 下拉列表框组件的设计 379
22.1.10 复选框组件的设计 380
22.1.11 普通对话框的设计 383
22.1.12 文件对话框的设计 384
22.1.13 菜单组件的设计 385
22.2 2D图形程序设计 389
22.2.1 如何使用Graphics类作图 389
22.2.2 点的设计 389
22.2.3 直线的设计 389
22.2.4 矩形的设计 389
22.2.5 椭圆的设计 389
22.3 色彩与字体 390
22.3.1 如何使用面板配色 390
22.3.2 如何调节字体 390
22.3.3 如何绘制图形 390
22.3.4 paintComponent方法的简单介绍 391
22.3.5 使用Java2D API来绘制和填充图形 391
22.3.6 如何使用Font类设置字体样式 391
22.3.7 如何使用FontMetrics类设置字体的属性值 392
22.3.8 如何使用Color类设置颜色 393
22.3.9 使用线条绘制图形 393
22.3.10 绘图模式的介绍 394
22.3.11 使用Toolkit对象获取图像文件 394
22.4 事件模型与事件处理 395
22.4.1 事件处理基础 395
22.4.2 通过实例熟悉动作事件类的用法 395
22.4.3 通过实例熟悉窗口事件类的用法 396
22.4.4 通过实例熟悉文本事件类的用法 398
22.4.5 通过实例熟悉适配器类的用法 399
22.5 综合实例 401
22.6 常见疑难解答 402
22.6.1 事件处理还有没有其他的方法 402
22.6.2 有没有其他的方法代替Awt的布局管理器 402
第23章 Swing组件与布局管理器 403
23.1 什么是Swing编程 403
23.2 MVC设计模式基础 403
23.3 简单框架设计及实例 403
23.3.1 创建一个空白的框架 403
23.3.2 创建框架的其他工作 404
23.4 简单图形按钮控件的设计及实例 406
23.4.1 Swing中的按钮控件 406
23.4.2 按钮的模型 406
23.4.3 添加按钮 407
23.4.4 添加单选按钮 408
23.4.5 添加复选按钮 410
23.4.6 添加单击按钮 411
23.5 简单文本输入组件的设计及实例 412
23.5.1 文本域的设计 412
23.5.2 密码域的设计 413
23.5.3 文本区的设计 414
23.6 标签组件的设计及实例 415
23.7 选择组件的设计及实例 416
23.8 菜单组件的设计及实例 417
23.9 对话框的种类及用法 418
23.10 复杂布局管理器的种类及用法 419
23.10.1 箱式布局的设计 419
23.10.2 网格组布局的设计 421
23.11 通过实例熟悉Swing编程 422
23.12 常见疑难解答 425
23.12.1 如何处理菜单的启用和禁用功能 425
23.12.2 如何编写快捷键的程序 425
第24章 Eclipse的使用 426
24.1 Eclipse简介 426
24.2 Eclipse界面介绍 427
24.3 使用Eclipse进行开发 428
24.3.1 新建一个Java工程 428
24.3.2 新建一个Java的类 429
24.3.3 编写代码 430
24.4 常见疑难解答 431
24.4.1 Eclipse和UltraEdit两个开发工具的优缺点 431
24.4.2 什么是IDE环境 432
24.4.3 Eclipse与JBuilder两个开发工具哪个好 432
24.4.4 有关Eclipse的编译报错的原因 432
第六篇 Java程序设计网络应用 433
第25章 Applet设计 433
25.1 Applet的基本概念及生命周期 433
25.2 Applet的多媒体处理 435
25.2.1 声音处理 435
25.2.2 图像处理 436
25.3 浏览器与Applet的设计 437
25.3.1 将Applet嵌入浏览器 437
25.3.2 使用Applet类编程 438
25.3.3 使用Applet控制浏览器 439
25.4 Applet的安全 439
25.5 一个Applet综合实例分析 440
25.6 常见疑难解答 442
25.6.1 浏览器如何运行Applet 442
25.6.2 为什么Applet无法在IE中显示 442
第26章 网络编程基础 444
26.1 网络基础知识 444
26.2 TCP与UDP 444
26.3 端口与套接字 445
26.4 TCP程序设计基础 445
26.4.1 如何设计TCP的程序 445
26.4.2 一个简单的例子 448
26.5 UDP程序设计基础 449
26.5.1 如何设计UDP的程序 449
26.5.2 一个简单的例子 449
26.6 如何设计网络程序 450
26.6.1 单向通信综合实例 450
26.6.2 双向通信综合实例 453
26.7 常见疑难解答 457
26.7.1 TCP和UDP的区别 457
26.7.2 什么是TCP/IP协议,分为几层,协议有什么功能 458
第七篇 Java程序设计综合实例 461
第27章 Java程序综合实例 461
27.1 实例一:学校管理系统 461
27.2 需求分析 461
27.3 登录界面的设计 462
27.3.1 登陆界面的分析 462
27.3.2 登陆界面的代码实现 462
27.3.3 登陆界面的实现 464
27.4 主界面的设计 465
27.4.1 主界面类的分析 465
27.4.2 主菜单界面类的代码 465
27.4.3 主菜单界面类的实现 474
27.5 数据库系统的设计 474
27.5.1 数据库的分析 474
27.5.2 数据库中表的建立 475
27.5.3 数据库中的代码段 478
27.6 学生信息系统界面的设计 479
27.6.1 学生类的设计 479
27.6.2 储存类的设计 481
27.6.3 学生信息界面的设计 483
27.7 教师信息系统界面的设计 491
27.7.1 教师类的设计 491
27.7.2 储存类的设计 493
27.7.3 教师信息界面的设计 495
27.8 领导信息系统界面的设计 503
27.8.1 领导类的设计 503
27.8.2 储存类的设计 505
27.8.3 领导信息界面的设计 505
27.9 实例二:网络聊天程序 514