异常处理小结

异常处理

异常
异常是导致程序中导致程序中断的指令流,比如说编写一段代码计算实现两数相除,输入两个数字,电脑计算出这两个数的商并输出,当正常输入的时候程序正常执行可以得到我们想要的结果;但是不可避免用户在输入时输入错误(比如输入了文字,又或者把0作为被除数),当出现这种情况的时候,程序就会终止运行并在控制台报出程序在哪里出现的是哪种错误,但是作为开发者写出这样子的代码是不能用于交付的,因此我们需要对因此进行处理,当出现了异常我们可以选择提示或者别的方法避免程序的中断,因此异常处理就派上用场了。

异常架构与基本概念

万物皆对象,既然Objext类是所有类的顶级父类,异常类也不例外,Object类下面有一子类Throwable(可抛出的)负责处理异常错误这一块,而Throwable则下分成Error(错误)和Exception(异常),Error类是很严重的错误,根本不能通过几行代码去处理,还可能牵涉到整体架构等方面的问题;而Exception类则是程序代码或者参数导致运行出错,可以通过代码去避免或者处理这些问题,严重程度低于错误,因此就称其为异常。

在异常类里面有多个子类继承Exception,并且针对多年来编程常见的异常分成多个方向,众多的子类里面有一个叫RuntimeException(运行时异常)的类,运行时异常这个类较为特殊,在编译过程中JVM并不会发现代码有问题,需要运行之后发现了异常才会把错误抛出并报错,而在编译过程中就发现并标红的异常,因为有JVM帮忙检查代码是否存在问题就称之为受检异常,相对应的,只有运行时才抛出的异常就称之为非受检异常。异常的架构图如下:

由于运行时异常在完成代码的编写时并不会报错,而在运行过程中方法或者传入参数出问题,容易被忽视,而这些的问题对程序影响更大,因此本文就围绕者运行时异常己其处理方法展开论述。

关键字
try , catch, finally , throws , throw

①try :判断语句块中是否出现异常
②catch:当try语句块中出现异常进行捕获,执行catch语句
③finally:无论有无异常,finally都将会执行(仅当有finally语句时)
④throws:把某类异常抛出,被调用的方法对该类异常不作处理
⑤throw:抛出异常的实例化对象

使用方法
1.try-catch-finally语句:

//try-catch-finally语句
try{
	//可能出现异常的代码
}catch(异常类型1 对象名){
	//异常处理的操作
}catch(异常类型2 对象名){
	//异常处理的操作
}finally{
	//异常统一出口,无论有误异常,除个别极端情况都必须执行
}

在这段语句当中,try块放入可能会出现异常的语句,catch块则放入异常的类型和当捕获到异常时将要进行的操作,catch可以有多个用来处理不同的异常,finally则为异常的统一出口,无论有无异常finally必然执行,catch部分和finally部分可以选择其一,但是两者不能同时缺省。
需要注意的是,当在finally执行前程序结束了,内存已经释放,此时finally的语句不再能执行。此外,在try或者catch语句中有return语句,也要等finally执行完才可以调出返回值,此时的返回值为finally执行前将要返回的值的副本。

异常处理流程如下:
①一旦产生异常,系统自动产生一个异常类的实例化对象;
②异常类在try语句,则自动匹配catch语句执行,没有对应的catch语句则将该异常抛出
③所有的catch会根据方法的参数异常类的实例化对象进行匹配,如果匹配成功则由此catch进行处理
2.throws和throw
两者都是用于异常的抛出,在异常的产生的角度来看,可能是自身代码的问题也有可能是外部调用方法时问题就已经存在,自身代码导致的异常还可以用try-catch处理,外部的代码并不一定是自己负责那一块,因此把问题抛出就可以很好的解决这个问题,把异常抛出给调用处。

两者的去别在于throws用于方法的声明处,表明某种异常是需要抛出的,方法自身是不处理的;而throw多用于在后面代码块中异常抛出,可以抛出的自定义的异常。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值