基本概念

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);
    }

 运行如下:

错误类型systemnet 错误类型有哪几种_开发语言

 

声明自己的异常类

异常类除了使用系统预定义的以外,也可以使用自己定义的异常类。需要注意的是,我们自己定义的异常类必须是Exception的子类。