java中finally和return的执行顺序
注意:return的位置。。。 从这几个例子中可以看到,如果try之前没有有条件的return,则try..catch..finally语句块中的语句都是顺序执行(如果try中或者catch中
有return语句,那么先执行该return,然后执行finally, 如果finally中也有return, 该出的返回值会覆盖掉try 和 catch中的return值;
如果try..catch..finally语句块之后有return语句, try中、catch中、finally中都没有 (有条件的return 语句)先按顺序执行到finally,
最后return, 如果在try中或者catch中有 (有条件的return)那么先执行该return, 然后执行finally),否则即在进入try语句块之前返回就不会执行try语句 //finaly 先执行, return 后执行
public class Test{
public static void main(String[] args){
System.out.print(tt());
}
public static int tt(){
int b = 23;
try{
System.out.println("yes"); }catch(Exception e){
System.out.println("error : " + e);
}finally {
if(b>25){
System.out.println("b>25 : "+b);
}
System.out.println("finally"); }
return b+=88;
}
} //先执行第一个return, 然后执行finally public class Test{
public static void main(String[] args){
System.out.print(tt());
}
public static int tt(){
int b = 23;
try{
System.out.println("yes");
return b;
}catch(Exception e){
System.out.println("error : " + e);
}finally {
if(b>25){
System.out.println("b>25 : "+b);
}
System.out.println("finally");
return b+88;
} }
} //在try中增加一个有条件的异常抛出,然后其中的return语句被忽略
public class Test{
public static void main(String[] args){
System.out.print(tt());
}
public static int tt(){
int b = 23;
try{
System.out.println("yes");
if(b==23)
throw new Exception();
return b+=123;
}catch(Exception e){
System.out.println("error : " + e);
}finally {
if(b>25){
System.out.println("b>25 : "+b);
}
System.out.println("finally"); }
return b+=88;
}
} //finally中的返回值将覆盖try中的return返回值
public class Test{
public static void main(String[] args){
System.out.print(tt());
}
public static int tt(){
int b = 23;
try{
System.out.println("yes");
return b;
}catch(Exception e){
System.out.println("error : " + e);
}finally {
if(b>25){
System.out.println("b>25 : "+b);
}
System.out.println("finally");
return b+=88;
}
}
} //cathch中的return 也会被finally中的return覆盖
public class Test{
public static void main(String[] args){
System.out.print(tt());
}
public static int tt(){
int b = 23;
try{
System.out.println("yes");
throw new Exception();
}catch(Exception e){
System.out.println("error : " + e);
return b;
}finally {
if(b>25){
System.out.println("b>25 : "+b);
}
System.out.println("finally");
return b+=88;
}
}
} //直接返回,下面不再执行try..catch...finally语句块
public class Test{
public static void main(String[] args){
System.out.print(tt());
}
public static int tt(){
int b = 23;
if(b==23) return b;
try{
System.out.println("yes");
throw new Exception();
}catch(Exception e){
System.out.println("error : " + e);
return b;
}finally {
if(b>25){
System.out.println("b>25 : "+b);
}
System.out.println("finally");
return b+=88;
}
}
}
java中finally和return的执行顺序的更多相关文章
- 理清Java中try-catch-finally带return的执行顺序
前言:try-catch-finally带return和异常时,它们之间执行顺序问题是留下来的一个小疑问,今天搞清楚它们 第一种情况:无异常 //1.try-catch-finally都带有retur ...
- java中子类继承父类程序执行顺序
java中子类继承父类程序执行顺序 FatherTest.java public class FatherTest { private String name; public FatherTest() ...
- java中子类继承父类程序执行顺序问题
Java中,new一个类的对象,类里面的静态代码块.非静态代码.无参构造方法.有参构造方法.类的一般方法等部分,它们的执行顺序相对来说比较简单,用程序也很容易验证.比如新建一个测试父类. public ...
- java中静态初始化块的执行顺序
在java中,其应该是先于所有的方法执行. 下面是测试代码: public class Test1 { static{ System.out.println("执行静态初始化块test1.. ...
- Java中父类和子类代码执行顺序
执行顺序:父类静态块-->子类静态块-->父类非静态块-->父类构造方法-->子类非静态块-->子类构造方法 当父类或子类中有多个静态方法时按在代码中的顺序执行 pack ...
- Java中try catch finally的执行顺序问题
finally 语句块是在 try 或者 catch 中的 return 语句之前执行的.更加一般的说法是,finally 语句块应该是在控制转移语句之前执行,控制转移语句除了 return 外,还有 ...
- 转:Java中finally和return的执行关系
finally可以分两方面理解 1.执行时机问题.finally总会执行(除非是System.exit()),正常情况下在try后执行,抛异常时在catche后面执行 2.返回值问题.可以认为try( ...
- Java中四大代码块的执行顺序(附code)
验证证的方法是写code,如下: public class test { static class A { public static String name = "hello"; ...
- 我敢说你不一定完全理解try 块,catch块,finally 块中return的执行顺序
大家好,今天我们来讲一个笔试和面试偶尔都会问到的问题,并且在工作中不知道原理,也会造成滥用. 大家可能都知道,try 块用来捕获异常,catch块是处理try块捕获的异常,finally 块是用来关闭 ...
随机推荐
- Latent semantic analysis note(LSA)
1 LSA Introduction LSA(latent semantic analysis)潜在语义分析,也被称为LSI(latent semantic index),是Scott Deerwes ...
- JavaScript中String的math方法与RegExp的exec方法的区别
1.exec是正则表达式的方法,方法参数为字符串.match为字符串的方法,参数为正则表达式对象. 2.match与exec都返回数组.如果调用exec方法的正则表达式没有分组内容,则返回第一个匹配的 ...
- MVC特性
MVC与ASP.NET MVC基础概念 MVC是Model-View-Controller的缩写. MVC将应用程序划分为3大组件:模型\视图\控制器. MVC不是ASP.NET所特有,它只是一种开发 ...
- caffe 在window下编译(windows7, cuda8.0,matlab接口编译)
1. 环境:Windows7,Cuda8.0,显卡GTX1080,Matlab2016a,VS2013 (ps:老板说服务器要装windows系统,没办法,又要折腾一番,在VS下编译好像在cuda8. ...
- Visual Studio 2010中的stdafx.h和targetver.h两个头文件是有什么用?
来自百度~stdafx.h中没有函数库,只是定义了一些环境参数,使得编译出来的程序能在32位的操作系统环境下运行. Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程 ...
- anyncTask的3个参数
AnyncTask异步处理数据并将数据应用到视图的操作场合 一 其中包含这几个方法 1 onPreExcute() 初始化控件,例如进度条2 doInBackground() 具体的执行动作请求数据 ...
- 解决VS2008 开发Windows Mobile 项目生成速度慢的问题(转)
最近用VS2008开发Windows Mobile程序,使用C#..NET Compact Framework,发现项目生成速度比较慢.用VS2008打开项目后,开始一段时间生成速度还能忍受,时间一长 ...
- 深入理解openstack网络架构(2)----Basic Use Cases
原文地址: https://blogs.oracle.com/ronen/entry/diving_into_openstack_network_architecture1 译文转自: http:// ...
- hadoop+hive使用中遇到的问题汇总
问题排查方式 一般的错误,查看错误输出,按照关键字google 异常错误(如namenode.datanode莫名其妙挂了):查看hadoop($HADOOP_HOME/logs)或hive日志 h ...
- windows系统下的第一个console程序
窗口+r 键,输入cmd,打开一个命令行窗口 切换到你的目标目录 输入 dotnet new dotnet会自动帮你创建3个文件. NuGet.Config文件主要定义了NuGet获取nupkg包时的 ...