异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。有些异常需要处理,有些不需要处理,为了加强程序的健壮性,程序设计时必须考虑到可能发生的异常事件并做出相应的处理。在Java语言中,产生异常现象的错误大体分为 3类:编译时错误、运行时错误和逻辑错误。
1、编译时错误
编译时错误是由于所编写的程序存在语法问题,未能通过由源代码到字节码的编译而产生的,它由语言的编译系统负责检测和报告。大小写混淆、数据类型与变量类型不符、使用未声明的变量等都是常见的编译时错误。
2、运行时异常
运行时异常时,是可以通过编译的,但是在执行过程中出现错误。例如,计算时除数为零、数组下标越界、文件没找到等,这类错误在编译程序时一般是无法发现的。
3、逻辑错误
逻辑运行错误是指程序不能实现编程人员的设计意图和设计功能而产生的错误,即程序运行后没有得到预期的结果。该类错误从语法上来说是有效的,只是程序在逻辑上存在着缺陷。通常,逻辑错误不会产生错误提示信息,所以错误较难排除。超出数据类型的取值范围、语句体忘记加大括号等是常见的逻辑错误。
异常的处理:
异常是针对方法来说的,抛出、声明抛出、捕获和处理异常都是在方法中进行的。
1、使用try-catch语句保护代码和捕获异常
下面是使用try-catch异常代码块的基本形式
try{
//可能发生异常的代码块;
} catch(异常类型异常对象名){
//异常处理代码块;
}
2、使用多个catch语句
单个代码段可能会引起多个异常,这是就需要定义两个或多个多个catch语句,每个catch捕获一种类型的异常,代码块基本形式如下:
try{
//可能发生异常的代码块;
} catch(异常类型 1异常对象名 1){
//异常处理代码块 1;
}
…
catch(异常类型 n异常对象名 n){
//异常处理代码块 n;
}
3、使用finally语句
有时候不管发生了什么异常,总有一段代码要执行,这就需要使用finally语句。finally语句中的代码,总是会被执行的。下面是代码块基本形式:
try{
//可能发生异常的代码块;
} catch(异常类型异常对象名){
//异常处理代码块;
}
…
finally{
//无论是否抛出异常都要执行的代码;
}
4、使用 try-with-resources 语句
try-with-resources 语句,指的是声明一个或多个资源的 try 语句。这里讲的资源,指的是在程序执行结束后必须被关闭的对象。在使用 try-with-resources语句时,当关闭声明的资源时也有可能会产生并抛出异常。
5、抛出异常
如果在一个方法中生成了一个异常,但是这一方法并不确切地知道该如何对这一异常事件进行处理,这时使用 throws 声明可能会抛出异常的方法。下面是包含throws子句的方法的基本形式:
[修饰符] 返回类型 方法名(参数 1,参数 2,……)throws异常列表{
……
}
除此之外,还有一种情况是使用throw抛出异常。使用throw抛出异常的基本形式如下。
throw 异常名;