加入收藏 | 设为首页 | 会员中心 | 我要投稿 大连站长网 (https://www.0411zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

Java中Error和Exception的异同

发布时间:2022-07-11 12:35:21 所属栏目:语言 来源:互联网
导读:Error(错误)和 Exception(异常)都是 java.lang.Throwable 类的子类,在 Java 代码中只有继承了 Throwable 类的实例才能被 throw 或者 catch。 Exception 和 Error 体现了 Java 平台设计者对不同异常情况的分类,Exception 是程序正常运行过程中可以预
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);
      }
  }
  运行输出为:
  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)
 
  上面代码通过无限递归调用最终引发了 java.lang.StackOverflowError 错误。

(编辑:大连站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!