从五月份开始,用了将近两个月的时间,学习了Joshua Bloch大神的Effective Java,最近两个星期,开始上手另一本Java著作——周志明老师的深入理解Java虚拟机,已经学习了前两个章节,在本地编译了HotSpot虚拟机的源码,并且了解了Java虚拟机的内存区域。
没有像之前那样看完一章写一篇博客,一是由于这本书太精彩了,看得太痴迷,不想打断思路去写文章;二是感觉Java虚拟机的知识点比较多,要是每一章都总结下来的话,基本都是照抄周老师的了,所以打算自己有点个人的体会和理解之后,再把书中的知识点浓缩出来,写成博客。
读Effective Java的过程,也是对JavaSE深入学习的一个过程
从2017/05/14到2017/07/02,用了接近两个的时间,读完了Effective Java这本书,并且把书里的精华部分和个人理解,写成11篇博文,发表在专栏里。这十一篇博客,对Java泛型、枚举、对象创建、equals、hashcode、继承、复合、类、接口、方法和异常等JavaSE的知识点作了较为深入的讲解,我本人也感觉在读完这本书之后,Java的编程功底加深了不少。
神奇的Joshua Bloch
这本书的作者,Joshua Bloch,是Java集合框架,也就是我们常说的Collection Framework的重要贡献者,无论是HashMap,还是ArrayList,还是其他很多我们常用的集合框架,随处可见他的身影。
HashMap:
ArrayList:
因此,书中有那么多对于Java源码的精彩解读也就不足为奇了。
神奇的Java源码
读完了这本书,再来看Java的源码,就会发现源码中就有很多值得学习的地方,比如:
ConcurrentHashMap的代码片段, 优雅漂亮且详细的注释 :
/* ---------------- Constants -------------- */
/**
* The default initial capacity for this table,
* used when not otherwise specified in a constructor.
*/
static final int DEFAULT_INITIAL_CAPACITY = 16;
/**
* The default load factor for this table, used when not
* otherwise specified in a constructor.
*/
static final float DEFAULT_LOAD_FACTOR = 0.75f;
/**
* The default concurrency level for this table, used when not
* otherwise specified in a constructor.
*/
static final int DEFAULT_CONCURRENCY_LEVEL = 16;
HashMap的类注释片段,简单几句注释,告诉我们异常只是用来提示代码有bug,而不是用来实现功能:
* <p>Note that the fail-fast behavior of an iterator cannot be guaranteed
* as it is, generally speaking, impossible to make any hard guarantees in the
* presence of unsynchronized concurrent modification. Fail-fast iterators
* throw <tt>ConcurrentModificationException</tt> on a best-effort basis.
* Therefore, it would be wrong to write a program that depended on this
* exception for its correctness: <i>the fail-fast behavior of iterators
* should be used only to detect bugs.</i>
HashMap的put方法,资源直到用到时才去申请:
public V put(K key, V value) {
if (table == EMPTY_TABLE) {
inflateTable(threshold);
}
if (key == null)
return putForNullKey(value);
int hash = hash(key);
int i = indexFor(hash, table.length);
for (Entry<K,V> e = table[i]; e != null; e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
modCount++;
addEntry(hash, key, value, i);
return null;
}
所以,学习Java源码,也是一项非常值得去做的事情。
专栏迭代计划
正如开头所说的,最近在学习虚拟机,后续也会把学到的知识在这个专栏进行分享,因此这个专栏也就成了一个Java著作的学习心得分享专栏了,计划今年读完Effective Java、深入理解Java虚拟机、Java并发编程实践三本书,另外一本计划阅读的书是Head First 设计模式。因此假如这个专栏是一个产品的话,那么可以预知的会有4个迭代:
迭代1 Effective Java —— 深入JavaSE —— 2017/05~2017/06 —— 已完成
|
迭代2 深入理解Java虚拟机 —— Java虚拟机 —— 2017/07~2017/09 —— 进行中
|
迭代3 Java并发编程实践 —— Java并发 —— 2017/10~2017/12 —— 未开始
|
迭代4 Head First 设计模式 —— 设计模式 —— 2018/01~2018/03 —— 未开始
其实与其说这是专栏的迭代计划,不如说是我个人的迭代计划吧,每个人都可以认为是一个产品,不停的迭代、进步,追赶着时代的步伐。
加油!共勉!