写在开头
任何一个程序都无法保证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(); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)