【Java基础篇】 try中return A,catch中return Bfinally中return C,最终返回值是什么?

news2025/6/10 9:12:31

在这里插入图片描述

try中return A,catch中return Bfinally中return C,最终返回值是什么?

  • ✔️典型解析
  • ✔️拓展知识仓
    • ✔️finally 和 return 的关系
  • ✔️ final、finally、finalize有什么区别
    • ✔️final
    • ✔️finally
    • ✔️ finalize


✔️典型解析


最终的返回值将会是C


因为 finally块总是在 trycatch 块之后执行,无论是否有异常发生。如果finally块中有一个return语句,它将夏盖try块和catch块中的任何return语句。


//无异常情况
public static string getValue() {
	try {
		return "A" ;
	} catch (Exception e) {
		return "B" ;
	} finally {
		return "C" ;
	}
}

//有异常情说
public static string getValue() {
	try {
		System.out.println( 1 / 0 );
		return "A" ;
	} catch (Exception e) {
		return "B" ;
	} finally {
		return "C" ;
	}
}

所以在这种情况下,无论 trycatch 块的执行情况如何,finally 块中的 return C ;总是最后执行的语句并目其返回值将是整个代码块的返回值。


这个问题还有一个孪生问题,那就是如下代码得到的结果是什么:


public static void getValue() {
	
	int i = 0;
	
	try {
		i = 1;
	} catch (Exception e) {
		i = 3;
	} finally {
		i = 5;
	}
	System.out.println(i);
}

原理和上面的是一样的,最终输出内容为5。


✔️拓展知识仓


✔️finally 和 return 的关系


很多时候,我们的一个方法会通过return返回一个值,那么如以下代码:


public static int getValue()  {

	int i = 1;
	
	try {
		++i;
		return i;
	}  catch (Exception e)  {
		i = 66;
	} finally {
		i = 100;
	}
	return i;
}

这人代码得到的结果是2,try-catch-finally的执行顺序是try->finally或者try-catch-finally,然后在护行每一个代码块的过程中,如果遇到return那么就会把当前的结果暂存,然后再执行后面的代码块,然后再把之前暂存的结果返回回去。


所以以上代码,会先把 ++i 即 2 的结果暂存,然后执行 i=100,接着再把 2 返回。


但是,在执行后续的代码块过程中,如果遇到了新的 return ,那么之前的暂存结果就会被覆盖。如:


public static int getValue() {
	
	int i = 1;
	
	try {
		i++;
		return i;
	} catch (Exception e)  {
		i = 66;
	} finally {
		i = 100;
		return i;
	}
}

以上代码方法得到的结果是100,是因为在finally 中遇到了一个新的 return ,就会把之前的结果给覆盖掉。


如果代码出现异常也同理:


public static int getValue() {
	
	int i = 1;
	
	try {
		++i;
		System.out.println( 1 / 0 );
		return i;
	} catch (Exception e)  {
		i = 66;
	} finally {
		i = 100;
		return i;
	}
}

在try中出现一个异常之后,会执行 catch,在执行 finally ,最终得到 100。如果没有finally :


public static int getValue() {
	
	int i = 1;
	
	try {
		i++;
		System.out.println( 1 / 0 );
		return i;
	} catch (Exception e)  {
		i = 66;
		return i;
	}
}

那么得到的结果将是66。


所以,如果 finally 块中有 return 语句,则其返回值将是整个 try-catch-finally 结构的返回值。如果 finally 块中没有 return 语句,则 trycatch 块中的 return 语句 (取决于哪个执行了) 将确定最终的返回值。


注意:我在上面的示例代码中一会使用 ++i,一会使用 i++,这个我要给大家回顾一下,在编程中,对于这个变量自身来讲,前++ 后 ++ 是没有任何区别的。总结如下:

(1)对于变量自身来说,无论将++放在变量名的前面或者后面都是先数值的加1效果,实际上是等价的


(2) a++ 表示先让 a 的数值作为整个表达式的结果,然后再让a自身的数值加1; ++a 表示先让a自身的数值加1,然后再作为整个表达式的结果


✔️ final、finally、finalize有什么区别


final、finally、finalize有什么区别? 这个问题就像周杰、周杰伦和周星驰之间有啥关系的问题一样.其实没啥关系,放在一起比较无非是名字有点像罢了。


