一、异常(Exception)
1、异常类型
异常类型 | 说 明 |
Exception | 异常层次结构的根类 |
ArithmeticException | 算术错误情形,如以零作除数 |
ArrayIndexOutOfBoundsException | 数组下标越界 |
NullPointerException | 尝试访问 null 对象成员 |
ClassNotFoundException | 不能加载所需的类 |
InputMismatchException | 欲得到数据类型与实际输入类型不匹配 |
IllegalArgumentException | 方法接收到非法参数 |
ClassCastException | 对象强制类型转换出错 |
NumberFormatException | 数字格式转换异常,如把"ab"转换成数字 |
2、try-catch-finally处理异常
-
toString ( )方法,显示异常的类名和产生异常的原因
-
void printStackTrace() 输出异常的堆栈信息
-
String getMessage()返回异常信息描述字符串
要点:
-
finally在实际开发中的使用场合: IO流的管理、数据库连接的关闭、socket的关闭。
-
System.exit(0); 终止当前正在运行的 Java 虚拟机。
3、异常处理:throw、throws
- 抛出运行时异常和Checked异常的区别
- 抛出Checked异常,该throw语句要么处于try块中,要么在方法中用throws抛出
- 抛出运行时异常,没有以上要求
4、自定义异常
定义一个异常类(AgeException、ScoreException),继承RuntimeException(运行异常)或者FileNotFoundException(检查异常)。
二、面向对象设计原则
单一职责原则 | ★★★★ |
开闭原则 | ★★★★★ |
里氏代换原则 | ★★★ |
依赖倒置原则 | ★★★★★ |
接口分离原则 | ★★★ |
迪米特原则 | ★★ |
组合/聚合复用原则 | ★★★★ |
1、单一职责原则(SRP --- Single Responsibility Principle)
- 单一职能原则是所有原则中最简单的、最难应用的一个;
- 要注意过犹不及
- “变化的原因”,只有实际发生时才有意义。可能预测到会有多个原因引起这个类的变化,但这仅仅是预测,并没有真的发生,这个类仍可看做具有单一职责,不需要分离
2、开闭原则(OCP--Open Closed Principle)
--对扩展开放,对修改关闭
- 实现开闭原则的关键是抽象
- 开闭原则具有理想主义的色彩,它是面向对象设计的终极目标。其他设计原则都可以看作是开闭原则的实现手段或方法
3、里氏替代原则(LSP--Liskov Substitution Principle)
- 子类必须完全实现父类的方法
- 子类可以有自己的个性
- 覆盖和实现父类的方法时,输入参数可以被放大,但不能被缩小
- 覆盖和实现父类的方法时,输出结果(返回值)可以被缩小,但不能被放大
4、依赖倒置原则(DIP --Dependence Inversion Principle)
- 依赖倒置原则核心就是要面向接口编程,理解了面向接口编程,也就理解了依赖倒置
- 如果没有实现依赖倒置原则,那么也就意味着开闭原则也无法实现。
- 结合实际情况使用此原则,要考虑生产和成本,不能生搬硬套
5、接口分离原则(ISP-- Interface Segregation Principle)
--建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。
- 注意控制接口的粒度,接口不能太小,如果太小会导致系统中接口泛滥,不利于维护;
- 接口也不能太大,太大的接口将违背接口隔离原则,灵活性较差,使用起来很不方便。
- 一般而言,接口中仅包含为某一类用户定制的方法即可,不应该强迫客户依赖于那些它们不用的方法。
6、迪米特法则(LOD-- Law of Demeter)
- 过分使用迪米特原则会产生大量这样的中介和传递类,导致系统复杂度变大。所以在采用迪米特法则时要反复权衡,既做到结构清晰,又要高内聚低耦合。
- 外观模式和中介者模式都是迪米特法则的应用
7、合成/聚合复用原则(CARP-- Composite Aggregate Reuse Principle)
- 组合与继承都是重要的复用方法。组合称为黑箱复用,继承称为白箱复用。
- 在OO开发的早期,继承被过度地使用;随着时间发展,人们发现优先使用组合可以获得复用性与简单性更佳的设计
- 并非不要使用继承,并非继承一无是处,而是不要滥用继承。合成/聚合也有自己的缺点
三、类和类之间的六种关系
1、继承关系(泛化关系 Generalization)
2、实现关系(Realization)
3、依赖关系(Dependency)
4、关联关系(Association)
5、聚合关系(Aggregation)
6、组合关系(Composition)
总结:
- 继承和实现一般没有争议
- 后四种关系的强弱:组合>聚合>关联>依赖。
- 关联和依赖的区别:
- 关联关系强、长期
- 关联关系是通过属性来实现;依赖关联是通过方法形参或者局部变量实现
- 关联、组合/聚合的异同
- 相同:都是关联,都是做类的属性
- 不同点:组合 /聚合表示的是整体和部分的关系,关联可以表示所有关系
- 组合和聚合的异同
- 相同:都是关联的特例,都是表示的整体和部分的关系
- 不同点:整体部分的生命周期是否相同?组合更强