Java异常及异常捕获

异常概述

程序中的错误可能产生于程序员没有预料到的各种情况,或者是超出了程序员可控范围的环境因素,如用户的坏数据、试图打开一个根本不存在的文件等。在Java中这种在程序运行时可能出现的一些错误称为异常。异常是一个在程序执行期间发生的事件,它中断了正在执行的程序的正常指令流。
在这里插入图片描述
在这里插入图片描述
此程序运行的结果报告发生了算数异常ArithmeticException(根据给出的错误提示可知发生错误是因为在算术表达式“3/0”中,0作为除数出现),系统不再执行下去,提前结束。这就是所说的异常。

有许多异常的例子,如空指针、数组溢出等。Java语言是一门面向对象的编程语言,因此,异常再Java中也是作为类的实例的形式出现的。当某一方法中发生错误时,这个方法会创建一个对象,并且把它传递给正在运行的系统。这个对象就是异常对象。通过异常处理机制,可以将非正常情况下的处理代码与主逻辑分离,即在编写代码主流程的同时在其他地方处理异常。

处理程序异常错误

为了保证程序有效的执行,需要对发生的异常进行相应的处理。在Java中,如果某个方法怕抛出异常,既可以在当前方法中捕获,然后处理该异常,也可以将异常向上抛出,由方法调用者来处理。
1.错误
异常产生后,如果不做任何处理,程序就会被终止。例如,将一个字符串转换为整型,可以通过Integer类的parseInt()来实现。但如果该字符串不是数字形式,parseInt()方法就会抛出异常,程序将在出现异常的位置终止,不再执行下面的语句。
在这里插入图片描述
在这里插入图片描述
从图中可以看出,本实例报出的是NunberFormatException(字符串转换为数字异常。提示信息“lili年龄是”已经输出,可知该句代码之前并没有异常,而变量age没有输出,可知程序在执行类型转换代码时已经终止。
2.捕捉异常
Java语言的异常捕获结构由try、catch、和finally 3部分组成。其中,try语句块存放的是可能发生异常的Java语句;catch程序块在try语句块之后,用来激发被捕获的异常;finally语句块是异常处理结构的最后执行部分,无论try语句块中的代码如何退出,都将执行finally语句块。
语法如下:

try{
	//程序代码块
}
catch(Exceptiontype1 e){
	//对Exceptiontype1 的处理
}
catch(Exceptiontype2 e){
	//对Exceptiontype2 的处理
}
...
finally{
	//程序块
}

通过异常处理器的语法可知,异常处理器大致分为try-catch语句块和finally语句块。
try-catch语句块
在这里插入图片描述
在这里插入图片描述
从图中可以看出,程序仍然输出最后的提示信息,没有因为异常而终止。将可能出现异常的代码用try-catch语句块进行处理,当try代码块中的语句发生异常时程序就会调转到catch代码块中执行,执行完catch代码块中的程序代码后,将继续执行catch代码块后的其他代码,而不会执行try代码块中发生异常语句之后的代码。由此可知,Java的异常处理是结构化的,不会因为一个异常而影响整个程序的执行。

Exception 是try代码块传递给catch代码块的变量类型,e是变量名。catch代码块中语句“e.getMessage();"用于输出错误性质。通常,异常处理常用以下三个函数来获取异常的有关信息。
getMessage()函数:输出错误性质
toString()函数: 给出异常的类型与性质
printStackTrace(): 指出异常的类型、性质、栈层次及出现在程序中的位置。

finally语句块
完整的异常处理语句一定要包含finally语句,无论程序中有无异常发生,并且无论之间的try-catch是否顺利执行完毕,都会执行finally语句。
在以下四种特殊情况下,finally块不会被执行:

  1. 在finally语句块中发生了异常。
  2. 在前面的代码中使用了System.exit()退出程序。
  3. 程序所在的线程死亡。
  4. 关闭CPU。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值