异常
什么是异常
异常就是在程序的运行过程中所发生的不正常事件,异常会中断正在运行的程序
什么是异常处理
异常处理机制就是在程序执行代码的时候,万一发生了异常,程序会按照预定的处理办法对异常进行处理,异常处理完毕后,程序继续运行。
Java的异常处理是通过五个关键字try、catch、finally、throw和throws来实现的。
常见的异常类型
异常 | 说明 |
Exception | 异常层次机构的根类 |
ArithmeticException | 算术错误情形,如以零作为除数 |
ArrayIndexOutOfBoundsException | 数组下标越界 |
NullPointerException | 尝试访问null对象成员 |
ClassNotFoundException | 不能加载所需的类 |
InputMismatchException | 欲得到的数据类型与实际输入的类型不匹配 |
IllegalArgumentException | 方法接受的非法参数 |
ClassCaseException | 对象强制类型转换出错 |
NumberFormatException | 数字格式传唤异常,如把“acb”转换成数字 |
声明异常 throws
Java语言中通过关键字throws声明某个方法可能抛出的异常。throws可以同时声明多个异常,之间用逗号隔开。
通过两种方式处理异常
try-catch捕获并处理异常
通过throws继续声明异常。
抛出异常 throw
在Java语言中,使用throw关键字来自行抛出异常。
throw和throws的区别表现在以下三个方面。
作用不同:throw用于在程序中抛出异常;throws用于声明在该方法内抛出了异常。
使用的位置不同:throw位于方法体内部,可以作为单独语句使用;throws必须跟在方法参数列表的后面,不能单独使用。
内容不同:throw抛出一个异常对象,而且只能是一个;throws后面跟异常类,而且可以跟多个异常类。
异常的分类
Throwable类:所有异常类型都是Throwable类的子类,它派生两个子类,即Error 和Exception。
Error类:表示仅靠程序本身无法恢复的严重错误,如内存溢出动态链接失败、虚拟机错误。应用程序不应该抛出这种类型的对象(一般是由虚拟机抛出)。假如出现这种错误,除了尽力使程序安全退出外,在其他方面是无能为力的。所以在进行程序设计时,应该更关注Exception类。
Exception类:由Java应用程序抛出和处理的非严重错误,如所需文件找不到、网络连接不通或中断、算术运算出错(如被零除)、数组下标越界、装载了一个不存在的类、对null对象操作、类型转换异常等。它的各种不同的子类分别对应不同类型的异常。
运行时异常:包括RuntimeException及其所有子类,不要求程序必须对它们做出处理。例如ArithmeticException和InputMismatchException异常,在程序中并没有使用try-catch 或 throws进行处理,仍旧可以进行编译和运行,如果运行时发生异常,会输出异常的堆栈信息并中止程序运行。
Checked异常(非运行时异常):除了运行时异常外的其他由Exception继承来的异常类。程序必须捕获或者声明抛出这种异常,否则会出现编译错误,无法通过编译。处理方式包括两种:通过try-catch 在当前位置捕获并处理异常:通过throws声明抛出异常。交给上一级调用方法处理。
开源日志记录工具log4j
日志根据记录内容不同,主要分为三类
SQL日志:记录系统执行的SQL语句。
异常日志:记录系统运行中发生的异常事件。
业务日志:记录系统运行过程。
Log4j是一个非常优秀的日志记录工具,是Apache的一个开源项目。