本周介绍了异常以及异常的处理。Java的异常机制将处理异常的代码整合到一个代码块中,而不是通过if-else进行处理,提高了代码整体的简洁性。同时,异常机制可以更加详细地说明错误类型、引起错误的位置、错误信息,对程序健壮性十分有帮助。

异常

1.Java“异常”的分类

分为Error和Exception(又分为RuntimeException和其它Exception),其中虚线部分(unchecked exception)不需显式catch。
2.运行时异常由程序员在代码中处理不当造成,其它异常由外部原因造成。
3.运行时异常不应该catch,而是通过修改代码消除。其它异常需要catch,如果不捕获则编译无法通过,类似于静态类型检查。
4.异常是为了增强程序健壮性;断言为了增强程序正确性。

处理异常(针对checked exception)

1.当要决定采用checked exception还是unchecked exception时,看异常由谁引起的。如果客户端代码不能做任何补救措施,则采用uncheck exception;如果客户端可以根据异常信息补救,则采用checked exception。
2.客户端应该从checked exception中获取有价值的信息,利用异常返回的信息明确操作失败的原因。
3.checked exception是可预料但无法预防的。如果做不到这一点则使用unchecked exception。
4.两种异常的对比

5.方法应该throws的异常种类:该方法调用的其它方法抛出了一个checked exception(从别处传来的异常);当前方法检测到错误并使用throw抛出一个checked exception(本身造成的异常)
6.捕获异常时,按照从具体到宽泛的顺序编写catch块
7.可以在catch块中继续抛出异常(为了细化异常种类),但是需要保留根异常

LSP原则下的异常

核心是子类型可以替代父类型,即声明父类型,赋值子类型
1.如果子类型重写了父类型的方法,那么子类型方法抛出的异常不能比父类型抛出异常的类型更宽泛。
2.子类型方法可以抛出更具体的异常,也可以不抛出异常。
3.如果父类型的方法未抛出异常,子类型方法也不能抛出异常。可以理解成未抛出异常是最具体的异常。

软件构造学习笔记-第十二周相关推荐

  1. 软件构造学习笔记-第十四周、十五周

    课程进入了尾声.本周内容主要是线程安全相关.线程错误比一般的错误更加难以发现和修改,甚至加入一条print语句就能改变时间分片,从而导致错误消失.重点介绍了"锁"的机制,在使用时避 ...

  2. tensorflow学习笔记(三十二):conv2d_transpose (解卷积)

    tensorflow学习笔记(三十二):conv2d_transpose ("解卷积") deconv解卷积,实际是叫做conv_transpose, conv_transpose ...

  3. Windows保护模式学习笔记(十二)—— 控制寄存器

    Windows保护模式学习笔记(十二)-- 控制寄存器 控制寄存器 Cr0寄存器 Cr2寄存器 Cr4寄存器 控制寄存器 描述: 控制寄存器有五个,分别是:Cr0 Cr1 Cr2 Cr3 Cr4 Cr ...

  4. 汇编入门学习笔记 (十二)—— int指令、port

    疯狂的暑假学习之  汇编入门学习笔记 (十二)--  int指令.port 參考: <汇编语言> 王爽 第13.14章 一.int指令 1. int指令引发的中断 int n指令,相当于引 ...

  5. OpenCV学习笔记(十二):边缘检测:Canny(),Sobel(),Laplace(),Scharr滤波器

    OpenCV学习笔记(十二):边缘检测:Canny(),Sobel(),Laplace(),Scharr滤波器 1)滤波:边缘检测的算法主要是基于图像强度的一阶和二阶导数,但导数通常对噪声很敏感,因此 ...

  6. QT学习笔记(十二):透明窗体设置

    QT学习笔记(十二):透明窗体设置 创建 My_Widget 类 基类为QWidget , My_Widget.cpp 源文件中添加代码 #include "widget.h" # ...

  7. MATLAB学习笔记(十二)

    MATLAB学习笔记(十二) 一.数据插值 1.1 数据插值的计算机制 1.2 数据插值的matlab函数 二.曲线拟合 2.1 曲线拟合原理 2.2 曲线拟合的实现方法 三.数据插值与曲线拟合比较 ...

  8. Windows Workflow HOL学习笔记(十二):创建状态基工作流

    W indows Workflow HOL学习笔记(十二):创建状态基工作流 本文内容来自Microsoft Hands-on Labs for Windows Workflow Foundation ...

  9. 模电学习笔记(十二)——跨阻放大器

    模电学习笔记(十二) 跨阻放大器 跨组运算放大器是将电流信号转换成为电压信号,电流到电压增益基于反馈电阻. 设计目标: 输入 输出 带宽 电源 0A 100uA 0V 7V 20kHz 15V -15 ...

最新文章

  1. 接口限流算法:漏桶算法令牌桶算法
  2. 如何使用ember下拉框组件??
  3. Python 引用全局变量提示:local variable referenced before assignment. 问题解决办法,global使用方法介绍
  4. 三维重建学习(5):简单地从数学原理层面理解双目立体视觉
  5. 几何着色器与细分(镶嵌)着色器
  6. java 线程一直运行状态_详解JAVA 线程-线程的状态有哪些?它是如何工作的?
  7. [zz]为 lua 封装 C 对象的生存期管理问题
  8. 接口幂等设计探索实践
  9. 【我的物联网成长记5】如何进行物联网大数据分析?
  10. SQL:两种获取时间类型日期部分的方法
  11. linux未找到telnet命令
  12. NKOI 3539 移棋子游戏[6月月赛题A]
  13. 中职计算机组装与维护实训教案,《计算机组装与维护》——计算机组装与维修的基础知识教学教案(中职教育)...
  14. iOS 自建应用内测分发平台
  15. 学习 瑞吉外卖项目——总结
  16. NYOJ-1273-宣传墙
  17. gensim基本使用+文本相似度分析
  18. OpenCV视频质量诊断----视频遮挡诊断
  19. 35岁程序员,早到的中年危机
  20. kafka完美解决报错:Error while executing topic command:Replication factor:3 larger than available brokers:0

热门文章

  1. html中图片的属性优化,Html标签元素在SEO中的优化方式(二)
  2. html5 tab菜单切换页面,11个常用的jQuery TAB切换菜单源码及制作教程
  3. 解决安装SQL Server 2005开发版时,出现“SQL Server 服务无法启动 ”点击重试或取消的解决方法
  4. Android之解决主页面Activity监听fragment退出问题(由NavHostFragment和RxFragment一起管理fragment)
  5. Android之提示A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
  6. Android之ndk-build -j4
  7. LeetCode之Relative Ranks
  8. Android之如何使用快速联系徽章
  9. 2560x1600分辨率高吗_做设计还弄不清分辨率和像素之间的关系,来了解下他们是怎么换算...
  10. winform插入时间类型数据到oracle数据库,winform操作访问Oracle 10g数据库,并自动填充到DataGridView...