JAVA常见异常BUG
### JAVA常见异常BUG详解 #### 一、Java.lang.ArrayStoreException **定义**: `java.lang.ArrayStoreException` 是一种运行时异常(RuntimeException),当尝试向一个特定类型的对象数组存储不兼容类型的对象时触发。 **示例**: 考虑下面的代码片段: ```java Object x[] = new String[3]; x[0] = new Integer(0); ``` 这段代码会引发 `ArrayStoreException`,因为尝试将 `Integer` 对象存储在一个仅能容纳 `String` 类型的数组中。 **解决方法**: 1. **类型检查**: 在存储对象之前确保对象类型与数组中的元素类型相匹配。 2. **泛型使用**: 如果需要存储多种类型的对象,可以考虑使用泛型或 `Object` 类型数组。 3. **异常处理**: 添加适当的异常处理机制来捕获并处理此类异常。 #### 二、No Object DCH for MIME type multipart/mixed **问题描述**: 这个异常通常发生在邮件发送过程中,当使用 JavaMail API 处理包含 `multipart/mixed` MIME 类型的数据时出现。 **原因分析**: 主要原因是 CLASSPATH 中存在多个版本的 `mail.jar` 或 `activation.jar` 文件,导致类加载器加载错误版本的库。 **解决方案**: 1. **清理 CLASSPATH**: 清理项目 CLASSPATH,确保只包含最新版本的 `mail.jar` 和 `activation.jar`。 2. **版本一致性**: 使用相同的 JavaMail 和 Activation 框架版本。 #### 三、Java.lang.StackOverflowError **定义**: `java.lang.StackOverflowError` 表示程序栈空间耗尽,通常是由于递归调用没有正确终止条件造成的。 **示例**: 下面的代码会导致栈溢出异常: ```java public static void main(String[] args) { main(null); } ``` **解决方法**: 1. **添加终止条件**: 确保递归函数中有明确的终止条件。 2. **优化算法**: 使用非递归算法替换递归实现。 3. **增加栈空间**: 如果递归深度确实很大,可以尝试增加 JVM 的栈空间大小。 #### 四、Java.lang.Integer cannot be cast to java.lang.Long **定义**: 当尝试将 `Integer` 对象强制转换为 `Long` 对象时抛出 `ClassCastException`。 **示例**: 下面的代码会触发 `ClassCastException`: ```java Object i = new Integer(1); Long L = (Long) i; ``` **解决方法**: 1. **使用兼容类型**: 使用 `long` 基本类型代替 `Long` 类型进行转换。 2. **显式转换**: 显式地将 `Integer` 转换为 `long` 类型后再进行包装。 ```java Long L = ((Integer) i).longValue(); ``` #### 五、javax.servlet.ServletException: java.lang.NoSuchMethodError **定义**: 当试图调用不存在的方法时抛出 `NoSuchMethodError`。 **示例**: 下面的代码会导致 `ServletException` 包含 `NoSuchMethodError` 异常: ```java List<?> list = WebSiteIpService.groupByRefererHostDay(1, 2, 3); ``` **解决方法**: 1. **版本同步**: 确保所有依赖库的版本一致,并且是最新的。 2. **重新编译**: 重新编译所有受影响的类文件。 3. **清理项目**: 清除项目缓存,并重新构建整个项目。 #### 六、Java.net.ConnectException: Connection refused: connect (MySQL) **定义**: 当尝试连接到 MySQL 数据库服务器失败时抛出 `ConnectException`。 **示例**: 下面的代码片段可能会触发该异常: ```java Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection conn = DriverManager.getConnection(url); ``` **解决方法**: 1. **检查连接字符串**: 确保 URL 正确无误,并且数据库服务器正在运行。 2. **端口配置**: 检查 MySQL 配置文件,确保监听的端口与连接字符串中指定的一致。 3. **防火墙设置**: 确认防火墙设置允许客户端连接到 MySQL 服务。 4. **驱动版本**: 使用与 MySQL 版本兼容的 JDBC 驱动。 通过以上分析可以看出,对于每种异常,都有相应的解决策略。开发者应该深入理解这些异常的原因,并采取有效措施来预防它们的发生。在实际开发过程中,良好的编码习惯和严格的测试流程对于减少这类异常至关重要。
- mayuehaha1232012-08-02有点乱 写的不是很详细
- 粉丝: 1
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助