Java小菜的进阶之路(异常捕获与处理)

闲扯:

最近学了异常,因掌握的不过牢固(其实是好多都没记住),索性作了这件看似微不足道实则大有用处的小事事,大家一起学习,一起进步!

正文:

异常,在学习之前,要先了解它的含义,从字面上,就是不正常,通俗易懂,事出无常必为妖。在Java中的异常就是导致Java程序在运行过程中出现的错误。

这些错误主要是语法的错误和语义的错误,一个程序即使在编译的过程中没有错误信息的产生,那么它在运行的时候也有可能出现错误。

为什么需要异常处理??
因为在没有异常处理的语言中如果要处理异常,就必须使用大量的判断语句去配合所能想到的错误状况来捕捉程序中所有可能要发生的错误。但为了捕捉错误,需要编写大量的代码来实现,有时也未必能捕捉到所有的错误,这样做势必会降低程序的运行效率。

Java的异常处理机制恰好改进了这一点。在java程序设计的时候,应充分的使用Java的异常处理机制,以增强程序的稳定性能和效率。

Demo1<认识异常>

image

程序输出的结果:

image

在以上的程序中,因为被除数是0;所以程序出现了异常,如果对异常不处理,则程序执行不了。

在java中异常处理的格式:

Try {

// 有可能出现的异常的语句

} catch (异常类 异常对象 ) {

// 编写异常的处理语句

} catch ( 异常类 异常对象) {

//编写异常的处理语句

} catch(异常类 异常对象) {

//编写异常的处理语句

}finally {

一定会运行的程序代码

}

对Demo1的程序中对异常进行捕捉:

image

程序的运行结果:

image

从运行的结果可以看出,因为程序加入了异常代码处理所以当有异常发生后,程序有人不会因为异常的产生而中断执行。

所有的异常都在catch中处理了,等catch处理完之后,程序才正常的执行结束,从上述的格式中,发现还有一个 finally 关键字的存在,我们可以使用它作为异常的统一出口

image

程序的运行结果:

image

当然在程序的开发中谁也不能保证不会只存在一个异常,这个时候我们就需要使用多个catch语句来进行处理了。

image

以上的程序使用了3个catch语句分别处理了3个不同的异常。但是若都如此,那岂不是会变得很麻烦,想要解决这个问题,我们先从异常的结构来看起:

image

在java异常结构中,实际上有两个常用的类,一个是Error,另一个是Exception,都是Throwable的子类。Throwable类是Java语言中所有错误或者异常的超类。

Error:一般指的是JVM错误,程序无法处理

Exception:一般表示是程序中出现的问题,可以直接使用try…catch处理的。

Java的异常处理机制

在整个Java的异常处理中,实际上也是按照面向对象的方式进行处理,处理的步骤如下:

(1)一旦产生异常,则首先会产生一个异常的实例化对象。

(2)在try语句中对此异常对象进行捕捉。

(3)产生的异常对象与catch语句中的各个异常类型进行匹配,如果匹配成功,则执行catch语句中的代码。

因为所有的子类实例可以全部使用父类接收,那么就可以利用向上转型的概念,让所有的异常对象都使用Exception接收。如下:

image

以上程序在最后直接使用Exception进行其他异常的捕捉,那么在本程序中出现的全部异常就都可以处理了,但要注意的是,在Java中所有的捕捉范围小的异常必须放在捕捉大的异常的前面,否则程序在编译的时候就会出错。如下:

image

线程“main”java.lang的异常。编译错误:未解决的问题:

ArrayIndexOutOfBoundsException不可到达的catch块。它已经被catch块处理为异常

Exception可以捕捉所有的异常,虽然这样做很简单,但是因为不容易判断出示什么异常发生了,所以无法进行针对性的处理,。因此在实际中,不要直接使用Exception捕捉全部的异常。俗话说,对症下药。异常的捕捉要根据具体的的异常来具体设定处理策略。

Java程序中常见的异常:

1.java.lang.nullpointerexception 异常的解释是"程序遇上了空指针"

2.java.lang.classnotfoundexception 异常的解释是"指定的类不存在"

3.java.lang.arithmeticexception 异常的解释是"数学运算异常"

4.java.lang.arrayindexoutofboundsexception 异常的解释是"数组下标越界"

5.java.lang.illegalargumentexception 异常的解释是"方法的参数错误"

6.java.lang.illegalaccessexception 异常的解释是"没有访问权限"

关于异常的全部说明,在api里都可以查阅。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值