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类型传递,就需要加这个注解。