黑马程序员-day09-异常

------- android培训java培训、期待与您交流! ----------

异常概述 含义 程序运行时出现的不正常
形式,以父类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块的参数类型(异常类)如果出现继承的情况,级别越高的应越往后放,否则编译失败
注意4 catch应有具体的解决方法,不要简单的定义输出语句,仅用作学习
注意5 jdk1.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该异常,在内部解决

你可能感兴趣的:(java学习笔记)