《精通Java开发技术 由浅入深领会高效开发之道》PDF下载

  • 购买积分:18 如何计算积分?
  • 作  者:陈强编著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2013
  • ISBN:9787302311874
  • 页数:604 页
图书介绍:本书共21章分别讲解了Java技术,面向对象,数据类型和运算符,流程控制和数组,类和方法,类和面向对象,集合,泛型,与运行环境交互,异常处理,AWT编程,Swing编程,JDBC编程,Annotation,输入/输出,多线程,网络编程,类加载和反射,最后通过留言薄系统、图书馆借阅系统和Android手机足球游戏3个综合实例讲解了Java技术在大型项目中的应用流程。

第1章 Java语言初体验 1

1.1学习Java的优势 2

1.1.1排名第一的编程语言 2

1.1.2良好的就业前景 2

1.2学习Java需要了解的那些事 3

1.2.1 Java语言的发展历史 3

1.2.2 Java的特点 4

1.2.3 Java的平台无关性 5

1.3 Java的运行机制 6

1.3.1高级语言的运行机制 6

1.3.2 Java的运行机制 7

1.3.3 Java虚拟机——JVM 8

1.4开发前的准备 9

1.4.1安装JDK 9

1.4.2设置环境变量 13

1.4.3 JRE和JDK是有区别的 14

1.4.4困扰初学者的环境变量问题 14

1.5体验第一个Java程序 15

1.5.1编辑Java源代码 15

1.5.2编译Java程序 16

1.5.3运行Java程序 17

1.5.4分析Java程序的运行过程 17

1.6初学者应该明白的几个问题 18

1.6.1独特的垃圾回收机制 18

1.6.2对学习者的几条建议 19

第2章 探索Java敏捷学习之道 21

2.1究竟要学习什么 22

2.2学习编程的正确观念 22

2.3将面向对象贯穿全书 23

2.3.1什么是面向对象 23

2.3.2面向对象的几个基本特性 24

2.3.3 Java的面向对象 24

2.3.4 Java的面向对象特性 25

2.4初学者应该注意的问题 26

2.4.1需要遵循源文件命名规则 26

2.4.2不要忽视系统文件的扩展名 26

2.4.3时刻注意大小写的问题 27

2.4.4必须有main()方法 27

2.4.5注意空格带来的麻烦 27

2.5使用Java IDE工具能事半功倍 28

2.5.1到底用不用IDE工具 28

2.5.2最受欢迎的工具——Eclipse 28

2.5.3 Sun公司推出的工具——NetBeans 34

2.5.4一度很“火”的商业工具——JBuilder 35

第3章 速成Java的基本语法 37

3.1快速学习语法的秘诀 38

3.2变量和常量 38

3.2.1不可变的量叫常量 39

3.2.2定义常量时的注意事项 40

3.2.3可以变化的量叫变量 40

3.3数据类型一通则百通 42

3.3.1简单数据类型值的范围 42

3.3.2字符型 43

3.3.3整型 44

3.3.4浮点型 44

3.3.5布尔型 45

3.4 if语句 46

3.4.1简单if语句 46

3.4.2通过if语句的延伸用法体验if-else语句的意义 47

3.4.3 if语句可以有多个条件判断 48

3.5 switch语句 49

3.5.1 switch语句的基本用法 49

3.5.2使用switch语句时应该注意的事项 49

3.5.3如果没有break 50

3.5.4如果case没有执行语句 50

3.5.5如果default不在末尾 51

3.6需要正确使用条件语句 51

3.6.1参数case和参数switch的值要相等 51

3.6.2在使用if语句时要按照逻辑顺序编码 52

3.6.3理解switch语句的执行顺序 52

3.7循环语句 53

3.7.1 for循环 53

3.7.2有多个表达式的for循环 54

3.7.3 for语句可以嵌套 55

3.7.4 while循环语句 56

3.7.5可以联合使用if语句和while循环 57

3.7.6 do-while循环语句 57

3.7.7不要忘记分号 58

3.8跳转语句 58

3.8.1使用break语句 58

3.8.2使用return语句返回一个值 59

3.8.3使用continue语句实现跳转 60

3.9一维数组 60

3.9.1声明一维数组 60

