Java基础知识8-异常处理

Java基础知识8-异常处理_第1张图片
配图

异常概述

异常是运行是在代码序列中引起的非正常情况.换句话说,异常是运行时错误.
Java异常是用来描述在一段代码中发生的异常情况(也就是错误)的对象.当出现引起异常的情况时,就会创建用来表示异常的对象,并在引起错误的方法中抛出异常对象.
方法可以选择自己处理异常,也可以继续传递异常.

异常类型

所有异常类型都是内置类Throwable的子类.Throwable位于异常类层次中的顶部.紧随Throwable之下的两个子类,它们将异常分为两个不同的分支.
一个分支是Exception类,这个类既可以用于用户程序应当捕获的异常情况,也可以用于创建自定义异常类型的子类.Exception有一个重要的子类,名为RuntimeException.
另一个分支是Error类,该类定义了在常规环境下不希望有程序捕获的异常.Error类型的异常有Java运行时系统使用,指运行环境本身出现了某些错误.

未捕获的异常

int d = 0;
int a = 42 / d;

上述语句执行时,系统检测到试图除以零时,它会构造一个新的异常对象,然后抛出异常java.lang.ArithmeticException: / by zero如果没有即时捕获处理,程序会立即终止运行.

捕获异常

使用try和catch来捕获异常.

try {
   int d = 0;
   int a = 42 / d;
} catch (Exception e){
   System.out.println("程序出现了异常");
}

这个时候你就会发现,程序并没有终止运行,而是执行了catch代码中的代码.

自己处理异常有两个优点:
1.允许修复错误.
2.阻止程序自动终止.

多条catch字句

try {
    int d = 0;
    int a = 42 / d;
} catch (Exception e){
    System.out.println("Exception");
} catch (ArithmeticException ae){
    System.out.println("ArithmeticException");
}

上面我只是举了一个例子,如果程序先捕获了第一个catch的异常,那么程序不回再去捕获第二个catch的异常,以此类推.
我这是在举例子,因为Exception是所有异常的父类所以绝对不可能后捕获ArithmeticException异常的.

手动抛出异常

使用throw关键字.

try {
   throw new ArithmeticException();
}  catch (ArithmeticException ae){
   System.out.println("ArithmeticException");
}

上述代码中我们手动抛出了ArithmeticException异常,而Java中所有异常都是对象.所以我们要创建ArithmeticException对象并抛出.

引发异常但不处理

使用throws关键字

public void testMethod() throws ArithmeticException {

}

上述代码我们的这个方法执行的时候发生了异常,但是我们不做处理,并且将异常向上抛(抛给调用此方法的方法).

如果我们的方法中使用了自定义异常类,那么我们也需要向上抛出.

自定义异常类

class TestExcption extends Exception{
    public TestExcption(){}
    public TestExcption(String info){
        super(info);
    }
}

throw和throws的区别

1.throws使用在函数上.
   throw使用在函数内.
2.throws抛出的是异常类,可以抛出多个,用逗号隔开.
   throw抛出的是异常对象.

finally

使用finally可以创建一个代码块,改代码块会在执行try/catch代码块之后,并在执行try/catch代码块后面的代码之前执行.也就是说 不管是否有异常抛出,都会执行finally代码块.

try{
            
} catch (Exception e) {
            
} finally {
            
}

你可能感兴趣的:(Java基础知识8-异常处理)