《疯狂Java 突破程序员基本功的16课 修订版》PDF下载

  • 购买积分:16 如何计算积分?
  • 作  者:李刚著
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2012
  • ISBN:9787115263049
  • 页数:544 页
图书介绍:本书以李刚老师“疯狂程序员”的视角讲解学员应该掌握的Java语言基本功,以满足IT企业对于员工的实际需求。实际内容为市场上常规Java教程中提炼出来的精华部分或者说是在常规书书中没有深入探讨的细节。

第1课 数组与内存控制 1

1.1数组初始化 2

1.1.1 Java数组是静态的 2

1.1.2数组一定要初始化吗 5

1.1.3基本类型数组的初始化 7

1.1.4引用类型数组的初始化 9

1.2使用数组 12

1.2.1数组元素就是变量 13

1.2.2没有多维数组 15

1.3小结 21

第2课 对象与内存控制 22

2.1实例变量和类变量 23

2.1.1实例变量和类变量的属性 25

2.1.2实例变量的初始化时机 27

2.1.3类变量的初始化时机 32

2.2父类构造器 34

2.2.1隐式调用和显式调用 34

2.2.2访问子类对象的实例变量 37

2.2.3调用被子类重写的方法 41

2.3父子实例的内存控制 43

2.3.1继承成员变量和继承方法的区别 43

2.3.2内存中子类实例 47

2.3.3父、子类的类变量 52

2.4 final修饰符 53

2.4.1 final修饰的变量 54

2.4.2执行“宏替换”的变量 59

2.4.3 final方法不能被重写 65

2.4.4内部类中的局部变量 67

2.5小结 70

第3课 常见Java集合的实现细节 71

3.1 Set和Map 72

3.1.1 Set和Map的关系 72

3.1.2 HashMap和HashSet 79

3.1.3 TreeMap和TreeSet 90

3.2 Map和List 98

3.2.1 Map的valuesxO方法 98

3.2.2 Map和List的关系 106

3.3 ArrayList和LinkedList 107

3.3.1 Vector和ArrayList的区别 109

3.3.2 ArrayList和LinkedList的实现差异 113

3.3.3 ArrayList和LinkedList的性能分析和适用场景 117

3.4 lterator迭代器 118

迭代时删除指定元素 120

3.5小结 123

第4课 Java的内存回收 124

4.1 Java引用的种类 125

4.1.1对象在内存中状态 125

4.1.2强引用 128

4.1.3软引用 129

4.1.4弱引用 132

4.1.5虚引用 136

4.2 Java的内存泄漏 138

4.3垃圾回收机制 142

4.3.1垃圾回收的基本算法 143

4.3.2堆内存的分代回收 144

4.3.3与垃圾回收的附加选项 146

4.3.4常见垃圾回收器 147

4.4内存管理的小技巧 150

4.4.1尽量使用直接量 150

4.4.2使用StringBuilder和StringBuffer进行字符串连接 151

4.4.3尽早释放无用对象的引用 151

4.4.4尽量少用静态变量 152

4.4.5避免在经常调用的方法、循环中创建Java对象 152

4.4.6缓存经常使用的对象 153

4.4.7尽量不要使用finalize方法 153

4.4.8考虑使用SoftReference 154

4.5小结 154

第5课 表达式中的陷阱 155

5.1关于字符串的陷阱 156

5.1.1 JVM对字符串的处理 156

5.1.2不可变的字符串 160

5.1.3字符串比较 162

5.2表达式类型的陷阱 164

5.2.1表达式类型的自动提升 165

5.2.2复合赋值运算符的陷阱 166

5.3输入法导致的陷阱 168

5.4注释的字符必须合法 169

5.5转义字符的陷阱 170

5.5.1慎用字符的Unicode转义形式 170

5.5.2中止行注释的转义字符 171

5.6泛型可能引起的错误 172

5.6.1原始类型变量的赋值 172

5.6.2原始类型带来的擦除 175