final、finally和finalize是Java中的三个不同的概念:
  • final: 用于声明变量、方法或类,使之不可变、不可重写或不可继承

  • finally: 是异常处理的一部分,用于确保代码块 (通常用于资源清理) 总是执行

  • finalize: 是Obiect类的一个方法,用于在对象被垃圾回收前执行清理操作,但通常不推荐使用

✔️final


final是一个关键字,可以用来修饰变量、方法和类。分别代表着不同的含义。


final变量: 即我们所说的常量,一旦被赋值后,就不能被修改。


final int x = 100:
// x = 200;// 编译错误,不能修改final变量的值
public static final string AUTHOR_NAME = "Xinbaobaba":

final方法: 不能被了类重写


 public final void show()  {
		//.........
 }

final类: 不能被继承


public final class MyFinalClass  {
	//......
}

✔️finally


finally是一个用于异常处理,它和try、catch块一起使用。无论是否捕获或处理异常,finally块中的代码总是执行(程序正常执行的情况) 。通常用于关闭资源,如输入/输出流、数据库连接等。


try {
	//可能产生异常的代码
} catch (Exception e)  {
	// 异常处理代码
} finally {
	// 清理代码,总是执行
}

✔️ finalize


finalizeObject 类的一个方法,用于垃圾收集过程中的资源回收。在对象被垃圾收集器回收之前 finalize 方法会被调用,用于执行清理操作(例如释放资源)。但是,不推荐依赖finalize方法进行资源清理,因为它的调用时机不确定且不可靠。


