展开全部

主编推荐语

这是前辈对晚辈的指点,解答的都是初学者会遇到的疑难问题,疯狂源自于梦想,技术成就辉煌。

内容简介

在《疯狂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日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。