java异常类

 

  当程序运行出现异常时,会退出程序结束运行而不至于让程序崩溃。

1. 异常类

  所有异常的根类是java.lang.Throwable,其下有两个子类:Error和Exception。

(1) Error

  Error是程序无法处理的错误,表面系统JVM处于不可恢复的崩溃状态,此时错误与代码书写无关。

  如:内存资源不够时,将出现OutOfMemeoryError。

(2) Exception

  Exception是程序本身能够处理的异常。Exception是所有异常类的父类,通常异常分为RuntimeException(运行时异常)、CheckedException(已检查异常)。

  • RuntimeException通常可添加逻辑处理来避免。如:被0除异常、空指针异常、类型转换异常、数组下标越界异常、数字格式异常等。
  • CheckedException必须做出处理,否则无法通过编译。如:IOException、SQLException、自定义异常类等。

2. 异常捕获

  捕获异常的关键词:try--catch--finally

try {可能出现异常的语句}
catch (异常类类名 e) {...}
catch (异常类类名 e) {...}
finally {...}

(1) try

  try后面包含可能出现异常的语句。

  try语句至少包含一个catch语句或一个finally语句。

(2) catch

  Throwable类的默认方法:

    toString(): 显示异常类类名及出现异常的原因。

    getMessage(): 显示出现异常的原因。

    printStackTrace(): 跟踪异常事件发生时堆栈的内容。

(3) finally

  在异常处理后一般都会执行的语句放在finally中,如:关闭文件流、断开数据库连接等。

要点:

  • 当try、catch中存在return语句时,finally语句也会执行,其执行后再通过return语句退出。
  • 当try、catch中存在System.exit(0)语句时,finally语句不会执行。

3. 异常抛出

  抛出异常不是在出现异常时才出现的,而是代码中定义的出现异常,使用throw语句抛出异常。抛出的异常必须是Throwable或其子类的实例。

IOException e = new IOException();
throw e;

 

4. 自定义异常类

[访问修饰符] class 异常类类名 extends Exception {
    [访问修饰符] 返回值类型 方法名(参数列表) throws 异常类1[, 异常类2] {
        ...
    }
    ...
}

要求:

  • 用户自定义异常类都是RuntimeException的子类。
  • 自定义异常类通常需要编写多个重载的构造器。
  • 自定义异常类需要提供serialVersionUID。
// 自定义异常类
class MyException extends Exception {
    static final long serialVersionUID = 13465653435L;
    private int idnumber;

    public MyException(String message, int id) {
        super(message);
        this.idnumber = id;
    }

    public int getId() {
        return idnumber;
    }
}

class TestSelfException {
    public void regist(int num) throws MyException {
        if(num < 0)
            throw new MyException("人数为负值, 不合理", 3);
        else
            System.out.println("登记人数:" + num + "  登记成功");
    }

    public void manager() {
        try {
            regist(100);
            regist(-20);
        } catch(MyException e) {
            System.out.println("登记失败,出错种类:" + e.getId());
        }

        System.out.println("本次登记操作结束");
    }

    public static void main(String [] args) {
        TestSelfException tse = new TestSelfException();
        tse.manager();
    }
}

 执行结果:

登记人数:100 登记成功
登记失败,出错种类:3
本次登记操作结束

注意:

  throw是抛出异常的关键字。

  throws是声明方法时可能出现的异常类。

5. 断言

(1)用途

  用于调试,相当于一个if判断。

(2)用法

  断言在程序中一般处于关闭状态,若想要使用,则在编译后添加参数即可。

java -ea 主类类名

(3)语法

  当bool表达式为False时,在断言语句处停止并输出提醒语句;当bool表达式为True时,不做出放行。

assert bool表达式:提醒语句;

 

posted @ 2020-05-05 23:32  步平凡  阅读(1249)  评论(0编辑  收藏  举报