异常 制作异常

  • 异常的作用:增强程序的健壮性
  • 异常在java中以的形式存在,每一个 异常类 都可以创建 异常对象。
  • 异常的结构:
    • Error:Error 类及其子类表示严重的系统错误,通常是无法通过代码来修复的,最终导致虚拟机停止,例如内存溢出(OutOfMemoryError)、虚拟机错误(VirtualMachineError)等。程序一般不会捕获和处理 Error 类及其子类的异常,因为这些异常通常表示系统级别的问题。
    • Exception:Exception 类及其子类表示程序运行过程中出现的可处理的异常情况。在编写程序时,我们可以通过 try-catch 块来捕获并处理这些异常,避免程序崩溃。Exception 类下又分为两个主要的子类:
      • 1、运行时异常:RuntimeException 类及其子类表示运行时异常,这些异常通常是程序逻辑错误导致的,例如空指针异常(NullPointerException)、数组越界异常(ArrayIndexOutOfBoundsException)等。在编写代码时,不需要显式地在方法声明中指定可能抛出的运行时异常,也不强制要求在调用方捕获这些异常,因此运行时异常也称为非检查异常(unchecked exception)。
      • 2、编译时异常:非RuntimeException 类及其子类表示非运行时异常,这些异常通常是编译时异常,强制处理:调用方法时要么捕获这些异常,要么继续声明抛出这些异常,否则代码将无法通过编译。例如文件找不到异常(FileNotFoundException)、IO 异常(IOException)等。
  • 异常的处理方式:
    • 1、throws 继续抛出异常
      • throw+对象=抛出当前该类型的对象
      • 方法 + throws +异常列表 //异常列表,定义当前方法要抛出的异常类
    • 2、try catch 捕获异常
      • try: 可能会报错的代码 ,某一行出现异常,该行后面的代码不会执行 。
      • catch: JDK8的新特性:catch() 异常间可以自小到大用“ | ”分割;捕捉到,不再走之后的catch块
      • finally:必须写,无论如何都要走finally里面的;System.exit(0),finally子句失效;抓住异常,运行try catch块外面之后的代码,否则不运行。
      • return:捕获异常时出现return ,也要先走完finally再走return结束方法。
  • 自定义异常:
    • 继承RuntimeException,重写getMessage toString方法
    • getMessage: String 输出异常类的报错信息
    • toString: Strng 类名+异常
    • printStackTrace: void 类名+异常+(异常位置) 

return情况:

情况1:try{} catch(){}finally{} return;
            显然程序按顺序执行。
情况2:try{ return; }catch(){} finally{} return; (try中无异常时)
          程序执行try块中return之前(包括return语句中的表达式运算)代码;
         再执行finally块,最后执行try中return;
         finally块之后的语句return,因为程序在try中已经return所以不再执行。
情况3:try{ } catch(){return;} finally{} return;
         程序先执行try,如果遇到异常执行catch块,
         有异常:则执行catch中return之前(包括return语句中的表达式运算)代码,再执行finally语句中全部代码,
                     最后执行catch块中return. finally之后也就是4处的代码不再执行。
         无异常:执行完try再finally再return.
情况4:try{ return; }catch(){} finally{return;}
          程序执行try块中return之前(包括return语句中的表达式运算)代码;
          再执行finally块,因为finally块中有return所以提前退出。
情况5:try{} catch(){return;}finally{return;}
          程序执行catch块中return之前(包括return语句中的表达式运算)代码;
          再执行finally块,因为finally块中有return所以提前退出。
情况6:try{ return;}catch(){return;} finally{return;}
          程序执行try块中return之前(包括return语句中的表达式运算)代码;
          有异常:执行catch块中return之前(包括return语句中的表达式运算)代码;
                       则再执行finally块,因为finally块中有return所以提前退出。
          无异常:则再执行finally块,因为finally块中有return所以提前退出。

throw 和 throws 的区别:

1、throws 跟在方法声明后面,后面跟的是异常类名

      throw  用在方法体内,后面跟的是异常类对象名

2、throws 可以跟多个异常类名,用逗号隔开

      throw  只能抛出一个异常对象名

3、throws 表示抛出异常,由该方法的调用者来处理

      throw 表示抛出异常,由该方法体内的语句来处理

4、throws表示有出现异常的可能性,并不一定出现这些异常

      throw则是抛出了异常,执行throw一定出现了某种异常

throw 类似于return ,如果没有catch ,finally里需要return,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值