Java面试题:Java中的异常类型及区别?

本文将介绍Java中的异常的类型,以及它们之间的区别。

Java 语言中异常主要分为两类:检查型异常(checked exception)和非检查型异常(unchecked exception)。

检查型异常(checked exception)

检查异常也称为“编译时异常”。Java 认为 Checked 异常都是可以被处理的异常,所以 Java 程序必须显式处理 Checked 异常。如果程序没有处理 Checked 异常,该程序在编译时就会发生错误无法编译。

如果代码中抛出了检查异常,我们必须进行处理。处理方式有两种方法:

方法一:直接抛出去,让其他使用该方法的方法去处理,例如:

import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class Demo {

    public static void main(String[] args) {
        try {
            Demo demo = new Demo();
            String str = demo.getFile("D:/test.txt");
            System.out.println(str);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private String getFile(String filePath) throws IOException {
        File file = new File(filePath);
        return FileUtils.readFileToString(file, StandardCharsets.UTF_8);
    }

}

方法二:直接使用 try-catch 语句进行处理,例如:

import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class Demo {

    public static void main(String[] args) {
        Demo demo = new Demo();
        String str = demo.getFile("D:/test.txt");
        System.out.println(str);
    }

    private String getFile(String filePath) {
        try {
            File file = new File(filePath);
            return FileUtils.readFileToString(file, StandardCharsets.UTF_8);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

}

非检查型异常(unchecked exception)

非检查型异常又称运行时异常。运行时异常都是 RuntimeException 类及其子类异常,如:NullPointerException、IndexOutOfBoundsException 等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般由程序逻辑错误引起,程序应该从逻辑角度尽可能避免这类异常的发生。

两者的区别

(1)非检查异常不需要在方法或者是构造函数上声明,就算方法或者是构造函数的执行可能会抛出这样的异常

(2)非检查异常可以传播到方法或者是构造函数的外面

(3)检查型异常必须要用 throws 语句在方法或者是构造函数上进行声明,或者使用 try-catch 语句进行捕获并处理。不然,程序无法正常编译。

Java 常见的异常有哪些?

NullPointerException

空指针异常,操作一个null对象的方法或者属性时触发。

OutOfMemoryError

内存异常异常,这不是程序能控制的,是指要分配的对象的内存超出了当前最大的内存堆,需要调整堆内存大小(-Xmx)以及优化才程序。

IOException

IO,即:input,output,我们在读写磁盘文件,网络内容的时候会发生的一种异常,这种异常是受检查的异常,需要手工捕获。

FileNotFoundException

文件找不到异常,如果文件不存在就会抛出这种异常。

ClassNotFoundException

类找不到异常,在类路径下不能加载指定的类。

ClassCastException

类型转换异常,如将一个数字强制转换成字符串。

学习,学习,再学习!学,然后知不足。 —— 列宁
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号