标题：疯狂Java讲义（第2版）
图书信息
《疯狂Java讲义（第2版）》
李刚 编著  ISBN 978-7-121-15578-9
2012年1月出版
定价：109.00元（含光盘1张）
16开
864页
疯狂源自梦想   技术成就辉煌
内容简介
本书是《疯狂Java讲义》的第2版，第2版保持了第1版系统、全面、讲解浅显、细致的特性，全面介绍了新增的Java 7的新特性。
本书深入介绍了Java编程的相关方面，全书内容覆盖了Java的基本语法结构、Java的面向对象特征、Java集合框架体系、Java泛型、异常处理、Java GUI编程、JDBC数据库编程、Java注释、Java的IO流体系、Java多线程编程、Java网络通信编程和Java反射机制；覆盖了java.lang、java.util、java.text和java.nio、java.sql、java.awt、javax.swing包下绝大部分类和接口。本书全面介绍了Java 7的二进制整数、菱形语法、增强switch语句、多异常捕获、自动关闭资源的try语句、JDBC 4.1新特性、NIO.2、AIO等新特性。
与第1版类似，本书并不单纯从知识角度来讲解Java，而是从解决问题的角度来介绍Java语言，所以本书中涉及大量的实用案例开发：五子棋游戏、梭哈游戏、仿QQ的游戏大厅、MySQL企业管理器、仿EditPlus的文本编辑器、多线程、断点下载工具、Spring框架的IoC容器……这些案例既能让读者巩固每章的知识，又可以让读者学以致用，激发编程自豪感，进而引爆内心的编程激情。本书光盘里包含书中所有示例的代码和《疯狂Java实战演义》的所有项目代码，这些项目可以作为本书课后练习的“非标准答案”。如果读者需要获取关于课后习题的解决方法、编程思路，可以登录站点与笔者及本书庞大的读者群相互交流。
本书为所有打算深入掌握Java编程的读者而编写，适合各种层次的Java学习者和工作者阅读，也适合作为大学教育、培训机构的Java教材。但如果只是想简单涉猎Java，则本书过于庞大，不适合阅读。
作者简介
李刚，从事10多年的Java EE应用开发，现任疯狂软件教育中心教学总监。
疯狂Java实训营创始人，疯狂Java体系图书作者。曾任LITEON公司的J2EE技术主管，负责该公司的企业信息化平台的架构设计。
曾任广州电信、广东龙泉科技等公司的技术培训导师。曾兼任广东技术师范学院计算机科学系的兼职副教授。
2007年3月26日的《电脑报》专访人物。
培训的学生已在华为、立信、普信、网易、电信盈科等公司就职。
国内著名的高端IT技术作家，已出版《疯狂Java讲义》、《疯狂Android讲义》、《轻量级Java EE企业应用实战》、《疯狂Ajax讲义》、《疯狂XML讲义》、《经典Java EE企业应用实战》、《Struts 2.1权威指南》、《Ruby On Rails敏捷开发最佳实践》等著作。其中疯狂Java体系图书都是已经得到广泛的市场认同，并多次重印的畅销图书，并被多家高校选作教材，部分图书已被翻译成繁体中文版、输出到台湾地区。
序
如何学习Java
——谨以此文献给打算以编程为职业、并愿意为之疯狂的人
经常看到有些学生、求职者捧着一本类似JBuilder入门、Eclipse指南之类的图书学习Java，当他们学会了在这些工具中拖出窗体、安装按钮之后，就觉得自己掌握、甚至精通了Java；又或是找来一本类似JSP动态网站编程之类的图书，学会使用JSP脚本编写一些页面后，就自我感觉掌握了Java开发。
还有一些学生、求职者听说J2EE、Spring或EJB很有前途，于是立即跑到书店或图书馆找来一本相关图书。希望立即学会它们，然后进入软件开发业、大显身手。
还有一些学生、求职者非常希望找到一本既速成、又大而全的图书，比如突击J2EE开发、一本书精通J2EE之类的图书（包括笔者曾出版的《轻量级J2EE企业应用实战》一书，据说销量不错)，希望这样一本图书就可以打通自己的“任督二脉”，一跃成为J2EE开发高手。
也有些学生、求职者非常喜欢J2EE项目实战、项目大全之类的图书，他们的想法很单纯：我按照书上介绍，按图索骥、依葫芦画瓢，应该很快就可学会J2EE，很快就能成为一个受人羡慕的J2EE程序员了。
……
凡此种种，不一而足。但最后的结果往往是失败，因为这种学习没有积累、没有根基，学习过程中困难重重，每天都被一些相同、类似的问题所困扰，起初热情十足，经常上论坛询问，按别人的说法解决问题之后很高兴，既不知道为什么错？也不知道为什么对？只是盲目地抄袭别人的说法。最后的结果有两种：
久而久之，热情丧失，最后放弃学习。
大部分常见问题都问遍了，最后也可以从事一些重复性开发，但一旦遇到新问题，又将束手无策。
第二种情形在普通程序员中占了极大的比例，笔者多次听到、看到（在网络上）有些程序员抱怨：我做了2年多Java程序员了，工资还是3000多点。偶尔笔者会与他们聊聊工作相关内容，他们会告诉笔者：我也用Spring了啊，我也用EJB了啊……他们感到非常不平衡，为什么我的工资这么低？其实笔者很想告诉他们：你们太浮躁了！你们确实是用了Spring、Hibernate又或是EJB，但你们未想过为什么要用这些技术？用这些技术有什么好处？如果不用这些技术行不行？
很多时候，我们的程序员把Java当成一种脚本，而不是一门面向对象的语言。他们习惯了在JSP脚本中使用Java，但从不去想JSP如何运行，Web服务器里的网络通信、多线层机制，为何一个JSP页面能同时向多个请求者提供服务？更不会想如何开发Web服务器；他们像代码机器一样编写Spring Bean代码，但从不去理解Spring容器的作用，更不会想如何开发Spring容器。
有时候，笔者的学生在编写五子棋、梭哈等作业感到困难时，会向他们的大学师兄、朋友求救，这些程序员告诉他：不用写了，网上有下载的！听到这样回答，笔者不禁感到哑然：网上还有Windows下载呢！网上下载和自己编写是两码事。偶尔，笔者会怀念以前黑色屏幕、绿荧荧字符时代，那时候程序员很单纯：当我们想偷懒时，习惯思维是写一个小工具；现在程序员很聪明：当他们想偷懒时，习惯思维是从网上下一个小工具。但是，谁更幸福？
当笔者的学生把他们完成的小作业放上互联网之后，然后就有许多人称他们为“高手”！这个称呼却让他们万分惭愧；惭愧之余，他们也感到万分欣喜，非常有成就感，这就是编程的快乐。编程的过程，与寻宝的过程完全一样：历经辛苦，终于找到心中的梦想，这是何等的快乐？
如果真的打算将编程当成职业，那就不应该如此浮躁，而是应该扎扎实实先学好Java语言，然后按Java本身的学习规律，踏踏实实一步一个脚印地学习，把基本功练扎实了才可获得更大的成功。
实际情况是，有多少程序员真正掌握了Java的面向对象？真正掌握了Java的多线程、网络通信、反射等内容？有多少Java程序员真正理解了类初始化时内存运行过程？又有多少程序员理解Java对象从创建到消失的全部细节？有几个程序员真正独立地编写过五子棋、梭哈、桌面弹球这种小游戏？又有几个Java程序员敢说：我可以开发Struts？我可以开发Spring？我可以开发Tomcat？很多人又会说：这些都是许多人开发出来的！实际情况是：许多开源框架的核心最初完全是由一个人开发的。现在这些优秀程序已经出来了！你，是否深入研究过它们，是否深入掌握了它们？
如果要真正掌握Java，包括后期的Java EE相关技术（例如Struts、Spring、Hibernate和EJB等），一定要记住笔者的话：绝不要从IDE（如JBuilder、Eclipse和NetBeans）工具开始学习！IDE工具的功能很强大，初学者学起来也很容易上手，但也非常危险：因为IDE工具已经为我们做了许多事情，而软件开发者要全部了解软件开发的全部步骤。
李刚
2011年12月17日
前  言
2011年7月28日，Oracle如约发布了Java 7正式版。从Java 6到Java 7，广大开发者经过了漫长的等待，新发布的Java 7基本满足了广大开发者的渴望：Java 7加入了不少新特性，这些新特性进一步增强了Java语言的功能。
为了向广大工作者、学习者介绍最新、最前沿的Java知识，在Java 7正式发布之前，笔者已经深入研究过Java 7绝大部分可能新增的功能；当Java 7正式发布之后，笔者在第一时间开始了《疯狂Java讲义》的升级：使用Java 7改写了全书所有程序，全面介绍了Java 7的各种新特性。
在以“疯狂Java体系”图书为教材的疯狂软件教育中心里，经常有学生询问：为什么叫疯狂Java这个名字？也有一些读者通过网络、邮件来询问这个问题。其实这个问题的答案可以在本书第1版的前言中找到。疯狂的本质是一种“享受编程”的状态。在一些不了解编程的人看来：编程的人总面对着电脑、在键盘上敲打，这种生活实在太枯燥了，但实际上是因为他们并未真正了解编程，并未真正走进编程。在外人眼中：程序员不过是在敲打键盘；但在程序员心中：程序员敲出的每个字符，都是程序的一部分。
程序是什么呢？程序是对现实世界的数字化模拟。开发一个程序，实际是创造一个或大或小的“模拟世界”。在这个过程中，程序员享受着“创造”的乐趣，程序员沉醉在他所创造的“模拟世界”里：疯狂地设计、疯狂地编码实现。实现过程不断地遇到问题，然后解决它；不断地发现程序的缺陷，然后重新设计、修复它——这个过程本身就是一种享受。一旦完全沉浸到编程世界里，程序员是“物我两忘”的，眼中看到的、心中想到的，只有他正在创造的“模拟世界”。
在学会享受编程之前，编程学习者都应该采用“案例驱动”的方式，学习者需要明白程序的作用是：解决问题——如果你的程序不能解决你自己的问题，如何期望你的程序去解决别人的问题呢？那你的程序的价值何在？——知道一个知识点能解决什么问题，才去学这个知识点，而不是盲目学习！因此本书强调编程实战，强调以项目激发编程兴趣。
仅仅是看完这本书，你不会成为高手！在编程领域里，没有所谓的“武林秘籍”，再好的书一定要配合大量练习，否则书里的知识依然属于作者，而读者则仿佛身入宝山而一无所获的笨汉。本书配合了大量高强度的练习，希望读者强迫自己去完成这些项目。这些习题的答案可以参考本书所附光盘中《疯狂Java实战演义》的配套代码。如果需要获得编程思路和交流，可以登录与广大读者和笔者交流。
本书第1版面市的近3年时间里，几万读者已经通过本书步入了Java编程世界，这些读者的肯定、赞誉让笔者感到十分欣慰。也有不少读者给予本书一些很好的建议，因此笔者在创作第2版时对部分章节进行了一些小调整，希望这种调整能让本书日臻完善。
笔者非常欢迎所有热爱编程、愿意推动中国软件业的学习者、工作者对本书提出宝贵的意见，非常乐意与大家交流。中国软件业还处于发展阶段，所有热爱编程、愿意推动中国软件业的人应该联合起来，共同为中国软件行业贡献自己的绵薄之力。
本书有什么特点
本书并不是一本简单的Java入门教材，也不是一门“闭门造车”式的Java读物。本书来自于笔者6年多的Java培训经历，凝结了笔者近6000小时的授课经验，总结了上千个Java学员学习过程中的典型错误。
因此，本书具有如下三个特点：
1．案例驱动，引爆编程激情
本书不再是知识点的铺陈，而是致力于将知识点融入实际项目的开发中，所以本书中涉及了大量Java案例：仿QQ的游戏大厅、MySQL企业管理器、仿EditPlus的文本编辑器、多线程、断点下载工具……希望读者通过编写这些程序找到编程的乐趣。
2．再现李刚老师课堂氛围
本书的内容是笔者6年多授课经历的总结，知识体系取自疯狂Java实战的课程体系。
本书力求再现笔者的课堂氛围：以浅显比喻代替乏味的讲解，以疯狂实战代替空洞的理论。
书中包含了大量“注意”、“学生提问”部分，这些正是上千个Java学员所犯错误的汇总。
3．注释详细，轻松上手
为了降低读者阅读的难度，书中代码的注释非常详细，几乎每两行代码就有一行注释。不仅如此，本书甚至还把一些简单理论作为注释穿插到代码中，力求让读者能轻松上手。
本书所有程序中关键代码以粗体字标出，也是为了帮助读者能迅速找到这些程序的关键点。
本书写给谁看
如果你仅仅想对Java有所涉猎，那么本书并不适合你；如果你想全面掌握Java语言，并使用Java来解决问题、开发项目，或者希望以Java编程作为你的职业，那么本书将非常适合你。希望本书能引爆你内心潜在的编程激情，如果本书能让你产生废寝忘食的感觉，那笔者就非常欣慰了。
李刚
2011-12-17
目  录
第1章  Java语言概述1
第2章  理解面向对象21
第3章  数据类型和运算符37
第4章  流程控制与数组70
第5章  面向对象（上）105
第6章  面向对象（下）162
第7章  与运行环境交互234
第8章  Java集合274
第9章  泛型322
第10章  异常处理345
第11章  AWT编程370
第12章  Swing编程432
第13章  MySQL数据库与JDBC编程560
第14章  Annotation（注释）636
第16章  多线程707
第17章  网络编程754
第18章  类加载机制与反射812