【Java】异常的处理-方式【主线学习笔记】


前言

Java是一门功能强大且广泛应用的编程语言,具有跨平台性和高效的执行速度,广受开发者喜爱。在接下来的学习过程中,我将记录学习过程中的基础语法、框架和实践技巧等,分享学习心得,对自己学习过程进行整理和总结,也希望能为其他学习Java的朋友提供一些帮助和参考。


1、处理概述

在编写程序时,可能会遇到各种错误或异常情况。例如,在执行除法运算时,分母为零会导致程序崩溃;访问数组时超出边界会引发ArrayIndexOutOfBoundsException。为了避免这些问题,程序员需要在可能出现错误的地方加上检查代码,这往往会导致代码冗长且可读性差。因此,Java引入了异常处理机制,能够集中处理错误,使得程序更加简洁、优雅并易于维护。

2、Java异常处理机制(方式)

Java的异常处理机制主要包括以下几种方式:

方式一(抓抛模型):try-catch-finally

这是Java最常用的异常处理结构。

  • 过程1:“抛”,程序在执行的过程当中,一旦出现异常,就会在出现异常的代码处,生成对应异常类的对象,并将此对象抛出一旦出,此程序就不执行其后的代码了。
  • 过程2:“抓”,针对于过程1中抛出的异常对象,进行捕获处理。此捕获处理的过程,就称为抓。一旦将异常进行了处理,代码就可以继续执行。

其基本语法如下:

try {
    // 可能会抛出异常的代码块
} catch (异常类型1 e) {
    // 处理异常的代码块
} catch (异常类型2 e) {
    // 处理异常的代码块
} finally {
    // 无论是否发生异常,都会执行的代码块
}
  • try块:用于包围可能抛出异常的代码。如果代码块中发生异常,就会自动生成一个对应异常类的对象,并将此对象抛出。

  • catch块:用于处理try块中发生的特定类型的异常。针对try中抛出的异常的对象,与catch语句进行匹配,一旦匹配上,就进入catch语句进行处理。可以有多个catch块来处理不同类型的异常。

  • finally块:可选的代码块,无论try块或者catch中是否发生异常,无论try中或者catch中是否存在return语句等,finally块中的代码都会执行。通常用于清理资源,如关闭文件、数据库连接等。唯一例外,使用System.exit(0)来种植当前正在运行的java虚拟机。

使用细节
多个catch块的处理:

  • 同层次异常:如果声明了多个catch块,不同异常类型之间不存在父子关系时,顺序可以自由安排。
  • 父子类关系:如果多个异常类型存在父子关系,必须将子类的catch块放在父类的前面。否则,父类的catch块会捕获所有子类异常,导致子类catch块无法被执行,从而出现编译错误。

catch中异常处理的方式,方式有多种:

  • 自定义输出语句: 可以编写自定义的输出信息,提示用户或记录日志。这种方式适用于简单的错误处理。
  • printStackTrace(): 使用此方法可以打印异常的详细信息,包括异常的类型、错误信息以及异常发生时的调用栈。 因为它能够帮助开发者快速定位问题。
  • getMessage(): 使用此方法可以获取发生异常的原因,返回一个描述性的信息。适用于需要简要提示的场景。

什么样的代码需要放在finally当中?

  • 在开发中,一些资源,如输入流、输出流,数据库连接、Socket连接等资源,在使用完以后,必须显示的进行关闭操作,否则,GC不会自动的回收这些资源,从而导致内存泄漏,因此必须将这些操作声明在finally中。

try中声明的变量,出了try结构之后,就不进行调用了。

示例:

try {
    int result = 10 / 0; // 可能会抛出ArithmeticException
} catch (ArithmeticException e) {
    System.out.println("除数不能为零!" + e.getMessage());
} finally {
    System.out.println("无论如何我都会执行。");
}

方式二:throws + 异常类型

throws关键字用于声明方法可能抛出的异常。这并不处理异常,而是将异常抛给了给该方法的调用者,该调用者仍然需要考虑如何处理相关异常。语法如下:

public void myMethod() throws 异常类型 {//表示下面代码中可能会出现的代码
    // 可能抛出异常的代码
}

当方法调用者调用这个方法时,必须使用try-catch语句来处理可能抛出的异常。
使用细节

  • 子类重写的方法抛出的异常类型可以与父类被重写的方法抛出的异常类型相同,或是父类被重写的方法抛出的异常类型的子类。

示例:

public void readFile(String filePath) throws IOException {
    FileReader file = new FileReader(filePath);
    // 处理文件
}

public void process() {
    try {
        readFile("somefile.txt");
    } catch (IOException e) {
        System.out.println("文件读取失败!" + e.getMessage());
    }
}

总结

Java的异常处理机制通过try-catch-finallythrows关键字,有效地将错误处理与正常程序逻辑分开,增强了代码的可读性和可维护性。使用异常处理,可以更优雅地处理程序运行中的各种意外情况,提高了程序的健壮性。

如果你有具体的例子或想讨论的细节,请告诉我!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虫本初阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值