Effective Java专栏总结和全面升级通知

从五月份开始,用了将近两个月的时间,学习了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 —— 未开始


其实与其说这是专栏的迭代计划,不如说是我个人的迭代计划吧,每个人都可以认为是一个产品,不停的迭代、进步,追赶着时代的步伐

加油!共勉!


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值