如何研究Java的API?

研究源码时候,首先会看到一个类,可是这个类的复杂度以及到底作了什么,并非很清楚,这里总结了一些经验。
1 对象是实体类,仍是抽象类,仍是接口。接口类看有几个接口以及默认方法,接口越多职责越多,接口参数越多发生耦合可能性越大。抽象类看抽象方法,是不是模板模式,是不是钩子方法,是不是流程的一部分,看是否提供了相应层级的抽象程度。实体类的话看继承结构,是否有defalut修饰符,从而是能在包内使用,或者是不是protected,是否为了给子类继承用的。若是有内部类,须要看是不是静态内部,仍是非静态内部,两种设计大相径庭。这里类,方法,属性修饰符很是重要。final,protected,static,private等等....
2 对象如何覆写Object和经典接口。经典方法toString,clone,hashCode,equals方法必看。如何实现经典的接口,如Comparable,Cloneable, Serializable(序列化的transient字段),Iterable接口,这些接口影响了是否能做为集合的元素或者key使用?原子变量没有equals和hashcode方法。
3 实例属性字段。字段越多,状态越多,维护状态付出代价越高,从而能够看出类的复杂度,以及状态流转。对象是否有生命周期的概念?是否用了复杂的算法实现逻辑?若是静态字段过多,是否影响OO?做者自己是否理解OO??
4 如何实例化。是静态工厂仍是new,仍是便利类实例化?仍是builder?仍是工厂建立?仍是对象池化呢?仍是反射实例化?以及建立代价如何,好比数据库链接建立代价高。effective java第一章+设计模式建立型足矣。
5 如何处理异常。 异常是客户端使用API的“感到意外的”状况。方法入口参数校验,受检异常仍是非受检异常?并发包核心异常是中断异常。InterruptedException很是重要。
6 线程安全。是否不可变,是否有安全和活跃性问题,Integer不可变。
7 对象名字是否恰当和通用。对象名字是否有隐喻,对象是否可扩展,可配置,对象是否依赖过多别的对象致使理解起来复杂,对象到底作了什么,与别的对象职责是否清晰?
8 是否用了设计模式和Idiom? 是否有领域内通用模式,好比并发领域的:线程池,Mutex,Lock,信号量,闭锁,条件队列,阻塞队列,forkjoin等不区分语言,领域通用,好比IO,这些应该是通用的模式。GOF设计模式分为三大类,这块主要考察结构和行为模式。
9 类的继承结构。若是类的继承结构复杂,那么每一层继承子类到底实现了什么功能?是否合理的实现了继承?Map是接口,AbstractMap实现了骨架是集合框架的核心思路。
10 具体方法实现。 API实现的核心。是否行数太多?是否注释清晰?(具体没想好怎么快速理解)
11 DEMO。看着API是否能够写出简单的DEMO来?是否方便测试?
12 性能如何。 集合的压力测试能够看出优化效果。
13 新收获和反思。是否有新理解,不怕重复看,怕重复没有新的理解和认识。若是是我,我该如何实现?为何别人能作到,而我作不到?我该如何改进和超越?是否能够进一步封装?是否开源项目已经进一步封装了?(Guava对于JDK,SpringJDBC+事务对于原生JDK-JDBC的业界经典案例),技术是否有亮点?java

相关文章
相关标签/搜索