异常
概念: 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时是可以避免的。异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序。
异常发生的原因 :
- 用户输入了非法数据
- 要打开的文件不存在
- 网络通信时连接中断,或则JVM内存溢出。
要理解Java异常处理是如何工作的,你需要掌握以下三种类型的异常:
- 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这时程序员无法预见的。
- 运行时异常:运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
- 错误:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。
Java编程语言使用异常处理机制为程序提供了错误处理的能力
程序中预先设置好对付异常的处理方法-------->异常-------->对异常进行处理-------->处理完毕,程序继续运行
Java的异常处理是通过5个关键字来实现的:try、catch、finally、throw、throws
捕获异常
try:执行可能产生异常的代码
catch:捕获异常
finally:无论是否发生异常,代码总能执行
声明异常
throws:声明方法可能要抛出的各种异常
抛出异常
throw:手动抛出异常
使用try-catch块捕获异常,分为3种情况
第一种情况:正常
第二种情况:出现异常
第三种情况:异常类型不匹配
多重捕获块
一个 try 代码块后面跟随多个 catch 代码块的情况就叫多重捕获。
可以在 try 语句后面添加任意数量的 catch 块。
如果保护代码中发生异常,异常被抛给第一个 catch 块。
如果抛出异常的数据类型与 ExceptionType1 匹配,它在这里就会被捕获。
如果不匹配,它会被传递给第二个 catch 块。
如此,直到异常被捕获或者通过所有的 catch 块。
异常类型
Java 语言定义了一些异常类在 java.lang 标准包中。
标准运行时异常类的子类是最常见的异常类。由于 java.lang 包是默认加载到所有的 Java 程序的,所以大部分从运行时异常类继承而来的异常都可以直接使用。
Exception:异常层次结构的父类
ArithmeticException:算术错误情形,如以零作除数
ArrayIndexOutOfBoundsException:数组下标越界
NullPointerException:尝试访问null对象成员
ClassNotFoundException:不能加载所需的类
IIIegalArgummentException:方法接收到非法参数
ClassCastException:对象强制类型转换错误
InputMismatchException:输入类型不匹配,如输入数字而输入一个字符
NumberFormatException:数字格式转换异常,如把 “abc” 转换为数字
try-catch-finally块
在try-catch块后加入finally块
1.是否发生异常都执行
2.不执行的唯一情况 System.exit(1);
存在return的try-catch-finally块
try块内容——>catch块中return之前的内容——>finally块——>return
引发多种类型的异常
- 排列catch语句的顺序:先子类后父类
- 发生异常时按顺序逐个匹配
- 只执行第一个与异常类型匹配的catch语句
throws声明异常,throw抛出异常
如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。
也可以使用 throw 关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。
异常的分类
开源日志记录工具log4j
日志(log)
- 主要用来记录系统运行中一些重要操作信息
- 便于监视系统运行情况,帮助用户提前发现和避开可能出现的问题,或者出现问题后根据日志找到原因
日志的分类
SQL日志、异常日志、业务日志
log4j是一个非常优秀的开源日志记录工具
- 控制日志的输出级别
- 控制日志信息输送的目的地是空间、文件等
- 控制每一条日志的输出格式
使用log4j记录日志步骤
- 在项目中加入log4j的JAR文件
- 创建log4j.properties文件
- 配置日志信息
- 使用log4j记录日志信息