3.9.2创建一维数组 61

3.9.3一维数组的初始化 62

3.10二维数组 63

3.10.1声明二维数组 63

3.10.2创建二维数组 63

3.10.3二维数组的初始化 64

3.11 三维数组 65

3.11.1声明三维数组 65

3.11.2三维数组的初始化 65

3.12复制数组中的数据 66

3.13比较两个数组中的数据 67

3.14搜索数组中的元素 68

3.15排序数组 68

3.16深入理解数组 69

3.16.1可以任意伸缩数组长度的动态数组 69

3.16.2 foreach循环 70

3.17初学者应该明白的几个问题 71

3.17.1 char中的单引号和int的提升处理 71

3.17.2正无穷和负无穷的问题 72

3.17.3 double型和float型之间的处理 72

3.17.4何时使用switch语句,何时使用if…else if语句 72

3.17.5使用for循环的技巧 73

3.17.6可以在嵌套语句中使用break语句 73

3.17.7设置有意义的标号 75

3.17.8通过区别来决定怎样选择跳转语句 76

3.17.9理解Java数组的内部机制 77

3.17.10数组必须初始化 78

3.17.11 Java中的两种引用类型 79

3.17.12向数组中填充数据 79

3.17.13在使用foreach操作数组时不建议对循环变量进行赋值 81

3.17.14定义常量时的注意事项 82

3.17.15 移位运算符的限制 83

3.17.16扩展赋值运算符 83

3.17.17 switch语句和if…else if语句的选择 84

第4章 同时学习类和方法 87

4.1类中的相关定义 88

4.1.1理解类的意义 88

4.1.2定义类 88

4.1.3定义属性 89

4.1.4定义方法 89

4.1.5定义构造器 90

4.1.6 Java的修饰符 90

4.2 Java方法 91

4.2.1传递方法参数 91

4.2.2可以定义形参长度可变的参数 92

4.2.3构造方法和递归方法 93

4.3 this关键字 95

4.4类和对象 96

4.4.1创建和使用对象 96

4.4.2使用静态变量和静态方法 97

4.5抽象类和抽象方法 97

4.5.1为什么推出抽象方法 97

4.5.2了解抽象类和抽象方法 98

4.5.3抽象类必须有一个抽象方法 100

4.6使用软件包 101

4.6.1定义软件包 101

4.6.2在Eclipse中定义软件包 102

4.6.3在程序里插入软件包 104

4.7继承 105

4.7.1父类和子类 105

4.7.2对父类的操作 106

4.7.3重写方法的两点注意事项 108

4.8重写和重载 108

4.8.1重写 108

4.8.2重载 109

4.8.3重写和重载的区别 110

4.9隐藏和封装 110

4.9.1 Java中的封装 111

4.9.2使用访问控制符 111

4.9.3解决重名问题的包 113

4.9.4 import 115

4.10初学者应该明白的几个问题 116

4.10.1方法的所属性问题 116

4.10.2探讨Java传递引用类型的实质 117

4.10.3体会使用this关键字的好处 118

4.10.4体会抽象类的作用 119

4.10.5通过一个错误程序体会包的作用 121

4.10.6掌握使用包的一些规则 122

4.10.7探讨package和import的机制 122

第5章 深入理解Java的面向对象 125

5.1接口 126

5.1.1需要理解Java接口编程的机理 126

5.1.2定义接口 127

5.1.3接口里的量和方法 127

5.1.4实现接口 128

5.1.5引用接口 128

5.1.6接口的继承 129

5.2特殊的方法——构造器 129

5.2.1初始化构造器 130

5.2.2构造器重载 130

5.2.3 this在构造器中的妙用 131

5.2.4调用父类构造器 131

5.2.5子类构造器调用父类构造器的几种情况 131

5.3多态 132

5.3.1何谓多态 132

5.3.2演示Java中的多态 134

5.3.3 Java多态的核心 135

5.4引用类型 135

5.4.1四种引用类型 135

5.4.2 instanceof运算符 138

5.4.3强制类型转换不是万能的 139

5.5选择继承还是组合 141

5.6包装类 144

5.7用final修饰基本类型和引用类型变量的区别 145

5.7.1用final修饰变量 145

5.7.2使用final修饰方法 147

