JAVA编程基础——异常处理

一、异常处理

JAVA语言采用异常来处理系统级和应用程序级的错误状态,是一种结构化的、统一的、类型相对安全的处理机制。在运行过程中,如果产生错误则抛出异常;通过try语句来定义代码块运行可能出现异常的代码块。通过catch语句可以捕获特定的异常定执行相应的处理。通过finally语句可以保证即使处理失败,也可以释放掉资源。

基于异常处理的机制的错误处理方式,可以把错误处理和正常代码逻辑分开,更高效地实现错误处理,增加程序的可维护性。现在异常处理机制的错误处理方式,已成为许多现代程序设计语言处理错误的方式标准模式。

二、JAVA异常类

异常即异常事件。在程序运行过程中,如果某个方法出现了错误,可以通过创建异常类对象(exception object),并通过throw语句将创建的异常抛出给系统运行时,及程序运行终止流程,转而执行异常处理流程。

异常对象是异常类的实例,JAVA异常都继承Throwable。

JAVA异常类的层次结构

Throwable是所有异常类的父类,只有该类或它的子类才可以做catch的参数。

三、抛出异常

 public static int fun(int a,int b){
        if(b == 0){
            throw new UnsupportedOperationException("被除数不能为0!!!");
            //Exception in thread "main" java.lang.UnsupportedOperationException: 被除数不能为0!!!
            //	at com.test.test_exception.Test.fun(Test.java:7)
            //	at com.test.test_exception.Test.main(Test.java:14)
        }
        int c = a / b;
        return c;
    }

创建异常类

如果遇到任何标准异常类都不能够充分描述清楚的问题,在这种情况下创建自己的异常类
定义一个派生于Exception的类,或者派生于Exception子类的类。
class FileFormatException extends IOException{
    //包含两个构造器
    //默认构造器
    public FileFormatException() {
    }

    //带有详细描述信息
    public FileFormatException(String message) {
        super(message);
    }
}

四、捕获异常

想要捕获一个异常必须设置try/catch语句块

如果在try语句块中的任何代码抛出了一个在catch子句中说明的异常类,那么:

(1)程序将跳过try语句块的其余代码

(2)程序将执行catch子句中的处理器代码

如果方法中的代码抛出了一个在catch子句中国没有声明的异常类型,那么这个方法就会立刻退出(希望调用者为该类型一场涉设计catch子句)

    public static int fun(int a,int b){
        try{
            int c = a / b;
            return c;
        }catch (ArithmeticException e){
            System.out.println("捕获异常!!!");
            return 0;
        }

    }

    public static void main(String[] args) {
        System.out.println(fun(10,0));
//        捕获异常!!!
//        0
    }

捕获多个异常

在一个try语句块中可以捕获多个异常类型,并对不同类型的异常做出不同的处理,可以为每个异常类型使用一个单独的catch子句:

五、finally子句

——释放资源

不管是否有异常被捕获,finally子句中的代码都被执行。

——执行finally子句的3种情况:

(1)代码没有抛出异常

在这种情况下,程序首先执行try语句块中的全部代码,然后执行finally子句中的代码,随后继续执行try语句块之后的第一条语句

(2)抛出一个在catch子句中捕获的异常

在这种情况下,程序将执行try语句块中的所有代码,知道发生异常为止。然后跳过try语句块中的剩余代码,转至与该异常匹配的catch子句中的代码,最后执行finally子句中的代码

(3)抛出了一个异常,但是不是由catah子句捕获的

在这种情况下,程序将执行try语句块中的所有语句,知道异常被抛出为止。然后将调过剩余代码,执行finally子句中的代码,并将异常抛给这个方法的调用者。

——注:当finally子句中包含return语句时

在方法返回前,finally子句中的return语句会被执行,这个返回值会覆盖掉原来的返回值。

猜你喜欢

转载自blog.csdn.net/weixin_42479293/article/details/84202579