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

Java 异常(Exception)全面解析:类型与原理

 欢迎并且感谢大家指出我的问题,由于本人水平有限,有些内容写的不是很全面,只是把比较实用的东西给写下来,如果有写的不对的地方,还希望各路大牛多多指教!谢谢大家!🥰

大家如果对Java后端面试题感兴趣可以关注一下面试题专栏

在 Java 编程世界里,异常处理是保障程序稳健运行的关键环节。理解异常的类型与原理,能帮助开发者写出更健壮、更具容错性的代码。接下来,我们就深入探索 Java 异常的世界。

Java 异常的基本概念

        异常,从本质上讲,是程序在运行过程中出现的错误事件。当异常发生时,如果没有得到妥善处理,程序就会中断执行。Java 通过异常处理机制,让开发者能够捕获这些异常,并采取相应的补救措施,从而保证程序的稳定性。

异常的类型

        Java 中的异常主要分为两大类:受检异常(Checked Exception)非受检异常(Unchecked Exception),它们都继承自Throwable类。

受检异常

        受检异常是在编译阶段就必须进行处理的异常。这类异常通常代表着一些外部环境因素导致的错误,比如文件不存在、网络连接失败等。典型的受检异常有IOExceptionSQLException等。例如,当我们尝试读取一个不存在的文件时,就会抛出FileNotFoundException,它是IOException的子类。

import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class CheckedExceptionExample {
    public static void main(String[] args) {
        File file = new File("nonexistent.txt");
        try {
            FileReader reader = new FileReader(file);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

非受检异常

非受检异常在编译阶段不需要强制处理,它们通常是由于程序逻辑错误导致的,比如空指针引用、数组越界等。RuntimeException及其子类都属于非受检异常,像NullPointerExceptionArrayIndexOutOfBoundsException等。

public class UncheckedExceptionExample {
    public static void main(String[] args) {
        String str = null;
        // 这里会抛出NullPointerException
        int length = str.length();
    }
}

此外,Error类也是Throwable的子类,它代表着严重的系统错误,比如OutOfMemoryErrorStackOverflowError等。这类错误通常是由系统资源耗尽等原因引起的,一般情况下,程序无法对其进行有效的处理。

异常的原理

当 Java 程序执行过程中出现异常时,Java 虚拟机(JVM)会创建一个异常对象,并将其抛出。这个异常对象包含了异常的类型、发生的位置等信息。

异常抛出后,JVM 会在当前方法的调用栈中查找能够处理该异常的代码块。如果当前方法没有处理该异常,JVM 会将异常抛给调用它的方法,依此类推,直到找到合适的异常处理代码块或者异常被抛到最顶层(此时程序会终止运行)。

异常处理机制

Java 提供了try-catch-finally语句来处理异常。try块中放置可能会抛出异常的代码,catch块用于捕获并处理特定类型的异常,finally块中的代码无论是否发生异常都会被执行,通常用于释放资源。

public class ExceptionHandlingExample {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3};
        try {
            // 可能会抛出ArrayIndexOutOfBoundsException
            System.out.println(numbers[3]);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("数组越界异常: " + e.getMessage());
        } finally {
            System.out.println("无论是否发生异常,都会执行这里");
        }
    }
}

另外,throw关键字可以手动抛出异常,throws关键字则用于声明方法可能抛出的异常,让调用者来处理。

public class ThrowThrowsExample {
    public static void divide(int a, int b) throws ArithmeticException {
        if (b == 0) {
            throw new ArithmeticException("除数不能为零");
        }
        int result = a / b;
        System.out.println("结果: " + result);
    }

    public static void main(String[] args) {
        try {
            divide(10, 0);
        } catch (ArithmeticException e) {
            System.out.println("捕获到异常: " + e.getMessage());
        }
    }
}

总结

        理解 Java 异常的类型与原理,是编写高质量 Java 程序的基础。合理运用异常处理机制,能够让程序在面对各种错误时保持稳定运行,可以更好的面对不同的Java后端面试,以便更好的去回答。


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

相关文章:

  • 【网络安全】常见的web攻击
  • AI Agent实战:打造京东广告主的超级助手 | 京东零售技术实践
  • python与pycharm如何设置文件夹为源代码根目录
  • DeepSeek掘金——SpringBoot 调用 DeepSeek API 快速实现应用开发
  • 迎接2025,立个flag
  • 图像处理:模拟色差的生成
  • Spring MVC中环境配置的实战应用
  • 自制操作系统学习第七天
  • STM32-心知天气项目
  • Python----数据结构(队列,顺序队列,链式队列,双端队列)
  • 使用PyQt5和百度AI实现图片清晰度增强的GUI应用
  • Linux下安装中文输入法总结
  • pycharm中配置PyQt6详细教程
  • qt项目配置部署
  • java基于数组实现队列(二)
  • 解决双系统开机显示gnu grub version 2.06 Minimal BASH Like Line Editing is Supported
  • 计算机网络————(一)HTTP讲解
  • Maven 构建中的安全性与合规性检查
  • Android SoundTrigger架构学习
  • 0基础学前端-----CSS DAY13