Java高级系列——异常(Exception)

在解释Java中的异常时,首先我们来看一张图


这里写图片描述

上图是我们Java中,异常类的一个继承关系图,从图中我们可以看到Java标准库内构建的这些通用的异常,他们都是以Throwable为顶层父类。

Throwable又派生出Error类和Exception类。

错误:Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。因此,程序员应该关注Exception为父类的分支下的各种异常类。

异常:Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心。

总体上我们根据Javac对异常的处理要求,将异常类分为两类,一类是checked exception,一类是unckecked exception。

unckecked exception

Error 和 RuntimeException 以及他们的子类。javac在编译时,不会提示和发现这样的异常,不要求在程序处理这些异常。所以如果愿意,我们可以编写代码处理(使用try…catch…finally)这样的异常,也可以不处理。对于这些异常,我们应该修正代码,而不是去通过异常处理器处理 。这样的异常发生的原因多半是代码写的有问题。如除0错误ArithmeticException,错误的强制类型转换错误ClassCastException,数组索引越界ArrayIndexOutOfBoundsException,使用了空对象NullPointerException等等。

我们来看一个具体实例

public class UncheckExceptionDemo {
    public static void main(String[] args) {
        A object = new A("Ron");
        object = null;
        System.out.println(object.getName());
    }

    public static class A{
        private String name;

        public A(String name){
            this.name = name;
        }

        public String getName() {
            return name;
        }
    }
}

执行上面的的代码,系统就会抛出一个java.lang.NullPointerException异常,这属于unckecked异常,因为我们程序在编写,编译的过程中,javac都不会强制要求我们做任何处理,同时这种异常只有在程序的运行时过程中才会发现并抛出,所以NullPointerException属于运行时异常(RuntimeException )。

checked exception

除了Error 和 RuntimeException的其它异常。javac强制要求程序员为这样的异常做预备处理工作(使用try…catch…finally或者throws)。在方法中要么用try-catch语句捕获它并处理,要么用throws子句声明抛出它,否则编译不会通过。这样的异常一般是由程序的运行环境导致的。因为程序可能被运行在各种未知的环境下,而程序员无法干预用户如何使用他编写的程序,于是程序员就应该为这样的异常时刻准备着。如SQLException , IOException,ClassNotFoundException 等。

我们来看一个具体实例

public class CheckedExceptionDemo {
    public static void main(String[] args) throws IOException {
        File file = new File("D://hello.txt");
        if(!file.exists()) {
            file.createNewFile();
        }
        PrintWriter writer = new PrintWriter(file);
        writer.write("您好");
        writer.close();
    }
}

看上面的代码,当我们在对文件进行处理时,比如我们声明File,并判断指定路径下文件是否存在,不存在则创建文件时,编译器就会要求我们在方法中,要么抛出IOException异常,要么使用try…catch…finally语句捕捉异常信息。

猜你喜欢

转载自blog.csdn.net/zyhlwzy/article/details/80711425