5.6.3创建泛型数组的陷阱 178

5.7正则表达式的陷阱 180

5.8多线程的陷阱 182

5.8.1不要调用run方法 182

5.8.2静态的同步方法 183

5.8.3静态初始化块启动新线程执行初始化 187

5.8.4注意多线程执行环境 192

5.9小结 198

第6课 流程控制的陷阱 199

6.1 switch语句陷阱 200

6.1.1 default分支永远会执行吗 200

6.1.2 break的重要性 201

6.1.3 switch表达式的类型 203

6.2标签引起的陷阱 205

6.3if语句的陷阱 206

6.3.1else隐含的条件 206

6.3.2小心空语句 209

6.4循环体的花括号 212

6.4.1什么时候可以省略花括号 212

6.4.2省略花括号的危险 213

6.5for循环的陷阱 214

6.5.1分号惹的祸 214

6.5.2小心循环计数器的值 218

6.5.3浮点数作循环计数器 219

6.6foreach循环的循环计数器 221

6.7小结 223

第7课 面向对象的陷阱 224

7.1 instanceof运算符的陷阱 225

7.2构造器的陷阱 229

7.2.1构造器之前的void 230

7.2.2构造器创建对象吗 231

7.2.3无限递归的构造器 237

7.3持有当前类的实例 238

7.4到底调用哪个重载的方法 240

7.5方法重写的陷阱 244

7.5.1重写private方法 244

7.5.2重写其他访问权限的方法 245

7.6非静态内部类的陷阱 246

7.6.1非静态内部类的构造器 246

7.6.2非静态内部类不能拥有静态成员 248

7.6.3 非静态内部类的子类 249

7.7 static关键字 252

7.7.1静态方法属于类 252

7.7.2静态内部类的限制 253

7.8 native方法的陷阱 254

7.9小结 256

第8课 异常捕捉的陷阱 257

8.1正确关闭资源的方式 258

8.2 finally块的陷阱 262

8.2.1 finally的执行规则 262

8.2.2 finally块和方法返回值 265

8.3 catch块的用法 267

8.3.1 catch块的顺序 267

8.3.2不要用catch代替流程控制 269

8.3.3只能catch可能抛出的异常 270

8.3.4做点实际的修复 274

8.4继承得到的异常 276

8.5小结 278

第9课 线性表 279

9.1线性表概述 280

9.1.1线性表的定义及逻辑结构 280

9.1.2线性表的基本操作 281

9.2顺序存储结构 282

9.3链式存储结构 288

9.3.1单链表上的基本运算 289

9.3.2循环链表 296

9.3.3双向链表 297

9.4线性表的分析 306

9.4.1线性表的实现分析 306

9.4.2线性表的功能 306

9.5小结 308

第10课 栈和队列 309

10.1栈 310

10.1.1栈的基本定义 310

10.1.2栈的常用操作 311

10.1.3栈的顺序存储结构及实现 311

10.1.4栈的链式存储结构及实现 317

10.1.5 Java集合中的栈 321

10.2队列 321

10.2.1队列的基本定义 322

10.2.2队列的常用操作 322

10.2.3队列的顺序存储结构及实现 323

10.2.4循环队列 327

10.2.5队列的链式存储结构及实现 332

10.2.6 Java集合中的队列 336

10.3双向队列 338

10.4小结 339

第11课 树和二叉树 340

11.1树的概述 341

11.1.1树的定义和基本术语 341

11.1.2树的基本操作 343

11.1.3父节点表示法 343

11.1.4子节点链表示法 348

11.2二叉树 354

11.2.1二叉树的定义和基本概念 354

11.2.2二叉树的基本操作 355

11.2.3二叉树的顺序存储 356

11.2.4二叉树的二叉链表存储 360

11.2.5二叉树的三叉链表存储 365

11.3遍历二叉树 369

11.3.1先序遍历 370

11.3.2中序遍历 371

11.3.3后序遍历 371

