JavaSE--异常篇

JavaSE–异常篇

这里写图片描述

1.概念

①Java异常是Java提供的用于处理程序中错误(运行时发生的异常,而不是编译时的)的一种机制。
②抛出(throw)异常:Java程序的执行过程中如果出现异常事件,可以生成一个异常类对象;
③捕获(catch)异常:当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理(如果没有默认提交给Java运行时系统进行处理)。

2.分类

这里写图片描述

①Throwable:所有异常、错误的根基类(它们的老祖宗);
②Error:系统错误:这是指程序员(我们)没办法进行代码处理的错误,比如说Java虚拟机错误;
③Exception:异常,是指程序员能够代码处理的“错误”(异常),比如说数组越界,IOException;
④RuntimeException:运行时异常(不要望文生义),是指程序员能够处理,但可以不处理(当然也可以处理)的“错误”(异常),比如说数组越界,除以0;
⑤其他的Exception:其他异常,是指程序员能够处理,且必须处理的“错误”(异常),比如:IOException;

3.捕获和处理

try:
①try代码段包含可能产生例外的代码(也就是异常的意思,翻译问题),产生一种或者几种类型的异常对象;
②try代码段后可以跟一个或者多个catch代码段;

catch:
①每个catch代码段声明其能处理的一种特定类型的异常并提供处理的方法;
②在catch中声明的异常对象封装了异常事件发生的信息,在catch语句块中可以使用这个对象的一些方法获取这些信息:

例如:
->getMessage(  )方法:用来得到有关异常事件的信息;
->printStackTrace(  )方法:用来跟踪异常事件发生时执行堆栈的内容。

printStackTrace( )理解:
这里写图片描述
这种情况下,首先是main函数发生异常,然后就是method2、method1、readFile(顺序)发生异常,在内存中应该会有个栈,然后每发生一个异常就入栈一个:
这里写图片描述
然后如果有地方调用这个printStackTrace( )或者Java运行时系统(默认)调用这个方法时,异常就会一个一个出栈:
这里写图片描述
结果就会按顺序打印出readFile、method1、method2、main的异常信息,其中,异常名字和发生的行号是最重要的;

③当异常发生时,程序会中止当前的流程,根据获取异常的类型去执行响应的catch代码段;
④如果没有例外产生(也就是异常),所有的catch代码段都被略过不执行;
总结:写catch必须先有try;

finally:
①finally语句为异常处理提供一个统一的出口,使得在控制流程转到程序得其他部分以前,能够对程序得状态作统一的管理;
②无论try所指定的程序块中是否抛出例外(异常),finally所指定的代码都要被执行;
③通常在finally语句中执行资源的清除工作,如:关闭打开的文件、删除临时文件;

throw:在具体的方法体内,通过throw 抛出异常,使得该方法可以对异常不作处理(交给调用该方法的方法去处理,当然下一个方法也可以继续抛出,这就再交给下一个方法处理);

throws:在方法的声明部分抛出异常,而不是方法体内部。具体细节跟throw一样;
总结:写了try-catch语句,也就是对异常进行了处理,就不用throws抛出异常了;

4.其他细节:

①在一个try语句块中,基类异常的catch语句不可以写在子类异常的catch语句的上面;
总结:catch异常先catch小的再catch大的。
②main方法抛出的异常给的是Java运行时系统处理。(不过这是一种相当不好的编程习惯)
③自定义异常:
->继承Exception类来声明自己的异常类;
->编写成员变量,构造函数,成员方法
->在使用时通过new创建自己的异常类对象,然后通过throw语句或者在方法声明部分用throws语句抛出;
④异常和重写的关系:重写方法需要抛出与原方法所抛出异常类型一致或不抛出异常;
注意:重写抛出的异常要么没有,要么就一致(大的,小的,多了,少了都不行)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值