Java学习——异常处理

Java学习——异常处理

摘要:本文主要介绍了在Java开发中常用的的异常处理。

异常基础

定义

异常,是指在运行时期发生的不正常情况。

如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失,所以在程序的设计中必须要考虑各种异常的发生,并正确的做好相应的处理,这样才能保证程序正常的执行。

异常分类

异常在Java中使用Exception这个类表示,其父类是Throwable,Throwable有两个子类,Exception(异常)和Error(错误)。

Exception,是指一般由人为造成,可以避免和处理的。Exception又分为ChickException(受检异常)和RuntimeException(非受检异常)。

Error,是指严重的错误,如硬盘损坏、内存不足等,无法避免和解决的致命错误。

受检异常(CheckedException)

也称为编译异常,是指编译时被编译器检出的异常,在编译时就必须处理的异常。

◆ ClassNotFoundException:类未找到异常,未正确加载类导致的异常,一般发生在加载类的代码中,比如: Class.forName(className); 。

◆ SQLException:SQL异常,一般会发生在和数据库建立连接,或者对返回结果进行处理的时候,比如: Connection connection = DriverManager.getConnection(url, user, password); 。

◆ IOException:文件异常,一般在读写数据的时候会出现这种问题,比如: String line = new BufferedReader(fileReader).readLine(); 。

◆ FileNotFoundException:文件不存在异常,属于IOException的子类,一般在读取文件的时候会产生异常,需要进行异常处理,比如: FileReader fileReader = new FileReader(new File(fileName)); 。

非受检异常(RuntimeException)

也称为运行时异常,是指在程序运行时出现的异常,编译时不会提示异常,所以在编译时不用处理,系统会默认打印到日志里。

◆ NullPointerException:空指针异常,最为常见的一种异常,获取值为null的对象的属性,或者通过null的对象调用了方法。

◆ ArrayIndexOutOfBoundsException:数组下标越界异常,获取数组的值的时候,尝试获取不在下标范围内的下标的值。

◆ ClassCastException:类型转换异常,尝试将两个类进行强制转换时有可能会报这个异常。

◆ ArithmeticException:算术异常,进行数学运算时会发生的异常。

◆ NumberFormatException:数字转换异常,尝试将非数字的数据类型转换为数字类型时,会报这种错误。

异常处理

捕获异常并进行处理

在Java中如果需要处理异常,必须先对异常进行捕获,然后再对异常情况进行处理。在Java中使用try和catch关键字对异常进行捕获,还可以使用finally保证即便在出现了异常后,仍能执行的操作。

try语句块包括的是可能会发生异常的代码段,执行时可能会有一种或者多种异常发生。当有异常发生时,会交给catch处理,如果没有发生异常,则略过catch语句块。

catch语句块里需要的参数是某种异常类型,一个try代码块可能有一个或者多个catch代码块,以便对不同的异常捕获处理。

finally语句块为异常代码提供必要的处理,只要程序在执行,无论发生了什么,最后都会执行finally里的代码。

public void readFile(String name) {
    FileReader fr = null;
    try {
        fr = new FileReader(new File(name));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } finally {
        try {
            fr.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

throw关键字可以在catch到相应类型的异常后,将异常重新抛出,交由上一级调用的代码处理。

try {
    System.out.println(name.length());
} catch (NullPointerException e) {
    throw e;
}

抛出异常

如果不想捕获和处理出现的异常,可以使用throws关键字把产生的异常抛出,交给调用方法的上一级代码处理。

public void readFile(String name) throws IOException {
    FileReader fr = new FileReader(new File(name));
    fr.close();
}

如果在catch捕获之后,使用throw抛出了受检异常,同样需要使用throws关键字进行抛出处理。

public void readFile(String name) throws IOException {
    try {
        FileReader fr = new FileReader(new File(name));
        fr.close();
    } catch (IOException e) {
        throw e;
    }
}

自定义异常

创建异常类

命名规则为XxxException,继承自Exception类或者其子类。

定义自定义异常的有参构造方法,调用父类的有参构造方法。

使用自定义异常

使用throw关键字,调用自定义异常的构造方法,传入异常信息,实现抛出自定义异常。

原文地址:https://www.cnblogs.com/shamao/p/10251640.html