Java_异常类(错误和异常,两者的区别介绍)

 更新时间:2016年09月07日 10:19:57   投稿:jingxian  
下面小编就为大家带来一篇Java_异常类(错误和异常,两者的区别介绍) 。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出)。Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性。

Throwable 有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。

①.Exception(异常)是应用程序中可能的可预测、可恢复问题。一般大多数异常表示中度到轻度的问题。异常一般是在特定环境下产生的,通常出现在代码的特定方法和操作中。在 EchoInput 类中,当试图调用 readLine 方法时,可能出现 IOException 异常。

Exception 类有一个重要的子类 RuntimeException。RuntimeException 类及其子类表示“JVM 常用操作”引发的错误。例如,若试图使用空值对象引用、除数为零或数组越界,则分别引发运行时异常(NullPointerException、ArithmeticException)和 ArrayIndexOutOfBoundException。

②.Error(错误)表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。例如,当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError。

检查异常 和 未检查异常 的划分

Java中的异常分为两大类:

1.Checked Exception(非Runtime Exception)

2.Unchecked Exception(Runtime Exception)

运行时异常

RuntimeException类是Exception类的子类,它叫做运行时异常,Java中的所有运行时异常都会直接或者间接地继承自RuntimeException类。

Java中凡是继承自Exception,而不继承自RuntimeException类的异常都是非运行时异常。

一个try后面可以跟多个catch,但不管多少个,最多只会有一个catch块被执行。

对于非运行时异常(checked exception),必须要对其进行处理,否则无法通过编译。

处理方式有两种:

1.使用try..catch..finally进行捕获;

2.在产生异常的方法声明后面写上throws 某一个Exception类型,如throws Exception,将异常抛出到外面一层去。

对于运行时异常(runtime exception),可以对其进行处理,也可以不处理。推荐不对运行时异常进行处理。

扩展:错误和异常的区别(Error vs Exception)

1).java.lang.Error: Throwable的子类,用于标记严重错误。合理的应用程序不应该去try/catch这种错误。绝大多数的错误都是非正常的,就根本不该出现的。

java.lang.Exception: Throwable的子类,用于指示一种合理的程序想去catch的条件。即它仅仅是一种程序运行条件,而非严重错误,并且鼓励用户程序去catch它。

2).Error和RuntimeException 及其子类都是未检查的异常(unchecked exceptions),而所有其他的Exception类都是检查了的异常(checked exceptions).

checked exceptions: 通常是从一个可以恢复的程序中抛出来的,并且最好能够从这种异常中使用程序恢复。比如FileNotFoundException, ParseException等。检查了的异常发生在编译阶段,必须要使用try…catch(或者throws)否则编译不通过。

unchecked exceptions: 通常是如果一切正常的话本不该发生的异常,但是的确发生了。发生在运行期,具有不确定性,主要是由于程序的逻辑问题所引起的。比如ArrayIndexOutOfBoundException, ClassCastException等。从语言本身的角度讲,程序不该去catch这类异常,虽然能够从诸如RuntimeException这样的异常中catch并恢复,但是并不鼓励终端程序员这么做,因为完全没要必要。因为这类错误本身就是bug,应该被修复,出现此类错误时程序就应该立即停止执行。 因此,面对Errors和unchecked exceptions应该让程序自动终止执行,程序员不该做诸如try/catch这样的事情,而是应该查明原因,修改代码逻辑。

RuntimeException:RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。

处理RuntimeException的原则是:如果出现 RuntimeException,那么一定是程序员的错误。例如,可以通过检查数组下标和数组边界来避免数组越界访问异常。其他(IOException等等)checked异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中出现的外部错误。

以上这篇Java_异常类(错误和异常,两者的区别介绍) 就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 微信小程序登录状态java后台解密

    微信小程序登录状态java后台解密

    这篇文章主要为大家详细介绍了微信小程序登录状态java后台解密,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • htmlcleaner使用方法及xpath语法初探

    htmlcleaner使用方法及xpath语法初探

    HtmlCleaner是一个开源的Java语言的Html文档解析器。HtmlCleaner能够重新整理HTML文档的每个元素并生成结构良好(Well-Formed)的 HTML 文档
    2015-08-08
  • 一文详解Java Condition的await和signal等待通知机制

    一文详解Java Condition的await和signal等待通知机制

    这篇文章主要为大家详细介绍了Java Condition的await和signal等待通知机制的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2025-02-02
  • SpringBoot项目嵌入RocketMQ的实现示例

    SpringBoot项目嵌入RocketMQ的实现示例

    本文主要介绍了SpringBoot项目嵌入RocketMQ的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • java子线程解决获取主线程的request对象问题

    java子线程解决获取主线程的request对象问题

    这篇文章主要介绍了java子线程解决获取主线程的request对象问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 利用idea搭建SSM项目看这一篇就够了

    利用idea搭建SSM项目看这一篇就够了

    SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容),常作为数据源较简单的web项目的框架,下面这篇文章主要给大家介绍了关于利用idea搭建SSM项目的相关资料,需要的朋友可以参考下
    2023-05-05
  • springboot项目部署到k8s上的方法步骤

    springboot项目部署到k8s上的方法步骤

    本文主要介绍了springboot项目部署到k8s上的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • java生成XML的方法【附demo源码下载】

    java生成XML的方法【附demo源码下载】

    这篇文章主要介绍了java生成XML的方法,涉及java针对xml格式文件的简单操作技巧,并附带demo源码供读者下载参考,需要的朋友可以参考下
    2016-12-12
  • 如何使用jakarta.json进行json序列化和反序列化

    如何使用jakarta.json进行json序列化和反序列化

    java里,json框架何其多,常见的有jackson、fastjson、gson等,本文重点介绍如何使用jakarta.json进行json序列化和反序列化,需要的朋友可以参考下,
    2024-07-07
  • python实现高斯模糊及原理详解

    python实现高斯模糊及原理详解

    高斯模糊是一种常见的模糊技术,本文主要介绍了python实现高斯模糊及原理详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05

最新评论