怀旧网,博客详情:Java异常详解

1、java枚举类详解

2、java String 类和类方法详解

3、StringBuffer 详解

4、Java Math 类详解

5、java random详解

6、java Date类使用讲解

7、java 集合类详解

8、java算法二分查找

9、SpringBoot 在初始化加载无法使用@Value的时候读取配置文件教程

10、springboot 项目配置本地jar包导入

11、单个java文件运行需要带上jar包的用法

12、spring boot 项目配置https服务

13、Java异常详解

14、Java Collection的使用

15、Java List 集合

16、Java ArrayList 介绍

17、Java LinkedList 讲解

18、Java Set 集合介绍

19、Java HashSet 介绍

20、Java TreeSet 介绍

21、Java Map 介绍以及子类介绍

22、Java 多线程使用介绍

23、Java 注解讲解

24、Java 反射讲解

25、Java 反射讲解

26、HashMap 源码讲解

27、面向对象初级教学

28、Java整合JWT使用

原创

Java异常详解

一、什么是异常

Java中的异常(Exception)是程序执行过程中可能遇到的问题,它们可以由程序中的错误、逻辑问题或其他外部条件引起。异常通常分为可检查异常(Checked Exception)和运行时异常(Runtime Exception)。以下是详细介绍:

  • 可检查异常。这类异常在编译时必须被处理,否则编译器会报错。常见的可检查异常包括文件未找到、网络连接中断、输入格式错误等。这些异常通常表示程序在运行过程中可能出现的外部条件或错误。

  • 运行时异常。这类异常在程序运行过程中发生,不需要在代码中显式处理。常见的运行时异常包括空指针异常数组索引越界异常算术异常等。这些异常通常表示程序错误或逻辑错误。

在Java中,处理异常的关键字包括trycatchthrowthrows。try语句用来包围可能抛出异常的代码块,catch语句用于捕获并处理这些异常,finally语句用于执行清理操作,无论是否出现异常。throw语句用于在方法内部抛出异常对象,而throws语句用于在方法声明中声明可能抛出的异常类型。

二、异常的体系结构

异常是程序运行过程中出现的错误。本文主要讲授的是Java语言的异常处理。Java语言的异常处理框架, 是Java语言健壮性的一个重要体现。

Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。 在Java API中已经定义了许多异常类,这些异常类分为两大类,错误Error和异常Exception。 Java异常体系结构呈树状,其层次结构图如图

image-20240312193737064

三、Java异常处理机制

Java的异常处理机制是Java语言的重要特性之一,它允许程序在运行时检测并处理异常情况,以保证程序的可靠性和稳定性。Java的异常处理机制主要包括以下几个方面:

  1. 异常类:Java中定义了一个Exception类和其子类,包括RuntimeException和CheckedException等。当程序出现异常情况时,将会抛出一个异常对象。

  2. 异常处理:Java提供了try-catch语句和throw语句来捕获和处理异常。try块中抛出异常后,catch块将会捕获该异常并进行处理。

  3. 异常链:Java中的异常可能会产生异常链,即一个异常由另一个异常所引发而产生。

  4. 异常处理顺序:当程序产生多个异常时,Java会按照特定的顺序处理这些异常,首先处理Exception及其子类的异常,然后再处理RuntimeException及其子类的异常。

Java的异常处理机制是一种重要的防御性编程手段,能够有效地捕获和处理程序中的异常情况,提高程序的健壮性和可靠行。

四、处理异常

当程序在运行中如果遇到不可预测的问题的时候,可以通过添加tyr-catch-finally 来进行异常检测处理:

public static void main(String[] args){
    try{
        int a = 10 / 0;
    }catch (ArithmeticException e){
        e.printStackTrace();
        System.out.println("当捕获到异常后执行的代码!");
    }finally {
        System.out.println("程序结束必须执行的代码!");
    }
    System.out.println("over!");
}

image-20240312212605701

代码执行运行结果如上,当捕获到异常就会输出catch里面的语句,然后finally的代码也会执行,而且最外边的输出也同样执行了。

当需要捕获多个异常时:

public static void a(){
    b();
}

public static void b(){
    a();
}

image-20240312212842107

我们调整代码进行异常捕获

public static void main(String[] args){
        try{
            a();
        }catch (ArithmeticException e){
            e.printStackTrace();
            System.out.println("当捕获到异常后执行的代码!");
        }finally {
            System.out.println("程序结束必须执行的代码!");
        }
        System.out.println("over!");
    }

image-20240312212928898

同样报错,添加异常捕获catch重试

public static void main(String[] args){
    try{
        a();
    }catch (ArithmeticException e){
        e.printStackTrace();
        System.out.println("当捕获到异常后执行的代码!");
    }catch (StackOverflowError e){
        e.printStackTrace();
        System.out.println("当捕获到异常后执行的代码1!");
    }finally {
        System.out.println("程序结束必须执行的代码!");
    }
    System.out.println("over!");
}

image-20240312213028310

成功捕获异常。

当遇到多个异常时:需要遵守规则-先捕获小异常在捕获大异常否则编译报错

image-20240312213159025

调整位置-可以进行编译

image-20240312213218424

五、自定义异常类

1、创建类 并且继承Exception类

public class MyException extends Exception{
}

2、编写构造方法-和记录错误的属性

public class MyException extends Exception{
    public String message;
    
    public MyException(String message) {
        this.message = message;
    }
}

3、使用-编辑测试方法-用来测试传入年龄是否合法,不合法就抛出错误

public static void test(int age) throws MyException {
    if(age < 0 || age > 200){
        throw new MyException("年龄不能小于 0 或大于 200");
    }

    System.out.println("年龄: " + age);
}

4、调用测试

public static void main(String[] args){
    try {
        test(-10);
    } catch (MyException e) {
        System.out.println(e.message);
    }
}

image-20240312213841656

public static void main(String[] args){
        try {
            test(-10);
        } catch (MyException e) {
            System.out.println(e.message);
        }
    }

image-20240312213923159

成功捕获异常---------------

六、总结

1、处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理

2、在多重catch块后面,可以加一个catch(Exception)来处理可能会被遗漏的异常

3、对于不确定的代码,也可以加上try-catch,处理潜在的异常

4、尽量去处理异常,切记只是简单的调用printStackTrace()去打印

5、具体如何处理异常,要根据不同的业务需求和异常类型去决定

6、尽量添加finally语句块去释放占用的资源

  • 平台作者:怀旧(联系作者)
  • QQ:444915368
  • 邮箱:444915368@qq.com
  • 电话:17623747368
  • 评论

    登录后才可以进行评论哦!

    回到顶部 留言