MENU

Java异常处理

• October 26, 2021 • Read: 168 • 编程语言,学习笔记

在程序中,错误可能产生于各种我们没有预料到的各种情况,在 Java 中这种在程序运行时可能出现的一些错误称为异常(Exception),了解 Java 中常见的异常有助于帮我们快速定位问题,提高开发效率。

Java 所有的异常都是由 Throwable 继承而来,其中 Error 比较严重是无法手动抛出异常的,一般情况下我们最关心的就是 Exception 这种非致命性异常。

捕捉异常

Java 的异常捕获结构由 trycatch finally 三部分组成,其中 try 语句块存放可能发生异常的 Java 语句;catchtry 之后,用来激发被捕获的异常;finally 语句块是异常处理结构的最后执行部分,如以下程序片段所示:

try {
    //可能抛出异常的语句
}
catch(exceptionType e) {
    //对exceptionType异常进行处理的语句
}
catch(otherExceptionType e) {
    //对其他异常的处理
}
//...
finally  {
    //...
}

由此可见,Java 异常处理大致分为 try-catch 语句块和 finally 语句块。当 try 代码块中的语句发生异常时,程序会跳转到 catch 代码块中执行,执行完毕后讲继续执行之后的代码,而不会执行 try 代码块中发生异常语句之后的代码,从而 Java 不会因为一个异常而影响整个程序的运行。

上面代码块中的 e 是一个对象,我们可以使用以下常用的成员函数来获取抛出异常的有关信息:

成员函数说明
getMessage()输出错误性质
toString()给出异常的类型与性质
printStackTrace()指出异常的类型、性质、栈层次及出现在程序中的位置

常见异常

在 Java 中已经提供了很多异常来描述比较常见的错误,其中有的需要程序员进行捕获处理或声明来抛出,有的由 Java 虚拟机自动捕获处理,Java 常见的异常很多,因为大部分异常类名由我们很熟悉的单词组成,就不一一介绍其异常类的意义了。

异常类说明
ClassCaseException类型转换 异常
ClassNotFoundException未找到对应类 异常
......

自定义异常

使用 Java 内置的异常类即可描述大部分异常情况,除此之外的异常,我们只需要继承 Exception 类即可自定义异常类:

public class myException extends Exception {
    public myException(String errorMessage) {
        super(errorMessage);
    }
}

以上代码片段中的 errorMessage 既是要输出的错误信息,如果我们想抛出自定义异常对象,则要使用 throw 关键字,此时程序在执行到 throws 时立即终止,其后面的语句将不会执行:

public class study {
    static int avg(int num_1, int num_2) throws myException {
        if(...)
            throws new myException("...");    //抛出的错误信息
        if(...)
            throws new myException("...");    //抛出的其他错误信息
        return ...;
    }
}

throw 关键字通常用于在 声明方法时指定该方法可能抛出的异常类型,多个异常可用逗号分隔,比如:

public class Main {
    static int avg(int num_1, int num_2) throws NegativeArraySizeException, ArrayIndexOutOfBoundsException {
        //...
    }
}

RuntimeException

其次,Java 还提供了常见的 RuntimeException,这些异常同样可用通过 try-catch 语句捕获。


编辑:Henry 2021-10-26


Archives QR Code
QR Code for this page
Tipping QR Code
Leave a Comment

2 Comments
  1. Money Money     Windows 7 /   Google Chrome

    网站每日ip 1千,交换友链,mo**y1.us/521

    1. Henry Henry     Windows 10 /   Google Chrome

      @Money谁允许你在我这里打广告了?
      第一,你网站有跟我交换链接的价值吗?本站非盈利我为什么需要流量?
      第二,您看过本站的友链要求吗?
      第三,我跟你很熟吗?最烦你这种评论,在别人文章里留下莫名其妙的广告评论!
      最后,别再访问本站,不欢迎你这种没素质的人。