常见的10个异常以及解决方案

251 阅读2分钟

1.NullPointerException(空指针异常)

原因:尝试访问一个未初始化或已被设置为null的对象

例如:

 String str = null;
 int length = str.length(); // 抛出 NullPointerException

解决方案:调用对象时确保对象被正确的初始化,调用之前使用Objects.requireNonNull()来检查对象是否为空

2.ArrayIndexOutOfBoundsException(数组索引越界异常)

原因:访问数组中不存在的索引时抛出的异常

例如:

 int[] array = {1, 2, 3};
 int value = array[3]; // 抛出 ArrayIndexOutOfBoundsException

解决方案:确保索引值在数组的有效范围之内(0到数组长度-1之间)

3.ClassCastException(类转换异常)

原因:尝试将对象强制转换为,跟这个类没有一点关系的的类

例如:

 Object obj = new String("Hello");
 Integer num = (Integer) obj;

解决方案:使用instanceof关键字检查对象是否可以被安全地转换为目标类型

4.IllegalArgumentException(方法参数异常)

原因:传递给方法的参数不合法或不合适。

例如:

 public void divide(int a, int b) {
     if (b == 0) {
         throw new IllegalArgumentException("方法参数异常");
     }
     return a / b;
 }
 divide(10, 0); // 抛出 IllegalArgumentException

解决方法:在方法内部添加参数合法性检查,并抛出此异常以通知调用者。

5.NumberFormatException(数字格式异常)

原因:尝试将字符串转换为数字类型时,字符串格式不正确。

例如:

 String str = "abc";
 int num = Integer.parseInt(str);

解决方法:确保字符串符合预期的数字格式,或者在转换前进行格式验证。

6.IOException(输入输出异常)

原因:输入输出操作失败。

解决方法:确保文件路径正确,文件存在且可访问。处理文件读写时,使用try-with-resources语句自动关闭资源,在处理输出如果没有关闭的话,文件不能正确写上去。

7.SQLException(sql异常)

原因:数据库操作错误。

解决方法:检查SQL语句的语法,确保数据库连接正常,以及所有必要的驱动已正确加载(比如mysql8以上需要加上cj)。

8.OutOfMemoryError(内存不足异常)

原因:Java虚拟机无法分配足够的内存。

解决方法:优化程序中的内存使用,如减少大对象的创建,使用缓存策略等;增加JVM的堆内存大小。

9.StackOverflowError(栈溢出异常)

原因:递归调用过深导致栈溢出。

例如:

 public static void recursiveMethod(int n) {
     recursiveMethod(n + 1); // 无限递归,最终导致 StackOverflowError
 }
 recursiveMethod(0);

解决方法:检查递归逻辑,确保有正确的退出条件;考虑使用迭代代替递归。

10.NoSuchMethodException(方法不存在异常)

原因:试图调用的方法不存在。

解决方法:检查方法名拼写是否正确,确保方法在目标类中确实存在。如果是在反射中使用,确认方法的可见性和存在性。