1. 什么是异常
异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序。
2. 异常处理
程序中预先设置好对付异常的处理办法。
程序运行→异常→对异常进行处理→处理完毕,程序继续运行。
Java的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws
捕捉异常:
try 执行可能产生异常的代码
catch 捕获异常
finally 无论是否发生异常,代码总能执行
声明异常:
throws 声明方法可能要抛出的各种异常
抛出异常:
throw 手动抛出异常
3. try-catch块
使用try-catch块捕获异常,分为三种情况。
第一种情况,正常。
没有异常情况下,代码将会跳过catch执行下面的程序。
public void method(){
try {
// 代码段(此处不会产生异常)
} catch (异常类型 ex) {
// 对异常进行处理的代码段
}
// 代码段
}
第二种情况,出现异常。
在try代码块中出现异常,会产生异常对象,通过catch进行异常匹配之后,程序继续执行。
public void method(){
try {
// 代码段 1
// 产生异常的代码段 2
// 代码段 3
} catch (异常类型 ex) {
// 对异常进行处理的代码段4
}
// 代码段5
}
第三种情况,异常类型不匹配。
try代码块出现异常,产生异常对象与catch异常类型不匹配,程序中断运行。
4. 在catch块中处理异常
加入用户自定义处理信息
System.err.println("出现错误:被除数和除数必须是整数,”+"除数不能为零。");
调用方法输出异常信息
e.printStackTrace();
5. try-catch-finally
在try-catch块后加入finally块。
是否发生异常都执行。
首先执行try代码块,有异常执行catch代码块后执行finally块后退出,无异常执行finally块退出。
存在return的try-catch-finally块
如果程序中存在return,先执行finally,再执行return退出。
public void method(){
try {
// 代码段 1
// 产生异常的代码段 2
} catch (异常类型 ex) {
// 对异常进行处理的代码段3
return;
}finally{
// 代码段 4
}
}
6. 多重catch块
引发多种类型的异常。
Ø 排列catch 语句的顺序:先子类后父类。
Ø 发生异常时按顺序逐个匹配。
Ø 只执行第一个与异常类型匹配的catch语句。
public void method(){
try {
// 代码段
// 产生异常(异常类型2)
} catch (异常类型1 ex) {
// 对异常进行处理的代码段
} catch (异常类型2 ex) {
// 对异常进行处理的代码段
}
// 代码段
}
7. 声明异常
通过throws在方法后面声明异常,多个异常用逗号隔开。
public class Test7 {
public static void divide() throws Exception {
//可能出现异常的代码
}
public static void main(String[] args) {
try {
divide();
} catch (Exception e) {
e.printStackTrace();
}
}
// public static void main(String[] args) throws Exception {
// divide();
// }
}
8. 抛出异常
通过throw手动抛出异常。
public void setSex(String sex) throws Exception {
if ("男".equals(sex) || "女".equals(sex))
this.sex = sex;
else {
throw new Exception(“性别必须是\"男\"或者\"女\"!");
}
}
9. 异常体系结构
10. 自定义异常
11. 使用log4j记录日志
1. 在项目中加入log4j的JAR文件
2. 创建log4j.properties文件
3. 配置日志信息
4. 使用log4j记录日志信息
配置日志信息:
### 设置Logger输出级别和输出目的地 ###
log4j.rootLogger=debug, stdout,logfile
### 把日志信息输出到控制台 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
### 把日志信息输出到文件:jbit.log ###
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=jbit.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l %F %p %m%n