一、异常类介绍
1.检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
2.运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
3.错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。
二、捕获异常
try
{
// 程序代码
}catch(ExceptionName e1)
{
//Catch 块
}
举例如下:
可用Ctrl+Alt+T选中try/catch捕获异常
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = sdf.parse("2023-12-16 8:00");
System.out.println(d);
}
catch (ParseException e) {
throw new RuntimeException(e);
}
三、自定义异常
问题严重时抛检查性异常,其余情况可抛运行时异常
步骤:
1.定义一个异常类继承
2.重写构造方法
3.通过throw new 异常类(xxx)来创建异常对象并抛出
基本格式
public class MyException extends Exception{
//重写构造方法(重要)
public MyException() {
super();
}
public MyException(String message) {
super(message);
}
}
举例如下
自定义异常类:
public class AgeIllegalRuntimeException extends RuntimeException{
//重写构造方法
public AgeIllegalRuntimeException() {
super();
}
public AgeIllegalRuntimeException(String message) {
super(message);
}
}
主类:
public class Main {
public static void main(String[] args) {
try {
saveAge(160);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
//throws关键字
public static void saveAge(int age)throws AgeIllegalRuntimeException{
if(age>0&&age<150)
System.out.println("年龄保存成功 "+age);
else{
//用一个异常对象封装这个问题
//throw关键字抛出异常
throw new AgeIllegalRuntimeException("/age is illegal, you age is "+age);
}
}
}
throws/throw 关键字
throws关键字:在Java中,throws关键字用于声明一个方法可能抛出的异常类型。当一个方法可能抛出一个受检查异常时,可以在方法声明中使用throws关键字声明该异常的类型。这样的声明使得调用者知道该方法可能会抛出哪些异常。
void readFile() throws IOException {
// 读取文件的代码
}
throw关键字:在Java中,throw关键字用于手动抛出一个异常。当程序某部分的代码检测到异常情况时,可以使用throw关键字创建一个异常对象并将其抛出。这个异常对象可以是任何Throwable子类的实例,包括异常类和错误类。
throw new AgeIllegalRuntimeException("/age is illegal, you age is "+age);
finally关键字
finally关键字:在Java中,finally关键字用于定义在try-catch语句块中的代码执行完成后需要执行的代码块。无论是否发生异常,finally块中的代码都会被执行。通常用于释放资源、关闭文件等操作。
try {
// 可能会抛出异常的代码
} catch (Exception e) {
// 处理异常的代码
} finally {
// 无论是否有异常,执行完try或catch块后都会执行的代码
}
开发中的实例
例如,假设有一个方法用于从文件中读取数据并进行处理。在处理完成后,我们需要确保文件对象被关闭,以释放系统资源并避免文件泄漏。可以使用finally关键字来确保无论发生什么情况,文件都会被关闭。
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class FileProcessor {
public static void main(String[] args) {
processFile("example.txt");
}
public static void processFile(String fileName) {
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(fileName));
String line;
while ((line = reader.readLine()) != null) {
// 处理文件数据的逻辑
}
} catch (IOException e) {
System.out.println("处理文件时发生异常: " + e.getMessage());
} finally {
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
System.out.println("关闭文件时发生异常: " + e.getMessage());
}
}
}
}