Java中异常处理的一些问题

问题:
throws和throw的区别
发生异常之后代码如何运行
error和Exception
检查异常和非检查异常

try catch 和 finally之间执行,finally里面的throw会导致catch里面的throw失效。



使用了try catch语句之后还要throws来抛出错误么
不需要,两个选一个,对于检查异常。

只要对应的try执行了,则它一定也执行。只有一种方法让finally块不执行:System.exit()


Throws和Throw的区别:
Throws主要在方法签名中使用,声明该方法可能抛出的异常类型。
Throw用于抛出一个异常实例,具体的异常对象。

发生异常之后:
找到了对应的catch对象之后就执行catch语句,并且不会向下执行;
没找到对应的异常类程序直接停止运行。

什么时候异常要用try catch 来获取,什么时候不需要?
检查异常和非检查异常:
检查异常需要try  catch 或者 throws抛出异常,调用者处理
非RuntimeException一般是外部错误(非Error),其必须被 try{}catch语句块所捕获
不管catch是否捕获异常,finally语句块都是要被执行的
在try语句块或catch语句块中执行到System.exit(0)直接退出程序,直接退出虚拟机,使得catch和finally没有机会运行
finally块中的return语句会覆盖try块中的return返回
finally 语句块在 catch语句块中的return语句之前执行

如果try语句里有return,那么代码的行为如下:
1.如果有返回值,就把返回值保存到局部变量中
2.执行jsr指令跳到finally语句里执行
3.执行完finally语句后,返回之前保存在局部变量表里的值
如果try,finally语句里均有return,忽略try的return,而使用finally的return.

抛出异常的结果和return的一致,throw抛出后程序也会结束运行:
public class ExceptionDemo1 {
      public static void main(String[] args ) throws Exception {
           ThrowException ();
     }
      public static void ThrowException () throws Exception{
           try {
               int x =5/0;
              System. out .println( "运行不" );
          } catch (Exception e ) {
               e .printStackTrace();
               throw new Exception( "会不会抛出呢?" );
          } finally {
               throw new Exception( "finally 里面的异常" );
          }
     }
}


异常的继承关系:

自动关闭资源的try语句:
try{
(自动关闭)资源要实现autocloseable或者closeable接口
}

子类方法抛出的异常不允许抛出的异常比父类的多
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值