异常处理Throwable

异常 Throwable

  • Error : 程序无法处理的异常一般称为错误
  • Exception : 除错误之外的异常统称为异常

byte a = 128 ; (和 Throwable 没有任何关系、语法不正确) 
int c = a / 0 ;

程序开发过程中,我们主要要处理和解决的是Exception异常

Exception

Exception 是所有异常的父类, 包含 运行时异常和编译时异常
在 Exception中,除 RuntimeException 以及它的子类 之外的异常 通常为 编译时异常

  • RuntimeException

如果一个异常是RuntimeException 或者是它的子类,那么这个异常被称为 运行时异常
运行时异常(未检查异常): 程序在运行期间产生的异常
特点: 可以处理也可以不做任何处理

  • Exception

除运行时异常外的其他 Exception 均为 编译时异常
编译时异常(已检查异常) : 在程序编译阶段、JVM会能可能产生异常的代码进行校验,表现形式类似与 语法错误
特点: 异常必须被处理(编译时异常会导致编译不通过,所以无法运行)

常见的运行时 RuntimeException 异常

  • NullPointerException (空指针异常)
  • ArrayIndexOutOfBoundsException(数组索引越界异常)
  • IndexOutOfBoundsException(索引索引越界异常)
  • ClassCastException (类型转换异常)
  • ArithmeticException (算术异常)

常见的编译时 Exception 异常

  • ParseException (解析异常)
  • IOException (IO异常)
  • FileNotFoundException (文件找不到异常)
  • ClassNotFoundException (类型找不到异常)
  • SQLException (SQL异常)

使用异常

  • 创建一个异常对象
new Exception() ;  // 构建的是一个编译时异常 

new RuntimeException() :  // 构建的是一个运行时异常 

new Exception(message) :   在构建异常对象的时候,可以设置一个 异常错误信息

new Exception(Throwable e) :  可以将一个异常进行包装

异常代表的是程序不正常的结果、通过异常对象都是用来抛出的、抛出的目的是为了中断程序

抛出异常对象使用 throw 关键字, 可以用来中断程序

异常的处理

  • throws 在异常产生的代码所在的方法声明上声明一个异常

自己本身不处理异常、将异常的处理交给方法的调用者
方法上声明的异常必须 和 代码中产生的异常相同 或者 更宽

  • try - catch 结构

本质上是真正的异常处理方案
try : 将可能产生异常的代码放入到try中,尝试捕获异常
catch: 将捕获到的异常在 catch块中进行处理

  • try - catch - finally 结构

finally : 代表最终执行的代码,当代码运行到try中,无论是否发生异常、finally一定会被执行
当在 try 中 使用 System.exit(0) 强制结束程序的时候 , finally 不会执行
finally 通常在程序中用来释放资源、关闭连接等操作

  • try - finally 结构

该结构和异常处理没有关系,主要用来释放资源

自定义异常

如果想让一个类作为异常类、那么只需要让类继承 某一个已知的异常类 即可
如果想让自定义异常是一个运行时异常,只需要继承 RuntimeException
如果想让自定义异常是一个编译时异常,只需要继承 Exception
继承异常类之后,只需要在自定义的异常类中,提供对应的构造方法即可

自定义异常通常是业务所需要的,目的是为了更加方便的找到项目中发生的错误和原因,以便轻松的解决异常

单元测试 Junit

在项目中引入 junit 库 www.mvnrepository.com
junit-4.13.2.jar 和 hamcrest-all-1.3.jar

常见的注解

  • @Test : 定义在方法上,标记该方法是一个单元测试方法,可以作为测试的入口

@Test 标记的方法,需要满足 1. 方法不能有任何参数, 2. 方法的返回值是 void , 3. 权限修饰符是 public 修饰的

  • @Before : 标记方法,如果一个方法被 before标记,那么代表这个方法中的代码,会在 单元测试前 执行

  • @After : 标记方法,如果一个方法被 after标记,那么代表这个方法中的代码,会在 单元测后 执行

  • @BeforeClass : 标记方法, 被标记的方法必须是 静态方法,会在第一个单元测试开始前执行
    执行

  • @After : 标记方法,如果一个方法被 after标记,那么代表这个方法中的代码,会在 单元测后 执行

  • @BeforeClass : 标记方法, 被标记的方法必须是 静态方法,会在第一个单元测试开始前执行

  • @AfterClass : 标记方法, 被标记的方法必须是 静态方法,会在最后一个单元测试后执行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值