图书介绍
JAVA开发从入门到精通pdf电子书版本下载
- 扶松柏,陈小玉编著 著
- 出版社: 北京:人民邮电出版社
- ISBN:7115420275
- 出版时间:2016
- 标注页数:548页
- 文件大小:131MB
- 文件页数:573页
- 主题词:
PDF下载
下载说明
JAVA开发从入门到精通PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如 BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第1章 Java之印象 1
1.1 初步认识Java 2
1.1.1 都在谈论Java 2
1.1.2 Java的特点 2
1.1.3 Java中的一些名词解释 3
1.2 面向对象 4
1.2.1 什么是面向对象 4
1.2.2 Java的面向对象编程 4
1.2.3 JML统一建模语言 5
1.2.4 对象建模技术 7
1.2.5 面向对象分析 8
1.2.6 面向对象设计 10
1.2.7 Java的面向对象特性 12
1.3 技术解惑 13
1.3.1 卓越者的总结 13
1.3.2 对初学者的3条建议 14
1.3.3 理解Java的垃圾回收机制 14
第2章 第一段Java程序 15
2.1 搭建Java开发平台 16
2.1.1 安装JDK 16
2.1.2 配置开发环境 18
2.2 编写第一段Java程序 18
2.2.1 编写一段Java代码 18
2.2.2 编译Java程序 19
2.2.3 运行Java代码 19
2.3 使用IDE工具 20
2.3.1 最受欢迎的工具——Eclipse 20
2.3.2 官方推出的工具——Netbeans 23
2.3.3 商业工具——JBuilder 29
2.4 Java的运行机制 29
2.4.1 编译型/解释型运行机制 29
2.4.2 程序运行机制 29
2.5 技术解惑 30
2.5.1 遵循源文件命名规则 30
2.5.2 忽视系统文件的扩展名 30
2.5.3 环境变量的问题 31
2.5.4 大小写的问题 31
2.5.5 main()方法的问题 31
2.5.6 注意空格问题 32
2.5.7 到底用不用IDE工具 32
2.5.8 区分JRE和JDK 32
第3章 Java语法 33
3.1 量 34
3.1.1 常量 34
3.1.2 变量 35
3.2 数据类型 37
3.2.1 简单数据类型值的范围 37
3.2.2 字符型 38
3.2.3 整型 39
3.2.4 浮点型 39
3.2.5 布尔型 40
3.3 运算符 41
3.3.1 算术运算符 41
3.3.2 关系运算符和逻辑运算符 44
3.3.3 位运算符 45
3.3.4 条件运算符 46
3.3.5 赋值运算符 47
3.3.6 运算符的优先级 48
3.4 标识符和关键字 49
3.4.1 标识符 49
3.4.2 关键字 50
3.5 字符串 50
3.5.1 字符串的初始化 50
3.5.2 String类 51
3.5.3 StringBuffer类 53
3.6 类型转换 54
3.6.1 自动类型转换 54
3.6.2 强制转换 55
3.7 技术解惑 55
3.7.1 定义常量时的注意事项 55
3.7.2 char类型中单引号的意义 56
3.7.3 正无穷和负无穷的问题 56
3.7.4 移位运算符的限制 56
第4章 条件语句 58
4.1 if语句详解 59
4.1.1 if语句 59
4.1.2 if语句的延伸 60
4.1.3 多个条件判断的if语句 61
4.2 switch语句详解 62
4.2.1 switch语句的形式 62
4.2.2 无break的情况 63
4.2.3 case没有执行语句 64
4.2.4 default可以不在末尾 64
4.3 条件语句演练 65
4.3.1 正确使用switch语句 65
4.3.2 正确使用if语句 66
4.3.3 switch语句的执行顺序 67
4.4 技术解惑 68
4.4.1 if-else语句的意义 68
4.4.2 使用switch语句时的几个注意事项 68
4.4.3 何时用switch语句比较好 69
4.4.4 switch语句和if..else if语句的选择 69
第5章 循环语句 70
5.1 Java循环语句 71
5.1.1 for循环 71
5.1.2 while循环语句 73
5.1.3 do-while循环语句 75
5.2 跳转语句 76
5.2.1 break语句的应用 76
5.2.2 return语句的应用 78
5.2.3 continue跳转语句 79
5.3 技术解惑 79
5.3.1 使用for循环的技巧 79
5.3.2 跳转语句的选择技巧 80
第6章 特殊数据——数组 82
6.1 简单的一维数组 83
6.1.1 声明一维数组 83
6.1.2 创建一维数组 83
6.1.3 初始化一维数组 84
6.2 二维数组 85
6.2.1 声明二维数组 85
6.2.2 创建二维数组 85
6.2.3 初始化二维数组 86
6.3 三维数组 88
6.3.1 声明三维数组 88
6.3.2 创建三维数组的方法 88
6.3.3 初始化三维数组 88
6.4 操作数组 89
6.4.1 复制数组 89
6.4.2 比较数组 90
6.4.3 搜索数组中的元素 90
6.4.4 排序数组 91
6.4.5 填充数组 91
6.5 深入理解数组 93
6.5.1 动态数组 93
6.5.2 fcreach循环 94
6.5.3 数组的内理 94
6.6 技术解惑 96
6.6.1 数组内是同一类型的数据 96
6.6.2 动态初始化数组的规则 96
6.6.3 引用类型 96
6.6.4 数组必须初始化 97
第7章 Java的面向对象(上) 98
7.1 类 99
7.1.1 定义类 99
7.1.2 定义属性 99
7.1.3 定义方法 100
7.1.4 定义构造器 100
7.2 修饰符 101
7.2.1 public修饰符 101
7.2.2 private私有修饰符 101
7.2.3 protected保护修饰符 102
7.2.4 其他修饰符 103
7.3 方法详解 103
7.3.1 方法的所属性 104
7.3.2 传递方法参数 104
7.3.3 长度可变的方法 105
7.3.4 构造方法 106
7.3.5 递归方法 106
7.4 使用this 107
7.5 使用类和对象 108
7.5.1 创建和使用对象 108
7.5.2 使用静态变量和静态方法 109
7.6 抽象类和抽象方法 109
7.6.1 抽象类和抽象方法基础 110
7.6.2 抽象类必须有一个抽象方法 111
7.6.3 抽象类的作用 112
7.7 软件包 113
7.7.1 定义软件包 113
7.7.2 在Eclipse定义软件包 113
7.7.3 在程序里插入软件包 114
7.8 技术解惑 115
7.8.1 Java传递引用类型的实质 115
7.8.2 掌握this的好处 116
7.8.3 推出抽象方法的原因 117
7.8.4 什么时候用抽象类 117
7.8.5 static修饰的作用 118
第8章 Java的面向对象(中) 119
8.1 类的继承 120
8.1.1 父类和子类 120
8.1.2 调用父类的构造方法 121
8.1.3 访问父类的属性和方法 121
8.1.4 多重次继承 122
8.1.5 重写父类的方法 124
8.2 重写和重载 125
8.2.1 重写 125
8.2.2 重载 127
8.2.3 联合使用重写与重载 128
8.3 隐藏和封装 128
8.3.1 Java中的封装 128
8.3.2 使用访问控制符 129
8.3.3 Java中的包 130
8.3.4 import 132
8.4 接口 132
8.4.1 定义接口 133
8.4.2 接口里的量和方法 133
8.4.3 实现接口 134
8.4.4 引用接口 135
8.4.5 接口的继承 136
8.4.6 接口和抽象类 137
8.5 技术解惑 138
8.5.1 重写方法的两点注意事项 138
8.5.2 重写和重载的区别 138
8.5.3 举例理解类的意义 138
8.5.4 Java包的一些规则 138
8.5.5 探讨Package和import的机制 139
8.5.6 Java接口编程的机理 140
第9章 Java的面向对象(下) 141
9.1 构造器详解 142
9.1.1 初始化构造器 142
9.1.2 构造器重载 143
9.1.3 调用父类构造器 143
9.2 多态 144
9.2.1 何谓多态 144
9.2.2 演示Java中的多态 146
9.3 引用类型 147
9.3.1 4种引用类型 147
9.3.2 instanceof运算符 150
9.3.3 引用变量的强制类型转换 151
9.4 组合 152
9.5 初始化块 154
9.5.1 何谓初始化块 154
9.5.2 静态初始化块 155
9.6 包装类 156
9.7 深入详解final修饰符 157
9.7.1 用final修饰变量 158
9.7.2 final方法 159
9.8 内部类 160
9.8.1 何谓内部类 160
9.8.2 非静态内部类 160
9.8.3 成员内部类 162
9.8.4 局部内部类 162
9.8.5 静态内部类 163
9.8.6 匿名内部类 164
9.8.7 匿名类和内部类中的this 166
9.8.8 总结Java内部类 167
9.9 枚举类 170
9.9.1 枚举类的方法 170
9.9.2 手动实现枚举类 170
9.9.3 枚举类型 172
9.10 技术解惑 174
9.10.1 构造器和方法的区别 174
9.10.2 this在构造器中的妙用 175
9.10.3 分析子类构造器调用父类构造器的几种情况 175
9.10.4 要避免编译错误 175
9.10.5 强制类型转换不是万能的 176
9.10.6 继承和组合的选择 176
9.10.7 分析发生异常的原因 176
9.10.8 用final修饰基本类型和引用类型变量之间的区别 176
9.10.9 类的4种权限 177
9.10.10 手工实现枚举类的缺点 177
第10章 集合 178
10.1 Java集合概述 179
10.2 Collection接口和Iterator接口 180
10.2.1 基础知识介绍 180
10.2.2 Collection接口和Iterator接口 181
10.3 Set接口 182
10.3.1 基础知识介绍 182
10.3.2 使用HashSet 185
10.3.3 使用TreeSet类 186
10.3.4 使用EnumSet类 188
10.4 List接口 190
10.4.1 基本知识介绍 190
10.4.2 使用List接口和ListIterator接口 192
10.4.3 使用ArrayList和Vector类 193
10.5 Map接口 194
10.5.1 基本知识介绍 194
10.5.2 使用HashMap和Hashtable实现类 198
10.5.3 使用SortedMap接口和TreeMap实现类 199
10.5.4 使用WeakHashMap类 201
10.5.5 使用IdentityHashMap类 202
10.5.6 使用EnumMap类 202
10.6 Queue接口 203
10.6.1 LinkedList类 203
10.6.2 PriorityQueue类 205
10.7 集合工具类Collections 205
10.7.1 排序操作 205
10.7.2 查找和替换操作 206
10.8 其他集合类 207
10.8.1 Stack类 207
10.8.2 属性类Properties 208
10.9 技术解惑 211
10.9.1 Collection集合元素的改变问题 211
10.9.2 深入理解HashSet 211
10.9.3 使用类EnumSet时的注意事项 211
10.9.4 ArrayList和Vector的区别 212
10.9.5 TreeMap判断两个元素相等的标准 212
10.9.6 分析几种Map类的性能 212
10.9.7 LinkedList、ArrayList、Vector性能问题的研究 212
10.9.8 用swap()方法把集合中两个位置的内容进行交换 212
第11章 常用的类库 214
11.1 StringBuffer类 215
11.1.1 StringBuffer类基础 215
11.1.2 使用StringBuffer类 215
11.2 Runtime类 217
11.2.1 Runtime类 217
11.2.2 使用Runtime类 218
11.3 程序国际化 219
11.3.1 国际化基础 219
11.3.2 Locale类 219
11.3.3 ResourceBundle类 220
11.3.4 处理动态文本 221
11.3.5 使用类代替资源文件 222
11.4 System类 222
11.4.1 System类基础 223
11.4.2 垃圾对象的回收 223
11.5 Date类 224
11.5.1 使用Date类 224
11.5.2 使用Calendar类 225
11.5.3 使用DateFormat类 225
11.5.4 使用SimpleDateFormat类 226
11.6 Math类 227
11.7 Random类 228
11.8 NumberFormat类 229
11.9 BigInteger类 230
11.10 BigDecimal类 231
11.11 克隆对象 233
11.12 Arrays类 233
11.13 接口Comparable 234
11.13.1 Comparable接口基础 234
11.13.2 使用Comparable接口 235
11.13.3 使用Comparator接口 236
11.14 Observable类和Observer接口 237
11.15 正则表达式 239
11.15.1 正则表达式基础 239
11.15.2 使用Pattern类和Matcher类 240
11.15.3 String类和正则表达式 240
11.16 Timer类和TimerTask类 241
11.16.1 Timer类 241
11.16.2 TimerTask类 242
11.17 技术解惑 243
11.17.1 StringBuffer和String选择的异同 243
11.17.2 通过System类获取本机的全部环境属性 243
11.17.3 分析对象的生命周期 244
11.17.4 如果没有实现Comparable接口会出现异常 244
11.17.5 体验正则表达式的好处 245
第12章 泛型 246
12.1 泛型基础 247
12.1.1 泛型的好处 247
12.1.2 类型检查 247
12.1.3 使用泛型 249
12.2 泛型详解 249
12.2.1 定义泛型接口和类 250
12.2.2 派生子类 250
12.2.3 并不存在泛型类 251
12.3 类型通配符 252
12.3.1 设置类型通配符的上限 252
12.3.2 设置类型形参的上限 254
12.4 泛型方法 254
12.4.1 定义泛型方法 254
12.4.2 设置通配符下限 257
12.5 泛型接口 258
12.6 泛型继承 259
12.6.1 以泛型类为父类 259
12.6.2 以非泛型类为父类 260
12.7 运行时类型识别 260
12.8 强制类型转换 261
12.9 擦除 262
12.9.1 擦除基础 262
12.9.2 擦除带来的错误 264
12.10 技术解惑 265
12.10.1 彻底分析Java语言中泛型的本质 265
12.10.2 泛型方法和类型通配符的区别 265
12.10.3 泛型类的继承规则 266
12.10.4 类型擦除和泛型特性的联系 266
12.10.5 使用泛型应该遵循的原则和注意事项 267
第13章 异常处理 268
13.1 什么是异常 269
13.1.1 认识异常 269
13.1.2 Java的异常处理机制 269
13.1.3 Java提供的异常处理类 271
13.2 异常处理方式 272
13.2.1 使用try...catch处理异常 272
13.2.2 处理多个异常 273
13.2.3 将finally关键字使用在异常中 273
13.2.4 访问异常信息 275
13.3 抛出异常 276
13.3.1 使用throws抛出异常 276
13.3.2 使用throw抛出异常 277
13.4 自定义异常 278
13.4.1 Throwable类介绍 278
13.4.2 使用Throwable类自定义异常 280
13.5 分析Checked异常和Runtime异常的区别 281
13.5.1 机制上 282
13.5.2 逻辑上 282
13.6 异常处理的陋习 283
13.6.1 丢弃异常 283
13.6.2 不指定具体的异常 284
13.6.3 占用资源不释放 285
13.6.4 不说明异常的详细信息 285
13.6.5 过于庞大的try块 285
13.6.6 输出数据不完整 285
13.7 异常处理语句的规则 286
13.8 技术解惑 288
13.8.1 用嵌套异常处理是更合理的方法 288
13.8.2 区别throws关键字和throw关键字 288
13.8.3 异常类的继承关系 288
13.8.4 子类Error和Exception 288
第14章 I/O与文件处理 289
14.1 Java I/O简介 290
14.2 File类 290
14.2.1 File类中的方法 290
14.2.2 使用File类操作文件 291
14.3 RandomAccessFile类 293
14.3.1 RandomAccessFile类的常用方法 294
14.3.2 使用RandomAccess File类 294
14.4 字节流与字符流 295
14.4.1 节流类和字符流类 295
14.4.2 使用字节流 295
14.4.3 使用字符流 299
14.5 字节转换流 301
14.6 内存操作流 302
14.7 管道流 303
14.8 打印流 304
14.8.1 基础知识 304
14.8.2 使用打印流 305
14.9 System类 306
14.9.1 System.out 306
14.9.2 System.err 306
14.9.3 System.in 307
14.9.4 输入/输出重定向 308
14.10 BufferedReader类 309
14.10.1 BufferedReader类基础 309
14.10.2 使用BufferedReader类 310
14.11 Scanner类 311
14.11.1 Scanner类基础 311
14.11.2 使用Scanner类 312
14.12 数据操作流 314
14.12.1 DataOutputStream类 314
14.12.2 DataInputStream类 315
14.13 合并流 316
14.14 压缩流 317
14.14.1 ZIP压缩输入/输出流简介 317
14.14.2 ZipOutputStream类 317
14.14.3 ZipFile类 320
14.14.4 ZipInputStream类 321
14.15 回退流 321
14.16 字符编码 322
14.16.1 得到本机的编码显示 323
14.16.2 产生乱码 323
14.17 对象序列化 324
14.17.1 Serializable接口 324
14.17.2 对象输出流ObjectOutputStream 324
14.17.3 对象输入流ObjectInputStream 325
14.17.4 Externalizable接口 326
14.17.5 关键字transient 327
14.17.6 序列化一组对象 328
14.18 新增的I/O 329
14.18.1 新I/O概述 329
14.18.2 使用Buffer 330
14.18.3 使用Channel 332
14.19 技术解惑 334
14.19.1 使用File.separator表示分隔符 334
14.19.2 综合演练创建和删除文件的操作 334
14.19.3 File类的复杂用法 335
14.19.4 字节流和字符流的区别 335
14.19.5 System.err和System.out选择 337
14.19.6 使用I/O实现一个简单的菜单效果 337
14.19.7 对象序列化和对象反序列化操作时的版本兼容性问题 339
14.19.8 不能让所有的类都实现Serializble接口 339
第15章 AWT的奇幻世界 340
15.1 GUI和AWT 341
15.2 容器 344
15.2.1 容器基础 344
15.2.2 容器中的常用组件 345
15.3 布局管理器 347
15.3.1 布局利器FlowLayout 347
15.3.2 布局利器BorderLayout 348
15.3.3 布局利器GridLayout 350
15.3.4 GridBagLayout布局管理器 351
15.3.5 布局利器CardLayout 356
15.3.6 BoxLayout布局管理器 358
15.3.7 布局利器Null 360
15.4 AWT的常用组件 361
15.4.1 AWT中的组件 361
15.4.2 AWT中的对话框 363
15.5 事件处理 365
15.5.1 Java的事件模型 365
15.5.2 事件和事件监听器 366
15.5.3 事件适配器 371
15.6 AWT的菜单 372
15.6.1 菜单条、菜单和菜单项 372
15.6.2 右键菜单 374
15.7 绘图 376
15.7.1 类Component中的绘图方法 376
15.7.2 Graphics类 376
15.8 位图操作 378
15.8.1 Image类和BufferedImage类 378
15.8.2 输入/输出位图 380
15.9 技术解惑 382
15.9.1 使用绝对定位 382
15.9.2 对事件处理模型的简化理解 382
15.9.3 使用AWT开发动画 383
15.9.4 图片缩放在现实中的意义 383
15.9.5 AWT和Swing是窗体编程的两个主角 383
15.9.6 AWT中的菜单组件不能创建图标菜单 383
第16章 Swing详解 384
16.1 Swing基础 385
16.2 Swing的组件 386
16.2.1 Swing组件的层次结构 386
16.2.2 Swing实现AWT组件 387
16.2.3 Jframe 、 JscrollPane和边框 391
16.2.4 JTbolBar 393
16.2.5 JColorChooser和JFileChooser 395
16.2.6 JOptionPane 397
16.2.7 JSplitPane 402
16.2.8 JTabbedPane 405
16.3 拖放处理 407
16.3.1 拖放处理基础 407
16.3.2 Swing中的拖放处理 407
16.4 实现进度条效果——JProgressBar、ProgressMonitor和BoundedRangeModel 409
16.4.1 创建一个进度条 409
16.4.2 使用ProgressMonitor创建进度条对话框 411
16.5 JSlider和BoundedRangeModel 412
16.6 JList和JComboBox 415
16.6.1 使用JList和JComboBox的构造器创建列表框 415
16.6.2 使用ListCellRenderer 418
16.7 JTree和TreeModel 419
16.7.1 创建树 420
16.7.2 拖动、编辑节点 421
16.8 技术解惑 425
16.8.1 贯穿Java开发的MVC模式 425
16.8.2 Swing胜过AWT的优势 425
第17章 数据库编程 426
17.1 SQL基础 427
17.1.1 数据定义 427
17.1.2 数据操纵 428
17.1.3 视图 430
17.1.4 SQL高级操作 430
17.2 初识JDBC 431
17.2.1 JDBC API 432
17.2.2 JDBC驱动类型 432
17.2.3 JDBC的常用接口和类 433
17.2.4 JDBC编程步骤 434
17.3 常用的几种数据库 437
17.3.1 Access数据库 437
17.3.2 SQL Server数据库 437
17.3.3 MySQL数据库 440
17.4 执行SQL语句的方式 443
17.4.1 使用executeUpdate 443
17.4.2 使用execute方法 444
17.5 事务处理 446
17.5.1 JDBC中的事务控制 446
17.5.2 JDBC事务控制的流程 447
17.6 存储过程 450
17.6.1 存储过程基础 450
17.6.2 创建存储过程 450
17.6.3 调用创建存储过程 452
17.7 技术解惑 453
17.7.1 池子的功效 453
17.7.2 服务器自带连接池的问题 454
17.7.3 连接池模型 455
17.7.4 数据模型、概念模型和关系数据模型 455
17.7.5 数据库系统的结构 456
第18章 网络与通信编程 457
18.1 Java中的网络包 458
18.1.1 InetAddress类详解 458
18.1.2 URLDecoder类和URLEncoder类详解 458
18.1.3 URL和URLConnection 459
18.1.4 实践演练 460
18.2 TCP编程 463
18.2.1 使用ServletSocket 463
18.2.2 使用Socket 464
18.2.3 TCP中的多线程 465
18.2.4 实现非阻塞Socket通信 468
18.3 UDP编程 472
18.3.1 使用DatagramSocket 472
18.3.2 使用MulticastSocket 475
18.4 代理服务器 478
18.4.1 什么是代理服务器 478
18.4.2 使用Proxy创建连接 479
18.4.3 使用ProxySelector选择代理服务器 480
18.4.4 服务器代理实例 482
18.5 技术解惑 485
18.5.1 使用异常处理完善程序 485
18.5.2 使用ServerSocketChannel的麻烦之处 485
18.5.3 体会烦琐的DatagramPacket 486
18.5.4 MulticastSocket类的重要意义 486
18.5.5 继承ProxySelector时需要做的工作 486
18.5.6 代理服务无止境 486
第19章 多线程 487
19.1 线程基础 488
19.1.1 线程概述 488
19.1.2 线程带来的意义 488
19.1.3 Java的线程模型 489
19.2 创建线程 490
19.2.1 使用Thread类创建线程 490
19.2.2 使用Runnable接口创建线程 492
19.3 线程的生命周期 493
19.3.1 创建并运行线程 494
19.3.2 挂起和唤醒线程 494
19.3.3 终止线程的3种方法 495
19.3.4 线程阻塞 497
19.3.5 线程死亡 498
19.4 控制线程 499
19.4.1 使用join方法 499
19.4.2 慎重使用volatile关键字 500
19.4.3 后台、让步和睡眠 501
19.5 线程传递数据 502
19.5.1 向线程传递数据的3种方法 502
19.5.2 从线程返回数据的两种方法 504
19.6 数据同步 505
19.6.1 使用Synchronized关键字同步类方法 509
19.6.2 使用Synchronized块同步变量 511
19.6.3 同步锁 512
19.7 总结多线程编程的常见缺陷及其产生的原因 514
19.7.1 死锁问题 515
19.7.2 多线程编程的常见陷阱 517
19.8 技术解惑 521
19.8.1 线程和函数的关系 521
19.8.2 在run方法中使用线程名时带来的问题 521
19.8.3 继承Thread类或实现Runnable接口方式的比较 521
19.8.4 start和run的区别 521
19.8.5 使用sleep()方法的注意事项 521
19.8.6 线程的优先级 522
19.8.7 如何确定发生死锁 522
19.8.8 关键字synchronized和volatile的区别 522
19.8.9 sleep()方法和yield()方法的区别 523
19.8.10 分析Swing的多线程死锁问题 523
第20章 整合开发业快信系统 524
20.1 一个项目 525
20.1.1 背景分析 525
20.1.2 需求分析 525
20.1.3 核心技术分析 525
20.2 系统设计 525
20.2.1 系统目标 525
20.2.2 系统功能结构 525
20.3 搭建开发环境 526
20.3.1 建立短信猫开发环境 526
20.3.2 设计数据库 527
20.3.3 设计表 528
20.4 规划系统文件 530
20.5 具体编码 531
20.5.1 编写公用模块代码 531
20.5.2 设计主页 534
20.5.3 名片夹管理模块 535
20.5.4 收发短信模块 540
20.5.5 邮件群发模块 543
20.6 分析Java Mail组件 544
20.6.1 Java Mail简介 544
20.6.2 邮件协议简介 545
20.6.3 邮件发送 545
20.6.4 收取邮件 547
20.7 项目调试 547