异常处理
异常指程序在运行过程中发生在正常情况以外的事件,如用户输入错误,除数为0,找不到文件等
异常处理指对程序运行过程中产生的异常情况进行恰当处理的技术,能增加程序的灵活性,可读性,可靠性
异常处理的作用:
1.定义异常的位置
2.绕开程序的异常,不让异常执行,使程序可以继续执行
异常处理方式
java语言处理异常有两种方式
1.利用try-catch-finally语句处理异常,优点是分开了处理异常代码与程序正常代码,增强了程序的可读性,减少中途终止程序运行可能带来的危害
2.由java异常处理机制预设方式处理,一旦程序发生异常,停止执行程序并显示一些错误信息给用户,即使用throws关键字,将异常交由上级处理,可以理解为原方法无法处理异常,将异常甩给上级处理,即为甩锅
java异常类型
1.Error子类代表Java系统内部错误,这类异常属于不受检查异常
2.RuntimeException子类代表运行异常,是程序运行过程中产生的错误,程序员通过调试修复他们,这类异常也属于不受检查异常
3.其他子类如IOException、SQLException、FileNotFoundException,他们的特点是程序运行前Java编译器会检查他们,如果程序中可能出现这类异常,程序员需要用异常处理语句try-catch-finally语句捕获或用throws子句抛出,否则无法通过编译
常见的两种异常类型:
运行时异常(不受检查异常)无需对代码进行提前处理:
ArrayIndexOutOfBoundsException | 数组下标越界异常 |
NullPointerException | 空指针访问异常 |
NumberFormatException | 数字格式化异常 |
ArithmeticException | 算术异常,如除以0 |
ClassCastException | 类型转换不匹配异常 |
编译时异常(受检查异常)在写代码时,对可能存在的异常进行提前处理:
SQLException | 数据库访问异常 |
IOException | 文件操作异常 |
FileNotFoundException | 文件不存在异常 |
ClassNotFoundException | 没有发现类异常 |
异常的发生都处于代码运行时,直接继承Exception类的异常都为编译时异常,直接继承RuntimeException类的异常都为运行时异常
package nt.Yichang.com;
class AlcoholException extends Exception{
public AlcoholException(){}
public AlcoholException(String msg){
super(msg);
}
}
class Check{
public static double alcoholContent;
public static void drunkDrivinng()throws AlcoholException{
if (alcoholContent>80)
throw new AlcoholException("醉驾!需要处罚");
else if (alcoholContent>=20) {
throw new AlcoholException("酒驾!需要处罚");
}
else{
System.out.println("一切正常");
}
}
}
public class YIchang {
public static void main(String[] args) {
Check.alcoholContent = 90;
try{
Check.drunkDrivinng();
}
catch (AlcoholException a){
System.out.println("酒精含量:"+Check.alcoholContent);
}
finally {
System.out.println("检查结束,谢谢配合");
}
}
}
异常处理的方法一般有两种:
try-catch-finally语句处理和预设方式处理
try-catch-finally语句处理,通过try语句对自身语句块进行检测,若运行正常,则不在执行catch语句,最后执行finally,若发生异常,则由catch语句对try语句内的异常进行捕捉,执行catch语句内的方法块,最后在执行finally语句
public class YICHANG {
public static void main(String[] args){
int rank[] = {1,2,3,4,5};
int i = 10;
int x;
try{
x = rank[i];
}catch (ArrayIndexOutOfBoundsException e){
System.out.println("编译异常!");
e.printStackTrace();
}finally {
System.out.println("运行结束");
}
}
}
利用java异常处理机制,能保证程序在出现异常情况下仍然能完成其他处理
预设方法处理:
把异常对象上交给调用该方法的上级方法
在java中,如果不知道在方法如何处理出现的异常对象,可在定义该方法时使用throws抛出该异常,把该异常交给上级调用者处理
【修饰符】 返回值类型 方法名(参数列表) throws 异常类A【,异常类B,……,异常类N】{
//方法体
}
throws能抛出方法可能产生的多个异常
未完待续……