(异常,throw和throws,自定义异常)2020.10.30

异常

理解:
1.在程序执行过程中,出现了错误,导致程序停止执行。
2.是一个对象,封装了错误信息,包括:位置、异常名、异常原因
3.处理异常的机制
java.lang包中。
异常体系机制:
根类:Throwable
两个子类:
  Error:错误,指的是非常严重的问题,不应该试图去捕获。
  Exception:异常,指的是不太严重的问题,应该试图捕获。
    —RuntimeException:运行时异常
异常的默认处理机制:
 程序在执行某一行时,出现了异常,先自行解决,解决不了交给上一级;上一级接到异常后,先尝试解决,解决不了交给它的上一级,…依次类推,直至找到jvm,jvm采用默认处理方式,将异常出现的位置、异常名、异常原因等数据打印到控制上。

异常的处理:
 1.捕获
  try{}:检测语句块中是否有异常,将有可能发生异常的代码放在该块中
  catch{}:处理异常的代码
  finally{}:一定会执行的代码,作用资源的释放
  
  try{
  }catch(异常类型的声明){
   }
执行流程:执行try中时,某行出现异常,会将该异常对象交给catch,会与catch后小括号中的异常类型进行匹配,如果匹配就执行catch快,处理异常,处理后会继续向下执行。如果类型不匹配,则会采用jvm的默认处理机制。
  try{
  }catch(异常类型的声明){
  }catch(异常类型的声明){
   }…
一个try块可以对应多个catch块,catch后的小括号中的异常类型不同。
执行流程:try检测到异常对象,交给catch,会从第一个catch依次进行类型匹配,匹配上就执行对应的catch块中的代码,代码执行完整个try-catch语句结束,继续执行后续的代码。如果所有的catch后的异常类型都没有匹配上,那么jvm默认处理。
注意:当有多个catch块时,小括号中的异常类如果有父子关系,一定时先写子后写父。
   如果时兄弟关系,那就没有位置区分。
  try{
  }catch(){
  }…
  finally{
     一定会执行的代码,有无异常都执行,即使遇到return;也执行
    只有遇到了System.exit(0);不执行。
  }
  
在这里插入图片描述
总结:
  try–catch
  try–catch-catch…
  try–catch—finally
  try–catch-catch…–finally
  try–finally :目的就是一定要执行finllay中的代码
  Throwable中的方法:
  
在这里插入图片描述
2.声明

throw和throws

异常(Exception)分类:
编译时异常(受检异常):在编译时期就检测的异常,该异常处理后,才能运行。
Exception中除了RuntimeException以外的部分都是编译时异常。
运行时异常(非受检异常):在编译时期不检查,在运行时才检查的异常。RuntimeException
类或及其子类都是运行时异常。
throw:
扔、抛的意思。用在方法内,主动抛出一个异常对象。
当执行到某一行代码时,不符合现实生活,不应该继续向下执行,此时可以抛出。
格式: throw new 异常类名();
该关键字也有return的作用,执行了throw方法结束。
抛出的异常对象可以是编译时异常也可以时运行时异常,需注意如果时编译时异常,必须处
理该异常,否则编译不通过,通常处理是在方法上加throws。
throws:
扔、抛的意思,用来声明异常,用在方法上。谁调用该方法,谁处理异常。
格式: 方法名(参数列表) 异常名1,异常名2,… {}
throws : 后可以是编译时异常,也可以是运行时异常,如果时编译时异常,谁调用必须做
处理,处理方式时继续throws或try、catch捕获;如果时运行时异常,相当于时
没有问题,可以运行,可以不写处理。
在这里插入图片描述

自定义异常

原因:
1.异常体系家族太庞大,不方便查阅和使用
2.异常体系中的异常对象不满足于需求
步骤:

  1. 定义类继承Exception或RuntimeException
    类名: 描述异常的单词+Exception
  2. (可选)调用父类的构造方法
    在这里插入图片描述

注意:
重写方法时,父类方法没有throws,子类重写时可以没有throws也可以有,如果有throws后的异常只能时运行时异常。
重写方法时,父类方法有throws,子类重写时与父类相同可以,或者是父类异常的子集。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值