1.异常的发生
异常不是一定会发生的,是可能会发生
2、异常
异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序
3、java本身对异常的处理
java编程语言使用异常处理机制为程序提供了错误处理的能力
程序中预先设置好对付异常的处理办法,在程序运行中发现异常时,对异常进行处理,异常处理完毕后程序继续运行。
4、java中的异常处理的5个关键字
try catch finally throws throw
try:执行可能产生异常的代码
catch:捕获异常
finally:无论是否发生异常,代码总能执行
throws:声明异常,声明方法可能要抛出的各种异常
throw:抛出异常, 常
5、try、catch块捕获异常三种情况:
1、正常
try中的代码块不会产生异常,则执行try-catch块后的代码块
2、出现异常
try中代码块中有产生异常的代码段,从该代码段直接跳入catch
中对异常类型匹配,匹配完成,程序继续执行
e.printStackTrace();//打印出现异常的堆栈信息,异常出现的结果和位置
3、异常类型不匹配
try块中有产生异常的代码段,跳入catch块中寻找发现异常类型不匹配,程序
中断运行
try块不能单独存在,与catch块一起使用,一个try块可以有多个catch
6、在catch块中处理异常
a、加入用户自定义处理信息:System.err.println("除数不能为0")
b、调用方法输出异常信息:e.printStackTrace();
异常对象常用的方法:
void printStackTrace();//输出异常的堆栈信息
String getMessage();//返回异常信息描述的字符串,是
printStackTrace()输出信息的一部分
7、常见的异常类型:
Exception 所有异常的父类
ArithmeticException 算术错误异常,如以零作为除数
ArrayIndexOutOfBoundsException 数组下标越界
NullPointerException 空指针异常
ClassNotFoundException 不能加载所需要的类
IllegalArgumentException 非法参数
ClassCastException 对象强转格式错误
NumberFormatException 数字格式转换异常,如把"abc"转换成数字
8、finally块中不执行的唯一情况:
在catch块中写 System.exit(1);//中断程序,退出java虚拟机,不执行finally块
“0”表示正常退出程序,“1”或非零表示非正常退出程序
9、存在return的try-catch-finally块
try中发现异常-->产生异常对象-->异常类型匹配-->进入catch块-->执行finally块
最后在执行 return退出方法
10、多重catch块
排列catch语句的顺序:先子类后父类
发生异常时按顺序逐个匹配
只执行第一个与异常类型匹配的catch语句
11、异常的俩种方式
声明异常 throws Exception 方法体外,多个异常用逗号隔开
抛出异常 throw new Exception(); 方法体里
处理时:继续声明异常或者使用try-catch块处理异常
main方法声明的异常由java虚拟机处理
12、 Error与Exception
Error:仅靠程序本身无法恢复的严重错误
|
Throwable-
|
Exception:由java程序抛出或处理的非严重错误
Exception包括运行时异常和检查异常;运行时异常,编译正常,运行时可能出错
不要求程序必须做出处理; 运行异常,编译都不能通过,程序必须处理该类异常。
检查异常:ClassNotFoundException; SQLException
运行时异常: ArithmeticException;NullPointerException;NumberFormatException
13、开源的日志记录工具—log4j
日志:主要用来记录系统运行中一些重要操作信息
便于监视系统运行情况,帮助用户提前发现和避开可能出现的问题,或者出现问题
后根据日志找到原因
日志分类:SQL日志,异常日志,业务日志
log4j是开源日志记录工具:
控制日志的输出级别
控制日志信息输送的目的地是控制台、文件等
控制每一条日志的输出格式
使用log4j的步骤:a、在项目中加入log4j的JAR文件
b、创建log4j.properties文件
c、配置日志文件
d、使用log4j记录日志信息
输出级别:fatal>error>warn>infor>debug
在方法外面建立一个日志对象:初始化
private static Logger myLog=Logger.getLogger(Case1.class.getName());