java 异常处理工具类_1-5-1 Java工具类--异常

什么是异常

异常字面翻译就是“意外、例外”的意思,也就是非正常情况。

异常本质上是程序上的错误。

错误在我们编写程序的过程中会经常发生,包括编译期间和运行期间的错误。

在编译期间出现的错误有编译器帮助我们一起修正,然而运行期间的错误便不是编译器力所能及了,并且运行期间的错误往往是难以预料的。

异常的分类

0b0545c4c54e862e3b664dee2ba602ee.png

在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 importjava.util.Scanner;2

3 public classexcReturnTest {4

5 public static voidmain(String[] args) {6 try{7 Scanner input = newScanner(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

8cc73cd1c0993937337dddbc36651679.png

return 返回值;

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

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

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

public static voidmain1(String[] args) {try{

Scanner input= newScanner(System.in);

System.out.println("请输入整数:");int i =input.nextInt();

}catch(Exception e) {

System.exit(1);

System.out.println("catch");

}finally{

System.out.println("finally");

}

}

8f79e5d16fe8c034be09192af1146818.png

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

public static voidmain(String[] args) {

System.out.println(getResult());

}public static intgetResult() {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;

}

}

返回结果:

734ea41a2552789b2f3a79d6787b91e4.png

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

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

public static voidmain(String[] args) {

System.out.println(getResult());

}public static intgetResult() {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");

}

}

返回结果:

b4307ef52544730c814e5eba13343159.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值