异常
try-catch-finally
第一种情况:正常
顺序:try块 — try-catch之后的代码块
public void method(){
try {
// 代码段(此处不会产生异常)
} catch (异常类型 ex) {
// 对异常进行处理的代码段
}
// 代码段
}
第二种情况:出现异常
顺序:try块 — catch异常类型匹配 — 进入catch块 — try-catch之后的代码块
public void method(){
try {
// 代码段 1
// 产生异常的代码段 2
// 代码段 3
} catch (异常类型 ex) {
// 对异常进行处理的代码段4
}
// 代码段5
}
第三种情况:异常类型不匹配
顺序:try块 — catch异常类型不匹配 — 程序中断运行
public void method(){
try {
// 代码段 1
// 产生异常的代码段 2
// 代码段 3
} catch (异常类型 ex) {
// 对异常进行处理的代码段4
}
// 代码段5
}
在try-catch块后加入finally块
1.是否发生异常都执行finally块
2.不执行的唯一情况(System.exit(1);)
存在return的try-catch-finally块
public void method(){
try {
// 代码段 1
// 产生异常的代码段 2
} catch (异常类型 ex) {
// 对异常进行处理的代码段3
return;
}finally{
// 代码段 4
}
}
运行顺序:
调用方法输出异常信息:e.printStackTrace();
异常对象常用方法![](https://i-blog.csdnimg.cn/blog_migrate/d2c8dbf65bd74ecb049c2d0d6a07658c.png)
常见异常类型
多重catch块
throw、throws
声明异常
public class Test7 {
public static void divide() throws Exception { //声明异常,多个异常用逗号隔开
//可能出现异常的代码
}
public static void main(String[] args) {
// 方式1:调用者处理异常
try {
divide();
} catch (Exception e) {
e.printStackTrace();
}
}
//方式2:调用者继续声明异常
// public static void main(String[] args) throws Exception {
// divide();
// }
}
抛出异常
public class Person {
private String name = ""; // 姓名
private int age = 0; // 年龄
private String sex = "男"; // 性别
public void setSex(String sex) throws Exception {
if ("男".equals(sex) || "女".equals(sex))
this.sex = sex;
else { //自行抛出异常
throw new Exception(“性别必须是\"男\"或者\"女\"!");
}
}
}
异常的分类
用log4j记录日志
步骤:
- 在项目中加入log4j的JAR文件
- 创建log4j.properties文件
- 配置日志信息
- 使用log4j记录日志信息