并不是原文的简单复制, 而是记录对原则的思考。特别是对于自己项目的一些反思。 原文是Java版本, 有一些规则是否非常符合我当前主力语言Python来使用?记录我的一些相关思考 排版原因,原文的代码讲解其实看的并不是非常明白。希望通过电子档更清晰明白的展示出来。加深自己的理解,也方便其他人学习 这本书的绝大部分思想都是非常合适其他语言的。只不过可能需要根据具体情况具体分析。 比如原则4要求“参数个数<=4”. 这一点非常适用Java,但是对于Python其实有更好的解决方案,一些很著名的开源类库也没有这样做。…

2020年06月30日 0条评论 5157点热度 0人点赞 阅读全文

Item 45: 将局部变量的作用域最小化 书说: 推荐在第一次使用这个局部变量的时候才初始化。如果初始化的条件还不足,说明还没到时候初始化。例外: try-catch Item 46: for-each 优于for循环与while循环 主要是for-each 的代码看起来更加简洁, 效率稍微提高。 Item 49: 基本类型优于装箱类型 我觉得看stackoverflow的这一篇帖子说得更清楚一些: http://stackoverflow.com/questions/5199359/why-do-people-…

2017年03月16日 0条评论 13307点热度 0人点赞 阅读全文

Item 38: 检查参数的有效性 比较推荐的做法是,在方法体的开头或者在构造函数之中就对参数进行有效性检查。尽早的检查,对调试的帮助越大。 在文中出现提到了java的断言(Assertions)机制。 正确使用Assert的方法应该是: 可以在方法体的开头的地方进行有效性检查 普通的运行方法,断言不会起作用(会直接略过)。除非在运行的时候加上参数:-ea / -enableassertaions。 通常Assert的代码不应该在Production代码之中,只会出现在debug/test/dev的阶段。 除非参数…

2017年03月13日 0条评论 10687点热度 1人点赞 阅读全文

个人认为本章比较重要的有下面几个Item: Item 30:  使用enum代替int Item 32: 使用EnumSet 代替bit field Item 35: 注解优先于命名模式 其他几个Item可能学习不是那么深刻,并没深入记录。 本文原创, 原文地址:http://www.flyml.net/2017/03/09/effective-java-ch6-enum-annotation   Item 30: 使用enum代替int (Enum初步介绍) 虽然直译过来是"使用enum代替int", …

2017年03月09日 0条评论 9790点热度 0人点赞 阅读全文

大家都知道,不同的platform的换行符都不太一样, 特别是经常在Mac/Windows上面进行开发, 在Linux上面进行部署。 那么如何正确的答应换行符呢?   使用System.out.println 这应该是最常用的方式了 使用Sytem.out.printf的时候, 使用 %n 而不是 \n

2017年03月03日 0条评论 16143点热度 1人点赞 阅读全文

Item 13: 使类及其成员的可访问性最小 除非真的有必要, 否则不要让外界能访问这个类或者成员变量。 因此, 再复习一下Java之中几种访问级别: 作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × package √ √ × × private √ × × × 没有修饰符的时候, 默认为package级别。 当我们覆盖了父类的某个方法的时候, 不能使其访问级别提高。 比如原来是protected, 不能升级成为public。 一种不…

2017年02月16日 0条评论 9945点热度 0人点赞 阅读全文

引言 虽然JDK8出来蛮久了, 但是很多JDK8的新特性并不了解。 比如在JDK8的接口之中, 新增了今天的主角default methods 要是您已经知道了这个东西, 还请轻喷! 比如下面的示例代码: [crayon-65f960fab582b941134115/] 注意上面Math 之中的 default int multiply 。在这个方法之中, 已经有了一个默认的实现 为什么搞了这个东西出来? 起因是JDK8之中引入了Lambda表达式。 在很多接口之中, 需要新增一些方法。 但是, 如果这些通用接口里…

2017年02月10日 0条评论 11178点热度 1人点赞 阅读全文

在《[读书笔记]《Effective Java》第二章》[http://www.flyml.net/2017/02/05/effective-java-chapter-1/] 的Item2 提到: 使用builder替代多个参数的constructor 正好, 我要基于Selenium WebDriver 写一个爬虫。因为实际情况不一样, 有的时候需要使用不同的userAgent, 比如模拟移动浏览器, 有的时候需要挂不同的代理。 而且, 未来还很有可能通过更多的参数构建不同的WebDriver实例。其中,最重要的…

2017年02月09日 0条评论 10944点热度 0人点赞 阅读全文

本章概括 本章包括以下几个Item: Item 8: 覆盖equals请遵守通用规定 Item 9: 覆盖equals时一定要覆盖hashCode Item 10: 始终要覆盖toString() Item 11: 谨慎的覆盖clone Item 12: 考虑实现Comparable接口 由于个人的工作原因, 在实际工作之中, 仅仅接触过#3与#5, 从未考虑过覆盖equals() 与 clone(), 因此这一章只读了 #3与#5 Item 10 : 始终要覆盖toString() 忽然发现, 这真的是一个非常方…

2017年02月06日 0条评论 9381点热度 2人点赞 阅读全文

Item 1: 使用静态工厂方法而不是构造函数 优势: 有名字 比如BigInteger.probablePrime() 一看就知道是返回一个BigInteger素数. 比较不好的做法是构造函数的重载, 通过修改参数的顺序达到不同的功能 不需要每次都创建新的对象. 比如如下代码: [crayon-65f960fab5d83499623576/]   如果创建类的开销比较大, 那么对性能的提升就更明显了 能返回的类型选择更多, 不一定是当前类的类型 这一点非常好理解~ 在创建参数化类型实例的时候, 代码会更…

2017年02月05日 1条评论 9765点热度 2人点赞 阅读全文