1-5-1 Java工具类--异常

什么是异常

异常字面翻译就是“意外、例外”的意思,也就是非正常情况。
异常本质上是程序上的错误。
错误在我们编写程序的过程中会经常发生,包括编译期间和运行期间的错误。
在编译期间出现的错误有编译器帮助我们一起修正,然而运行期间的错误便不是编译器力所能及了,并且运行期间的错误往往是难以预料的。

异常的分类

 

 

 

在Java中,通过Throwable及其子类描述各种不同的异常类型.

Throwable有两个重要的子类:Exception 和 Error.

Error

Error是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。
例如,Java虚拟机运行错误(Virtual MachineError),当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError
这些错误是不可查的,因为它们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况。
对于设计合理的应用程序来说,即使确实发生了错误,本质上也不应该试图去处理它所引起的异常状况。
因此我们编写程序时不需要关心这类异常。

Exception

Exception是程序本身可以处理的异常。异常处理通常指针对这种类型异常的处理。
Exception类的异常包括 checked exception 和 unchecked exception。

Unchecked Exception

编译器不要求强制处置的异常,包含RuntimeException类及其子类异常。

如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是unchecked exception 。
Java编译器不会检查这些异常,在程序中可以选择捕获处理,也可以不处理,照样正常编译通过。

Checked Exception

编译器要求必须处置的异常,是RuntimeException及其子类以外,其他的Exception类的子类。
如IOException、SQLException等
Java编译器会检查这些异常,当程序中可能出现这类异常时,要求必须进行异常处理,否则编译不会通过。

异常处理中的返回操作

System.exit(参数);

语法:方法表示终止当前运行的java虚拟机.其中,参数作为参数代码.非零状态码表示异常终止.

从表层运行结果来看,无论参数为何,程序都会直接退出。不同的数值代表的信息是传递给底层。如下图1所示,在catch中加入System.exit(1);

 1 import java.util.Scanner;
 2 
 3 public class excReturnTest {
 4 
 5     public static void main(String[] args) {
 6         try {
 7             Scanner input = new Scanner(System.in);
 8             System.out.println("请输入整数:");
 9             int i = input.nextInt();
10         } catch (Exception e) {
11             System.exit(1);
12             System.out.println("catch");
13         } finally {
14             System.out.println("finally");
15         }
16 
17     }
18 }

当输入aaa时,如图所示,程序直接结束,不会继续执行输出catch和finally

 

 return 返回值;

如果方法返回值为void,则return后无需加返回值,直接分号结束;通过return 返回值; 可以结束当前方法执行将返回值带回调用处。

return语句可以分别出现在try、catch以及finally块中,但是由于finally语句块一定要执行,所以当存在finally时,会先执行完finally中的代码再执行return。

1、如下图所示,主方法返回值为void,因此return之后可以无返回值;并在 try…catch…finally中都添加了return

    public static void main1(String[] args) {
        try {
            Scanner input = new Scanner(System.in);
            System.out.println("请输入整数:");
            int i = input.nextInt();
        } catch (Exception e) {
            System.exit(1);
            System.out.println("catch");
        } finally {
            System.out.println("finally");
        }

    }

 

 2、如下图所示,getResult方法返回值为int,分别在try…catch…finally中,通过return带回返回值。

    public static void main(String[] args) {
        System.out.println(getResult());
    }

    public static int getResult() {
        int temp = 10;
        try {
            System.out.println("try");
            return temp + 1;
        } catch (Exception e) {
            System.out.println("catch");
            return temp + 2;
        } finally {
            System.out.println("finally");
            return temp + 3;
        }

    }

返回结果:

 

结合运行结果可以看出,程序无异常,依次输出try,finally中的文字,并输出finally中返回的结果。

 3、如下图所示,getResult方法中去掉finally中的返回值。

    public static void main(String[] args) {
        System.out.println(getResult());
    }

    public static int getResult() {
        int temp = 10;
        try {
            System.out.println("try");
            return temp + 1;
        } catch (Exception e) {
            System.out.println("catch");
            return temp + 2;
        } finally {
            System.out.println("finally");
        }
    }

返回结果:

 

 结合运行结果可以看出,程序无异常,依次输出try,finally中的文字,并输出try中的返回结果。

posted @ 2020-08-26 11:43  mingmingn  阅读(222)  评论(0)    收藏  举报