当前位置: 首页 > backend >正文

java基础:异常体系

目录

  • 一、java异常体系介绍
  • 二、异常
    • 1、运行时异常
    • 2、非运行时异常
  • 三、错误
  • 四、异常的处理方式
    • 1、方式1:throws声明抛出异常
      • 1.1、throws关键字
      • 1.2、throw关键字
    • 2、方式2:try-catch-finally

一、java异常体系介绍

异常体系图如下:
Throwable类是所有异常*(Exception)错误(Error)的超类,两个直接子类为Error和Exception。
所有的异常的顶级父类都是Exception,Exception又分为
运行时异常(非受检异常)非运行时异常(受检异常)。

在这里插入图片描述

二、异常

异常的顶级父类是Exception,所有的子类都会继承于Exception。Exception的子类为运行时异常非运行时异常。

1、运行时异常

这些异常是在程序运行时可能出现的错误,如**NullPointerException(空指针异常)ArrayIndexOutOfBoundsException(数组索引越界异常)。**它们通常是由程序逻辑错误引起的,程序可以选择捕获处理,也可以不处理。
运行时异常可以举下面的例子:
(1)数组索引越界异常

public class M1 {public static void main(String[] args) {int[] arr = {1,4,5,7};System.out.println(arr[5]);}
}

上面的代码编译时没有出现问题,但是arr[5]超过了数组的长度。
在这里插入图片描述
运行结果如下:
在这里插入图片描述
(2) 空指针异常
在这里插入图片描述
在这里插入图片描述

2、非运行时异常

非运行时异常在编译时必须被处理否则程序无法通过编译。例如,IOException涉及I/O操作失败时抛出的异常。
在这里插入图片描述
在这里插入图片描述

上面的非运行时异常,和最后一个运行时异常的例子相似,只是上面的str赋值了null,可以看出非运行时异常在编译器中会有红色波浪线的提示,同时运行的时候也无法完成编译。

三、错误

Error表示严重的问题,通常与Java虚拟机(JVM)的状态有关,这些问题通常不是由程序控制的,也不应该被程序捕获。例如,OutOfMemoryError表示内存不足,NoClassDefFoundError表示找不到类定义。这些错误通常是致命的,一旦发生,JVM通常会选择终止线程。(错误不是异常必须处理,而且解决异常的方法不适用于错误
下面演示栈溢出异常:

public class M1 {public static void main(String[] args) {run();}public static void run(){run();}
}

在这里插入图片描述

四、异常的处理方式

异常处理的方式有两种:**throws(抛出异常)**和 try-catch-finally 方式

1、方式1:throws声明抛出异常

1.1、throws关键字

throws关键字主要用于方法声明上,指的是当方法之中出现异常后交由被调用处处理。throws主要作用:将异常抛出交给有能力解决的去解决。
下面提供一个throws的实例:

public class M1 {public static void main(String[] args) throws ClassNotFoundException {Class clazz = Class.forName("java讲课.异常.M1");}
}

可以将上面的throws 后面的异常名 换成 Exception,所有异常的父类就可以不需要再额外的抛出异常。

1.2、throw关键字

throw关键字的使用过程和语法如下:

throw new Exception("想要显示的错误");

在这里插入图片描述
上面的图片可以看出抛出异常后后面的所有的代码都不可以执行。

2、方式2:try-catch-finally

try-catch的方式就是捕获异常。

try : 该代码块中编写可能产生异常的代码。

catch:用来进行某种异常的捕获,对捕获到的异常进行处理。
finally:无论结果是否有异常,都会执行的代码,一般用于释放资源。(典型的jdbc)

try-catch-finally的语法定义如下:

        try {int[] arr = {1,5,7,9};System.out.println(arr[5]);}catch (Exception e){e.printStackTrace();}finally {System.out.println("我不管我就要执行");}

运行结果如下:
在这里插入图片描述

try-catch的语法定义如下:

        try {int[] arr = {1,5,7,9};System.out.println(arr[5]);}catch (Exception e){e.printStackTrace();}

在这里插入图片描述
注意点:
(1)try-catch可以配合使用且不适用finally
(2)try和catch不可以单独使用
(3)finally不能单独使用

http://www.xdnf.cn/news/6078.html

相关文章:

  • 006-nlohmann/json 结构转换-C++开源库108杰
  • # 深度剖析LLM的“大脑”:单层Transformer的思考模式探索
  • 青少年编程与数学 02-019 Rust 编程基础 11课题、类型系统
  • GAN简读
  • npm install 报错
  • CS4334:一款高性能的立体声音频数模转换器
  • 如何自定义 Spring MVC 的配置?
  • 【unity游戏开发——编辑器扩展】使用EditorGUI的EditorGUILayout绘制工具类在自定义编辑器窗口绘制各种UI控件
  • 高速数字测试利器,新款是德科技UXR0504B示波器
  • RPA vs. 传统浏览器自动化:效率与灵活性的终极较量
  • STM32 片上资源之串口
  • 《实现模式》以Golang视角解读 价值观和原则 day 1
  • 快速定位到源码位置的插件 - vite/webpack
  • 【Python】普通方法、类方法和静态方法的区分
  • hbase shell的常用命令
  • 双目云台摄像机:双摄安防功能全方位
  • Java运行原理分析
  • LeetCode 热题 100 114. 二叉树展开为链表
  • Spring的bean的生命周期?
  • 【机器学习】支持向量回归(SVR)从入门到实战:原理、实现与优化指南
  • 各大编程语言基本语法区别
  • 游戏引擎学习第279天:将实体存储移入世界区块
  • 为什么 Linux 上默认没有 host.docker.internal
  • 【内网渗透】——NTML以及Hash Relay
  • MySQL Explain 中 Type 与 Extra 字段详解
  • MySQL 服务器配置和管理(上)
  • 监听用户切换浏览器标签页,切换回页面刷新页面
  • 代码随想录算法训练营第60期第三十五天打卡
  • 嵌入式自学第二十天(5.13)
  • AIStarter新功能上线:模型管理与创作者收益系统全面升级,助力AI开发效率提升