Java中的异常处理———Java学习之路(16)

前言——

异常处理很重要,但是我目前没什么机会接触过项目,学校教的东西都是很皮毛,尤其是有时老师自己都还讲不清楚,上机作业又是这么地简单无趣,一点营养都没有。我能做什么呢,我还能做什么呢,感觉学校给不了我太多帮助,只能写写博客。(PS:实在是太惨啰,说得自己都有点伤感,已经和本部的陈义老师约好,有时间过去本部找他,希望能给我指点迷津)

欢迎转载,转载请注明来源

目录

一.Java中的异常类

二.异常处理的两种方式——就地捕获,向外抛出


一.Java中的异常类

说到异常,我们必须先了解一下Java中的异常类,以及他们之间的继承关系。

Throwable是所有异常类的父类,其下面有Error和Exception两个子类:

Error:一般指与Java虚拟机相关的问题,如系统奔溃,内存空间不足,系统错误,方法栈溢出等等,这些错误是无法通过在代码里面捕获并且处理的,因为我们捕获了也无能为力,所以一般我们都不捕获Error。注:说白了,这类异常不是程序员造成的。

Exception:该异常大都可以捕获并且恢复。Exception下面又分为两种异常:运行时异常(RuntimeException)和非运行时异常。注:说白了,这类异常是由程序员造成的。

RuntimeException:运行时异常在编译是检查不出来,可以通过编译,但是运行时就直接终止了,这类异常造成之时,往往是程序员不小心造成的,在运行时随时可能发生,是不需要强制捕获的。常见的RuntimeException有:

NullPointerException - 空指针引用异常
ClassCastException - 类型强制转换异常。
IllegalArgumentException - 传递非法参数异常。
ArithmeticException - 算术运算异常
ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
IndexOutOfBoundsException - 下标越界异常
NegativeArraySizeException - 创建一个大小为负数的数组错误异常
NumberFormatException - 数字格式异常
SecurityException - 安全异常
UnsupportedOperationException - 不支持的操作异常

例如:数组长度为负数的异常

非运行时异常:这类异常才是我们在Java中最终需要捕获的,不捕获的话连编译都不通过。

例如IOException:

二.异常处理的两种方式——就地捕获,向外抛出

首先,先定义一个异常类myException, 再定义一个Student类,里面含有一个public void speak(int m)的方法,如果这个方法的参数m>1000,就会产生一个异常。

1.就地捕获,表示在可能产生异常的方法内部进行try....cathch, 在该方法内部就地处理异常。

在这边可以看到,在speak()方法内部有try...catch 。该方法内部一旦产生了异常(也就是有了MyException对象),就立马进行捕获处理,在内部处理掉,可以说是将异常“扼杀在摇篮之中”的一种方法。

2.用throws向上层抛出

这边在speak()后面多了“throws myException”,并且内部没有了try...catch语句,但是调用speak()方法的main()方法却有了

try....catch。这是为什么呢?其实这是"throws xxException"的作用是把内部产生的异常抛给上层调用的地方(这边是把myException异常抛给了main()函数),让上层调用者main()去try...catch这个异常,简直可以称为"甩锅”法了。

speak()把myException甩锅给调用speak()的main(), 那么main()函数可以不进行try..catch,转而继续把myException继续往上抛呢?当然是可以的,只要在main()函数后面也加上一个"throws myException"即可,这样main()就会把异常往上甩给Java虚拟机了(哈哈哈,是不是很流氓):

大家会发现,main()函数里面也没有try..catch了

猜你喜欢

转载自blog.csdn.net/CCSGTC/article/details/83112735