Effective Java2读书笔记-类和接口(四)
第19条:接口只用于定义类型
这一条就举了一个反例,说有些接口中只包含常量。这是对接口的不良使用。要实现相同的功能,应该使用不可实例化的工具类(第4条说过)。
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;
}
另外,还学了一招,如果大量使用的话,就需要一直用类似PhysicalConstants.AVOGADROS_NUMBER的方式来调用。这时,可以用java的静态导入机制(只是小技巧)。就是采用import static com.effectivejava.PhysicalConstants.*;的方式导入类,然后就可以直接使用常量AVOGADROS_NUMBER,而不必要加类名。
参考http://www.cnblogs.com/mengdd/archive/2013/01/23/2873312.html
第20条:类层次优于标签类
这里面也是举了一个反例(标签类)。
class Figure {
enum Shape {
RECTANGLE, CIRCLE
}; final Shape shape;
//矩形有长和宽
double length;
double width;
//圆形有半径
double radius; Figure(double radius) {
shape = Shape.CIRCLE;
this.radius = radius;
} Figure(double length, double width) {
shape = Shape.RECTANGLE;
this.length = length;
this.width = width;
} double area() {
switch (shape) {
case RECTANGLE:
return length * width;
case CIRCLE:
return Math.PI * (radius * radius);
default:
throw new AssertionError();
}
}
}
这个类能够表示圆形或者矩形。但是层次很不分明,很乱。
正确的实现,也就是我们常用的实现,应该是写一个图形类作为基类,然后圆形类和矩形类分别实现。
abstract class Figure {
abstract double area();
} class Circle extends Figure {
final double radius; Circle(double radius) {
this.radius = radius;
} double area() {
return Math.PI * (radius * radius);
}
} class Rectangle extends Figure {
final double length;
final double width; Rectangle(double length, double width) {
this.length = length;
this.width = width;
} double area() {
return length * width;
}
}
Effective Java2读书笔记-类和接口(四)的更多相关文章
- Effective Java2读书笔记-类和接口(一)
第13条:使类和成员的可访问性最小化 设计良好的模块的模块与设计不好的模块区别在于,设计良好的模块会隐藏所有的实现细节,把它的API与他的实现清晰地隔离开来.然后模块之间只通过API通信. 信息隐藏之 ...
- Effective Java2读书笔记-类和接口(五)
第21条:用函数对象表示策略 这一条其实也没说啥,就是策略模式.碰到这种场景时,定义一个策略接口,然后不同策略子类实现它,主类包含这个接口的引用就可以了. 第22条:优先考虑静态成员类 嵌套类是指被定 ...
- Effective Java2读书笔记-类和接口(三)
第17条:要么为继承而设计,并提供文档说明,要么就禁止继承 第18条:接口优于抽象类 这两条中,提到了一个很重要的概念骨架实现.也就是说,抽象类实现接口的形式.这样的好处是,接口本来不能提供默认的实现 ...
- Effective Java2读书笔记-类和接口(二)
第15条:使可变性最小化 通过一个复数类来看不可变类. public final class Complex { private final double re; private final doub ...
- Effective Java读书笔记--类和接口
1.使类和成员的可访问性最小化不指定访问级别,就是包私有.protected = 包私有 + 子类一般private不会被访问到,如果实现了Serializable,可能会泄露.反射.final集合或 ...
- Effective Java2读书笔记-创建和销毁对象(四)
第7条:避免使用终结方法 这一条讲的简直是不知所云.先简单记下来其中说出的几条: ①显式终止方法的典型例子有InputStream.OutputStream和java.sql.Connection上的 ...
- Effective Java2读书笔记-对于所有对象都通用的方法(三)
第12条:考虑实现Comparable接口 这一条非常简单.就是说,如果类实现了Comparable接口,覆盖comparaTo方法. 就可以使用Arrays.sort(a)对数组a进行排序. 它与e ...
- Effective Java2读书笔记-对于所有对象都通用的方法(二)
第10条:始终要覆盖toString 这一条没什么好讲的,就是说默认的toString方法打印出来的是类名+@+十六进制哈希码的值.我们应该覆盖它,使它能够展示出一些更为详细清晰的信息,这个看实际情况 ...
- 《Java核心技术》 -- 读书笔记 ② - 类 | 对象 | 接口
对象vs对象变量 “对象” 描述的是一个类的具体实例,他被java虚拟机分配在 "堆" (Heap)中. “对象变量” 为一个对象的引用(对象变量的值=记载着具体对象的位置/地址) ...
随机推荐
- Android Studio Gradle Running报错:Failed to complete Gradle execution.
错误信息如下图所示: 重启AndroidStudio问题解决.
- Delphi keydown与keyup、keypress的区别(KeyDown 和KeyUp 通常可以捕获键盘除了PrScrn所有按键)
Shift 是一个集合变量.type TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble ...
- osip及eXosip的编译方法
osip及eXosip的编译方法 在最新版本的osip2.exosip2中不支持在VC6.0下编译osip.exosip协议栈的方法 说明: 1.以下文章中的osip版本为3.1.0 2.eXosip ...
- VS调试异常代码 异常:HRESULT: 0x80070057 (E_INVALIDARG) 的处理
碰到这个异常的原因很偶然: 现象:Solution在ReBuild过程中断电了,来电恢复了,重析编译整个Solution不报错,但在浏览页面时始终无法正常浏览,而在design的视图中,每个aspx的 ...
- Windows系统基本概念
windows API:被文档化的可以调用的子例程,如CreateProcess 原生的系统服务(执行体系统服务):未被文档化的.可以再用户模式下调用的底层服务,如NtCreateProcess 内核 ...
- jdbc调用mysql存储过程实现代码带有输入和输出
转载自 http://www.jb51.net/article/34747.htm 1. 创建存储过程 建立一个MySQL的存储过程 add_pro 复制代码代码如下: delimiter // dr ...
- python calendar标准库基础学习
# -*- coding: utf-8 -*-# 作者:新手__author__ = 'Administrator'#标准库:日期时间基础学习:calendar:处理日期#例1import calen ...
- maven java.lang.OutOfMemoryError:PermGEn space
配置环境变量: JAVA_OPTS-Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m MAVEN_OPTS-Xms256m -Xmx ...
- css中的字体样式及元素样式
css中的字体样式一般包含有就9中,常见的有7种.这7种依次为: 1.字体样式:font-family: 2.字体大小:font-size: 3.字体加粗:font-weight: 4.字体斜体:fo ...
- hdu 4405 Aeroplane chess (概率DP)
Aeroplane chess Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...