5.8内部类 148

5.8.1为什么需要内部类 148

5.8.2非静态内部类 149

5.8.3成员内部类 151

5.8.4局部内部类 152

5.8.5静态内部类 153

5.8.6匿名内部类 154

5.8.7对内部类的总结 157

5.9枚举类 161

5.9.1手动实现枚举类的缺点 161

5.9.2枚举类型 163

5.9.3接口和抽象类 165

5.10初学者应该明白的几个问题 166

5.10.1区分构造器和方法 166

5.10.2使用instanceof运算符时要避免编译错误 167

5.10.3分析Java中的自动装箱和自动拆箱 168

5.10.4 Java类的几种权限 169

5.10.5使用this限定类的属性 169

5.10.6 在匿名类和内部类中使用this 170

5.10.7枚举类常用的几个方法 171

第6章 集合 173

6.1 Java集合概述 174

6.2学习Collection和Iterator的诀窍 175

6.2.1基础知识介绍 175

6.2.2改变Collection集合元素的问题 177

6.3挖掘Set接口的妙用 178

6.3.1基础知识介绍 178

6.3.2使用HashSet 181

6.3.3 HashSet深入 183

6.4深入List接口 183

6.4.1基本知识介绍 183

6.4.2使用List接口和ListIterator接口 185

6.4.3使用ArrayList和Vector类 186

6.4.4 ArrayList和Vector的区别 187

6.5 Map接口的深入浅出 187

6.5.1使用HashMap和Hashtable实现类 188

6.5.2使用SortedMap接口和TreeMap类实现排序处理 190

6.5.3使用WeakHashMap类 192

6.5.4使用IdentityHashMap类 193

6.5.5使用EnumMap类 194

6.5.6分析几种Map类的性能 195

6.6模拟队列数据结构的Queue接口 195

6.6.1常用的方法 196

6.6.2 List接口的实现类——LinkedList 196

6.6.3处理优先级的PriorityQueue类 197

6.7集合工具类Collections 198

6.7.1排序操作 198

6.7.2使用swap()方法交换集合中两个位置的内容 199

6.7.3查找和替换 199

6.8初学者应该明白的几个问题 201

6.8.1总结Java中处理排序的问题 201

6.8.2使用EnumSet类的注意事项 206

6.8.3体会List中的额外方法 206

6.8.4 HashMap和Hashtable之间的选择 207

6.8.5 TreeMap判断两个元素是否相等的标准 207

6.8.6体验数组的优良性能 207

6.8.7 LinkedList、ArrayList、Vector性能问题的研究 208

第7章 使用类库提高开发效率 211

7.1 StringBuffer类 212

7.1.1 StringBuffer类基础 212

7.1.2使用StringBuffer类 212

7.1.3 StringBuffer和String选择的异同 213

7.2运行时操作类 Runtime 213

7.3实现Java程序国际化 215

7.3.1 Java实现国际化的方案 215

7.3.2表示国家语言的类——Locale 215

7.3.3 ResourceBundle类 216

7.3.4处理动态文本 217

7.3.5使用类代替资源文件 219

7.4系统类System 220

7.4.1 System类基础 220

7.4.2垃圾对象的回收 221

7.5日期操作类——Date 222

7.5.1使用Date类 222

7.5.2使用Calendar类获取当前时间 222

7.5.3使用DateFormat类设置日期的格式 224

7.5.4使用SimpleDateFormat类 225

7.6使用Math类实现数学运算 226

7.7使用Random类生成随机数 226

7.8数字格式化类——NumberFormat 227

7.9使用Arrays类操作数组 228

7.10 Comparable接口 229

7.10.1 Comparable接口基础 229

7.10.2使用Comparable接口 229

7.10.3使用Comparator接口 230

7.11使用Observable类和Observer接口实现观察者模式 232

7.12正则表达式 233

7.12.1正则表达式是一种可以用于模式匹配和替换的规范 233

7.12.2 String类和正则表达式 235

7.13线程类Timer和TimerTask 236

7.14初学者应该明白的几个问题 237

7.14.1了解Java的内存管理机制 237

7.14.2传递可变参数 239

7.14.3通过System类获取本机的全部环境属性 240

7.14.4把一个日期变为指定格式 241

