Java中的异常(方法,概念及作用等)

       前言:在程序运行过程中,难免会出现一些奇奇怪怪的问题。有时通过代码很难去控制,比如:数据格式不对、网络不通畅、内存报警等。在Java中,将程序执行过程中发生的不正常行为称为异常。

       比较常见的有以下这三种异常:算术异常、数组越界异常、空指针异常。下面我们来分别来看看这三种情况。

1.算术异常

2.越界异常

注意:在代码出现异常时,异常之后的代码都不会执行。如上图,则将不会执行 “after”。

3.空指针异常

注意:异常也是一种类,既然是类那一般就会有继承关系;一般由编译器(JVM)出手判断的异常有两大类:编译时异常 和 运行时异常。error 则是出现了致命错误,连JVM都无法去拯救;这时,只能由程序员去手动修改代码才能够处理。

总结一下:

那既然总是无法避免会出现异常,那我们程序员是否可以编写代码提前预防异常呢?

答:是可以的。

异常处理

 先来讲解 throw 和throws,再来讲try、catch、finally(因为它们各自属于一类):

1.throw

我们可以通过 throw + 匿名对象 的方式,去调用某个异常,如下图:

2.throws

语法格式如下:

注意事项如下:

3.try、catch和fianlly

语法格式如下:

举一个小小的例子,如图:

这里的 e 只是给出了一个变量。定义其他的也是可以的。

上文也说过了,在代码出现异常时,异常之后的代码都不会执行。如下:

那么问题来了,如果有多种可能出现的异常,那么会不会同时抛出多个异常呢?

答:不会执行,理由是一样的。

我们在编译可能的异常的代码,有一些需要去注意的:

这样子写代码,catch(NullPointerException e)会变得无意义,代码冗余;因为空指针异常也继承于Exception,写了Exception就相当于写了NullPointerException。

那么有些同学可能就会说了,如果将它们执行顺序换一下呢?会不会好一些?



答:这样子写虽然确实会好一些,但是不建议这么去写。我们程序员在编译可能出现的异常时,尽量要把可能出现的异常子类一个个的写出来,为了让别人看的清晰;用Exception会显得投机取巧。不符合良好的代码书写规范。

虽然也可以按下图这么去写,但是如果你有很多可能出现的异常,怎么办?一直用“|”不断去写下去吗?

所以同样,这样子的方式也不建议大家去效仿,也是不符合良好的代码书写规范

下来是 finally 的使用方法,我们先来看一个例子:

这里我们发现,程序出现了异常,fianlly 依然还在执行,这说明 finally 的执行,与是否有异常出现无关。那,finally 在什么场景下会起作用呢?来看:

提问:代码的执行结果是多少?10还是20?

答案:20;因为finally 会在代码结束前去执行,所以执行顺序可以判断是 finally 靠后。来看,

顺便可以思考下面试题,这里就不给出答案了:

总结一下异常的处理流程,即:

然后是关于 自定义异常 ,这里就简单了解一下,不过多展开介绍了:

下来就是本节关于异常的一些例题,一起来看一看:

答:C;finally 与程序发生错误及捕捉到异常情况 和 catch部分捕捉到异常情况 都无关,所以A、D选项都不不正确;选择C。

答:F;我们由图中代码可知,类是TestClass,testMethod是静态方法;我们说过,静态方法或静态成员只能被类去调用,所以在 main 方法中,是可以被调用的,这里的null 只是一个烟雾弹,并不会影响实际的结果。

答:A;上文提到,在代码出现异常时,异常之后的代码都不会执行。这里do something that may cause an Exception 是指会有可能出现的异常。

      到这里,我们的 JavaSE 语法就结束了,从下篇文章开始,我们就会开始进行Java的数据结构部分学习;数据结构是非常重要的,各中大厂、公司,很多都会从这出面试、笔试题,所以这部分一定要学好。下面是基本的学习大纲:

 本篇文章到此结束!

本篇文章的截图和课件均摘自  比特科技 。希望能对你有帮助。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值