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

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

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.kler.cn/a/15356.html

相关文章:

  • 对PolyMarket的突袭
  • Docker: ubuntu系统下Docker的安装
  • 开源项目低代码表单设计器FcDesigner获取表单的层级结构与组件数据
  • WPF Gif图谱 如果隐藏的话会存在BUG
  • 【爬虫实战】抓取某站评论
  • WebRTC视频 02 - 视频采集类 VideoCaptureModule
  • Java 创建线程池的三种方式
  • 九耶丨阁瑞钛伦特-Java分布式(一)
  • MATLAB算法实战应用案例精讲-【智能优化算法】哈里斯鹰(HHO)(论文篇二)
  • 集成灶/小家电语音提示芯片方案-WTN6040-8S唯创知音自主研发
  • Android类似微信聊天页面教程(Kotlin)四——数据本地化
  • leetcode657. 机器人能否返回原点
  • 移动通信网络频段大全
  • OJ练习第91题——文本左右对齐
  • 3.7 Linux shell脚本编程(分支语句、循环语句)
  • C语言必背经典程序代码
  • 【VM服务管家】VM4.0软件使用_1.3全局模块类
  • Shiro相关知识
  • 获取Tree 树形控件下面的全部id
  • 小米青春版路由器刷openwrt
  • UE5实现Runtime环境下绘制点功能
  • 201709-1 打酱油
  • 基于dsp+fpga+AD+ENDAC的半导体运动台高速数据采集电路仿真设计(四)
  • Qt5.9学习笔记-事件(一)
  • 从线程安全到锁粒度,使用Redis分布式锁的注意事项
  • 【NLP实战】基于Bert和双向LSTM的情感分类【上篇】