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

Java finally catch try关键字

Java finally catch try关键字

finally:

finally 关键字用来创建在 try 代码块后面执行的代码块;无论是否发生异常,finally 代码块中的代码总会被执行。
在 finally 代码块中,可以进行文件流关闭等收尾善后性质的语句

catch:

catch 关键字用于捕获异常并处理异常的代码块,通常与try关键字一起使用,可以使用多个 catch 代码块对异常进行多重捕获

try:

try 关键字用于包裹可能会抛出异常的代码块

使用示例

try{// 程序代码
}catch(异常类型1 异常的变量名1){// 程序代码
}catch(异常类型2 异常的变量名2){// 程序代码
}catch(异常类型3 异常的变量名3){// 程序代码
}finally{// 程序代码,如关闭文件流等善后操作
}

上述代码也可以改写成下面这种try-with-resources格式

try (resource declaration) {// 使用的资源
} catch (ExceptionType e) {// 异常块
}

try-with-resources:

try-with-resources是一种异常处理机制,它能够自动关闭在 try 块中声明的资源,无需显式地在 finally 块中关闭(JDK7 之后)

常见面试题:

finally 和 catch代码块中return的执行顺序问题

public static void main(String[] args) {System.out.println(a());System.out.println("-----------------");System.out.println(b());System.out.println("-----------------");System.out.println(c());}private static int a() {try{System.out.println(1/0);}catch(Exception e){System.out.println("catch is begin");return 1 ;}finally{System.out.println("finally is begin");}return 0;}private static int b() {try{//待捕获代码System.out.println(1/0);}catch(Exception e){System.out.println("catch is begin");return 1 ;}finally{System.out.println("finally is begin");return 2 ;}}private static int c() {try{//待捕获代码System.out.println(1/1);}catch(Exception e){System.out.println("catch is begin");return 1 ;}finally{System.out.println("finally is begin");return 2 ;}}

运行结果

catch is begin
finally is begin
1
-----------------
catch is begin
finally is begin
2
-----------------
1
finally is begin
2

依照这里的运行结果可以得出结论
1、无论是否有异常,finally中的代码都会执行
2、有异常的情况下,如果catch和finally代码块中均有return,则catch中的return不会被执行(或者覆盖);如果catch代码块中有return,finally代码块中没有return,则catch中的return会被执行

相关文章:

  • 反转链表 (oj题)
  • C++中的sizeof和strlen详解
  • 【玩转C语言】第三讲---> scanf 和 printf 函数详解(非常重要)!
  • Redisson知识
  • 斯坦福天才少女创5亿独角兽!Pika获8000万融资,金牌团队首曝光
  • 小主机折腾记24
  • 计算机基础(8)——音频数字化(模电与数电)
  • WPF中读取Excel文件的内容
  • 利用keepalived对zabbix-server做高可用,部署安装keepalived
  • 【WEB前端2024】智体OS:poplang编程控制成本小千元的长续航robot机器人底盘(开源)
  • C语言——内存函数
  • Linux 35.5 + JetPack v5.1.3@FC-Planner编译安装
  • 深入解析Java扩展机制:SPI与Spring.factories
  • Python的登录注册界面跳转汽车主页面
  • Rust : windows下protobuf尝试
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【个人向】《HTTP图解》阅后小结
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • 11111111
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • canvas 五子棋游戏
  • Date型的使用
  • Fundebug计费标准解释:事件数是如何定义的?
  • HashMap剖析之内部结构
  • pdf文件如何在线转换为jpg图片
  • Spark学习笔记之相关记录
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • windows下使用nginx调试简介
  • 阿里云Kubernetes容器服务上体验Knative
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 从重复到重用
  • 工程优化暨babel升级小记
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 实现菜单下拉伸展折叠效果demo
  • 数据可视化之 Sankey 桑基图的实现
  • 应用生命周期终极 DevOps 工具包
  • 用Visual Studio开发以太坊智能合约
  • 正则表达式
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • #pragam once 和 #ifndef 预编译头
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (纯JS)图片裁剪
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (每日一问)操作系统:常见的 Linux 指令详解
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (转)EOS中账户、钱包和密钥的关系
  • (转)visual stdio 书签功能介绍
  • (转)重识new
  • ./和../以及/和~之间的区别
  • .md即markdown文件的基本常用编写语法