黑马程序员-day09-异常

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

异常概述含义程序运行时出现的不正常
形式,以父类Throwable描述对于程序的异常,JAVA以类的形式进行描述,并封装为对象,因此异常的表现形式为对象
Error类严重,一般不需编写代码解决
Exception类可以以针对性的处理方式进行处理
Throwable类含义Java中所有错误和异常类的父类
方法:getMessage()获取错误或异常的信息并以String形式返回
方法:toString()复写的Object类方法,将“错误异常名字:信息”以字符串形式返回
方法:printStackTrace()将“错误异常名字:信息”以及异常出现的位置以字符串形式打印输出,即JVM默认处理机制的调用方法
异常处理try{}检测语句;try中的代码出现异常的代码之后的代码都不会执行
注意:应该在抛出异常的功能初次被调用的地方try,而不是最终调用者
catch{}(异常类类名 异常类对象名)接收异常对象,处理异常的代码(要么解决,要么抛出)
注意:catch中的其他代码应放在抛出的代码的前面,因为一旦抛出了,后面的代码便无法访问,编译失败。再次抛出的异常一般与接收的异常不同,是调用该功能的功能所能解决的异常
finally{}一定会执行的代码;
某些代码一定要执行一下;
无论数据操作是否成功,都应该关闭数据库连接
无论操作是否成功,都应该释放调用的底层方法(如java在windows下创建文件,实际上调用的是windows的命令来创建,那么无论创建是否成功,都应该进行释放,因为占用了系统资源)
只有finally前面有语句:System.exit(0);时finally才不会执行
注意三者是一个整体,(可以没有finally),try没有检测出异常的话,catch不会执行。
可以没有catch,此时finally中定义一定会执行的代码,一般用于关闭资源。因为没有catch方法解决,因此该异常需要在方法体上声明,让调用者来解决
异常声明throws 异常类类名1,异常类类名2至于功能主体之前(即大括号之前),声明该功能有可能会出现问题,声明的异常类应该尽量具体精确
注意方法若声明了异常,那么调用者必须处理(解决或抛出异常给其他异常类)或者在调用者方法的名称后,也抛出异常(最终抛给的是调用者方法的调用者,jvm)
多异常处理注意1多个异常不会同时发生,只要产生一个,程序就停止了。但每种异常都需要有对应的catch处理,因为不确定会出现哪种异常,但是不要定义多余的catch
注意2对于声明的不同异常,应有不同的catch方法,即catch的参数类型和声明时的一致,而不是使用父类参数类型来代替,否则相当于隐藏
注意3多个catch块的参数类型(异常类)如果出现继承的情况,级别越高的应越往后放,否则编译失败
注意4catch应有具体的解决方法,不要简单的定义输出语句,仅用作学习
注意5jdk1.7后一个catch语句可以捕获多个异常,即在括号中用|符号隔开:
catch(异常类型1 | 异常类型2 | 异常名称3 异常名称)
自定义异常自定义异常类class 自定义异常类名称 extends 异常类名称
注意父类应尽量具体而精确
自定义异常类特点构造函数注意需要引用父类构造函数
手动抛出异常在方法体中,设定条件,如果满足该异常条件,并抛出异常,格式为:
throw new 自定义异常类类名(构造参数)
实际上抛出的是自定义异常类的实体对象。
注意throw单独存在时,且一定会执行(没有执行条件,不是100%执行)下面不要定义语句,因为该语句100%无法访问,编译会失败
处理如果方法体中使用throw抛出了异常,那么必须进行处理(解决或抛出)
声明如果方法体中使用throw抛出了异常,并且在本方法内没有catch方法解决,需要在方法上进行声明(RunTimeException类及其子类除外,不需要声明)
RunTimeException及其子类特点1方法体中用throw抛出该类或其子类异常,可以不在方法上声明
特点2尽量不用处理,让程序在此处停掉
功能复写时的异常特点(RuntimeException不受此限制)父类throws异常子类只能throws该异常类或者该异常类的子类
父类throws多个异常子类只能throws多个异常类的子集
父类没有异常,但子类存在异常子类不能在方法体上throws,并且需要在方法体内部try解决
子类存在父类没有throws的异常同上,子类不能在方法体上throws该异常,在内部解决

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值