前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java异常是Java提供的一种识别及响应错误的一致性机制

Java异常是Java提供的一种识别及响应错误的一致性机制

原创
作者头像
用户7365393
修改2021-10-08 15:00:23
5600
修改2021-10-08 15:00:23
举报

 Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。在有效使用异常的情况下,异常能清晰的回答what, where, why这3个问题:异常类型回答了“什么”被抛出,异常堆栈跟踪回答了“在哪“抛出,异常信息回答了“为什么“会抛出。Java通过API中Throwable类的众多子类描述各种不同的异常。因而,Java异常都是对象,是Throwable子类的实例。   Java异常机制用到的几个关键字:try、catch、finally、throw、throws。

  • try:用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出。
  • catch:用于捕获异常。catch用来捕获try语句块中发生的异常。
  • finally:finally语句块总是会被执行。它主要用于回收在try块里打开的物理资源(如数据库连接、网络连接和磁盘文件)。finally块执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者throw等终止方法的语句,就不会跳回执行,直接停止。
  • throw:用于抛出异常。
  • throws:用在方法签名中,用于声明该方法可能抛出的异常。

查看jdk8的文档,我们可以看到:

  • Error的直接子类:AnnotationFormatError, FactoryConfigurationError, IOError, ServiceConfigurationError, ThreadDeath, VirtualMachineError ...
  • Exception 的直接子类: DataFormatException, IllegalClassFormatException, InterruptedException, IOException, ReflectiveOperationException, RuntimeException, SQLException, TimeoutException...
  • Exception的子类RuntimeException的子类: ArithmeticException(算数异常), BufferOverflowException(缓冲区溢出异常), ClassCastException(类型转换异常), IndexOutOfBoundsException(数组越界异常), NullPointerException(空指针异常)...

Error类

  Error类描述了Java运行时系统的内部错误和资源耗尽错误。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。例如,Java虚拟机运行错误(Virtual MachineError),当 JVM请求内存不够时,将出现 OutOfMemoryError。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。

Exception类

运行时异常

  Exception类是程序本身可以处理的异常。一般分为两个分支:一个分支派生于RuntimeException;另一个分支包含其他异常,即非运行时异常RuntimeException 类表示由程序错误导致的异常,比如若试图使用空值对象引用、除数为零或数组越界,则分别引发运行时异常(NullPointerException、ArithmeticException)和 ArrayIndexOutOfBoundException。如果出现了运行时异常,那么一定是你的问题。这些异常是未检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。   运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有通过throws进行声明抛出,也会编译通过。

非运行时异常

  程序本身没有问题,但由于像IO错误这类问题导致的异常属于其他异常,即非运行时异常,比如如IOException、SQLException等以及用户自定义的Exception异常。从程序语法角度讲必须进行处理,如果不处理,程序就不能编译通过。

已检查异常和未检查异常

  通常,Java的异常(包括Exception和Error)分为已检查异常(checked exceptions)和未检查的异常(unchecked exceptions)。 未检查的异常:派生于Error类和RuntimeException 类的所有异常。 已检查的异常:所有其他的异常。编译器将核查是否为所有的已检查异常提供了异常处理器。也就是说:这种异常的特点是Java编译器会检查它,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么通过throws进行声明抛出,否则编译不会通过。

注意:异常和错误的区别:异常能被程序本身可以处理,错误是无法处理。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Error类
  • Exception类
    • 运行时异常
      • 非运行时异常
      • 已检查异常和未检查异常
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档