Java中异常的介绍

异常

典型的异常:

错误Error
StackOverflowError:方法递归调用,会发生栈内存溢出错误
OutOfMemoryError:当不断得向堆中创建对象时,会出现
异常Exception::
异常是可以捕捉住,然后让程序恢复运行
ArrayIndexOutOfBoundsExceptions:数组下标越界
NullPointerException:访问null的对象的方法或属性时
ClassCastException:类型转换失败时
ConcurrentModificationException:并发修改异常
ArithmeticException:除零异常!

Java中异常的介绍_第1张图片

处理异常的方法

1) 积极处理
格式:

 		 try {
                   // 有可能出现异常的代码
             } catch( 异常类型 ) {
                   // 捕获异常后的代码
             }

注意:

  1. catch能捕捉的异常,要么精确匹配,要么用父类型匹配
  2. 可以用多个catch捕获不同类型的异常
  3. 多个catch块时,子类的catch块要写在前面,父类要写在后面
  4. 1.7 后一个catch块中可以有多个平级的异常

2) 消极处理
语法: 在方法的声明部分添加 throws 异常类型
含义: 说明方法在执行时有可能出现的异常,将异常交给方法的调用者处理,main 的调用者是jvm,当异常传给jvm时,程序运行就结束了

从异常的行为分类:

未检查异常(uncheck)
RuntimeException或它的子类
Error和它的子类
检查异常(check)
Throwable
Exception以及他们的子类
检查异常需要强制地配合try-catch或throws一起使用

主动抛出异常

throw new 异常对象()

异常对象的常见方法

e.getMessage() 获取异常的信息
e.printStackTrace()打印异常的跟踪信息

    public static void m1(int n) {
        if(n <= 0 ){
            // 主动产生一个异常
//            int[] a = new int[10];
//            System.out.println(a[11]);
            throw new RuntimeException("n必须大于0");
        }
        System.out.println("执行计算");
    }

    public static void main(String[] args) {
        try {
            m1(0);
        } catch (RuntimeException e) { // e异常对象
//            System.out.println(e);
//            System.out.println(e.getMessage()); // 获取异常信息
            e.printStackTrace(); // 打印异常的跟踪链信息
        }
    }

自定义异常

创建异常类

class MyException extends Exception{ // 检查异常

}

class MyException extends RuntimeException { // 未检查异常

}

异常使用的经验

  1. 不要吞掉异常
  2. 与有返回值的方法连用时要注意.
  3. 重写方法与异常声明(throws)
    子类的重写方法,不能抛出比父类更多的异常(检查异常)
    子类的重写方法,可以不抛出异常
    若父类和子类方法throws都是未检查异常不用遵守上述约定
  4. 建议将检查异常转换为未检查异常重新抛出

finally

如果try catch 以及finally都出现了return语句, 以finally中的return为准

如果try 有return, 但finally中对返回的变量做了修改, 不会影响return的结果

你可能感兴趣的:(JavaSE)