![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
effective java
文章平均质量分 86
xflame
这个作者很懒,什么都没留下…
展开
-
第4章 类和接口
16、复合优先于继承 继承的功能非常强大,但它违背了封装原则。只有当子类和超类之间确实存在子类型关系时,使用继承才是恰当的。即便如此,如果子类和超类处在不同的包中,并且超类并不是为了继承而设计的,那么继承会很脆弱(子类必须跟着其超类的更新而演变)。原因在于超类在后续的发行版本中可以获得新的方法,一旦超类增加了新的方法,很可能仅仅调用了这个未被子类覆盖的新方法,将“非法”元素添加原创 2013-08-06 10:25:48 · 642 阅读 · 0 评论 -
第5章 泛型
23、请不要在新代码中使用原生态类型 如原生态类型List和参数化的类型List之间的区别,前者逃避了泛型检查,后者则明确告知编译器,它能够持有任意类型的对象。如(注意List是接口): List ls = newLinkedList();//可以 ListObject> ls2 = new LinkedList();//错误 在不确定或者不在乎集合中的元素类型原创 2013-08-06 10:27:00 · 644 阅读 · 0 评论 -
第6章 枚举和注解
30、用enum代替int常量 枚举类型是指由一组固定的常量组成合法值的类型。int枚举模式如public static final int APP = 0;int枚举是编译时常量,被编译到使用它们的客户端中,如果其发生变化,客户端必须重新编译否则导致行为的不确定性。 java枚举类型基本思想:它们就是通过公有的静态final域为每个枚举常量导出实例的类。它提供了编原创 2013-08-07 13:58:34 · 682 阅读 · 0 评论 -
第7章 方法
38、检查参数的有效性 非公有方法应该使用断言(assertion)来检查它们的参数。如在方法里assert a!=null; 但并不是说对参数的任何限制都是好事。有效性检查工作非常昂贵,而且有的有效性检查已经隐含在计算过程中。假如方法对于它所能接受的所有参数值都能够完成合理的工作,那么对参数的限制应该是越少越好。每当编写方法和构造器的时候,应该考虑它的参数有哪些限原创 2013-08-08 13:31:08 · 576 阅读 · 0 评论 -
第8章 通用程序设计
45、将局部变量的作用域最小化 要使局部变量的作用域最小化,最有力的方法就是在第一次使用它的地方声明。(因为较早的程序设计语言(如C语言)要求局部变量必须在一个代码块的开头处进行声明,导致现在习惯性这么做···。java允许在任何可以出现语句的地方声明变量)。 声明一般应该包含初始化表达式。但也有例外,如果表达式为函数,且该函数有异常,则声明在外,初始化用try-c原创 2013-08-09 14:57:03 · 679 阅读 · 0 评论 -
第9章 异常
57、只针对异常的情况才使用异常 其他情况用异常不正确的原因:(1)异常机制的设计初衷是用于不正常的情形,很少会有JVM试图对它进行优化;(2)把代码放在try-catch块中反而阻止了现代JVM实现本来可能要执行的 特定优化;(说到底就是异常阻止了JVM的优化···) 设计良好的API不应该强迫它的客户端为了正常的控制流而使用异常。 总之,异常是为原创 2013-08-14 12:16:16 · 674 阅读 · 0 评论