Java如何使用已检查和未检查的异常?

通过抛出已检查的异常,可以强制调用方在一个catch块中处理该异常。如果一个方法抛出一个检查异常,它必须在方法声明中声明它抛出了异常。

除java.lang.Error,java.lang.RuntimeException及其子类指示的那些异常外,所有异常都是经过检查的异常。

运行时异常是应用程序内部的特殊情况,应用程序通常无法预期或从中恢复。运行时异常是由java.lang.RuntimeException及其子类指示的异常。

RuntimeException称为未经检查的异常。不需要在方法声明中声明未经检查的异常。

package org.nhooo.example.fundamental;

import java.io.File;
import java.io.IOException;

public class ExceptionExample {
    public static void main(String[] args) {
        // 您必须捕获已检查的异常,否则会得到
        // 编译时错误。
        try {
            ExceptionExample.checkFileSize("data.txt");
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 未经检查的异常不需要您抓住
        // 它,它不会产生编译时错误。
        ExceptionExample.divide();
    }

    /**
     * 此方法引发 Checked Exception,因此必须声明方法声明中的异常
     *
     * @param fileName given file name
     * @throws IOException when the file size is to large.
     */

    public static void checkFileSize(String fileName) throws IOException {
        File file = new File(fileName);
        if (file.length() > Integer.MAX_VALUE) {
            throw new IOException("File is too large.");
        }
    }

    /**
     * 此方法抛出 RuntimeException。
     * 不需要在方法声明中声明 Exception
     *
     * @return a division result.
     * @throws ArithmeticException when arithmetic exception occurs.
     */
    public static int divide() throws ArithmeticException {
        int x = 1, y = 0;
        return x / y;
    }
}