写点什么

每日一道 Java 面试题:说一说 Java 中的异常

作者:EquatorCoco
  • 2024-02-02
    福建
  • 本文字数:1354 字

    阅读完需:约 4 分钟

写在开头


任何一个程序都无法保证 100%的正常运行,程序发生故障的场景,我们称之为:异常,在 Java 中对于异常的处理有一套完善的体系,今天我们就来一起学习一下。老样子,用一段简单的代码开始今天的学习。


我:“小二,上代码!”

JavaBuild 君:“好嘞!几位爷,里面请~”


【代码示例 1】


//Java中经典的算术异常!public class Test {    public static void main(String[] args){        System.out.println(1/0);    }}
复制代码


编译通过,但运行时提示 ArithmeticException(算术异常),这是典型的 Java 异常场景。



异常的分类


看完上面的内容,想必大家对于 Java 中的异常已经有了一个基本的了解了,其实,在 Java 中异常的分类有很多种,我们通过一个思维导图,快速了解。



在 Java 中有个 Throwable 类,为所有异常的祖先类,其下又分为两个子类,分别为 Exception(异常)和 Error(错误)。


Exception 和 Error 的区别


  • Exception:程序本身可以处理的异常,可以通过 catch 或 throw、throws 进行捕获处理或抛出。


  • Error:程序无法自处理的错误!虚拟机错误、内存溢出、IO 错误等。


受检查异常与非受检查异常


在 Exception 类下又分为两个子类:Checked Exception (受检查异常) 和 Unchecked Exception (不受检查异常)。


  • CheckedException:受检查异常,范围在编译期,此时若发生异常,无法通过编译,代码爆红。



受检查异常范围:IO 相关的异常、ClassNotFoundException、SQLException 等,或者说除了运行时异常(RuntimeException)及其子类外,其他的异常几乎都是受检查异常。


  • UncheckedException:非受检查异常,顾名思义,即便存在该类型异常,代码也可通过编译,比如代码示例 1 中的算术异常,只是会在运行时报错,那它的涉及范围就好猜了,没错!就是 RuntimeException 及其子类!


RuntimeException


运行时异常有下面包含了很多子类,常用的有


1、NullPointerException(空指针异常)2、IllegalArgumentException(非法参数异常)3、NumberFormatException(字符串转换为数字格式异常,IllegalArgumentException的子类)4、ArrayIndexOutOfBoundsException(数组越界异常)5、ClassCastException(类型转换异常)6、ArithmeticException(算术异常)7、SecurityException (安全错误比如权限不够)8、UnsupportedOperationException(不支持的操作异常,比如重复创建同一用户)...
复制代码


处理异常的 2 种方式


其实在上文中也已经提到了处理异常的 2 种方式,通过 catch 进行捕获,错误信息打印到控制台,或者打印到配置好的日志系统中;或者通过 throws 一层层的向上抛,直到调用者处理这个异常。


【代码示例 2】


public class Test {    public static void main(String[] args) throws FileNotFoundException {
String name = "JavaBuild"; File file = new File(name); //方式一,throws抛出 FileInputStream fileInputStream1 = new FileInputStream(file);
//方式二,catch捕获,打印至控制台 try { FileInputStream fileInputStream2 = new FileInputStream(file); } catch (FileNotFoundException e) { e.printStackTrace(); }
}}
复制代码


文章转载自:JavaBuild

原文链接:https://www.cnblogs.com/JavaBuild/p/18002488

体验地址:http://www.jnpfsoft.com/?from=001

用户头像

EquatorCoco

关注

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
每日一道Java面试题:说一说Java中的异常_Java_EquatorCoco_InfoQ写作社区