互联网
类型
7.5
豆瓣评分
可以朗读
语音朗读
444千字
字数
2012-01-01
发行日期
展开全部
主编推荐语
这是前辈对晚辈的指点,解答的都是初学者会遇到的疑难问题,疯狂源自于梦想,技术成就辉煌。
内容简介
在《疯狂Java:突破程序员基本功的16课(修订版)》中,李刚老师专门针对Java初学者可能会遇到的各种学习问题,由点及面,详细讨论了Java内存管理、Java编程过程中常遇陷阱、常用数据结构的Java实现和Java程序开发的方法与经验等内容。这些问题,看似“司空见惯”,实际上却是很多Java初学者都会遇到的问题和疑难。李刚老师在《疯狂Java:突破程序员基本功的16课(修订版)》中,试图为读者们展现出这些疑点、难点的实质,让读者能在瞬息之间,彻底掌握住这门语言的“内功心法”。
目录
- 版权信息
- 内容提要
- 前言
- 第1课 数组与内存控制
- 1.1 数组初始化
- 1.1.1 Java数组是静态的
- 1.1.2 数组一定要初始化吗
- 1.1.3 基本类型数组的初始化
- 1.1.4 引用类型数组的初始化
- 1.2 使用数组
- 1.2.1 数组元素就是变量
- 1.2.2 没有多维数组
- 1.3 小结
- 第2课 对象与内存控制
- 2.1 实例变量和类变量
- 2.1.1 实例变量和类变量的属性
- 2.1.2 实例变量的初始化时机
- 2.1.3 类变量的初始化时机
- 2.2 父类构造器
- 2.2.1 隐式调用和显式调用
- 2.2.2 访问子类对象的实例变量
- 2.2.3 调用被子类重写的方法
- 2.3 父子实例的内存控制
- 2.3.1 继承成员变量和继承方法的区别
- 2.3.2 内存中子类实例
- 2.3.3 父、子类的类变量
- 2.4 final修饰符
- 2.4.1 final修饰的变量
- 2.4.2 执行“宏替换”的变量
- 2.4.3 final方法不能被重写
- 2.4.4 内部类中的局部变量
- 2.5 小结
- 第3课 常见Java集合的实现细节
- 3.1 Set和Map
- 3.1.1 Set和Map的关系
- 3.1.2 HashMap和HashSet
- 3.1.3 TreeMap和TreeSet
- 3.2 Map和List
- 3.2.1 Map的values()方法
- 3.2.2 Map和List的关系
- 3.3 ArrayList和LinkedList
- 3.3.1 Vector和ArrayList的区别
- 3.3.2 ArrayList和LinkedList的实现差异
- 3.3.3 ArrayList和LinkedList的性能分析和适用场景
- 3.4 Iterator迭代器
- 迭代时删除指定元素
- 3.5 小结
- 第4课 Java的内存回收
- 4.1 Java引用的种类
- 4.1.1 对象在内存中状态
- 4.1.2 强引用
- 4.1.3 软引用
- 4.1.4 弱引用
- 4.1.5 虚引用
- 4.2 Java的内存泄漏
- 4.3 垃圾回收机制
- 4.3.1 垃圾回收的基本算法
- 4.3.2 堆内存的分代回收
- 4.3.3 与垃圾回收的附加选项
- 4.3.4 常见垃圾回收器
- 4.4 内存管理的小技巧
- 4.4.1 尽量使用直接量
- 4.4.2 使用StringBuilder和StringBuffer进行字符串连接
- 4.4.3 尽早释放无用对象的引用
- 4.4.4 尽量少用静态变量
- 4.4.5 避免在经常调用的方法、循环中创建Java对象
- 4.4.6 缓存经常使用的对象
- 4.4.7 尽量不要使用finalize方法
- 4.4.8 考虑使用SoftReference
- 4.5 小结
- 第5课 表达式中的陷阱
- 5.1 关于字符串的陷阱
- 5.1.1 JVM对字符串的处理
- 5.1.2 不可变的字符串
- 5.1.3 字符串比较
- 5.2 表达式类型的陷阱
- 5.2.1 表达式类型的自动提升
- 5.2.2 复合赋值运算符的陷阱
- 5.3 输入法导致的陷阱
- 5.4 注释的字符必须合法
- 5.5 转义字符的陷阱
- 5.5.1 慎用字符的Unicode转义形式
- 5.5.2 中止行注释的转义字符
- 5.6 泛型可能引起的错误
- 5.6.1 原始类型变量的赋值
- 5.6.2 原始类型带来的擦除
- 5.6.3 创建泛型数组的陷阱
- 5.7 正则表达式的陷阱
- 5.8 多线程的陷阱
- 5.8.1 不要调用run方法
- 5.8.2 静态的同步方法
- 5.8.3 静态初始化块启动新线程执行初始化
- 5.8.4 注意多线程执行环境
- 5.9 小结
- 第6课 流程控制的陷阱
- 6.1 switch语句陷阱
- 6.1.1 default分支永远会执行吗
- 6.1.2 break的重要性
- 6.1.3 switch表达式的类型
- 6.2 标签引起的陷阱
- 6.3 if语句的陷阱
- 6.3.1 else隐含的条件
- 6.3.2 小心空语句
- 6.4 循环体的花括号
- 6.4.1 什么时候可以省略花括号
- 6.4.2 省略花括号的危险
- 6.5 for循环的陷阱
- 6.5.1 分号惹的祸
- 6.5.2 小心循环计数器的值
- 6.5.3 浮点数作循环计数器
- 6.6 foreach循环的循环计数器
- 6.7 小结
- 第7课 面向对象的陷阱
- 7.1 instanceof运算符的陷阱
- 7.2 构造器的陷阱
- 7.2.1 构造器之前的void
- 7.2.2 构造器创建对象吗
- 7.2.3 无限递归的构造器
- 7.3 持有当前类的实例
- 7.4 到底调用哪个重载的方法
- 7.5 方法重写的陷阱
- 7.5.1 重写private方法
- 7.5.2 重写其他访问权限的方法
- 7.6 非静态内部类的陷阱
- 7.6.1 非静态内部类的构造器
- 7.6.2 非静态内部类不能拥有静态成员
- 7.6.3 非静态内部类的子类
- 7.7 static关键字
- 7.7.1 静态方法属于类
- 7.7.2 静态内部类的限制
- 7.8 native方法的陷阱
- 7.9 小结
- 第8课 异常捕捉的陷阱
- 8.1 正确关闭资源的方式
- 8.2 finally块的陷阱
- 8.2.1 finally的执行规则
- 8.2.2 finally块和方法返回值
- 8.3 catch块的用法
- 8.3.1 catch块的顺序
- 8.3.2 不要用catch代替流程控制
- 8.3.3 只能catch可能抛出的异常
- 8.3.4 做点实际的修复
- 8.4 继承得到的异常
- 8.5 小结
- 第9课 线性表
- 9.1 线性表概述
- 9.1.1 线性表的定义及逻辑结构
- 9.1.2 线性表的基本操作
- 9.2 顺序存储结构
- 9.3 链式存储结构
- 9.3.1 单链表上的基本运算
- 9.3.2 循环链表
- 9.3.3 双向链表
- 9.4 线性表的分析
- 9.4.1 线性表的实现分析
- 9.4.2 线性表的功能
- 9.5 小结
- 第10课 栈和队列
- 10.1 栈
- 10.1.1 栈的基本定义
- 10.1.2 栈的常用操作
- 10.1.3 栈的顺序存储结构及实现
- 10.1.4 栈的链式存储结构及实现
- 10.1.5 Java集合中的栈
- 10.2 队列
- 10.2.1 队列的基本定义
- 10.2.2 队列的常用操作
- 10.2.3 队列的顺序存储结构及实现
- 10.2.4 循环队列
- 10.2.5 队列的链式存储结构及实现
- 10.2.6 Java集合中的队列
- 10.3 双向队列
- 10.4 小结
- 第11课 树和二叉树
- 11.1 树的概述
- 11.1.1 树的定义和基本术语
- 11.1.2 树的基本操作
- 11.1.3 父节点表示法
- 11.1.4 子节点链表示法
- 11.2 二叉树
- 11.2.1 二叉树的定义和基本概念
- 11.2.2 二叉树的基本操作
- 11.2.3 二叉树的顺序存储
- 11.2.4 二叉树的二叉链表存储
- 11.2.5 二叉树的三叉链表存储
- 11.3 遍历二叉树
- 11.3.1 先序遍历
- 11.3.2 中序遍历
- 11.3.3 后序遍历
- 11.3.4 广度优先(按层)遍历
- 11.4 森林、树和二叉树的转换
- 11.4.1 森林、树和二叉树的转换
- 11.4.2 树的链表存储
- 11.5 哈夫曼树
- 11.5.1 哈夫曼树的定义和基本概念
- 11.5.2 创建哈夫曼树
- 11.5.3 哈夫曼编码
- 11.6 排序二叉树
- 11.7 红黑树
- 11.7.1 插入操作
- 11.7.2 删除操作
- 11.8 小结
- 第12课 常用的内部排序
- 12.1 排序的基本概念
- 12.1.1 排序概述
- 12.1.2 内部排序的分类
- 12.2 选择排序法
- 12.2.1 直接选择排序
- 12.2.2 堆排序
- 12.3 交换排序
- 12.3.1 冒泡排序
- 12.3.2 快速排序
- 12.4 插入排序
- 12.4.1 直接插入排序
- 12.4.2 折半插入排序
- 12.4.3 Shell排序
- 12.5 归并排序
- 12.6 桶式排序
- 12.7 基数排序
- 12.8 小结
- 第13课 程序开发
- 13.1 扎实的基本功
- 13.1.1 快速的输入能力
- 13.1.2 编程实现能力
- 13.1.3 快速排错
- 13.2 程序开发之前
- 13.2.1 分析软件的组件模型
- 13.2.2 建立软件的数据模型
- 13.3 弄清程序的具体实现
- 13.3.1 各组件如何通信
- 13.3.2 人机交互的实现
- 13.3.3 复杂算法的分析
- 13.4 编写开发文档
- 13.4.1 绘制建模图、流程图
- 13.4.2 提供简要说明
- 13.4.3 编写伪码实现
- 13.5 编码实现和开发心态
- 13.5.1 开发是复杂的
- 13.5.2 开发过程是漫长的
- 13.6 小结
- 第14课 程序调试
- 14.1 程序的可调试性
- 14.1.1 增加注释
- 14.1.2 使用log
- 14.2 程序调试的基本方法
- 14.2.1 借助编译器的代码审查
- 14.2.2 跟踪程序执行流程
- 14.2.3 断点调试
- 14.2.4 隔离调试
- 14.2.5 错误重现
- 14.3 记录常见错误
- 14.3.1 常见异常可能的错误原因
- 14.3.2 常见运行时异常可能的错误原因
- 14.4 程序调试的整体思路
- 14.4.1 分段调试
- 14.4.2 分模块调试
- 14.5 调试心态
- 14.5.1 谁都会出错
- 14.5.2 调试比写程序更费时
- 14.6 小结
- 第15课 使用IDE工具
- 15.1 何时开始利用IDE工具
- 15.2 IDE工具概述
- 15.2.1 IDE工具的基本功能
- 15.2.2 常见的Java IDE工具
- 15.3 项目管理
- 15.3.1 建立项目
- 15.3.2 自动编译
- 15.3.3 自动部署、运行
- 15.4 代码管理
- 15.4.1 向导式的代码生成
- 15.4.2 代码生成器
- 15.4.3 代码提示
- 15.4.4 自动代码补齐
- 15.4.5 实时错误提示
- 15.5 项目调试
- 15.5.1 设置断点
- 15.5.2 单步调试
- 15.5.3 步入、步出
- 15.6 团队协作功能
- 作为版本控制工具的客户端
- 15.7 小结
- 第16课 软件测试
- 16.1 软件测试概述
- 16.1.1 软件测试的概念和目的
- 16.1.2 软件测试的分类
- 16.1.3 开发活动和测试活动
- 16.1.4 常见的Bug管理工具
- 16.2 单元测试
- 16.2.1 单元测试概述
- 16.2.2 单元测试的逻辑覆盖
- 16.2.3 JUnit介绍
- 16.2.4 JUnit的用法
- 16.3 系统测试和自动化测试
- 16.3.1 系统测试概述
- 16.3.2 自动化测试
- 16.3.3 常见自动化测试工具
- 16.4 性能测试
- 16.4.1 性能测试概述
- 16.4.2 性能测试的相关概念
- 16.4.3 常见性能测试工具
- 16.5 小结
展开全部
出版方
人民邮电出版社
人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。