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

【Java】异常处理实例解析

文章目录

  • Java异常处理实例解析
    • Example01_2023yang:未处理的异常
    • Example02_2023yang:捕获并处理异常
    • Example03_2023yang:finally块的使用
    • Example04_2023yang:自定义异常
    • Example05_2023yang:忽略异常信息
    • Example06_2023yang:方法声明抛出异常
    • Example07_2023yang:抛出并捕获自定义异常
    • Example09_2023yang:自定义异常类


Java异常处理实例解析

在Java编程中,异常处理是一个重要的概念,它帮助我们处理程序运行时可能出现的错误。以下是几个关于异常处理的示例,每个示例都包含了详细的注释和运行结果。

Example01_2023yang:未处理的异常

public class Example01_2023yang {
    public static void main(String[] args) {
        // 调用divide方法,传入参数4和0
        int result = divide(4, 0);
        // 打印divide方法的返回结果
        System.out.println(result);
    }

    public static int divide(int x, int y) {
        // 计算x除以y的结果,并赋值给result变量
        int result = x / y;
        // 返回计算结果
        return result;
    }
}

运行结果:

java.lang.ArithmeticException: / by zero

解释: 这个示例中,divide 方法尝试将4除以0,这在Java中是不允许的,因此会抛出一个 ArithmeticException

Example02_2023yang:捕获并处理异常

public class Example02_2023yang {
    public static void main(String[] args) {
        try {
            // 定义数组下标越界的案例
            int[] a = {1, 2, 3};
            System.out.println(a[5]);
            // 尝试调用divide方法,传入参数4和0
            int result = divide(4, 0);
            // 如果divide方法没有抛出异常,打印结果
            System.out.println(result);
        } catch (Exception e) {
            // 如果divide方法抛出异常,捕获异常并打印异常信息
            System.out.println("捕捉的异常信息为:" + e.getMessage());
        }
        // 打印这条信息表示程序继续向下执行
        System.out.println("程序进行向下执行.....");
    }

    public static int divide(int x, int y) {
        // 计算x除以y的结果,并赋值给result变量
        int result = x / y;
        // 返回计算结果
        return result;
    }
}

运行结果:

捕捉的异常信息为:/ by zero
程序进行向下执行.....

解释: 这个示例中,我们尝试访问数组的一个不存在的索引,这会抛出一个 ArrayIndexOutOfBoundsException。然后,我们尝试将4除以0,这会抛出一个 ArithmeticException。这两个异常都被 catch 块捕获,并打印了异常信息。

Example03_2023yang:finally块的使用

public class Example03_2023yang {
    public static void main(String[] args) {
        try {
            // 尝试调用divide方法,传入参数4和0
            int result = divide(4, 0);
            // 如果divide方法没有抛出异常,打印结果
            System.out.println(result);
        } catch (Exception e) {
            // 如果divide方法抛出异常,捕获异常并打印异常信息
            System.out.println("捕捉的异常信息为:" + e.getMessage());
            // 遇到异常后,main方法结束执行
            return;
        } finally {
            // 无论是否发生异常,finally代码块都会执行
            System.out.println("进入finally代码块");
        }
        // 如果没有异常发生,或者在catch代码块中没有return,程序会继续向下执行
        System.out.println("程序继续向下....");
    }

    public static int divide(int x, int y) {
        // 计算x除以y的结果,并赋值给result变量
        int result = x / y;
        // 返回计算结果
        return result;
    }
}

运行结果:

捕捉的异常信息为:/ by zero
进入finally代码块

解释: 这个示例中,finally 代码块无论是否发生异常都会执行。即使在 catch 块中有 return 语句,finally 代码块仍然会执行。

Example04_2023yang:自定义异常

public class Example04_2023yang {
    public static void main(String[] args) {
        try {
            // 调用divide方法,传入参数4和0来模拟除以零的情况
            int result = divide(4, 0);
            // 如果divide方法没有抛出异常,打印结果
            System.out.println(result);
        } catch (Exception e) {
            System.out.println("开始处理Exception类型异常");
            // 如果divide方法抛出异常,捕获异常并打印异常信息
            System.out.println("发生异常:" + e.getMessage());
        } finally {
            System.out.println("我是finally处理的内容");
        }
    }

    public static int divide(int x, int y) throws Exception {
        // 检查除数是否为0,如果是,则抛出ArithmeticException异常
        if (y == 0) {
            throw new Exception("除数不能为0");
        }
        // 计算x除以y的结果,并赋值给result变量
        int result = x / y;
        // 返回计算结果
        return result;
    }
}

运行结果:

开始处理Exception类型异常
发生异常:除数不能为0
我是finally处理的内容

解释: 这个示例中,divide 方法在除数为0时抛出了一个自定义的 Exception。这个异常被 catch 块捕获,并打印了异常信息。

Example05_2023yang:忽略异常信息

public class Example05_2023yang {
    public static void main(String[] args) {
        try {
            // 尝试调用divide方法,传入参数4和2
            int result = divide(4, 2);
            // 如果divide方法没有抛出异常,打印结果
            System.out.println(result);
        } catch (Exception e) {
            // 如果divide方法抛出异常,捕获异常但忽略异常信息
            e.getMessage();
        }
    }

    public static int divide(int x, int y) {
        // 计算x除以y的结果,并赋值给result变量
        int result = x / y;
        // 返回计算结果
        return result;
    }
}

运行结果:

