2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己 计在16年要看12本书,主要涉及java基础.Spring研究.java并发.JVM.分布式之类的.在今年面试的时候深受打击,到处都是问分布式.集群的?难道现在工作两三年的都这么牛逼了?都在搞分布式.集群之类的? 2016书单如下: 1.深入理解Java虚拟机:JVM高级特性与最佳实践---(已看,预计今年看三遍) 2.Oracle查询优化改写技巧与案例---(已看) 3.Ef…
Effective Java是一本经典的书, 很实用的Java进阶读物, 提供了各个方面的best practices. 最近终于做完了Effective Java的读书笔记, 发布出来与大家共享. Background 看了历史, 写第一篇笔记居然是2016年的事情了, 中间半途而废搁置了好长时间, 去年生病的时候捡起来看了一些, 今年终于看完了. 做这个笔记的目的主要是为了个人学习, 把一本书读薄, 也留下以后可以查阅翻阅的资料. 写博客这么多年, 我觉得有一个很大的好处是, 有时候会有一个…
这是Effective Java第2章提出的第一条建议: 考虑用静态工厂方法代替构造器 此处的静态工厂方法并不是设计模式,主要指static修饰的静态方法,关于static的说明可以参考之前的博文<java中final与static的使用场景总结>. 什么是静态工厂方法? 可以参考书中的例子(摘自JDK1.7 java.lang.Boolean) public final class Boolean implements java.io.Serializable, Comparable<…
1 最小化类和成员的可访问性 (1)封装 封装对组成系统的组件进行解耦,从而允许这些组件独立开发,测试,优化,使用,理解和修改. 封装提高了软件的复用性,因为组件间的耦合度低使得它们不仅在开发环境,而且在别的环境也能变得有用. 封装降低了开发大型系统的风险,因为即使系统不可用了,但这些独立的组件却有可能仍可用. (2)对于成员(域,方法,嵌套类,或者嵌套接口),都有四种可能的访问级别 private:成员只能被声明它的顶级类访问. default:成员可以被声明它的包下面的所有类访问. prot…
十八条 接口优于抽象类 接口的特点: 1.一个类可以实现多个接口,不能继承多个类(抽象类) 2.接口不能有具体的方法实现,只定义标准类型 骨架类: 即实现一个abstract类来实现接口,提供给其他类继承,优势是,子类继承这个骨架类时,不需要实现接口中的每个标准方法,那么接口往后演进,只需要修改骨架类,不需要修改每一个子类. 十九条 接口只用于定义类型 接口只应该被用来定义类型,不应该用来导出常量,常量可以用一般类名来修饰…
这一章主要讲解Object类中的方法, Object类是所有类的父类,所以它的方法也称得上是所有对象都通用的方法 第八条 覆盖equals时需要遵守的约定 Object中的equals实现,就是直接对对象进行相等的比较: public boolean equals(Object obj) { return (this == obj); } 那么什么时候需要覆盖equals呢? 当你的类有自己的逻辑相等,而不是对象相等时,应该自己实现equals,比如Date和Interger,他们的相等比较不仅…
一.访问共享的可变数据时要同步 1.synchronized关键字既然保证访问的可见性也能保证原子性.而volatile修饰符只能保证变量的线程可见性. 2.增量操作符等不是原子性,多线程操作时可能导致结果不正确. 3.尽量将可变数据限制在单个线程中. 4.多个线程共享可变的数据时,每个读或者写数据的线程都必须同步. 二.避免过度同步 1.在同步的方法或者代码块中,注意多态等级制引入的客户端的外来输入,要保证其没有破坏同步机制和造成死锁. 2.尽量把对外来方法的调用移动到同步区域之外. 3.在同…
一.将局部变量的作用域最小化 1.在第一次使用变量的地方声明 2.几乎每个变量的声明都应该包含一个初始化表达式:try-catch语句是一个例外 3.使方法小而集中是一个好的策略 二.for-each循环优先于传统的for循环 1.for-each循环在简洁性和预防bug方面有着传统的for循环无法比拟的优势,而且没有性能损失. 2.三种不能使用for-each循环的情况: a.过滤:需要显式的迭代器的remove方法 b.转换:需要显式的迭代器或数组索引,以便设定值 c.平行迭代:多个相关集合…
一.考虑用静态工厂方法代替构造器 这里的静态工厂方法是指类中使用public static 修饰的方法,和设计模式的工厂方法模式没有任何关系.相对于使用共有的构造器来创建对象,静态工厂方法有几大优势: 1.静态工厂方法有名称:通过有意义的静态工厂方法名称可以很好的表达工厂方法的作用,易于区别功能相似的多个静态工厂方法. 2.静态工厂方法可以有更复杂的生产对象逻辑,不仅仅是新建一个对象:既可以新建一个对象,也可以使用缓存的对象. 3.静态工厂方法可以返回原返回类型的任何子类型的对象:由于接口不能有…
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3537576.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验. 第1条:用静态工厂代替构造函数 1. 形式 public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } 2. 优点: 可以有名称 不一定要创建新对象,可以返回已有的对象 可以返回子类类…