欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java异常的捕获及处理

程序员文章站 2022-04-07 17:29:04
...

异常的捕获及处理

1.try……catch……
2.throws
3.throw
4.assert 断言

First、什么是异常?

  • 异常是导致一个程序中断的指令流,一旦出现之后程序就将立即退出。
public class ExpTest{
    public static void main(String args[]){
        int x = 10;
        int y = 0;
        System.out.println("计算开始。") ;
        System.out.println("计算结果是:"+(x/y));
        System.out.println("计算结束。");
    }
}

程序的运行结果:

/*计算开始。
 *Exception in thread "main"                          *java.lang.ArithmeticException: / by zero
 *at ExpDemo01.main(ExpDemo01.java:6)
 */

产生了异常之后,在异常语句之后的代码将不再执行,直接退出程序。

要是程序继续进行,就需要异常语句的处理了。

Second、处理异常?

在Java中使用如下的语法进行异常的处理:

  • 一个 try 语句之后跟上了多个 catch 语句,表示可以处理多种异常。

  • 捕获范围小的异常要放在捕获范围大的异常之前。

  • 大部分的异常都直接使用Exception接收即可。

try{
    可能出现异常的语句;
}catch(异常类型 异常对象){
    处理异常;
}catch(异常类型 异常对象){
    处理异常;
}...
finally{
    异常处理的统一出口;

    //不管是否有异常,都执行此finally语句!
}

以算术异常为例,观察其继承的结构:

java.lang.Object
    java.lang.Throwable
        java.lang.Exception【程序中】
            java.lang.RuntimeException【控制台抛出异常console】
                java.lang.ArithmeticException

Throwable有两个子类:

Throwable:
    Error:表示"JVM错误",还没有运行到程序上,所以一般不去处理。
    Exception:是在"程序中"发生的异常,一般都需要进行处理。
    //肯定所有的异常类的操作都可以通过Exception进行接收。

Third、异常的处理流程

a、异常产生之后,实际上都会自动生成一个异常类的【实例化对象】,如果此时编写了异常处理语句的话,则进行异常的处理,如果没有的话,则交给 JVM 进行处理。

b、使用了 try 捕获异常之后,将自动与 catch 中的异常类型相匹配,如果匹配成功,则表示可以使用此 catch处理异常,如果都没有匹配成功的,则不能处理。

c、程序中不管是否出现了异常,如果存在了 finally语句,都要执行此语句的代码。

4、throws

  • throws关键字主要是用在方法的声明上,表示一个方法不处理异常,而交给被调用处进行处理。

  • 在主方法上使用的话就表示一旦出现了异常之后,继续向上抛,表示由JVM进行处理了。

  • 实际上默认情况下的所有异常都是依靠JVM进行处理的。

4、throw(少一个s)

  • throw关键字是在程序中"人为的抛出"一个异常对象。
    throw new Exception("认为抛出的!") ;

用一个程序去证明。

public class ExpTest01{
    public static void main(String args[]) {
        try{
            throw new Exception("认为抛出的!") ;
        }catch(Exception e){
            e.printStackTrace() ;
        }
    }
}

5、RuntimeException和Exception

1、RuntimeException:
- 抛出的异常是RuntimeException类或者是它的子类的话,那么可以不用进行异常处理的操作。
- 如果不做任何异常处理的话,则一旦出现了异常之后将交给被调用处进行处理。
2、两者的区别:

  • Exception必须处理,而RuntimeException可以不用处理。

6、异常处理的标准格式。

try…catch…finally、throw、throws实际上在开发中是要一起使用。
- throw直接抛出异常,无需自己处理,有程序以外的代码处理,至于什么异常开发者也不会知道,如果没有代码处理抛出的异常,程序将自动结束。throw是用在方法体内,抛出后由程序外的代码处理。throw 则是抛出了一些具体的异常——一些已知的异常,执行throw代码就是抛出异常。

  • try catch可以捕获抛出的异常,并显示出来,开发者可以很明显的了解自己代码的异常。
  • throws是用在异常说明之后,若存在异常,将由方法的调用者执行;
    throws可能存在异常需要抛出,强调可能。

7、assert关键字(断言)

  • 一般assert都在程序中判断某条语句一定是期望的计算结果。