七、Java异常

七、Java异常

    1、Exception(异常)

        是程序本身可以处理的异常,Exception类有一个重要的子类RuntimeException。RuntimeException类及其子类表示“JVM常用操作”引发的错误。例如,若试图使用空值对象引用、除数为零或数组越界,则分别引发运行时异常NullPointerException、ArithmeticException和ArrayIndexOutOfBoundException。

        (1)、Checked Exception(可查异常):Java中并没有一个名为Checked Exception的类。除了Exception中的RuntimeException及RuntimeException的子类以外都属于Checked Exception。它是在编程中使用最多的Exception,所有继承自Exception并且不是RuntimeException的异常都是Checked Exception。JAVA语言规定必须对Checked Exception作处理,编译器会对此作检查,要么在方法体中声明抛出Checked Exception,要么使用catch语句捕获Checked Exception进行处理,否则不会通过编译。常用的Checked Exception有IOException、ClassNotFoundException等。

        (2)、Unchecked Exception(不可查异常):编译器不要求强制处置的异常。RuntimeException就是一种不可查异常,即表示编译器不会检查程序是否对RuntimeException作了处理,在程序中不必捕获RuntimException类型的异常,也不必在方法体声明抛出RuntimeException类。一般来说,RuntimeException发生的时候,表示程序中出现了编程错误,所以应该找出错误修改程序,而不是去捕获RuntimeException。常见的RuntimeException有NullPointException、ClassCastException、IllegalArgumentException、IndexOutOfBoundException等。

    2、Error(错误)

        表示系统级的错误和程序不必处理的异常,是java运行环境中的内部错误或者硬件问题,是程序无法处理的错误。例如,Java虚拟机运行错误(Virtual MachineError),当JVM不再有继续执行操作所需的内存资源时,将出现OutOfMemoryError。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。对于设计合理的应用程序来说,即使确实发生了错误,本质上也不应该试图去处理它所引起的异常状况。在Java中,错误通过Error的子类描述。

    3、Exception特点

        (1)、异常catch有顺序性:在catch异常时,如果有多个异常,那么是会有顺序要求的。子类型必须要在父类型之前进行catch,catch与分支逻辑是一致,如果父类型先被catch,那么后被catch的分支根本得不到运行机会。

        (2)、异常被吃掉:如果在finally中有返回值(return语句),那么在程序中抛出的异常信息将会被吞噬掉。这是一个非常值得注意的问题,因为异常信息是非常重要的,在出现问题时,我们通常凭它来查找问题。

        (3)、throw与throws的区别

            ①、位置不同

//方法参数小括号后面,后面跟的是一个或者多个异常类名且用逗号隔开,表示抛出异常并交给调用者去处理。
public InStockVo updateStockContainerByInStock(InStock inStock, InStockItem inStockItem) throws Exception {...}
//方法体内,表示抛出异常。
throw new ServiceException("参数为空");

            ②、使用throw时候,如果方法中有throw抛出RuntimeException及其子类,则声明上可以没有throws,如果方法中有throw抛出Exception及其子类,则声明上必须有throws。

                   使用throws时候,如果后面跟的是RuntimeException及其子类,则该方法可以不用处理,如果后面跟的是Exception及其子类,则必须要编写代码进行处理或者调用的时候抛出。

        (4)、try-catch-finally-return的执行顺序

            ①、不管是否有异常产生,finally块中代码都会执行。

            ②、当try和catch中有return语句时,finally块仍然会执行。

            ③、finally是在return后面的表达式运算执行的,所以函数返回值在finally执行前确定的,无论finally中的代码怎么样,返回的值都不会改变,仍然是之前return语句中保存的值。

            ④、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值