异常1

异常(没有没有异常的软件):是程序在执行过程中所产生的问题
造成的原因(1用户非法操作,2程序员在编写代码的时候,糟糕的设计,3来自于硬件设备的故障)
分类(1编译时异常(又称检查异常)(能够被编译器检测出来)2运行时异常(编译器无法检测出来,只有在程序运行时才会抛出)3错误(其实已经脱离“异常”的范畴不是程序员所能解决的比如内存不足,突然无法上网))
异常是java中特殊的对象(专门用来抛出代码错误),当一个方法抛出异常,该方法从调用栈中被弹出,同时产生的异常对象抛给栈中的前一个方法
异常的处理有一下三种方法
1方法本生直接抓捕异常,不让它沿着调用栈往下执行,继续向下传递
2方法本生直接抓捕异常,并且继续向下传递
3不去抓捕异常,就让异常沿着方法调用栈进行传递,并让方法从方法调用栈弹出
1.3都会弹出调用栈
e.printstacktrace()直接在控制台输出(最实用的)
throws关键字用来给方法的调用者,提前声明,声明我这个方法有可能会抛出异常。
如果在代码中,需要抛出某个异常,请使用throws关键字
方法异常的声明,通常用于编译时异常,而运行时异常,不需要提前声明
当一个方法中,可能抛出不计数的异常个数,解决方案有两种
1定义多个catch块,分别进行代码的监控
2在catch块中的参数类型定义时直接定义上层父类,采用动态多态的方式来解决问题
在定义catch块的时候,顺序按照从小到大的原则
编译时异常解决方案:1要么直接异常处理,要么就给方法的调用者进行“声明异常”
2运行时错误:不需要异常处理也不需要“异常声明”,让它报错,报错以后我们程序员再通过“条件控制语句”对其进行控制即可。
异常的声明的运用范围:
1在同一个完整的事务(具有明确边界并且具有明确的执行顺序的过程)范围内的业务方法,为了保证这个事务的完整性必须要声明异常而非抓捕异常。
当方法的调用者,需要知道“调用方法”的具体执行情况,而并非是“成没成功,是没失败”时,我们就有必要针对“调用方法”进行异常声明,比如张三给李四转钱这个过程中。
在方法异常声明的时候,如果遇到子异常和父异常都有可能出现异常时,建议使用父异常,因为子异常可以自动向上转型
抓捕有三种方式(try catch,try多个catch(异常由小到大),try catch finally)
声明(throws),抛出异常+-(throw)
try里面声明的变量外部是无法调用的,
finally不管抛不抛都要执行,通常配合catch出现,作用范围:做一些收尾工作(清空内存,关闭连接)
final:定义常量,最终类
finalize(object.finalize):垃圾回收
return返回符号,无论是定义在catch中,还是定义在try中finally里面的内容一定会执行,只能在try语块里面

猜你喜欢

转载自blog.csdn.net/qq_43039100/article/details/82715799