`

《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第三版1

    《Effective Java》是Java编程领域的一本经典著作,由Joshua Bloch撰写,该书的第三版继续提供了关于如何编写高效、优雅、可维护的Java代码的指导。以下是基于给出的目录和部分内容提取的一些关键知识点: ### 第一...

    effective-java.pdf

    标题“effective-java.pdf”与描述“effective-java.pdf”表明本文档是关于Java编程实践的指南,且内容可能来自于一本名为《Effective Java》的书籍,该书是由Joshua Bloch编写,被广泛认为是Java编程的权威指南。...

    effective java 读书笔记

    《Effective Java》是Java开发领域的经典著作,作者Joshua Bloch深入浅出地阐述了编写高效、健壮的Java代码的技巧和最佳实践。以下是对该书部分内容的详细解释: 1. **产生和销毁对象** - Item1:静态工厂方法相比...

    effecctivejava 第三版中文

    《Effective Java》是Java编程领域的一本经典著作,由Joshua Bloch撰写,现在已经更新到第三版。这本书深入探讨了如何编写高效、可维护且设计良好的Java代码,是每一个Java开发者提升技能的重要参考资料。以下是对该...

    Effective Java.zip

    - 抽象类与接口:讨论了何时使用抽象类,何时使用接口,以及如何设计良好的API。 - 接口的默认方法:Java 8引入的新特性,允许在接口中添加非抽象方法的实现,增强了接口的功能。 - 实现类的继承策略:建议尽量...

    effective-java 配套代码

    《Effective Java》是Java开发领域的一本经典著作,由Joshua Bloch撰写,书中提出了一系列编程最佳实践和设计模式,帮助开发者写出更高效、更可靠、更易于维护的Java代码。配套代码`effective-java-examples-master`...

    effective enterprise java 中文版

    《Effective Enterprise Java》是一本由James Gosling、Bill Venners和Cay S. Horstmann合著的经典著作,旨在帮助Java开发者深入理解和利用企业级Java技术。这本书提供了78条具体的建议,涵盖了从设计模式到并发编程...

    Effective Java 第三版

    书中的一些关键知识点可能包括:理解对象的创建和销毁、接口设计、类设计、方法设计、泛型的使用、异常处理、并发编程、Java集合框架的使用和扩展等等。在学习这些内容时,读者将被引导深入理解Java语言的细节,并...

    Effective-Java:Effective Java中文版第二版示例代码

    9. **集合与迭代器**:理解各种集合接口(如List、Set、Map)及其实现类的特性和适用场景,例如ArrayList和LinkedList的区别,以及使用迭代器遍历集合的正确方式。 10. **并发编程**:学习并发工具类如Semaphore、...

    effectiveJava的笔记

    3. **接口与抽象类**:讨论了接口和抽象类在设计上的差异,强调接口用于定义类型,抽象类用于共享实现,以及Java 8引入的默认方法和静态方法。 4. **枚举**:介绍枚举类型的强大之处,如枚举的自动序列化、枚举常量...

    Effective Enterprise Java

    1. **模块化设计**:书中强调了模块化设计的重要性,鼓励开发者使用接口和抽象类来定义组件边界,降低耦合度,便于测试和维护。此外,还介绍了如何合理地利用Java的包结构和依赖管理工具来实现有效的模块划分。 2. ...

    Effective-Java-2nd-Edition-(May-2008).zip_effective java

    7. **接口与抽象类**:解释了接口和抽象类的选择依据,以及何时使用单例接口,何时使用具体类作为单例实现。 8. **迭代器与foreach循环**:推荐使用增强的for-each循环(foreach)进行迭代,因为它更简洁且不易出错...

    Effective-Java读书笔记

    8. **利用接口隐藏实现细节**:通过定义接口并让实现类实现该接口,可以更好地隐藏实现细节,提高代码的可扩展性和灵活性。 9. **谨慎地覆盖clone()**:Java的clone()方法有其复杂性,除非有特殊需求,否则通常建议...

    java源码测试-effective-java:读EffectiveJava(中文版第3版)阅读源码测试案列

    《Effective Java》是Java开发领域的经典著作,由Joshua Bloch编写,中文版第三版的出版为Java开发者提供了深入理解语言特性和最佳实践的机会。这本书包含了一系列编程实践和设计模式,旨在帮助程序员写出更高效、更...

    EffectiveJava:有效的 Java 示例

    《EffectiveJava》是Java开发领域的经典著作,由Joshua Bloch撰写,提供了许多关于如何编写高效、可维护和设计良好的Java代码的实用建议。这本书的第2版在原有的基础上进行了更新,以适应Java语言的新发展。现在,...

    java优秀源码-Effective-Java-Concepts:Java源代码可以强化概念,我正在从JoshuaBloch的出色著作“Eff

    在阅读和研究《Effective Java》中的源码时,我们可以关注以下几个关键知识点: 1. **单例模式**:书中的Item 3 "考虑单例类" 提到了多种实现单例的策略,如懒汉式、饿汉式以及枚举单例。理解这些方式的优缺点对于...

    Java-Effective:Java Effective 2nd Edition书中的源代码

    - **接口优于抽象类**:在Java中,由于单继承限制,接口通常是实现多态的首选。 2. **重用已存在的类**: - **优先使用现有类库**:Java拥有丰富的标准库,合理利用可以减少重复工作。 - **组合优于继承**:通过...

Global site tag (gtag.js) - Google Analytics