Java异常处理场景中不同位置的返回值详细解析
2024-10-20 07:56:45
Java 异常处理中的返回值在不同位置不同场景下是有一些差别的,这里需要格外注意
具体分以下两种场景:
- 1 finally语句块没有return语句,即当代码执行到try或者catch语句块中的return语句时,相当于在本地保存了一份此时返回值的变量的值副本,然后按照try catch finally的运行机制去执行finally语句块,然后回过来将刚刚保存的副本数据返回
第一个例子为在try中没有异常,直接走到try语句块中的return场景
public class Test01 {
public static void main(String[] args) {
int results=new Test01().test(10,2);
System.out.println("func results:"+results);
}
public int test(int a,int b)
{
int results=0;
try
{
System.out.println("in try.....");
results+=1;
System.out.println("results = "+results);
return results;
}
catch (Exception e)
{
System.out.println("in catch......");
results+=1;
System.out.println("results = "+results);
return results;
}
finally {
System.out.println("in finally");
results+=1;
System.out.println("results = "+results);
}
}
}
执行结果如下,最后函数返回的值是1,而不是2
in try.....
results = 1
in finally
results = 2
func results:1
第二个例子为try中出现了异常,但是在catch中走到了return语句
public class Test01 {
public static void main(String[] args) {
int results=new Test01().test(10,2);
System.out.println("func results:"+results);
}
public int test(int a,int b)
{
int results=0;
try
{
System.out.println("in try.....");
results+=1;
System.out.println("results = "+results);
double d=1/0;
return results;
}
catch (Exception e)
{
System.out.println("in catch......");
results+=1;
System.out.println("results = "+results);
return results;
}
finally {
System.out.println("in finally");
results+=1;
System.out.println("results = "+results);
}
}
}
返回值如下,即此时返回值是2而不是3
in try.....
results = 1
in catch......
results = 2
in finally
results = 3
func results:2
- 2 finally语句块有return语句,此时即最终返回finally语句块中的的值,而try或者catch语句块中及时有return语句,也不会发生作用
下面的例子即try中能走到return语句,同样finally中也有return语句时候,此时返回finally语句块中的return的值
public class Test01 {
public static void main(String[] args) {
int results=new Test01().test(10,2);
System.out.println("func results:"+results);
}
public int test(int a,int b)
{
int results=0;
try
{
System.out.println("in try.....");
results+=1;
System.out.println("results = "+results);
return results;
}
catch (Exception e)
{
System.out.println("in catch......");
results+=1;
System.out.println("results = "+results);
return results;
}
finally {
System.out.println("in finally");
results+=1;
System.out.println("results = "+results);
return results;
}
}
}
执行结果如下,返回2,此时不是返回1了
in try.....
results = 1
in finally
results = 2
func results:2
下面的例子即在catch走到了return语句,同样在finally语句块中也走到了return语句,此时同样也是返回finally语句块中的值,catch语句块中的返回值失效
public class Test01 {
public static void main(String[] args) {
int results=new Test01().test(10,2);
System.out.println("func results:"+results);
}
public int test(int a,int b)
{
int results=0;
try
{
System.out.println("in try.....");
results+=1;
System.out.println("results = "+results);
double d=1/0;
return results;
}
catch (Exception e)
{
System.out.println("in catch......");
results+=1;
System.out.println("results = "+results);
return results;
}
finally {
System.out.println("in finally");
results+=1;
System.out.println("results = "+results);
return results;
}
}
}
执行结果如下:返回3而不是2了
in try.....
results = 1
in catch......
results = 2
in finally
results = 3
func results:3
最新文章
- css属性兼容主流浏览器
- Codeforces Round #361 (Div. 2) C
- SQL分页
- Unity3D 5.x 交互功能 - 光线投射、碰撞设置
- WEKA使用
- tail -f 和 -F 的用法
- 时间:UTC时间、GMT时间、本地时间、Unix时间戳
- Python 学习之urllib模块---用于发送网络请求,获取数据(2)
- ubuntu下安装svn
- EasyUI - Panel 面板控件
- cocos2d-x 3.0来做一个简单的游戏教程 win32平台 vs2012 详解献给刚開始学习的人们!
- uva10635 LCS映射转LIS
- Android自动打包工具aapt详解
- 解决centos7.x图形化界面卡死(鼠标能动,但不能点击)问题
- kvm动态添加硬盘
- itchat分析微信好友的个性签名
- 隐马尔可夫模型:HMM
- js异步计时器
- 论文阅读笔记 Improved Word Representation Learning with Sememes
- python if elif else判断语句
热门文章
- Flink读取resource资源文件
- C++ static 数据成员和构造函数
- 解决Yii ActiveForm监听submit触发2次submit
- Azure Service Bus(二)在NET Core 控制台中如何操作 Service Bus Queue
- Abp vNext异常处理的缺陷/改造方案
- 使用CentOS8来部署php7.4
- Hyperledger fabric 1.4 环境搭建(一)
- SpringBoot整合任务调度框架Quartz及持久化配置
- umi-request 统一异常处理实践
- easyui中在formatter: function (value, row,index) {中添加删除方法