异常

error:由系统底层发生,修改代码

exception:告诉jvm,jvm告诉使用者

    举一个简单的例子

    Int[] a=new Int[10];

    System.out.println("a[10]");

    输出语句发生问题时,jvm就将这个已知的问题封装成对象 throw new ArrayIndexOutOfBoundsException(1);将问题抛给调用者main函数,如果main函数没有针对的处理方法,main函数就继续抛给调用者jvm,jvm会终止程序,jvm就使用了默认的处理方法,将问题的名称+信息+位置在控制台上显示出来,让调用者看到

    e.printStackTrace();名字+信息+位置 jvm默认的处理,收到异常就是调用这个方法,将信息显示到屏幕上。

异常的处理:

1.遇到问题不进行具体的处理,而是继续抛给调用者,其实就是在函数上通过throws关键字声明异常,告诉调用者。

2.针对性的处理方法,捕获。

    try{

        有可能异常的代码

    }catch(异常变量){

        捕获,处理异常的代码   

    }finally{

        一定会被执行的代码

}

throw和throws有什么区别?

1.位置不同

throws用在函数上,后面跟着的是异常类,可以跟多个

throw用在函数内,后面跟的是一场对象

2.功能不同

throws用来声明异常,让调用者只知道该功能可能出现的问题,并由调用者给出预先的处理方法

throw抛出具体的问题对象,执行到throw,功能就已经结束了,就跳转到调用者,并将具体的问题对象也抛给调用者。也就是throw语句独立存在时,下面不要定义其他语句,执行不到。

3.执行时期不同

throws编译时期

throw运行时期

finally

finally块用于回收再try块里打开的物理资源,异常机制会保证finally总被执行

当catch中遇到return时。finally还是会被执行

除非在try块、catch块中使用了system.exit(0);退出ivm,只有这种情况下finally不会执行

尽量避免在finally块中使用return或throw等导致方法终止的语句,否则会出现一些很奇怪的现象

    当程序在try,catch中一到return或throw语句(该语句都会导致方法立即结束),系统执行这两个语句并不会结束该方法,而是会去寻找该异常处理流程中是否包含finally块。

如果没有finally块,程序立即执行return或throw语句,方法终止。

如果有finally块,系统立即执行finally块,只有当finally块执行完成后,系统才会调回来执行try,catch块中的return或throw语句。如果finally有return或throw语句,finally已经终止了方法,系统不会再跳回去执行try,catch块中的任何代码

    为了保证try语句可以自动关闭资源,这些资源实现类必须实现AutoCloseable或Closeable接口,实现这两个接口就必须实现close()方法

    自动关闭资源的try语句相当于包含了隐式的finally块(这个finally块用于关闭资源),此时try语句中既没有catch也没有finally







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值