Java异常

首先我们要知道几个关于异常的关键字:

 

  • try
  • catch
  • finally
  • throw
  • throws

Java虚拟机的方法调用栈

每个线程都有一个独立的方法调用栈,最新被调用的方法会被放到栈顶。那么发生异常时本方法有两种处理,一是捕获(try-catch)、二是throws。发生异常时Java虚拟机要找到能捕获该异常的catch,本方法找不到就弹出栈顶去下面的那个找,依次找下去,如果到调用栈的最底部的方法还没找到,就执行以下步骤:

  1. 调用异常对象的printStackTrace()方法,打印来自方法调用栈的异常信息。
  2. 如果不是主线程,那么终止这个线程;是主线程的话终止整个程序。

Java异常处理的注意事项

  1. 不能运用异常处理机制来控制程序的正常流程。
  2. 应该尽可能的在具备处理异常能力时及时处理异常而不是向下抛出异常。

异常流程的运行过程

1.finally语句不被执行的唯一情况是先执行了终止程序的System.exit(),程序终止之前会执行finally代码块。

public static void main(String[] args) throws Exception {
        try {
            System.out.println("Begin");
            throw new Exception();
        } catch (Exception e) {
            System.out.println("Wrong");
            throw e;
        } finally {
            System.out.println("Finally");
        }
    }

输出结果:

Begin
Wrong
Finally
Exception in thread "main" java.lang.Exception
	at javabase.a.main(a.java:20)

本身main方法再throw异常就会终止程序的,但在此之前会执行finally代码块。

 

2.return用于退出本方法。在执行try或者catch代码块中的return语句时,如果存在finally代码块,会先执行finally代码块。

注:虽然在return之前会先执行finally代码块但是代码块里不能改变即将return的值。

3.最好不要在finally代码块中使用return语句,有两点原因:

  • finally代码块里return会覆盖掉try和catch里的return。
  • 如果在catch中需要再向下抛出异常,而finally里直接返回了,就会导致原本要抛出的异常丢失。

对你有帮助的话给点个赞呗(*/ω\*)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值