当前位置: 首页 > news >正文

Java的异常体系中的Error

在Java的异常体系中,ErrorException 都是 Throwable 的子类。Error 通常表示严重的、不可恢复的问题,通常是系统级或虚拟机级别的错误,应用程序一般无法处理或恢复。以下是一些常见的 Error 类型:


1. OutOfMemoryError

  • 原因:当JVM无法分配更多内存时抛出,通常是因为堆内存不足。

  • 示例
    设置最大堆内存:-Xmx:设置最大堆内存大小(例如 -Xmx10m 表示最大堆内存为 10MB)。

    public class Main {
        public static void main(String[] args) {
            try {
           StringBuilder sb = new StringBuilder();
           while (true) {
               sb.append("a".repeat(1024 * 1024)); // 不断追加大字符串
           }
       } catch (OutOfMemoryError e) {
           System.err.println("捕获到 OutOfMemoryError: " + e.getMessage());
       }
      }
    }
    

    输出

    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    

2. StackOverflowError

  • 原因:当方法调用栈溢出时抛出,通常是因为递归调用过深。
  • 示例
    public class Main {
        public static void main(String[] args) {
            recursiveMethod();
        }
    
        static void recursiveMethod() {
            recursiveMethod(); // 无限递归
        }
    }
    
    输出
    Exception in thread "main" java.lang.StackOverflowError
    

3. NoClassDefFoundError

  • 原因:JVM在运行时找不到类的定义,通常是因为类在编译时存在,但在运行时缺失。
  • 示例
    如果编译时存在某个类,但在运行时删除了该类的 .class 文件,运行时会抛出此错误。

4. LinkageError

  • 原因:类加载过程中出现链接错误,通常是类依赖关系出现问题。
  • 子类
    • NoClassDefFoundError(如上所述)
    • UnsatisfiedLinkError:本地方法(Native Method)链接失败。
    • ClassFormatError:类文件格式错误。

5. VirtualMachineError

  • 原因:JVM出现严重问题,无法继续运行。
  • 子类
    • OutOfMemoryError(如上所述)
    • StackOverflowError(如上所述)
    • InternalError:JVM内部错误。

6. AssertionError

  • 原因:当 assert 语句的条件为 false 时抛出。
  • 示例
    public class Main {
        public static void main(String[] args) {
            int x = 5;
            assert x < 0 : "x should be negative"; // 断言失败
        }
    }
    
    输出
    Exception in thread "main" java.lang.AssertionError: x should be negative
    

7. UnsatisfiedLinkError

  • 原因:JVM无法找到本地方法(Native Method)的实现。
  • 示例
    如果调用了一个本地方法,但对应的本地库未加载或不存在,会抛出此错误。

8. ClassFormatError

  • 原因:类文件格式不符合JVM规范。
  • 示例
    如果类文件被损坏或篡改,JVM无法正确加载时会抛出此错误。

9. InternalError

  • 原因:JVM内部发生意外错误,通常与JVM实现相关。
  • 示例
    JVM的某些内部资源耗尽或出现不可预知的错误。

10. UnknownError

  • 原因:JVM遇到未知的严重错误。
  • 示例
    通常与JVM的实现或系统环境相关。

总结

Error 通常表示严重的系统级问题,应用程序无法处理或恢复。与之相比,Exception 是应用程序可以捕获并处理的异常。在编写代码时,通常不需要捕获 Error,而是应该关注如何避免这些错误的发生(如优化内存使用、避免无限递归等)。

相关文章:

  • 如何在网页上显示3D CAD PMI
  • Grok 3能否打破大模型的魔咒?
  • 【四.RAG技术与应用】【1.RAG技术揭秘:大模型与检索增强生成】
  • Error Density-dependent Empirical Risk Minimization
  • 基于IMM算法的目标跟踪,四模型IMM|三维环境|4个模型分别是:CV、左转CT、右转CT、CA(基于EKF,订阅专栏后可获得完整源代码)
  • 计算机视觉之dlib人脸关键点绘制及微笑测试
  • VMware虚拟机IP配置
  • GCC RISCV 后端 -- GCC 构建系统简介
  • 《2025软件测试工程师面试》功能测试篇
  • 6.人工智能与机器学习
  • 通过多线程分别获取高分辨率和低分辨率的H264码流
  • C与C++的区别
  • 大型语言模型中微调和提炼的详细技术比较
  • 【C++】可变模板参数和完美转发
  • 蓝桥杯 之 图形规律
  • rollup是什么?以及它和webpack 和vite的区别
  • 【Web安全方向编程语言学习顺序推荐】
  • 基于 Vue 和 SSM 的前后端分离项目实战:登录与注册功能实现
  • 安卓基础组件Looper - 01 通讯机制简介
  • 【实战 ES】实战 Elasticsearch:快速上手与深度实践-2.1.3时间序列数据优化(Rollover + ILM策略)
  • 乌方公布矿产协议详情:未提债务义务,包含美再援助条款
  • 北京亦庄启动青年人才创新创业生态示范区
  • 鲁迅先生儿媳、周海婴先生夫人马新云女士逝世,享年94岁
  • 街区党支部书记们亮出治理实招,解锁“善治街区二十法”
  • 发挥全国劳模示范引领作用,加速汽车产业电智化转型
  • 西湖大学独家回应本科招生走出浙江:经过三年试点,条件成熟