异常的捕获与处理

异常的捕获与处理

处理异常

组合方式:try…catch、try…catch…finally、try…finally

public class TestMain {
    public static void main(String[] args) {
        try {
            System.out.println(5 / 0);
        } catch(ArithmeticException e) {
            System.out.println("出现算数异常:");
             e.printStackTrace();   //输出异常的完整信息
        }finally{
            System.out.println("运行结束");
        }
    }
}

异常处理流程

所有异常类都是Throwable子类

Error与Exception的区别?

  • Error:指的是JVM错误,即程序还没有执行,用户无法进行处理。
  • Exception:指的是程序运行中产生的异常,用户可以处理。

请解释Java中的异常处理流程:

这里写图片描述

  1. 程序运行过程中出现异常后,JVM自动根据异常类型实例化一个与之类型匹配的异常类对象。
  2. 产生异常对象后,判断是否有异常处理。
    • 有:由try语句捕获产生的异常类实例化对象,再与每一个catch进行比较。如果匹配,则处理异常。
    • 没有:交由JVM进行默认处理,输出异常信息,结束程序调用。
  3. 无论异常处理是否匹配,都要向后执行finally语句。如果之前处理过异常,那么程序自然结束,否则交由JVM默认处理。

使用Exception处理异常

public class TestMain {
    public static void main(String[] args) {
        try {
            System.out.println(5 / 0);
        } catch(Exception e) {
            System.out.println("出现balabala异常:");
             e.printStackTrace();   //输出异常的完整信息
        }finally{
            System.out.println("运行结束");
        }
    }
}

使用须知:

  • 存在多个catch时,捕获范围大的异常一定得放在捕获范围小的异常之后,否则程序编译错误。
  • Exception虽然比较方便,但所有异常都会按照同一种方式进行处理。异常分开处理更好。

Exception与RuntimeException的区别?并列举几个常见的RuntimeException

  • Exception是RuntimeException的父类
  • Exception所定义的异常必须要被处理,而RuntimeException的异常可以选择性处理。
  • 常见RuntimeException:ArithmeticException、NullPointerException、ClassCastException(转换异常类)

throws关键字

throws关键字主要用于方法声明,当方法中出现异常后,交由被调用处进行处理。

class MyMath {
    //此方法里产生的异常交给被调用出进行处理
    public static int div(int x, int y) throws Exception {
        return x / y;
    }
}
public class TestMain {
    public static void main(String[] args) {
        try {
            System.out.println(MyMath.div(10, 0));  //这里调用
        }catch(Exception e) {
            System.out.println("出错了!");
            e.printStackTrace();
        }

    }
}

由以上例子可以发现:

  • 调用了具有throws声明的方法后,不管操作是否会出现异常,都必须进行异常处理。
  • throws声明的方法所产生的异常的范围,必须必catch中的小。
  • 主方法如果抛出异常,则由JVM进行处理。(但主方法不应该用throws声明)

throw关键字

使用throw可以手动的抛出异常的实例化对象。

public class TestMain {
    public static void main(String[] args) {
        try {
            throw new Exception("自定义异常");   //抛出一个自定义异常
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
}

throw与throws的区别?

  • throw:指的是手动的抛出一个异常类对象。
  • throws:声明方法时使用, 表示此方法在调用时必须处理异常。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
异常捕获处理是在程序运行过程中遇到错误,通过捕获异常并采取相应的处理措施,使程序能够继续执行而不中断。 在Python中,可以使用try-except语句来捕获异常。try块中放置可能会出现异常的代码,而except块中定义对异常处理逻辑。 下面是一个简单的示例: ```python try: # 可能会出现异常的代码 x = 10 / 0 except ZeroDivisionError: # 处理 ZeroDivisionError 异常 print("除数不能为零") ``` 在上面的代码中,try块中的代码尝试进行除法运算,如果除数为零,就会抛出ZeroDivisionError异常。而except块中的代码会捕获这个异常,并输出相应的提示信息。 除了捕获特定的异常类型,还可以使用except块来捕获所有类型的异常,例如: ```python try: # 可能会出现异常的代码 x = 10 / 0 except: # 处理所有类型的异常 print("发生了异常") ``` 在这种情况下,无论抛出什么类型的异常,都会被except块捕获处理。 除了使用except块来处理异常,还可以使用finally块来定义无论是否发生异常都需要执行的代码。例如: ```python try: # 可能会出现异常的代码 x = 10 / 0 except ZeroDivisionError: # 处理 ZeroDivisionError 异常 print("除数不能为零") finally: # 无论是否发生异常都会执行的代码 print("程序执行完毕") ``` 在上面的代码中,无论是否发生异常,finally块中的代码都会执行。 通过合理地使用try-except语句,可以帮助我们处理程序运行可能出现的异常,增加程序的健壮性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值