Java异常类

一、异常类介绍

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());
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值