Java异常与捕获:

本文深入解析Java异常处理机制,包括异常类的继承结构、异常处理格式、RuntimeException与Exception的区别及常见类型,以及assert断言的使用。理解异常处理对确保程序稳定运行至关重要。
摘要由CSDN通过智能技术生成

Java异常与捕获:

一、引入异常的目的:
为了保证程序在出现异常之后可以正常的执行完毕,就需要进行异常处理。

二、异常类的继承结构:
在这里插入图片描述

三、详解异常类:

(1)由图可知,所有的异常类都是继承于Throwable类的;

(2)Error类:
描述的是java运行时内部错误和资源耗尽错误,应用程序不会抛出此类异常,这种错误一旦出现,除了告知用户并且使程序安全终止以外,再无能为力,这种情况也很少见。

(3)Exception类:

  • 有两个子类:IOException、RuntimeException;
  • 由于程序错误导致的异常属于RuntimeException;
  • 如果程序本身没有任何问题,但是由于I/O错误导致的问题属于IOException;

(4)分类:

  • 非受查异常:派生于Error类与RuntimeException类。
  • 受查异常: 除了非受查异常,其他都是受查异常。

[注意]:
受查异常必须进行处理,可以通过try……catch……或者通过throws直接将异常扔回;
非受查异常则用户不处理也可以;

(5)异常产生的影响:
异常是导致程序中断执行的一种指令流,程序之中如果出现了异常而没有合理处理就会导致程序终止执行。

[注意]:
在程序执行的过程中,如果产生了异常,那么在异常产生之前的语句是可以正常执行的,直到遇到了异常,才直接退出终止程序。

(6)异常处理格式:

try{
	有可能产生异常的语句;
}catch(异常类  对象){
	……;
}finally{
 	异常的出口;
}

——[异常处理的三种组合格式]:

  • try……catch;
  • try……finally;
  • try……catch……finally;

(7)throws关键字:
用于方法上,明确表示本方法可能产生异常,并且不处理,返回给调用方处理。

public class test{
    public static void main(String[] args) throws Exception{
        //依旧会产生错误,继续将异常扔回给调用处:JVM(主方法的调用者)
        System.out.println(div(10,0));
        System.out.println("div方法结束");
    }
    //可能会产生异常,将异常扔回给调用处:主方法
    public static int div(int x, int y) throws Exception{
        return x/y;
    }
}

[注意]:
当采用上面的方法,也就是利用throws关键字进行异常的处理将异常最终扔回给了JVM,主方法中异常产生后面的语句(System.out.println(“div方法结束”);)将不再执行。
但是如果在主方法中采用try……catch……finally进行异常的处理,都将执行finally块中的语句。
在主方法上使用throws抛出异常后,交由JVM处理;

(8)throw关键字:
用于方法中,异常对象是由用户产生的,而不是由JVM产生的,一般与自定义异常类搭配使用。

[问题]:
throws和throw有什么区别?
throw用于方法内部,主要表示手工的异常抛出;
throws用于方法声明上,明确告诉用户该方法可能会产生异常但是不进行处理;

四、RuntimeException类:

[注意]:

  • NumberFormatException(数值转换异常)属于RuntimeException;
  • RuntimeException是非受查异常,没有进行强制性要求处理异常;

[问题]:
解释Exception与RuntimeException的区别:

  • Exception是RuntimeException的父类,Exception是受查异常,也就是在出现异常之后强制要求处理该异常;
  • RuntimeException是非受查异常,有用户选择处理与不处理;

[问题]:
常见的RuntimeException有哪些?

  • ClassCastException;
  • NullPointerException;
  • NumberFormatException;

五、断言assert:

(1)assert的语法:
assert 布尔表达式:“返回false执行的饿代码块”

[解释]:

  • 当布尔表达式为真时,程序继续执行,当为假时,走布尔表达式后面的代码;
  • 当断言返回false时,会抛出断言异常;

[注意]:

  • 在Java中,断言需要开启,默认状态是关闭的;
  • 如果想让断言起作用,必须给JVM传参数-ea来启用断言;

(2)断言assert的实例:

public class test{
    public static void main(String[] args) {
        int num = 20;
        assert num == 55:"错误:num应该为55";
        System.out.println(num);
    }
}

在这里插入图片描述
观察输出结果可以发现,断言的异常是Error类异常(非受查异常),在遇到异常产生处时,就会直接结束程序,不在继续执行了。 进行如下修改,就可以继续执行下去了。

public class test{
    public static void main(String[] args) {
        int num = 20;
        try{
            assert num == 55:"错误:num应该为55";
        }catch(Throwable e){
            e.printStackTrace();
        }
        System.out.println(num);
    }
}

在这里插入图片描述
通过上面的输出结果可以看出,在遇到异常之后,程序依旧执行了后续语句。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值