2

解释: 这个示例中,divide 方法正常执行并返回结果。catch 块捕获了异常,但没有打印异常信息。

Example06_2023yang:方法声明抛出异常

public class Example06_2023yang {
    public static void main(String[] args) throws Exception {
        // 调用divide方法,传入参数4和0,这里会发生除以零的操作
        int result = divide(4, 0);
        // 打印divide方法的返回结果
        // 但由于除以零,这里实际上不会执行,程序会在divide方法中抛出异常
        System.out.println(result);
    }

    public static int divide(int x, int y) {
        // 计算x除以y的结果,并赋值给result变量
        // 在这个例子中,当y为0时,会发生除以零的操作,导致程序抛出ArithmeticException异常
        int result = x / y;
        // 返回计算结果
        return result;
    }
}

运行结果:

java.lang.ArithmeticException: / by zero

解释: 这个示例中,main 方法声明抛出 Exceptiondivide 方法在除数为0时抛出了 ArithmeticException,这个异常被 main 方法抛出。

Example07_2023yang:抛出并捕获自定义异常

public class Example07_2023yang {
    public static void printAge(int age) throws Exception {
        // 检查传入的年龄是否小于或等于0
        if (age <= 0) {
            // 如果年龄不合法(小于或等于0),则抛出一个Exception异常,并附带错误信息
            throw new Exception("输入年龄有误,必须是整数!");
        } else {
            // 如果年龄合法,打印出此人的年龄
            System.out.println("此人年龄为:" + age);
        }
    }

    public static void main(String[] args) {
        // 定义一个变量age并初始化为-1,这里模拟了一个非法的年龄值
        int age = -1;
        try {
            // 调用printAge方法,传入age变量
            printAge(age);
        } catch (Exception e) {
            // 如果printAge方法抛出异常,捕获这个异常并打印异常信息
            System.out.println("捕获的异常信息为:" + e.getMessage());
        }
    }
}

运行结果:

捕获的异常信息为:输入年龄有误,必须是整数!

解释: 这个示例中,printAge 方法在年龄不合法时抛出了一个自定义的 Exception。这个异常被 main 方法的 catch 块捕获,并打印了异常信息。

Example09_2023yang:自定义异常类

class DivideByminusException extends Exception {
    // 构造函数,不提供任何信息,调用父类的无参构造函数
    public DivideByminusException() {
        super();
    }
    // 构造函数,接收一个字符串消息作为异常信息,调用父类的带消息的构造函数
    public DivideByminusException(String message) {
        super(message);
    }
}

public class Example09_2023yang {
    public static void main(String[] args) {
        try {
            // 调用divide方法,传入参数4和-2,这里模拟了一个除以负数的情况
            int result = divide(4, -2);
            // 如果divide方法没有抛出异常,打印结果
            System.out.println(result);
        } catch (DivideByminusException e) {
            // 如果divide方法抛出DivideByminusException异常,捕获这个异常并打印异常信息
            System.out.println(e.getMessage());
        }
    }

    public static int divide(int x, int y) throws DivideByminusException {
        // 检查除数是否为负数,如果是,则抛出DivideByminusException异常
        if (y < 0) {
            throw new DivideByminusException("除数是负数");
        }
        // 计算x除以y的结果,并赋值给result变量
        int result = x / y;
        // 返回计算结果
        return result;
    }
}

运行结果:

除数是负数

解释: 这个示例中,divide 方法在除数为负数时抛出了一个自定义的 DivideByminusException。这个异常被 main 方法的 catch 块捕获,并打印了异常信息。


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

相关文章:

  • rk3399开发环境使用Android 10初体验蓝牙功能
  • MacOS下,如何在Safari浏览器中打开或关闭页面中的图片文字翻译功能
  • Linux驱动开发第2步_“物理内存”和“虚拟内存”的映射
  • 单元测试、集成测试、系统测试、验收测试、压力测试、性能测试、安全性测试、兼容性测试、回归测试(超详细的分类介绍及教学)
  • 如何利用WebSockets实现高效的实时通信应用
  • Redis在高性能缓存中的应用
  • c# 调用c++ 的dll 出现找不到函数入口点
  • Java 核心技术卷 I 学习记录六
  • Scala中的Array
  • 基于树莓派的边缘端 AI 目标检测、目标跟踪、姿态估计 视频分析推理 加速方案:Hailo with ultralytics YOLOv8 YOLOv11
  • 鸿蒙生态的未来:共融与创新
  • HbuilderX 插件开发-模板创建
  • 将自定义函数添加到MATLAB搜索路径的方法
  • 【视觉SLAM】1-概述
  • java笔试练习题笔记(9)
  • GRE做题笔记(零散的个人经验)
  • 云渲染与云电脑,应用场景与技术特点全对比
  • 【RabbitMQ】10-抽取MQ工具
  • 高性能linux服务器运维实战 shell应用案例
  • C# yolo10使用onnx推理
  • SpringBoot整合Email 邮件发送详解
  • Java基础——多线程
  • SOP搭建:企业标准化操作程序构建与实施指南
  • 用com.github.shyiko.mysql.binlog 写一个监听mysql的binlog 的程序
  • 【代码随想录day32】【C++复健】509. 斐波那契数;70. 爬楼梯;746. 使用最小花费爬楼梯
  • Java-01 深入浅出 MyBatis - MyBatis 概念 ORM映射关系 常见ORM 详细发展历史