protected void finalize() throws Throwable {
	//  在对象被回收时执行清理工作
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1354990.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机毕业设计-----SSM自习室图书馆座位预约管理系统

项目介绍 一款由jspssmmysql实现的图书馆预约占座管理系统,前端采用的是当下最流行的easyui框架,后台用的ssm(spring、springMVC、mybaits)框架.添加学生和教师时会自动在用户表中注册,定时任务会定时生成座位信息&am…

Cortex-M3 内核的中断优先级

第一步:分组(一次) 第二步:根据每个中断,设置抢占优先级(根据分组可以知道可以几位设置),然后子优先级。 1. 中断编号 ARM 为 Cortex-M3 内核 一共设计了 255 个中断,编号…

【SpringBoot开发】之商城项目案例(订单及订单项生成)

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《SpringBoot开发之商城项目系列》。&#x1f3af…

Ubuntu无网络解决办法

1.进入root并输入密码 sudo su 2.更新NetworkManager的配置 用vim打开NetworkManager.conf vim /etc/NetworkManager/NetworkManager.conf 将第五行 managedFalse 改为 managedTrue 。 如果本身就是True就不用改了。 3.删除NetworkManager配置 service NetworkManager st…

Application layer

title: 应用层 date: 2023-12-20 21:03:48 tags: 知识总结 categories: 计算机网络 应用层:负责最直观的应用请求的封装、发起 一、域名系统DNS 连接在互联网上的主机不仅有IP地址,还有便于用户记忆的主机名字。域名系统DNS能够把互联网上的主机的名字…

看完这篇 教你玩转镜像转换神器qumu实现虚拟机做题自由!

前言: 最近有小伙伴说比赛没设备,问有没有不需要设备也能实现做题自由的方法,今天这里分享一期! 看完这篇你将学会 使用qumu转换镜像格式 一般我们做题都是img格式的环境 需要导入设备,有些小伙伴没有设备 就可以使用…

擎创动态 | 某城商行案例入选信通院 GOLF+年度明星解决方案

2023年12月15日,“2023GOLF IT新治理领导力论坛”在京召开,该论坛由中国信息通信研究院、中国通信标准化协会主办。在此次论坛中,主办方正式发布了XOps领域年度评选结果。擎创科技“一体化智能根因定位解决方案”凭借优秀的落地实践成果&…

Navicat 技术干货 | 如何查看关系型数据库(MySQL、PostgreSQL、SQL Server、 Oracle)查询的运行时间

在数据库优化中,理解和监控查询运行时间是至关重要的。无论你是数据库管理员、开发人员或是参与性能调优的人员,知道如何查看查询运行时间能为你的数据库操作提供有价值的参考。本文中,我们将探索几款热门的关系数据库(如 MySQL、…

门店总数超9000家,手握大众茶饮“下沉市场牌”的古茗冲刺上市

奶茶品牌上市潮来袭。1月2日,奶茶品牌古茗控股有限公司(下称“古茗”)、蜜雪冰城股份有限公司(下称“蜜雪冰城”)一同递交招股书,计划在港交所主板上市。 近年来,随着现制茶饮的爆火&#xff0…

vue-amap区域显示,3d棱柱效果

文章目录 一、在vue项目中安装和基本使用1. 安装2. 在vue项目中使用1. 在main.js中引入2. demo显示高德地图 二、显示区域三、只显示某个区域四、3D棱柱区域五、添加卫星图层 vue-amap中文文档: https://www.wenjiangs.com/doc/mdxkhhtr 一、在vue项目中安装和基本…

30道Nginx面试题含答案(很全)

1. 什么是Nginx? Nginx是一个 轻量级/高性能的反向代理Web服务器,他实现非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发。 2. 为什么要用Nginx? 跨平台、配置简单、方向代理、高并…

nVisual如何实现数据中心资产管理

背景 随着信息技术的迅速发展,数据中心已经成为了企业信息化建设的重要基础设施之一。数据中心不仅承载着大量的企业数据和业务应用,而且也需要大量的资产投入来支持其运营和发展。 因此,数据中心资产管理的重要性也日益凸显,数…

单电阻落地扇电机驱动 DEMO 方案

SYNWIT DEMO方案 低压 PMSM 电机,软件上采用SVPWM空间电压矢量调制技术,直接闭环启动,相比传统方波效率提高15%,具有更小的谐波分量及转矩脉动,同时采用32位MCU芯片SWM201G6S7 SSOP28 封装为主控,为驱动算…

thinkadmin安装步骤

一,先cmd运行安装命令 ### 创建项目( 需要在英文目录下面执行 ) composer create-project zoujingli/thinkadmin二,在confing中的database.php配置数据库 三,将仓库的data复制到app目录下 https://gitee.com/zoujingli/think-plugs-data 四,在cmd运…

ssm基于BS的仓库在线管理系统的设计与实现论文

摘 要 如今的时代,是有史以来最好的时代,随着计算机的发展到现在的移动终端的发展,国内目前信息技术已经在世界上遥遥领先,让人们感觉到处于信息大爆炸的社会。信息时代的信息处理肯定不能用之前的手工处理这样的解决方法&#x…

实验笔记之——下载数据到服务器

开发过程中经常需要把数据传到服务器上,太麻烦了,为此本博文记录采用百度云来传输数据 百度云 使用bypy包。 安装:pip install bypy 配置bypy连接百度网盘: 终端输入bypy info将命令行提示的链接复制到浏览器,并复制…

【webstorm中通过附加方式打开一个项目,这个项目本身有git,但是却看不到git的解决方法】

1、如图所示 设置-》版本控制-》未注册的根,选中后,再点加号,就可以了 2、如图所示 版本控制-》直接点加号-》选中项目路径,vcs选择git,点击确定就可以了

Hadoop之MapReduce 详细教程

MapReduce仅作了解,生产上很少使用该计算程序 1、MapReduce介绍 MapReduce 思想在生活中处处可见。或多或少都曾接触过这种思想。MapReduce的思想核心是“分而治之”,适用于大量复杂的任务处理场景(大规模数据处理场景)。即使是…

西电期末1018.logistic方程

一.题目 二.分析与思路 根据题目递归即可&#xff0c;用while函数判断是否到达1000项&#xff0c;内部用abs函数&#xff08;绝对值函数&#xff09;判断是否收敛&#xff0c;最后按照结果输出即可。 三.代码实现 #include<bits/stdc.h>//万能头 int main() {double …

Bean如何诞生与消亡:生命周期探秘【beans 二】

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Bean如何诞生与消亡&#xff1a;生命周期探秘【beans 二】 前言bean的创建过程bean的初始化阶段1. 实现InitializingBean接口&#xff1a;2. 使用PostConstruct注解&#xff1a; bean的属性注入1. Set…