当前位置: 首页 > article >正文

【面向对象】Java处理异常的方式

文章目录

  • 一、什么是异常
    • 1.1 异常的定义
    • 1.2 异常的分类
  • 二、Java的异常处理方式
    • 2.1 try-catch
    • 2.2 try-catch-finally
    • 2.3 try-with-resources
    • 2.4 throws
  • 三、自定义异常

一、什么是异常

1.1 异常的定义

在 Java 中,异常指的是程序运行过程中出现的错误或意外情况,例如除以零、数组越界、文件未找到等。这些错误会导致程序中断,Java 提供了丰富的异常处理机制来应对这些问题。

1.2 异常的分类

Java 中的异常分为三类:

  • 受检查异常(Checked Exception)编译时必须显式处理的异常。常见如 IOException、SQLException。

  • 运行时异常(Unchecked Exception)编译时不强制处理,程序运行时可能发生的异常。常见如 NullPointerException、ArithmeticException。

  • 错误(Error)严重的问题,如 JVM 错误,通常无法通过代码处理。常见如 OutOfMemoryError。

二、Java的异常处理方式

2.1 try-catch

try-catch 是最常见的异常处理方式。语法如下:

try {
    // 可能抛出异常的代码
} catch (ExceptionType e) {
    // 异常处理逻辑
}
public class ExceptionExample {
    public static void main(String[] args) {
        try {
            int result = 10 / 0; // 可能抛出异常
        } catch (ArithmeticException e) {
            System.out.println("除以零异常:" + e.getMessage());
        }
    }
}

2.2 try-catch-finally

finally 块用于无论是否发生异常,都必须执行的代码,比如释放资源。

import java.io.FileInputStream;
import java.io.IOException;

public class FinallyExample {
    public static void main(String[] args) {
        FileInputStream file = null;
        try {
            file = new FileInputStream("test.txt");
            int data = file.read();
            System.out.println("文件读取成功:" + data);
        } catch (IOException e) {
            System.out.println("文件读取失败:" + e.getMessage());
        } finally {
            if (file != null) {
                try {
                    file.close();
                } catch (IOException e) {
                    System.out.println("文件关闭失败:" + e.getMessage());
                }
            }
        }
    }
}

2.3 try-with-resources

Java 7 引入了 try-with-resources,用于自动关闭资源,实现了 AutoCloseable 接口的资源会在 try 块结束后自动关闭。

语法:

try (ResourceType resource = new ResourceType()) {
    // 使用资源的代码块
} catch (ExceptionType e) {
    // 异常处理逻辑
}
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class TryWithResourcesExample {
    public static void main(String[] args) {
        try (BufferedReader reader = new BufferedReader(new FileReader("test.txt"))) {
            System.out.println(reader.readLine());
        } catch (IOException e) {
            System.out.println("文件读取失败:" + e.getMessage());
        }
    }
}

2.4 throws

throws 用于将异常向上抛出,由调用者处理。

public class ThrowsExample {
    public static void main(String[] args) {
        try {
            readFile("test.txt");
        } catch (IOException e) {
            System.out.println("捕获异常:" + e.getMessage());
        }
    }

    public static void readFile(String fileName) throws IOException {
        throw new IOException("文件未找到");
    }
}

三、自定义异常

Java 允许开发者根据业务需求创建自定义异常。自定义异常需要继承 ExceptionRuntimeException

// 自定义异常类
class InvalidAgeException extends Exception {
    public InvalidAgeException(String message) {
        super(message);
    }
}

public class CustomExceptionExample {
    public static void main(String[] args) {
        try {
            checkAge(15);
        } catch (InvalidAgeException e) {
            System.out.println("捕获自定义异常:" + e.getMessage());
        }
    }

    public static void checkAge(int age) throws InvalidAgeException {
        if (age < 18) {
            throw new InvalidAgeException("年龄必须大于等于18岁");
        }
    }
}


http://www.kler.cn/a/408405.html

相关文章:

  • 丹摩|重返丹摩(下)
  • Thymeleaf模板引擎生成的html字符串转换成pdf
  • 大公司如何实现打印机共享的?如何对打印机进行管控或者工号登录后进行打印?异地打印机共享的如何实现可以帮助用户在不同地理位置使用同一台打印机完成打印任务?
  • 03系统设计之商业业务平台(D1_学习前言)
  • C语言基础学习:抽象数据类型(ADT)
  • AI Large Language Model
  • STM32抢占优先级不生效
  • 对于相对速度的重新理解 - 插一句
  • MySQL原理简介—10.SQL语句和执行计划
  • 编程中的字节序问题
  • 海信Java后端开发面试题及参考答案
  • 基于python的长津湖评论数据分析与可视化,使用是svm情感分析建模
  • docker 配置代理
  • 如何在 .gitignore 中仅保留特定文件:以忽略文件夹中的所有文件为例
  • hyperf 配置步骤
  • 深入理解CRC:通信可靠性的关键
  • CSS中flex:1是什么属性
  • Milvus实操
  • Adobe Illustrator 2024 安装教程与下载分享
  • docker拉取镜像问题解决
  • 【Linux】gcc/g++使用
  • Python + 深度学习从 0 到 1(00 / 99)
  • 小公司该如何做好项目管理工作
  • 空安全-模块-并发
  • Go-protobuf consul注册备忘录
  • Ruby 模块(Module)