12 异常
exception
文章目录
1.异常的概念
1.1 导入
出现异常之后,程序就会崩溃退出,不能继续往下执行了。
这样不好,因为一个不太致命的问题,就导致了整个系统的崩溃。
—> java提供了异常处理机制 try catch 保证程序的健壮性
public class Exception01 {
public static void main(String[] args) {
int num1 = 10;
int num2 = 0;
//程序运行到这一句话的时候,程序会抛出异常
//程序抛出异常后 就会退出崩溃了,不会继续运行了
int res = num1/num2;
//即这句话不会输出
System.out.println("程序继续执行");
}
}
快捷键:
1、选中可能出错的代码块
2. ctrl + alt +t ,选中 try…catch
3. 程序抛出了异常也可以继续执行,保证程序的健壮性
1.2异常介绍
- 异常是什么?
是程序执行过程中发生的不正常的情况。
开发过程中的语法和逻辑错误不是异常
1.3 异常分类
-
异常的分类
- 1)ERROR 错误 java虚拟机无法解决的严重问题
比如栈溢出,OOM(out of memory) - 2)Exception 异常
比如:空指针访问试图读取不存在的文件,网路连接中断.
又分为两大类:运行时异常(运行时 发生的异常) 和 编译性异常(编程时,编译器检查出来的异常)
- 1)ERROR 错误 java虚拟机无法解决的严重问题
2.异常的体系图
3.常见的异常
常见的运行时异常
1)空指针异常
2)运算异常
3)数组越界异常
4)类型转换异常
5)数字格式不正确异常
编译异常
编译时期发现的异常,编译时期就必须处理的异常,否则代码通不过编译
常见的编译异常
4.异常处理概念
1)try-catch-finally
程序员在代码中捕获异常 自行处理
使用细节:
//1如果异常发生了,那么异常后面的语句不会执行,直接进入到catch块。
//2.如果程序顺序执行了,没有发生异常,那么会顺序执行完try里面的代码,那么catch块不会执行。
//3.如果希望不管是否发生异常,都执行某代码块(比如关闭连接,释放资源),等,则使用finally代码块
//4.可以有多个catch语句,铺货不同的异常,进行不同的业务处理。要求父类异常在后,子类异常在前。如果发生异常,只会匹配一个catch
//5.可以进行try-finall配合使用,相当于没有进行异常捕获,因此会直接崩掉退出。应用场景:执行一段代码,无论是符发生异常,都要执行某个业务逻辑。
2)throws
将发生的异常抛出,交给调用者(方法)来处理,最顶级的处理者是JVM。
JVM的处理机制:
1.输出异常信息 2.退出程序。
如果一直往上throw,throw到了JVM虚拟机的时候,JVM就遵循上面的处理机制。
如果程序里面没有对异常的处理方式,会默认往上throw,到JVM层级,就打印异常,然后中断退出程序。
定义:如果一个方法付 可能生成某种异常单不确定如何处理这种异常 则词方法应该显示抛出异常,表明该方法不对这些异常进行处理,而由该方法的调用者负责处理。
2)在方法声明中用户throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是父类
注意:
- 编译型异常,程序必须中止处理,比如用try-catch或者throw
- 对于运行异常,有默认的处理方法,就是throw。
- 子类重写父类方法的时候,对于抛出异常的规定:子类重写的方法,所抛出的异常类型要么和父类抛出的异常类型一致,,要么为抛出的易车行类型的子类型