9.Java中异常处理机制是什么

news/2024/10/22 23:42:43/

Java的异常处理通过五个关键字来实现,分别是捕获异常:try,catchsfinally;声明异常:throws;抛出异常:throw

      • 一:try,catch捕获异常
      • 二:finally回收资源
      • 三:抛出异常throw
      • 四:声明异常throws

一:try,catch捕获异常

下面展示一些 内联代码片


public class ExceptionTest {public static void main(String[] args) {try{     // 业务代码      }catch (Exception e){        // 出现异常       }}}

如果执行try块里的业务逻辑代码时出现异常,系统自动生成一个异常对象,当Java运行时环境收到异常对象时,会寻找能处理该异常对象的catch块,如果找到合适的catch块,则把该异常对象交给该catch块处理,这个过程被称为捕获(catch)异常。
如果Java运行时环境找不到捕获异常的catch块,则运行时环境终止,Java程序也将退出

二:finally回收资源

使用finally回收资源,有些时候程序在try块里打开了一些物理资源(例如数据库连接、网络连接和磁盘文件等),这些物理资源都必须显式回收。
Java的垃圾回收机制不会回收任何物理资源,垃圾回收机制只能回收堆内存中对象所占用的内存。

在哪里回收这些物理资源呢?在try块里回收?还是在catch块中进行回收?假设程序在try块里进行资源回收,如果try块的某条语句引起了异常,该语句后的其他语句通常不会获得执行的机会,这将导致位于该语句之后的资源回收语句得不到执行。如果在catch块里进行资源回收,但catch块完全有可能得不到执行,这将导致不能及时回收这些物理资源。

为了保证一定能回收try块中打开的物理资源,异常处理机制提供了finally块。不管try块中的代码是否出现异常,也不管哪一个catch块被执行,甚至在try块或catch块中执行了return语句,finally块总会被执行。

public class ExceptionTest {    
public static void main(String[] args) {     
try{            }catch (){            }finally {      System.out.println("回收资源");           }}
}

上面程序的try块后增加了finally块,用于回收在try块中打开的物理资源。注意程序的catch块中有一条return语句,该语句强制方法返回。在通常情况下,一旦在方法里执行到return语句的地方,程序将立即结束该方法;现在不会了,虽然return语句也强制方法结束,但一定会先执行finally块里的代码。

在通常情况下,不要在finally块中使用如return或throw等导致方法终止的语句,一旦在finally块中使用了return或throw语句,将会导致try块、catch块中的return、throw语句失效。

三:抛出异常throw

位于方法内部,是异常出现的源头,制造异常。

四:声明异常throws

位于方法声明处,告诉方法可能出现异常啊。


http://www.ppmy.cn/news/57464.html

相关文章

青少年软件编程(C语言) 等级考试试卷(五级)2021年12月

青少年软件编程(C语言) 等级考试试卷(五级)2021年12月1.书架 题目描述 John最近买了一个书架用来存放奶牛养殖书籍,但书架很快被存满了,只剩最顶层有空余。 John共有N头奶牛(1 ≤ N ≤ 20,000),…

746. 使用最小花费爬楼梯

给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 请你计算并返回达到楼梯顶部的最低花费。 示例 1&#xff…

【LeetCode】236. 二叉树的最近公共祖先

1.问题 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是…

Linux驱动之input输入子系统

输入子系统用于实现Linux系统输入设备(鼠标 键盘 触摸屏 游戏杆)驱动的一种框架。Linux内核将其中的固定部分放入内核,驱动开发时只需要实现其中的不固定部分(主要还是和硬件相关的部分),这和platform设备…

【五一创作】人工智能前沿知识

人工智能是一种在计算机系统中模拟人类智能和思维的技术。近年来,人工智能技术得到了飞速发展,涉及到了各个领域,如自然语言处理、计算机视觉、智能机器人等。在这篇文章中,我将介绍人工智能的前沿知识。 一、深度学习 深度学习…

武忠祥老师每日一题||不定积分基础训练(三)

有理函数不定积分: ∫ 1 x 1 x 3 d x \int \frac{1x}{1x^3}\,{\rm d}x ∫1x31x​dx ∫ 1 x ( 1 x ) ( 1 − x x 2 ) d x ( 1 ) \int \frac{1x}{(1x)(1-xx^2)}\,{\rm d}x(1) ∫(1x)(1−xx2)1x​dx(1) ∫ 1 x 2 − x 1 d x ( 2 ) \int \frac{1}{x^2-x1} \,{\rm d}x(2)…

Windows安装rabbitmq

Windows安装rabbitmq 一、下载1、下载erlang2、下载rabbitmq 二、安装1、安装erlang2、安装rabbitmq3、简单使用 一、下载 1、下载erlang 点击右侧下载地址,跳转下载,点击下载 跳转后,点击download windows install即可下载。 2、下载rab…

14-6-进程间通信-信号量

前面学习了pipe,fifo,共享内存,信号。 本章将讲述信号量。 一、什么是信号量/信号量集? 1.什么是信号量 信号量是一个计数器。信号量用于实现进程间的同步和互斥。而可以取多个正整数的信号量被称为通用信号量。 对信号量的使用场景的解读 房间&#…