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

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

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

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

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

2017年02月09日 0条评论 8170点热度 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条评论 6693点热度 2人点赞 阅读全文

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

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