基本概念
Java中声明了许多异常类,每个异常类都代表一种运行错错误,类中包含了该运行错误的信息以及处理错误的方法等内容。异常的存在,保证了整个程序运行的安全性。
错误的分类
通常程序中的错误分为三类:编译错误、运行错误、逻辑错误。
编译错误:一般为语法错误,为编译器能够检测到的错误。
运行错误:运行时产生的错误,如:数组下标越界等。
逻辑错误:机器本身无法识别,是代码逻辑出了问题。需要认为的通过对比输出结果判断逻辑关系。
按照严重程度,将错误分为两个等级:
错误:致命的。程序遇到时将无法简单的恢复运行。
异常:不致命。通过某种修正后程序可正常执行。
在Java中,Exception类时所有异常类的父类;Error类是所有错误类的父类,该类下的错误都是严重错误,程序无法进行处理。两者同时是Throwable的子类。
Exception类中
继承自RuntimeException的异常称为非检查型异常,是编程错误导致的异常或不能期望程序捕获的异常。该类异常编译器不做检查。
其他类型的异常称为检查型异常,Java类必须在方法签名中声明他们所抛出的检查型异常。
异常的处理方式
对于检查型异常,有两种处理方式:
1、声明抛出异常。
如果不想在当前方法中处理异常,可以使用throws声明将异常抛出到调用方法中。
public void division () throws ArithmeticException{
//方法体
}
其调用方法也可以通过throws声明将该异常再次抛给该调用方法的调用方法。如果所有的方法都选择了抛出此异常,最终JVM将捕获该异常。
2、捕获异常。(try,catch和finally语句)
语法格式:
try{
//抛出异常的代码
}catch(ExceptionType1 e){
//抛出ExceptionType1异常时要执行的代码
}catch(ExceptionType2 e){
//抛出ExceptionType2异常时要执行的代码
}
……
finally{
//一定要执行的代码
}
Java中有一些常见的异常
1、ArithmeticEXception
整数除法中,若除数为0,则发生该异常。
2、NullPointerException
若使用一个没有实例化的对象,则发生该异常。
3、NegativeArraySizeException
创建数组时,如果元素个数为负数,则发生该异常。
4、ArrayIndexOutOfBoundsException
如果数组下标访问越界,则发生该异常。
5、IOException
通常的I/O异常。
异常处理举例
public static int division(int a, int b){
try{
return a/b;
}catch(ArithmeticException e){
e.printStackTrace();
}finally {
System.out.println("该方法运行结束");
return -1;
}
}
public static void main(String[] args) {
int a=19;
int b=0;
int c=division(a,b);
System.out.println(c);
}
运行如下:
声明自己的异常类
异常类除了使用系统预定义的以外,也可以使用自己定义的异常类。需要注意的是,我们自己定义的异常类必须是Exception的子类。