14、异常和面对对象编程-5

一、异常(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异常的区别
    1. 抛出Checked异常,该throw语句要么处于try块中,要么在方法中用throws抛出
    2. 抛出运行时异常,没有以上要求

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)

总结:

  1. 继承和实现一般没有争议
  2. 后四种关系的强弱:组合>聚合>关联>依赖。
  3. 关联和依赖的区别:
    • 关联关系强、长期
    • 关联关系是通过属性来实现;依赖关联是通过方法形参或者局部变量实现
  4. 关联、组合/聚合的异同
    1. 相同:都是关联,都是做类的属性
    2. 不同点:组合 /聚合表示的是整体和部分的关系,关联可以表示所有关系
  5. 组合和聚合的异同
    1. 相同:都是关联的特例,都是表示的整体和部分的关系
    2. 不同点:整体部分的生命周期是否相同?组合更强

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值