7.14.5在Math类中也有一个random()方法 241

7.14.6如果没有实现Comparable接口会出现异常 242

7.14.7体验正则表达式的好处 243

第8章 泛型 245

8.1泛型基础 246

8.1.1使用泛型的好处 246

8.1.2检查类型 246

8.1.3使用泛型 248

8.2深入泛型 249

8.2.1定义泛型接口和类 249

8.2.2派生子类 250

8.2.3并不存在泛型类 251

8.3类型通配符 252

8.3.1设置类型通配符的上限 253

8.3.2设置类型形参的上限 255

8.4泛型方法 256

8.4.1定义泛型方法 256

8.4.2设置通配符下限 259

8.5泛型接口 260

8.6泛型继承 262

8.6.1以泛型类为父类 262

8.6.2以非泛型类为父类 263

8.7运行时类型识别 264

8.8强制类型转换 265

8.9擦除 266

8.9.1擦除基础 266

8.9.2需要避免擦除带来的错误 269

8.10初学者应该明白的几个问题 270

8.10.1使用泛型应该遵循的原则和注意的问题 270

8.10.2分析Java语言中泛型的本质 271

8.10.3体验泛型方法和类型通配符的区别 271

8.10.4重温泛型类的继承规则 272

8.10.5挖掘类型擦除和泛型特性的联系 273

第9章 异常处理 275

9.1什么是异常 276

9.1.1认识异常 276

9.1.2 Java的异常处理机制 276

9.1.3 Java为我们提供了异常处理类 279

9.2处理异常的方式 280

9.2.1使用try-catch来处理异常 280

9.2.2处理多个异常 281

9.2.3使用finally关键字处理异常 281

9.2.4访问异常信息 283

9.3抛出异常 284

9.3.1使用throws抛出异常 284

9.3.2使用throw抛出异常 286

9.3.3区别throws关键字和throw关键字 287

9.4自定义异常 287

9.4.1 Throwable类介绍 287

9.4.2子类Error和Exception 290

9.5 Checked异常和Runtime异常的区别 290

9.6初学者应该明白的几个问题 292

9.6.1杜绝异常处理的陋习 293

9.6.2学习异常没有诀窍 296

9.6.3异常处理语句的规则 296

9.6.4建议使用嵌套来处理异常 298

9.6.5分析异常类的继承关系 298

第10章 使用I/O系统来处理文件 301

10.1 Java I/O简介 302

10.2与文件有关的类——File 302

10.3随机读取类RandomAccessFile 304

10.4字节流和字符流 306

10.4.1字节流类和字符流类 306

10.4.2使用字节流 306

10.4.3使用字符流 309

10.5字节转换流 311

10.6内存操作流 312

10.7使用管道流实现线程间的通信 313

10.8使用打印流输出信息 315

10.9 BufferedReader类 316

10.9.1 BufferedReader类基础 316

10.9.2使用BufferedReader类 317

10.10 Scanner类 318

10.11数据操作流 320

10.11.1 DataOutputStream类 321

10.11.2 DataInputStream类 322

10.12压缩流 323

10.12.1 ZIP压缩输入/输出流简介 323

10.12.2 ZipOutputStream类 324

10.12.3 ZipFile类 327

10.12.4 ZipInputStream类 327

10.13回退流 328

10.14字符编码 329

10.14.1得到本机的编码显示 329

10.14.2产生乱码 330

10.15对象序列化 330

10.15.1 Serializable接口 331

10.15.2对象输出流ObjectOutputStream 331

10.15.3对象输入流ObjectInputStream 332

10.15.4 Externalizable接口 333

10.15.5关键字transient 333

10.15.6序列化一组对象 335

10.16新增的I/O 336

10.16.1新I/O概述 336

10.16.2使用Buffer 336

10.17初学者应该明白的几个问题 338

10.17.1使用File.separator表示分隔符 338

10.17.2综合创建和删除文件的操作 338

10.17.3体会File类的复杂用法 339

10.17.4将写入的数据换行 340

10.17.5弄清字节流和字符流的区别 340

10.17.6显示菜单 342

10.17.7对象序列化和对象反序列化操作时的版本兼容性问题 344

10.17.8不能让所有的类都实现Serializable接口 344

