zoukankan      html  css  js  c++  java
  • 04_1_异常的概念

    04_1_异常的概念

    1. 异常的概念

    Java异常是Java提供的用于处理程序中错误的一种机制。

    所谓错误是指程序运行的过程中发生的一些异常事件(如:除0溢出,数组下标越界,所要读取的文件不存在)。

    设计良好的程序应该在异常发生时提供处理这些错误的方法,使得程序不会因为异常的发生而阻断或产生不可预见的结果。

    Java程序的执行过程中如出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息并将提交给Java运行时系统,这个过程称为抛出(throw)异常。

    Java运行时系统接收到异常对象时,会寻找能处理这异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。

    2. 异常的分类

    Error:称为错误,由Java虚拟机生产并抛出,包括动态链接失败、虚拟机错误等,程序对其不做处理。

    Exception:所有异常类的父类,其子类对应了各种各样可能出现的异常事件,一般需要用户显式的声明或捕获。

    Runtime Exception:一类特殊的异常,如被0除、数组下标超范围等,其产生比较频繁,处理麻烦,如果显式的声明或捕获将会对程序可读性和运行效率影响很大。因此由系统自动检测并将它们交给缺省的异常处理程序(用户可不必对其处理)。

    3. 异常的捕获和处理

    try语句

    try{...}语句指定了一段代码,该段代码就是一次捕获并处理例外的范围。

    在执行过程中,该段代码可能会产生并抛出一种或几种类型的异常对象,它后面的catch语句要分别对这些异常做响应的处理。

    如果没有例外产生,所有的catch代码段都被忽略过不执行。

    catch语句

    catch语句块中是对异常进行处理的代码,每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。

    catch中声明的异常对象(catch (SomeException e))封装了异常事件发生的信息,在catch语句块中可以使用在这个对象的一些方法获取这些信息。

    例如:

    getMessage()方法,用来得到有关异常事件的信息。

    printStackTrace()方法,用来跟踪异常事件发生时执行堆栈的内容。

    finally语句

    finally语句为异常处理提供一个统一的出口,使得在控制流程转到程序的其他部分以前,能够对程序的状态做统一的管理。

    无论try所指定的程序块中是否抛出例外,finally所指定的代码都要被执行。

    通常在finally语句中可以进行资源的清除工作。如:

    关闭打开的文件

    删除临时文件

    4. 使用自定义异常

    使用自定义异常一般有如下步骤:

    1. 通过继承java.lang.Exception类声明自己的异常类。
    2. 在方法适当的位置生成自定义异常的实例,并用throw语句抛出。
    3. 在方法的声明部分用throws语句声明该方法可能抛出的异常。

    例:

    class MyException extends Exception {

    private int id;

    public MyException(String message, int id) {

    super(message)

    this.id = id;;

    }

    public int getId() {

    return id;

    }

    }

    package Test;

    public class Test {

    public static void main(String[] args) {

    Test t = new Test();

    t.manager();

    }

    public void register(int num) throws MyException {

    if(num < 0) {

    throw new MyException("人数为负值,不合理", 3);

    }

    System.out.println("登记人数  " + num);

    }

    public void manager() {

    try {

    register(100);

    } catch (MyException e) {

    System.out.println("登记失败, 出错类型码=" + e.getId());

    e.printStackTrace();

    }

    System.out.println("操作结束");

    }

    }

  • 相关阅读:
    DC中为什么要用Uniquify?
    hdu 1596 find the safest road
    hdu2112 HDU Today
    hdu 2066 一个人的旅行
    poj 3026 Borg Maze
    poj 1979 Red and Black
    poj 1321 棋盘问题
    hdu 1010 Tempter of the Bone
    hdu 4861 Couple doubi
    codeforces584B Kolya and Tanya
  • 原文地址:https://www.cnblogs.com/flyback/p/8871619.html
Copyright © 2011-2022 走看看