分享一下java中遇到过的十个异常报错情况
1. 使用lambda表达式时候的闭包问题
闭包:在lambda表达式中使用外部变量的时候,会给该变量自动加上final
可以看到forEach中的a++处出现报错,因为a定义在了lambda表达式之外,即不在o->{}的大括号中。
解决办法:把该变量变成引用数据类型
2. 算术异常(ArithmeticException)
解决办法:找到报错中提示的出错行,检查附近语法是否有除以0的情况。或者直接try-catch捕获掉。
3.空指针异常(NullPointerException)
空指针异常应该是最常见也是最容易出现的,出现的情况也需要根据业务来分析。
不过大部分空指针异常都是因此传入的参数是null,因此解决办法就是记得要做判空,可以使用Objects.isnull
来判断。
有时候一些空指针异常也挺莫名其妙的,例如这里出现空指针异常的情况就是注入一个Bean值为null,导致这个Bean调用的方法出现空指针异常,但是这个Bean在业务层中又能够正常使用,只是在测试类中会报空指针,我怀疑是依赖的问题或者是版本冲突,暂时还没找到具体原因。
4. IO流异常(IOException)
解决办法:推荐try-catch
5. ClassNotFoundException
即包没找到。
解决办法:检查一下路径写没写对,确保依赖管理正确,看看tager包有没有class文件,没有就使用maven重新compile一下,确保JAR文件存在。
6. IndexOutOfBoundsException(数组下标越界)
这个一般是发生在你用到了数组的地方,看看你的for循环是不是循环的数值写错了,确保你的循环不会超过数组的长度。
- SQLException
这是和SQL有关的异常,一般是连接错误、SQL代码错误,一般都会出现sql字样,如果是sql代码写错了,一般会提示你在哪句附近可能有错。
Exception in thread "main" java.sql.SQLException: Connection refused: connect at java.sql.DriverManager.getConnection(DriverManager.java:645)
解决办法:如果是密码错误,就检查配置文件中sql用户名密码是不是写错了,或者是端口号有没有写错;如果是SQL代码错误,检查参数是不是少了#{},或者参数使用了@Param取别名没有使用别名,又或者是少了一个大括号,总之,sql的异常需要仔细检查。
8. StackOverflowError栈内存溢出错误
类似这种,可能是使用了递归、无限调用自己、或者是调用链太长。
解决办法:添加终止条件,打破循环调用。
9. IllegalArgumentException
非法参数异常,检查参数类型是否匹配
10. Required request body is missing
这个异常和@RequestBody注解有关,加了这个注解,但是没有传json对象的参数。
解决办法:弄清楚是请求体传参还是路径参数,如果是数据在请求体中以json类型传递,就需要加这个注解。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 百万级群聊的设计实践
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期