Java异常种类及含finally的运行顺序

Java异常

1、Java异常概念

Java语言中的异常处理包括声明异常、抛出异常、捕获异常和处理异常四个环节。

throw用于抛出异常。

throws关键字可以在方法上声明该方法要抛出的异常,然后在方法内部通过throw抛出异常对象。

try是用于检测被包住的语句块是否出现异常,如果有异常,则抛出异常,并执行catch语句。

cacth用于捕获从try中抛出的异常并作出处理。

finally语句块是不管有没有出现异常都要执行的内容。

2、Java异常种类

Java的异常分为两种,一种是运行时异常(RuntimeException),一种是非运行异常也叫检查式异常(CheckedException)。

1、运行时异常不需要程序员去处理,当异常出现时,JVM会帮助处理。常见的运行时异常有:

ClassCastException(类转换异常)

ClassNotFoundException

IndexOutOfBoundsException(数组越界异常)

NullPointerException(空指针异常)

ArrayStoreException(数组存储异常,即数组存储类型不一致)

还有IO操作的BufferOverflowException异常

2、非运行异常需要程序员手动去捕获或者抛出异常进行显示的处理,因为Java认为Checked异常都是可以被修复的异常。常见的异常有:

IOException

SqlException

例1:

关于异常的编程,以下描述错误的是:(A )

  • 在有除法存在的代码处,为了防止分母为零,必须抛出并捕获异常
  • int i=Integer.parseInt(”123a”);将产生NumberFormatException
  • int a[]=null; a[0]=1; 将产生NullPointerException
  • 输入输出流编程中,读和写时都要抛出IOException

解析:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kCKoBjwu-1569919306242)(E:\flyeat\我的小心得\md文件图片\java异常.png)]

a选项中的异常明明可以避免,所以就不用来捕获

b选项可以明显看到字符串不是纯数字,转换成int类型,是要抛出异常的!

c数组定义的就是null,还怎么来赋值!

d还有其他的

3、异常中有finally的运行顺序
  1. 不管有没有出现异常,finally块中代码都会执行;

  2. 当finally里面没有return语句时,执行try 和finally语句之后最后再执行return(finally块中语句会先于try中return语句执行);

  3. 若finally中没有return但改变了要返回的值则:

    a、若return数据是基本数据类型或文本字符串则在finally中对该值的改变不起作用,try中的return依然会返回进入finally块前的值,

    b、若return数据是引用数据类型,而在finally中对该引用数据类型属性值改变起作用,try中的return语句返回的就是在finally中改变后的属性值

  4. 若finally中有return语句,则会将try中的return覆盖掉直接执行finally中的return(不建议在finall中return,容易丢失异常)

例1

以下代码执行的结果显示是多少(B)?

public class Demo{
    public static void main(String[] args){
        System.out.print(getNumber(0));
        System.out.print(getNumber(1));
        System.out.print(getNumber(2));
        System.out.print(getNumber(4));
    }
    
    public static int getNumber(int num){
        try{
            int result = 2 / num;
            return result;
        }catch (Exception exception){
            return 0;
        }finally{
            if(num == 0){
                return -1;
            }
            if(num == 1){
                return 1;
            }
        }
    }
}
  • A.0110
  • B.-1110
  • C.0211
  • D.-1211

解析:try,catch,finally中:

num=0,捕获异常,执行catch语句,catch中返回0,执行finally语句,finally语句中返回-1,于是返回finally中的-1;

num=1,try中返回2,执行finally语句,finally语句中返回1,于是返回finally中的1;

num=2,try中返回1,执行finally语句,finally语句中没有返回,于是返回try中的1;

num=4,try中返回0,执行finally语句,finally语句中没有返回,于是返回try中的0.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值