10.17.9如何选择Externalizable接口和Serializable接口 345

第11章 快速体验AWT 347

11.1 GUI和AWT 348

11.2容器 350

11.2.1容器基础 350

11.2.2容器中的常用组件 350

11.3布局管理器 353

11.3.1布局利器FlowLayout 353

11.3.2布局利器BorderLayout 355

11.3.3矩形网格布局GridLayout 356

11.3.4版面管理器GridBagLayout 358

11.3.5可以设置一个组件的布局——CardLayout 360

11.3.6可以摆放GUI组件的布局管理器——BoxLayout 362

11.4 AWT中的常用组件 364

11.4.1 AWT中的组件 364

11.4.2实现对话框效果 367

11.5事件处理 369

11.5.1 Java的事件模型 369

11.5.2事件和事件监听器 371

11.5.3事件适配器 376

11.6 AWT的菜单 378

11.6.1菜单条、菜单和菜单项 378

11.6.2右键菜单 381

11.7绘图 383

11.7.1 Component类中的绘图方法 383

11.7.2 Graphics类 383

11.8操作位图 385

11.8.1 Image类和BufferedImage类 385

11.8.2输入/输出位图 388

11.9初学者应该明白的几个问题 389

11.9.1创建Glue、Strut和RigidArea的几个静态方法 389

11.9.2体会绝对定位的好处 390

11.9.3 AWT中的菜单组件不能创建图标菜单 391

第12章 由浅入深体验Swing 393

12.1 Swing介绍 394

12.2 Swing的基本组件 394

12.2.1 Swing组件的层次结构 395

12.2.2 Swing组件的特性 396

12.2.3 Swing胜过AWT的优势 397

12.2.4使用Swing实现AWT组件 397

12.2.5 JFrame、JScrollPane和边框 398

12.2.6 JToolBar 401

12.2.7 JColorChooser和JFileChooser 403

12.2.8 JOptionPane 405

12.2.9 JSplitPane 408

12.2.10 JTabbedPane 409

12.3拖放处理 410

12.4 JProgressBar、ProgressMonitor和BoundedRangeModel 412

12.4.1创建一个进度条 413

12.4.2使用ProgressMonitor创建进度条对话框 413

12.5 JSlider和BoundedRangeModel 415

12.6 JList和JComboBox 416

12.6.1使用JList和JComboBox的构造器创建列表框 416

12.6.2使用ListCellRenderer 418

12.7 JTree和TreeModel 418

12.7.1创建树 419

12.7.2拖动、编辑节点 420

12.8初学者应该明白的几个问题 421

12.8.1贯穿Java开发的MVC模式 421

12.8.2实现有意义的进度条效果 422

第13章 数据库编程 425

13.1与数据库相关的概念 426

13.2.SQL语言 428

13.2.1数据定义 428

13.2.2数据操纵 430

13.2.3视图 432

13.2.4 SQL高级操作 433

13.3初识JDBC 434

13.3.1 JDBC驱动类型 434

13.3.2 JDBC的常用接口和类 435

13.3.3 JDBC编程步骤 437

13.4常用的几种数据库 441

13.4.1 Access数据库 441

13.4.2 SQL Server数据库 441

13.4.3 MySQL数据库 445

13.5执行SQL语句的方式 445

13.5.1使用executeUpdate 445

13.5.2使用execute方法 447

13.6事务处理 449

13.6.1 JDBC中的事务控制 449

13.6.2检查数据库是否支持事务处理 450

13.6.3 JDBC事务控制的流程 450

13.7存储过程 454

13.7.1创建存储过程 454

13.7.2调用创建的存储过程 456

13.8初学者应该明白的几个问题 458

13.8.1通过课外学习掌握数据库技术 458

13.8.2数据库产品概览,没有最完美的产品 458

13.8.3乱花渐欲迷人眼,始终相信合适的即为最好的 460

第14章 网络与通信编程 463

14.1 Java中的网络包 464

14.1.1 InetAddress类详解 464

14.1.2 URLDecoder类和URLEncoder类 464

14.1.3 URL和URLConnection 465

14.1.4实践演练 467

14.2 TCP编程 468

14.2.1使用ServletSocket 469

14.2.2使用Socket 469

