`

《effective java》之三:类和接口

    博客分类:
  • Java
阅读更多

第13条:使类和成员的可访问性最小化:

实例域决不能是公有的。如果域是非final的,或者指向的是一个可变对象的final引用,那么一旦这个实例域变成公有,这个公有域就不是线程安全的了,很有可能出问题。

 

第14条:在公有类中使用访问方法而非公有域

 

第15条:使可变性最小化:

为了使类成为不可变,遵循下面5条原则:

* 不要提供任何会修改对象状态的方法 mutator

* 保证类不会被扩展,可将类声明为final,或者是将所有构造器变为私有或者包级私有,并添加静态工厂方法。

* 所有域都是final,并且是private的

* 确保对于任何可变组件的互斥访问

public final class Complex {
	private final double re;
	private final double im;

	private Complex(double re, double im) {
		this.re = re;
		this.im = im;
	}

	public static Complex valueOf(double re, double im) {
		return new Complex(re, im);
	}

	public static Complex valueOfPolar(double r, double theta) {
		return new Complex(r * Math.cos(theta), r * Math.sin(theta));
	}
}

 

第16条:复合优于继承:

只有当子类和超类确实存在is-a的关系的时候才用继承,其他一律用组合。

 

第17条:要么为继承而设计,并提供文档说明,要么就禁止继承:

为了允许继承,构造器绝对不能调用可被覆盖的方法。

 

第18条:接口优于抽象类:

 

第19条:接口只用于定义类型:

常量接口模式是对接口的不良使用。

如果要导出常量,有几种合理的方案:

* 如果这些常量与某个现有类或者接口紧密相关,就应该把这些常量添加到这个类或者接口中。

* 如果这些常量最好被看做枚举类型成员,就应该用枚举类型 enum type来导出这些常量。

* 如果是其他情况,则应该使用不可实例化的工具类utility class来导出这些常量。

public class PhysicalConstants {
	private PhysicalConstants() {
	} // Prevents instantiation

	// Avogadro's number (1/mol)
	public static final double AVOGADROS_NUMBER = 6.02214199e23;

	// Boltzmann constant (J/K)
	public static final double BOLTZMANN_CONSTANT = 1.3806503e-23;

	// Mass of the electron (kg)
	public static final double ELECTRON_MASS = 9.10938188e-31;
}

 简而言之:接口应该只是用来定义类型,它们不应该被用来导出常量。

 

第20条:类层次优于标签类:

 

第21条:用函数对象表示策略:

 

第22条:优先考虑静态成员类:

 

本人博客已搬家,新地址为:http://yidao620c.github.io/

分享到:
评论

相关推荐

    Effective.Java_Java8_并发_java_effectivejava_

    目录:一、创建和销毁对象 (1 ~ 7)二、对于所有对象都通用的方法 (8 ~ 12)三、类和接口 (13 ~ 22)四、泛型 (23 ~ 29)五、枚举和注解 (30 ~ 37)六、方法 (38 ~ 44)七、通用程序设计 (45 ~ 56)八、异常 ...

    java逻辑思维笔试题-effective-java-3rd-edition:有效的Java第3版注释

    java逻辑思维笔试题Effective Java - 第三版笔记 章节索引 02 - 创建和销毁对象 03 - 所有对象通用的方法 04 - 类和接口 05 - 泛型 06 - 枚举和注释 07 - Lambda 和流 08 - 方法 09 - 通用编程 10 - 例外 11 - 并发 ...

    Effective C++ 中文版

    有人说C++程序员可以分成两类,读过Effective C++的和没读过的。世界顶级C++大师Scott Meyers成名之作的第三版的确当得起这样的评价。当您读过《Effective C++中文版(第3版改善程序与设计的55个具体做法)》后,就...

    java外卖系统源码-effective-java-summary-3rd-edition:有效的Java摘要,第3版

    对于顶级(非嵌套)类和接口,只有两种可能的访问级别:包私有和公共。 如果包私有的顶级类或接口仅被一个类使用,请考虑使顶级类成为使用它的唯一类的私有静态嵌套类 成员(字段、方法、嵌套类和嵌套接口) 修饰符 ...

    java7hashmap源码-for-java:java学习笔记

    ​ 前者是Collection层次结构中的根接口,而“Collections”是一个提供静态方法来处理某些Collection类型的类。 3. 单例属性 单例模式: 保持构造器私有【private】,并导出【提供外界访问】公有的静态成员 客户端...

    java8集合源码-Effective-Kotlin-Examples:注释和示例

    java8集合源码有效的 Kotlin - 示例 免责声明:这个存储库包含我在阅读优秀书籍 Effective Kotlin 时收集的个人笔记和示例。 它绝不是本书的摘录或副本。 我鼓励所有 Kotlin 开发人员购买和阅读这本书。 第 1 部分:...

    jicheng400#effective-java-3rd-chinese#64. 通过接口引用对象1

    声明时应养成这样的习惯:// Good - uses interface as typeSet<Son> sonSet = new LinkedHashSet

    唯品会Java开发手册.zip

    结合唯品会的内部经验,参考《阿里巴巴Java开发手册》《Clean Code》、《Effective Java》等重磅资料进行了大幅定制,包含核心基础类库VJKit ,问题排查工具VJMap 和 VJTop 三部分。 开发工具在软件开发生命周期中...

    代码随想录最新第三版-最强八股文

    Java基础、Java内存模型、Java面向对象、Java集合体系、接口、Lambda表达式、类加载机制、内部类、代理类、Java并发、JVM、Java后端编译、Spring 3. Go defer底层原理、goroutine、select实现机制 4. 算法学习 数组...

    程序员面试刷题的书哪个好-CodeStyleGuidelines:代码风格指南

    安装后重启,在Settings中找到和选中FindBugs-IDEA选项,在Plugins中勾选Findbugs plugin for Android启用Android的代码检查,在Filter里Exclude filter files中添加项目根目录下的findbugs-android-exclude.xml,这...

    asp.net知识库

    深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述的补白 asp.net 运行机制初探(httpModule加载) 利用反射来查看对象中的私有变量 关于反射中创建类型实例的两种方法 ASP.Net应用程序的多进程模型 NET委托...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    HybridApp 一种可以下载的Native App,其用户界面的全部或者部分元素在嵌入式浏览器组件(WebView之类的)里面运行 优雅降级 一开始就构建站点的完整功能,然后针对浏览器测试和修复。认为应该针对那些最高级、最...

Global site tag (gtag.js) - Google Analytics