Java中Error和Exception的异同

Error(错误)和Exception(异常)都是java.lang.Throwable类的子类,在Java代码中只有继承了Throwable类的实例才能被throw或者catch。

Exception和Error体现了Java平台设计者对不同异常情况的分类,Exception是程序正常运行过程中可以预料到的意外情况,并且应该被开发者捕获,进行相应的处理。Error是指正常情况下不大可能出现的情况,绝大部分的Error都会导致程序处于非正常、不可恢复状态。所以不需要被开发者捕获。

Error错误是任何处理技术都无法恢复的情况,肯定会导致程序非正常终止。并且Error错误属于未检查类型,大多数发生在运行时。Exception又分为可检查(checked)异常和不检查(unchecked)异常,可检查异常在源码里必须显示的进行捕获处理,这里是编译期检查的一部分。不检查异常就是所谓的运行时异常,通常是可以编码避免的逻辑错误,具体根据需要来判断是否需要捕获,并不会在编译器强制要求。

如下是常见的Error和Exception:

1)运行时异常(RuntimeException):

NullPropagation:空指针异常;

ClassCastException:类型强制转换异常

IllegalArgumentException:传递非法参数异常

IndexOutOfBoundsException:下标越界异常

NumberFormatException:数字格式异常

2)非运行时异常:

ClassNotFoundException:找不到指定class的异常

IOException:IO操作异常

3)错误(Error):

NoClassDefFoundError:找不到class定义异常

StackOverflowError:深递归导致栈被耗尽而抛出的异常

OutOfMemoryError:内存溢出异常

例1

下面代码会导致Java堆栈溢出错误。

// 通过无限递归演示堆栈溢出错误class StackOverflow { public static void test(int i) {  if (i == 0) {   return;
  } else {
   test(i++);
  }
 }
}public class ErrorEg { public static void main(String[] args) {  // 执行StackOverflow方法
  StackOverflow.test(5);
 }
}1234567891011121314151617复制代码类型:[java]

运行输出为:

Exception in thread "main" java.lang.StackOverflowError
 at ch11.StackOverflow.test(ErrorEg.java:9)
 at ch11.StackOverflow.test(ErrorEg.java:9)
 at ch11.StackOverflow.test(ErrorEg.java:9)
 at ch11.StackOverflow.test(ErrorEg.java:9)12345复制代码类型:[java]

上面代码通过无限递归调用最终引发了java.lang.StackOverflowError错误。

(0)

相关推荐

  • SAP OData 服务在 gateway 层出错,应该如何处理?通过一个错误消息 Query XXX is invalid or contains errors 来举例说明

    在浏览器里访问如下url遇到错误: https://jerry.sap.corp:44300/sap/opu/odata/sap/C_SALESCONTRACTITMFLFMTQ_CDS/$metad ...

  • 聊聊面试-NoClassDefFoundError 和 ClassNotFoundException 区别

    (上图是圣卡塔利娜岛,美国南加州的一个小岛,也是 mac OS 10.15 版本的官方默认壁纸) 概述 Hello,大家好,我们又来讲面试中的基础题了,今天这是一道很经典又很猥琐的题 说猥琐是因为这两 ...

  • 栈溢出

    栈溢出> 栈溢出 IH Stackoverflow中文版,帮助国内程序员打开世界之门 技术生产力开发者工具 微博 发布于 1 天前 栈溢出(https://zhanyichu.cn)是Stack ...

  • Java 中的关键字

    Java 中有多少个关键字,有大小写之分吗? Java 中有 48 个关键字在使用 + 两个保留关键字未使用,共 50 个关键字. Java 关键字全部都由是小写组成. Java 中保留关键字分别是哪 ...

  • Java中的匿名内部类

    一.匿名内部类 之前的所有类都有自己的名字,但是有时候如果某个接口的实现类(或者某个父类的子类)只需要使用一次,此时这样的类如果我们单独定义出来则需要单独为其创建一个"*.java" ...

  • Java中的方法内部类

    一:方法内部类 就是在方法中直接定义一个内部类,之后直接使用这个内部类对象的方法,你作为语法 了解就行了. DEMO:方法中定义内部类     以上是在方法中定义了一个内部类,方法中的内部类能访问方法 ...

  • Java | 在 Java 中执行动态表达式语句: 前中后缀、Ognl、SpEL、Groovy、Jexl3

    在一些规则集或者工作流项目中,经常会遇到动态解析表达式并执行得出结果的功能. 规则引擎是一种嵌入在应用程序中的组件,它可以将业务规则从业务代码中剥离出来,使用预先定义好的语义规范来实现这些剥离出来的业 ...

  • Java中String类的concat方法

    在了解concat()之前,首先需要明确的是String的两点特殊性. 长度不可变 值不可变  这两点从源码中对String的声明可以体现: private final char[] value ; ...

  • java中堆栈(stack)和堆(heap)

    (1)内存分配的策略 按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编 译时就可以给 ...

  • Java中的通配符

    一.通配符概念 其实.上很多技术点都是为了解决某一问题而出现的,那么我们在学习的过程中可以先提出问题,然后在使用我们的技术去解决. DEMO:观察问题 以上代码可以正常执行,但是如果泛型类中的类型改变 ...

  • Java中zip的压缩和解压缩

    在Java中可以使用ZipOutputStream和ZipInputStream来实现zip的压缩和解压缩操作,另外使用FileSystem也可以用来实现zip的解压缩,下面将介绍这几种方式,直接上代 ...

  • 高级开发必须理解的Java中SPI机制

    本文通过探析JDK提供的,在开源项目中比较常用的Java SPI机制,希望给大家在实际开发实践.学习开源项目提供参考. 1 SPI是什么 SPI全称Service Provider Interface ...