14.2.3 TCP中的多线程 471

14.2.4实现非阻塞Socket通信 475

14.3 UDP编程 479

14.3.1使用DatagramSocket 479

14.3.2使用MulticastSocket 484

14.3.3 MulticastSocket类的意义 487

14.4代理服务器 487

14.4.1什么是代理服务器 487

14.4.2使用Proxy创建连接 489

14.4.3使用ProxySelector选择代理服务器 490

14.4.4服务器代理实例 492

14.5初学者应该明白的几个问题 496

14.5.1 URL处理的两点注意事项 496

14.5.2使用异常处理完善程序 497

14.5.3分析ServerSocketChannel的麻烦之处 497

14.5.4体会繁琐的DatagramPacket 498

14.5.5需要知道代理背后的事情 498

14.5.6代理服务无止境 499

第15章 多线程 501

15.1线程基础 502

15.1.1线程概述 502

15.1.2线程与函数的关系 502

15.1.3 Java的线程模型 503

15.2创建线程 503

15.2.1使用Thread类创建线程 503

15.2.2使用Runnable接口创建线程 506

15.3线程的生命周期 508

15.3.1创建并运行线程 508

15.3.2 start和run的区别 509

15.3.3挂起和唤醒线程 509

15.3.4终止线程的三种方法 511

15.3.5线程的优先级 513

15.3.6线程阻塞 513

15.3.7线程死亡 514

15.4控制线程 514

15.4.1使用join方法 514

15.4.2慎重使用volatile关键字 515

15.4.3后台、让步和睡眠 517

15.4.4 sleep()方法和yield()方法的区别 519

15.5线程传递数据 519

15.5.1向线程传递数据的三种方法 519

15.5.2两种从线程返回数据的方法 522

15.6数据同步 523

15.6.1使用synchronized关键字同步类方法 526

15.6.2使用Synchronized块同步变量 529

15.6.3同步锁 531

15.7多线程编程的常见缺陷及其产生的原因 533

15.7.1死锁问题 534

15.7.2多线程编程的常见陷阱 537

15.8初学者应该明白的几个问题 541

15.8.1在方法run()中使用线程名时带来的问题 542

15.8.2继承Thread类或实现Runnable接口的比较 542

15.8.3使用sleep()方法的注意事项 542

15.8.4如何确定死锁发生 543

15.8.5关键字synchronized和volatile的区别 543

15.8.6使用关键字synchronized的注意事项 544

15.8.7分析Swing的多线程死锁问题 546

第16章 案例:综合供求信息平台 549

16.1需求分析 550

16.1.1规划流程 550

16.1.2开发背景 550

16.1.3需求分析 550

16.1.4项目规划 551

16.2网站功能结构 551

16.3搭建开发环境 552

16.4搭建数据库 552

16.4.1数据库需求分析 553

16.4.2数据库概念设计 553

16.4.3数据库逻辑结构设计 554

16.5设计公共类 555

16.5.1数据库连接及操作类 555

16.5.2业务处理类 557

16.5.3分页类 559

16.5.4字符串处理类 560

16.6具体编码 560

16.6.1设计前台页面 561

16.6.2前台信息显示设计 562

16.6.3信息发布模块设计 570

16.6.4登录模块 572

16.6.5后台页面模块 574

16.6.6后台信息管理模块 574

16.7测试 577

第17章 案例:小区物业管理系统 581

17.1系统概述和总体设计 582

17.1.1系统需求分析 582

17.1.2系统演示流程 583

17.2数据库设计 583

17.2.1选择数据库 583

17.2.2数据库结构的设计 584

17.3系统框架设计 586

17.3.1创建工程及设计主界面 586

17.3.2数据库ADO访问类 589

17.3.3系统登录模块设计 589

17.4基本信息管理模块 590

17.4.1小区信息管理 590

17.4.2楼宇信息管理 592

17.4.3业主信息管理 594

17.4.4收费项目管理 594

17.4.5查询单价清单 595

17.5消费指数管理模块 596

17.5.1业主消费录入 597

17.5.2物业消费录入 599

17.6各项费用管理模块 600

17.6.1业主费用查询 600

17.6.2物业费用查询 602

17.7测试 604

参考文献 605