Java基础-学习笔记12

12 异常

异常

Java语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常)
执行过程中所发生的异常时间可分为两大类

1)Error(错误):Java 虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比如:StackOverflowError(栈溢出)和 OOM(out of memory),error是严重错误,程序会崩溃。

2)Exception:其他因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如空指针访问、读取不存在的文件、网络连接中断等等。Exception分为两大类: 运行时异常 编译时异常

如果程序员认为一段代码可能出现异常问题,可以使用 try-catch 异常处理机制(ctrl+alt+t)来解决,从而保证程序的健壮性。

异常体系图

部分常见类:

异常处理方式

1)try-catch-finally
程序员在代码中捕获发生的异常,自行处理。

try{
// 可能有异常的代码
}
catch(Exception e){
// 捕获到异常时执行的语句块。由程序员自己处理。
}finally{
// 不管是否由异常发生,始终要执行finally里的代码块。
// 通常将释放资源的代码放在finally里
}

使用细节

  1. 如果异常发生了,则异常发生后面的代码不会执行,直接进入到catch块。
  2. 如果异常没有发生,则顺序执行try的代码块,不会进入到catch。
  3. 如果希望不管是否发生异常,都执行某段代码,则使用finally{}。
  4. 可以有多个 catch 语句,铺货不同的异常(进行不同的业务处理),要求父类异常在后,子类异常在前。比如:

练习3:finally会必须执行,如果catch执行语句里有return,finally也有retrun,捕获异常时会执行catch里的return语句,但不会返回,最终执行和返回的是finally里的return。

2)throws

将发生的异常抛出,交给调用者(方法)来处理,最顶级的处理者就是JVM。
JVM处理:直接输出异常信息,中断程序。
如果没有显式的处理异常,默认就是throws

显式使用 throws 的使用细节:

  1. 对于编译异常,程序中必须处理,要么 try-catch 要么 throws
  2. 对于运行时异常,程序中如果没有处理,默认就是 throws的方式处理
  3. 子类重写父类的方法时,对抛出异常的规定:子类重写的方法,所抛出的异常类型要么和父类抛出的异常一致,要么为父类抛出的异常的类型的子类型。
  4. 如果子类对于编译异常进行了显式throws处理,则父类也必须显式throws处理,或者try-catch处理。
    如果子类对于运行异常进行了显式throws处理,父类可以不用显式处理,因为默认也会进行 throws处理。

自定义异常

1)定义类:继承 Exception,属于编译异常;
继承 RuntimeException,属于运行异常(一般情况都是做成运行时异常,好处:可以使用默认的处理机制)。

2)throw 和 throws

意义 位置 后面跟的东西
throws 异常处理的一种方式 方法声明处 异常类型
throw 手动生成异常对象的关键字 方法体中 异常对象
posted @ 2024-08-15 09:28  JuneFall  阅读(4)  评论(0编辑  收藏  举报