编辑推荐
本书的特色是实现了入门知识、实例演示、范例演练、技术解惑、综合实战5大部分内容的融合,让读者看得懂、用得上、学得会。一本书的容量,讲解了入门类、范例类和项目实战类三类图书的内容。
丰富的配套资源 学习更高效459个实例,更多的实践演练机会781分钟视频讲解,降低学习难度306个拓展实例,真正地举一反三107个技术解惑,破解学习难点
“技术讲解”→范例演练”→“技术解惑”贯穿全书,全面掌握Java语言开发
技术讲解:通过153个实例,循序渐进地讲解了Java开发的各个知识点。范例演练:306个拓展范例和1个综合案例,使读者真正具有项目实战能力。技术解惑:把容易混淆的概念单独讲解和剖析,帮助读者绕过学习中的陷阱。
群 网站论坛实现教学互动,形成互帮互学的朋友圈网站论坛:读者答疑/学习辅导/PPT资源下载读者群:疑惑快速解答/和作者直接交流
内容简介
本书由浅入深地详细讲解了Java的开发技术,并通过具体实例的实现过程演练了各个知识点的具体使用流程。本书共20章,第1~2章讲解了Java技术的基础知识,包括Java印象和首段Java程序;第3~9章分别讲解了Java语法、条件语句、循环语句、数组、面向对象等知识,这些内容都是Java开发技术的核心知识;第10~14章分别讲解了集合、类库、泛型、异常处理、I/O和文件处理的基本知识,这些内容是Java开发技术的重点和难点;第15~19章是典型应用内容,分别讲解了数据库编程、网络与通信编程、多线程等内容;第20章通过一个综合实例的实现过程,介绍了Java技术在综合项目中的使用流程。本书内容循序渐进,以“技术解惑”和“范例演练”贯穿全书,引领读者全面掌握Java语言。本书不但适用于Java的初学者,也适用于有一定Java基础的读者,还可以作为大专院校相关专业的师生学习用书和培训学校的教材。
作者简介
上海大学计算机科学技术学院硕士,通信工程博士,精通Java、C语言、C 程序开发,擅长底层技术和应用程序的结合。具有丰富的Java开发经验和编程心得。
目录
- 第1章 Java之印象 1
- (视频总计19分钟,技术解惑3个)
- 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 UML统一建模语言 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
- (视频总计20分钟,技术解惑8个)
- 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
- (视频总计72分钟,实例21个,拓展实例42个,技术解惑4个)
- 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
- (视频总计28分钟,实例6个,拓展实例12个,技术解惑4个)
- 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
- (视频总计24分钟,实例8个,拓展实例16个,技术解惑2个)
- 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
- (视频总计33分钟,实例8个,拓展实例16个,技术解惑4个)
- 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 foreach循环 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
- (视频总计35分钟,实例7个,拓展实例14个,技术解惑5个)
- 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
- (视频总计31分钟,实例7个,拓展实例14个,技术解惑6个)
- 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
- (视频总计39分钟,实例6个,拓展实例12个,技术解惑10个)
- 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
- (视频总计51分钟,实例8个,拓展实例16个,技术解惑8个)
- 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
- (视频总计54分钟,实例15个,拓展实例30个,技术解惑5个)
- 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 使用SimpleDate
- Format类 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
- (视频总计28分钟,实例6个,拓展实例12个,技术解惑5个)
- 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
- (视频总计24分钟,实例8个,拓展实例16个,技术解惑4个)
- 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
- (视频总计63分钟,实例15个,拓展实例30个,技术解惑8个)
- 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
- (视频总计49分钟,实例10个,拓展实例20个,技术解惑6个)
- 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
- (视频总计66分钟,实例14个,拓展实例28个,技术解惑2个)
- 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 JToolBar 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
- (视频总计26分钟,实例2个,拓展实例4个,技术解惑5个)
- 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
- (视频总计45分钟,实例8个,拓展实例16个,技术解惑6个)
- 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
- (视频总计33分钟,实例3个,拓展实例6个,技术解惑10个)
- 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
- (视频总计41分钟)
- 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