首先,先介绍一下Java 异常的分类
首先,所有异常的父类都是Throwable,
往下分,分为Error和Exception,
Error为会使程序崩溃的严重错误,如栈溢出或内存不足
Exception为可以捕获的异常,又可分为编译时异常和运行时异常两种。
接下来,我们介绍一下以下五个常见的运行时异常
1)NullPointerException空指针异常
1.举例说明
运行后,抛出NullPointerException,如图
2.常见原因:
-
调用
null
对象的方法 -
访问或修改
null
对象的字段 -
获取
null
数组的长度 -
访问或修改
null
数组的槽位 -
抛出
null
作为Throwable值 -
预防措施:
-
在使用对象前进行null检查
-
使用Optional类来明确处理可能为null的情况
-
合理设计API,避免返回null
-
使用
Objects.requireNonNull()
进行参数验证
2)ArithmeticException数学运算异常
1.举例说明
运行后,抛出抛出ArithmeticException,如图
2.常见原因:
整数除以零
其他不合法的算术运算(如取模运算的除数为零)
预防措施:
-
在进行除法运算前检查除数是否为零
-
对于浮点数运算,除以零不会抛出异常(会得到Infinity或NaN)
-
使用BigDecimal进行精确计算
3)ArrayIndexOutOfBoundsException数组下标越界异常
1.举例说明
运行后,抛出ArrayIndexOutOfBoundsException,如图
2.常见原因:
-
使用负数索引访问数组
-
使用大于等于数组长度的索引
-
循环条件错误导致索引超出范围
-
预防措施:
-
始终检查数组索引是否在有效范围内
-
使用增强for循环(for-each)可以避免索引问题
-
在处理数组时仔细检查循环条件
-
考虑使用集合类(如ArrayList)代替原始数组
4)ClassCastException类型转换异常
1.举例说明
运行后,抛出ClassCastException,如图
2.常见原因:
-
错误的类型转换假设
-
在使用泛型集合时未进行类型检查
-
在多态情况下错误判断对象类型
-
预防措施:
-
-
在进行强制转换前使用
instanceof
进行检查 -
合理设计类层次结构,减少不必要的类型转换
-
使用泛型来提供编译时类型安全
-
5)NumberFormatException数字格式不正确异常[]
1.举例说明
运行后,抛出抛出NumberFormatException,如图
2.常见原因:
-
字符串包含非数字字符
-
字符串为空或null
-
数字格式与预期不符(如小数点、正负号位置错误)
-
预防措施:
-
在转换前验证字符串格式
-
使用正则表达式检查数字格式
-
使用try-catch块处理可能的异常
-
对于用户输入,提供明确的格式提示和验证
---------------------结束------------------
求点赞~!
求评论·~~~!
求收藏~~~~~!