【从零开始学习JAVA | 第三十一篇】异常体系介绍

前言:

本文我们将为大家介绍一下异常的整个体系,而我们学习异常,不是为了敲代码的时候不出异常,而是为了能够熟练的处理异常,如何解决代码中的异常。

异常的两大分类:

我们就以这张图作为线索来详细介绍一下Java中的异常:

1.Exceptions(异常)

在Java中,Exception(异常)是一种表示非致命错误或异常情况的类或接口。Exception通常是由应用程序引发的,可以被程序员捕获、处理或抛出。

Exception再分为两种类型:可检查异常(checked exception)非检查异常(unchecked exception)。

  1. 可检查异常(Checked Exception):
  • 可检查异常在编译时就需要进行处理,否则编译器会报错。
  • 可检查异常通常表示程序可以预见和处理的异常情况。
  • 可检查异常必须通过try-catch语句块或者在方法签名中使用throws关键字进行处理。
  • 常见的可检查异常有IOException、SQLException等。
  1. 非检查异常(Unchecked Exception):
  • 非检查异常在编译时不需要进行处理,程序员可以选择捕获和处理这些异常。
  • 非检查异常通常表示程序中发生的错误或逻辑错误。
  • 非检查异常不需要强制在代码中进行处理,但程序员可以自行处理。
  • 常见的非检查异常有NullPointerException、ArrayIndexOutOfBoundsException等。

Java中的异常处理机制使用try-catch-finally语句块来捕获和处理异常 ,并提供了一种结构化的方式来处理各种异常情况。在try块中编写可能会出现异常的代码,catch块中捕获并处理异常,finally块中编写无论是否出现异常都要执行的代码。

除了try-catch-finally,还可以使用throws关键字在方法签名中声明方法可能抛出的异常,以便调用该方法的代码能够适当处理异常。

总之,Exception是Java中用于表示各种非致命错误或异常情况的类或接口。通过Java的异常处理机制,程序员可以对可能发生的异常进行捕获、处理、抛出或传递,以保证程序的健壮性和可靠性。

在Java中,Error是指表示严重错误或系统异常的一种特殊类型的异常。与普通的异常(Exception)不同,Error通常是无法被程序员捕获或处理的,而是由Java虚拟机(JVM)自动处理。

2.Error(错误)

**Error表示的是Java运行时环境发生了一些严重的问题,如虚拟机错误、内存溢出、线程死锁等,这些问题一般是由于系统级错误或者虚拟机的内部错误造成的。**一旦发生Error,通常意味着程序的执行已经无法继续进行下去,因此它们被认为是致命的,不可恢复的错误。

常见的Error包括:

1. OutOfMemoryError:表示内存溢出错误,当程序需要的内存超过了虚拟机可提供的内存限制时,会抛出该错误。一般分为`HeapSpace`(堆内存)和`Metaspace`(元空间)两种类型。

2. StackOverflowError:表示栈溢出错误,当方法调用的深度超过栈的最大限制时,会抛出该错误。

3. NoClassDefFoundError:表示找不到类定义错误,当虚拟机或类加载器无法找到某个类的定义时,会抛出该错误。

4. LinkageError:表示链接错误,当在类的连接阶段发生问题时,会抛出该错误。如版本不匹配、依赖关系错误等。

虽然程序员在一般情况下不会对Error进行捕获和处理,但它们的存在是为了提醒程序员可能存在严重问题,或者在程序无法继续执行时提供适当的错误信息。通常情况下,当程序出现Error时,Java虚拟机会终止程序的运行,并输出错误信息。

需要注意的是,在开发中,程序员应当关注并避免由于编码错误或逻辑错误导致的各种异常和错误,尽可能编写健壮的代码,同时在必要的情况下对可能发生的异常进行适当的处理,以提高应用程序的稳定性和可靠性。

总结:

本文我们介绍了两个常见的内容:一个是Error(错误),一个是Exception(异常)。而Error属于系统级别的错误,我们一般是不需要对其进行捕获和处理的,这是JAVA开发公司SUN需要进行修正的地方,而Exception是我们需要关注的异常,他又分为两大子类,我们也不需要详细记忆,只需要记忆一个大概的框架就好了。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

相关推荐
阿七想学习几秒前
数据结构《排序》
java·数据结构·学习·算法·排序算法
xlsw_6 分钟前
java全栈day21--Web后端实战之利用Mybaits查询数据
java·开发语言
什么想法都无20 分钟前
stream
java·java stream
m0_7482336420 分钟前
WebService简介
java
love静思冥想21 分钟前
Stream `Collectors.toList()` 和 `Stream.toList()` 的区别(Java)
java·stream
Ch.yang40 分钟前
【Spring】 Bean 注入 HttpServletRequest 能保证线程安全的原理
java·spring·代理模式
web1508509664141 分钟前
基于Mysql、JavaScript、PHP、ajax开发的MBTI性格测试网站(前端+后端)
java
昙鱼1 小时前
springboot创建web项目
java·前端·spring boot·后端·spring·maven
eternal__day1 小时前
数据结构(哈希表(中)纯概念版)
java·数据结构·算法·哈希算法·推荐算法
天之涯上上1 小时前
JAVA开发 在 Spring Boot 中集成 Swagger
java·开发语言·spring boot