java学习第十五、十六天

异常处理
这里写图片描述

异常处理
异常概述:
异常(Exception)是程序在执行过程中所产生的问题

异常来源:
1.用户的非法操作
2.程序员在编写代码的时候一些糟糕的设计
3.来自于硬件设备的故障

异常分类:
1.检查异常:检查异常,也被称为“编译时异常”,由编译器检查出来的异常。
2.运行时异常:运行时异常,编译器无法检查出来,只有在程序运行时,抛出的异常,才是运行时异常

当一个方法中可能抛出不计数的异常个数 解决方案有两种:
1.定义多个catch块分别进行代码的监控,需要注意的是:在定义多个catch块的时候,定义的顺序需要遵循从小到大的顺序;
2.在catch块的参数类型定义时,直接定义上层父类,采用动态多态的方式来解决问题。

编译时异常的解决方案
1.直接异常处理
2.给方法的调用者进行异常声明(throws关键字,是异常方法的声明,用来给方法的调用者提前声明:这个方法会抛出异常)。
方法异常的声明通常用于编译时异常,而运行时异常不需要
若果在代码中间需要抛出某个异常,请使用throw关键字。

运行时异常的解决方案:
不需要异常处理,也不需要异常声明,让它报错,报错以后再通过“条件控制语句”对其进行控制即可

错误解决方案:
错误,错误实际上已经脱离了“异常”的范畴,因为程序员无法通过修改代码来解决问题了,比如:内存不足

异常的控制流程
方法栈的每一个方法,在碰到时,都有3种选择
1.抓捕异常,处理异常,使异常不再沿着方法调用栈向下传递
2.抓捕异常,处理异常,继续向下沿着方法调用栈向下传递(导致方法被弹出)
3.不抓捕异常,直接沿着方法调用栈向下传递(导致方法被弹出)

异常的继承体系:
throwable是所有异常的父类;
Exception、Error继承与throwable;
编译时异常与RuntimeException继承与Exception;

异常声明方法的应用
事务:
概述:具有明确边界的并且有明确顺序的完整的过程
特性:原则性、隔离性、一致性
事务中当方法的调用者需要知道被调用的方法的具体执行情况而并非是结果时,就有必要针对被调用的方法进行异常声明,比如:transfer()想知道“张三给李四转钱5000”这个过程中所有执行方法的具体执行情况的时候
在方法异常声明的时候,如果遇到子异常和父异常都可能抛出的情况下,建议声明父异常,因为子异常可以向父异常自动向上转型。

抓捕与声明以及抛出:
抓捕异常:
try-catch
try-catch-finally
try-catch-catch……
try-catch-catch-finally
声明异常:
throws
抛出异常:
throw

自定义一个异常类:用来代表在我们的类中会出现的问题
自定义类的特点:
1.所有的异常必须是Throwable的子类
2.需要继承Exception类
3.编写一个运行时异常,就需要继承RuntimeException类

猜你喜欢

转载自blog.csdn.net/qq_43046901/article/details/82728524