异常和断言1

1.定义

程序在运行过程中产生的错误的现象叫做异常;异常是一种运行时错误,它是程序在运行时,由于系统检测到了不可能执行的操作而引起的;这时候系统不再执行下去,提前结束。这种情况就是
不处理异常的程序可能会在不期望终止的时候终止,导致部分系统资源没有得到释放,有可能引发严重的问题。


2.异常的处理和层次结构

这里写图片描述

这里写图片描述

 //throws关键字可以在方法上声明该方法要抛出的异常,然后在方法内部通过throw抛出异常对象。
    private void exception() throws InterruptedException {
        try {//try是用于检测被包住的语句块是否出现异常,如果有异常,则抛出异常,并执行catch语句
           Thread.sleep(100);
        } catch (InterruptedException e) {//cacth用于捕获从try中抛出的异常并作出处理。
            throw e;//throw用于抛出异常。
        }finally {//finally语句块是不管有没有出现异常都要执行的内容

        }
    }

Java语言中的异常捕获结构由try、catch、finally这三部分组成;其中

  1. try:语句块存放的是可能会发生异常的语句;
  2. catch:程序块放在try语句块之后,用来激发被捕获的异常;
  3. finally:语句块是异常处理结构的最后执行部分,无论try块中的代码如何退出,最后都会执行finall语句。

这里写图片描述

Java类库中的每个包都定义了异常类,所有的这些类都是Throwable类的子类。Throwable类派生了两个子类Exception类和Error类。

  1. Exception:处理用户程序应当捕获的异常情况;
  2. Error:Error类的异常为内部错误,用来描述Java系统在内部错误以及资源耗尽的错误;因此在正常的情况下不期望程序捕获它们;
  3. Throwable:可抛出的。

补充:
1.检验异常是指程序代码中必须要捕获的异常(在函数内抛出,函数必须声明,因为调用者对该异常进行处理),否则无法通过编译;
2.非检验异常是指可不捕获程序仍可以通过编译的异常。
RuntimeException及其子类都属于非检验异常,其他异常为检查异常;RuntimeException不需要程序员捕获处理。
3.运行时异常如果在函数内抛出,在函数是上不需要声明(原因:不需要调用者处理,运行时发生异常,程序已经无法继续运行,所以,不让调用者处理直接让程序停止,由调用者对代码进行修正。)
4.这个体系中的所有类和对象都具备一个独特的特点就可抛性


3.常见的异常类

这里写图片描述


4.try-catch

这里写图片描述


5.finally

这里写图片描述
注意:
1.当已经了System.exit(0)//退出JVM;只有这种情况下不会执行finally语句块;
2.如果在finally块中有return语句的话,那么它将会覆盖函数中其他的return 语句。

示例代码1:

public class test {
    public static void main(String[] args){
        int num = 10;
        System.out.println(test(num));
    }

    private static int test(int b) {
        try{
            b += 10;
            return b;
        }catch(RuntimeException e){

        }catch (Exception e) {
        }finally{
            b += 10;
            return b;
        }
    }
}

上面代码中虽然try块中有return语句,但是最终会执行finally块中return语句,局部变量b执行了两次加10操作,所以最终的结果是返回30;

运行结果:30

示例代码2:

package dong.test;

public class Test {

    public static String output = "";
    public static void foo(int i){
        try{
            if(i == 1){
                throw new Exception();
            }
        }catch(Exception e){
            output += "2";
            return;
        }finally{
            output += "3";
        }
        output +="4";
    }
    public static void main(String[] args){
        foo(1);
        System.out.println(output);
    }


}

运行结果:

23

上面的代码中会抛出一个异常,然后就会在catch语句块中进行异常处理;虽然catch语句块中有return 语句,但是finally中的内容必须进行,所以先执行了finally才进行return 操作;return后 output +=“4”不会被执行。


6.多重catch

这里写图片描述
1.使用多重catch语句时,异常子类一定要位于异常父类之前
2.在Java7中,当需要catch多个异常的时候可以使用管道符(|)将它们分开,这个异常参数变量(ex)是定义为final的:如下

catch(IOException | SQLException | Exception ex){
}

7.嵌套try-catch块

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值