zoukankan      html  css  js  c++  java
  • 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关键字,调用自定义异常的构造方法,传入异常信息,实现抛出自定义异常。

  • 相关阅读:
    配置iis 8.0 遇到的问题
    easy ui datagrid 下拉框级联绑定
    Flutter
    Flutter
    mingw
    Flutter 配置windows桌面开发环境
    Flutter -- 输入法键盘盖住控件出现A RenderFlex overflowed by 27 pixels on the bottom
    PowerBuilder -- 连接sqlite
    idea
    PowerBuilder -- 事件与函数的触发
  • 原文地址:https://www.cnblogs.com/shamao/p/10251640.html
Copyright © 2011-2022 走看看