一、 概述
异常处理是基于面向对象的一种运行错误处理机制,通过对异常问题的封装,实现对用户的非法操作、参数设置异常,硬件系统异常,网络状态改变异常等运行态中可能出现的异常信息的处理机制。
组成结构:类型,提示,行号。
二、继承结构
Throwable - 顶级父类
-- Error:系统错误,无法修复
-- Exception:可修复的错误
-- RunTimeException
--ClassCastException
--ClassNotFoundExceptio
三、异常处理
程序中遇到了异常,通常有两种处理方式:捕获或者向上抛出。
1.捕获
异常捕获的语法为try,catch,finally。程序首先执行try中的代码,当满足catch中的异常情况时执行catch中的代码,catch可以有多个,最后执行finally中的代码,进行最后的清理工作,如关闭数据库连接等。
public class Test_Exception {
public static void main(String[] args) {
method();
}
//除法运算
//1、接收键盘输入的两个整数,并做除法运算
private static void method() {
//异常的处理1:捕获,可以catch多次也可以直接捕获Exception
try {
int a = new Scanner(System.in).nextInt();
int b = new Scanner(System.in).nextInt();
System.out.println(a/b);
}catch(ArithmeticException a) {
//前提:当抛出的错误是ArithmeticException类型时,才会被catch住
System.out.println("您输入的分母为0了!");//解决方案
}catch(InputMismatchException i) {
//前提:当抛出的错误是InputMismatchException类型时,才会被catch住
System.out.println("请输入整数!");//解决方案
}catch(Exception e) {
//!!!多态的表现形式(不要求具体子类是谁):每种异常都能被捕获
System.out.println("您输入有误!");//解决方案
}
}
}
2.抛出
当调用了一个抛出异常的方法时,调用位置可以不做处理继续向上抛出也可以捕获异常。
//测试异常的处理
//1、捕获的方式,在方法里会报错的代码上加try..catch
//2、抛出的方式,在方法上加throws关键字,谁调用谁处理
public class Test_Exception {
public static void main(String[] args) throws Exception {
method();//捕获的方式,在方法里会报错的代码上加try..catch
method2();//抛出的方式,在方法上加throws关键字
//调用了一个抛出异常的方法,解决方案:要么抛要么捕获
}
//抛出的方式:throws,交给调用者处理
// private static void method2() throws
// ArithmeticException,InputMismatchException{
private static void method2() throws Exception{
int a = new Scanner(System.in).nextInt();
int b = new Scanner(System.in).nextInt();
System.out.println(a/b);
}
//捕获的方式:try..catch
//1、接收键盘输入的两个整数,并做除法运算
private static void method() {
//异常的处理1:捕获,可以catch多次也可以直接捕获Exception
try {
int a = new Scanner(System.in).nextInt();
int b = new Scanner(System.in).nextInt();
System.out.println(a/b);
}catch(ArithmeticException a) {
//前提:当抛出的错误是ArithmeticException类型时,才会被catch住
System.out.println("您输入的分母为0了!");//解决方案
}catch(InputMismatchException i) {
//前提:当抛出的错误是InputMismatchException类型时,才会被catch住
System.out.println("请输入整数!");//解决方案
}catch(Exception e) {
//多态的表现形式(不要求具体子类是谁):每种异常都能被捕获
System.out.println("您输入有误!");//解决方案
}
}
}