Java异常

Java编程语言使用异常处理机制为程序提供了错误处理的能力:

程序中预先设置好对付异常的处理办法,程序运行,发现异常,对异常进行处理,处理完毕,程序继续运行。

Java中如何进行异常处理:Java的异常处理是通过5个关键字来实现的:try、catch、finally、throw、throws

try-catch块捕获异常:

1. try块中的代码段不会产生异常,会直接运行try-catch块后的代码段。

2. try块中代码段产生异常,产生异常对象,程序进入catch块中进行异常类型匹配,此时try中产生异常的代码段后面的代码段将不被执行。如果可以匹配到异常类型,catch对异常进行处理的代码段将被执行。程序继续执行try-catch块后的代码段。如果异常类型不匹配,程序中断运行。

在catch块中处理异常:

加入用户自定义处理信息

System.err.println("");

调用方法输出异常信息,输出异常的堆栈信息。

e.printStackTrace();

返回异常信息描述字符串,是printStackTrace()输出信息的一部分。

e.getMessage(); 

异常类型                                  

Exception: 异常层次结构的父类。

ArithmeticException: 算数错误情形,如以零作除数。

ArrayIndexOutOfBoundsException: 数组下标越界。

NullPointerException:尝试访问null对象成员。

ClassNotFoundException:不能加载所需的类。

IllegalArgumentException:方法接收到非法参数。

ClassCastException:对象强制类型转换出错。

NumberFormatException: 数字格式转换异常,如把"abc"转换成数字。

try-catch块后加入finally块,是否发生异常都执行,不执行的唯一情况,有异常且catch块中有System.exit();中段程序,退出Java虚拟机。

演示示例:try块和catch块中return语句的执行。

1. 发生异常

2.进入catch块

3.执行finally块

4.执行return退出方法

排列catch语句的顺序:先子类后父类

发生异常时按顺序逐个匹配

只执行第一个与异常类型匹配的catch语句。catch功能类似swtich+break,一旦匹配到就会跳出try-catch语句。

异常部分常见疑惑:

try-catch如果发生异常但没有匹配到异常类型,finally块还会执行吗?

是的,无论是否捕获到异常,finally块都会执行。当try块中发生异常时,程序会跳转到catch块或者终止程序。但不管怎样,finally块都会在try块执行完成后执行,无论是否发生异常。

在finally块中通常用于释放资源或者清理代码。因此,即使try块中发生了异常并且没有匹配到对应的catch块,finally块也会执行,确保资源得到释放和清理。

方式1:调用者处理异常

方式2:调用者继续声明异常

main()方法声明的异常由Java虚拟机处理:

方式1和方式2都是处理Java方法抛出的异常的方式。

  1. 方式1:调用者处理异常。这意味着调用方法的代码块要捕获该方法抛出的异常并进行处理,例如打印错误消息或尝试恢复程序状态。在这种情况下,被调用方法的声明中不需要包含异常,因为所有的异常都被调用者处理了。

  2. 方式2:调用者继续声明异常。这意味着被调用方法可能会抛出异常,因此调用者必须声明它可能会抛出的异常。调用者可以处理该异常或将其传递给其调用者进行处理。在这种情况下,被调用方法的声明中需要包含异常信息。

对于main()方法声明的异常由Java虚拟机处理这句话的意思是,如果main()方法抛出了一个未被捕获的异常,Java虚拟机将自动捕获该异常并终止程序。如果声明了异常,虚拟机会将异常信息记录在日志文件中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值