11.3.4广度优先(按层)遍历 372

11.4森林、树和二叉树的转换 373

11.4.1森林、树和二叉树的转换 374

11.4.2树的链表存储 375

11.5哈夫曼树 375

11.5.1哈夫曼树的定义和基本概念 375

11.5.2创建哈夫曼树 376

11.5.3哈夫曼编码 380

11.6排序二叉树 381

11.7红黑树 390

11.7.1插入操作 392

11.7.2删除操作 394

11.8小结 407

第12课 常用的内部排序 408

12.1排序的基本概念 409

12.1.1排序概述 409

12.1.2内部排序的分类 410

12.2选择排序法 411

12.2.1直接选择排序 411

12.2.2堆排序 415

12.3交换排序 420

12.3.1冒泡排序 420

12.3.2快速排序 423

12.4插入排序 425

12.4.1直接插入排序 425

12.4.2折半插入排序 427

12.4.3Shell排序 429

12.5归并排序 433

12.6桶式排序 437

12.7基数排序 440

12.8小结 443

第13课 程序开发 444

13.1扎实的基本功 445

13.1.1快速的输入能力 445

13.1.2编程实现能力 447

13.1.3快速排错 447

13.2程序开发之前 448

13.2.1分析软件的组件模型 448

13.2.2建立软件的数据模型 451

13.3弄清程序的具体实现 452

13.3.1各组件如何通信 452

13.3.2人机交互的实现 454

13.3.3复杂算法的分析 457

13.4编写开发文档 459

13.4.1绘制建模图、流程图 460

13.4.2提供简要说明 461

13.4.3编写伪码实现 462

13.5编码实现和开发心态 462

13.5.1开发是复杂的 462

13.5.2开发过程是漫长的 463

13.6小结 463

第14课 程序调试 464

14.1程序的可调试性 465

14.1.1增加注释 465

14.1.2使用log 466

14.2程序调试的基本方法 474

14.2.1借助编译器的代码审查 475

14.2.2跟踪程序执行流程 477

14.2.3断点调试 479

14.2.4隔离调试 481

14.2.5错误重现 482

14.3记录常见错误 484

14.3.1常见异常可能的错误原因 485

14.3.2常见运行时异常可能的错误原因 486

14.4程序调试的整体思路 488

14.4.1分段调试 488

14.4.2分模块调试 490

14.5调试心态 490

14.5.1谁都会出错 490

14.5.2调试比写程序更费时 491

14.6小结 491

第15课 使用lDE工具 492

15.1何时开始利用IDE工具 493

15.2IDE工具概述 494

15.2.1 lDE工具的基本功能 495

15.2.2常见的Java lDE工具 497

15.3项目管理 499

15.3.1建立项目 499

15.3.2自动编译 504

15.3.3自动部署、运行 504

15.4代码管理 505

15.4.1向导式的代码生成 506

15.4.2代码生成器 508

15.4.3代码提示 509

15.4.4自动代码补齐 510

15.4.5实时错误提示 510

15.5项目调试 511

15.5.1设置断点 512

15.5.2单步调试 514

15.5.3步入、步出 514

15.6团队协作功能 516

作为版本控制工具的客户端 516

15.7小结 519

第16课 软件测试 520

16.1软件测试概述 521

16.1.1软件测试的概念和目的 521

16.1.2软件测试的分类 523

16.1.3开发活动和测试活动 524

16.1.4常见的Bug管理工具 524

16.2单元测试 525

16.2.1单元测试概述 525

16.2.2单元测试的逻辑覆盖 527

16.2.3 JUnit介绍 530

16.2.4 JUnit的用法 531

16.3系统测试和自动化测试 538

16.3.1系统测试概述 538

16.3.2自动化测试 539

16.3.3常见自动化测试工具 540

16.4性能测试 541

16.4.1性能测试概述 541

16.4.2性能测试的相关概念 542

16.4.3常见性能测试工具 543

16.5小结 544