try,catch,finally中的return如何影响代码的执行语序
2017-08-27 09:44
435 查看
1、如果try,catch,finally里面都没有return语句,正常执行顺序如下:
try代码块正常执行完成,继续执行finally代码块,最后执行finally后面的语句块;
try代码块执行出现异常,则转去执行catch块,catch块执行完后,再执行finally代码块,最后执行finally后面的语句块。
2、(1)如果finally里面有return,不管try、catch里面有没有return,finally语句块后面的代码都不会执行,编译器都会提示错误:Unreachable statement。
(2)如果try、catch块里面都有return,不管finally里面有没有return,finally语句块后面的代码都不会执行,编译器都会提示错误:Unreachable statement。
3、不管try、catch、finally里面有没有return,都会执行的组合是:try-finally 或者 try-catch-finally。如下代码中3处标记行号地方,每一个不管用咩用,都不影响最终输出结果。
4、在返回值方面,finally里面的return值会覆盖try、catch里面的return值。
public class Main {
public static void main(String[] args) throws Exception{
//Scanner scanner = new Scanner(System.in);//在线笔试用
System.out.println(getNum(0));
System.out.println(getNum(1));
System.out.println(getNum(2));
System.out.println(getNum(4));
}
/**
* 测试问题:在返回值方面:finally里面的return值会覆盖try,catch里面的return值
* @param num
* @return
*/
static int getNum(int num){
try{
int result=2/num;
return result;
}catch(Exception e){
return 0;
}finally {
if(num==0)
return -1;
if(num==1)
return 1;
}
}
}
输出结果:
try代码块正常执行完成,继续执行finally代码块,最后执行finally后面的语句块;
try代码块执行出现异常,则转去执行catch块,catch块执行完后,再执行finally代码块,最后执行finally后面的语句块。
import java.util.Scanner; public class Main { static String str=""; public static void main(String[] args) { //Scanner scanner = new Scanner(System.in);在线笔试代码用 test(0); System.out.println(str); str=""; test(1); System.out.println(str); } private static void test(int i){ try{ if(i==1) throw new Exception(); else { str+="111-"; //return; } }catch (Exception e){ str+="222-"; //return; }finally { str+="333-"; //return; } str+="444";//Unreacheable statement } }输出结果:
111-333-444 222-333-444
2、(1)如果finally里面有return,不管try、catch里面有没有return,finally语句块后面的代码都不会执行,编译器都会提示错误:Unreachable statement。
import java.util.Scanner; public class Main { static String str=""; public static void main(String[] args) { //Scanner scanner = new Scanner(System.in);在线笔试代码用 test(0); System.out.println(str); str=""; test(1); System.out.println(str); } private static void test(int i){ try{ if(i==1) throw new Exception(); else { str+="111-"; //return; } }catch (Exception e){ str+="222-"; //return; }finally { str+="333-"; return; } str+="444";//Unreacheable statement } }
(2)如果try、catch块里面都有return,不管finally里面有没有return,finally语句块后面的代码都不会执行,编译器都会提示错误:Unreachable statement。
import java.util.Scanner; public class Main { static String str=""; public static void main(String[] args) { //Scanner scanner = new Scanner(System.in);在线笔试代码用 test(0); System.out.println(str); str=""; test(1); System.out.println(str); } private static void test(int i){ try{ if(i==1) throw new Exception(); else { str+="111-"; return; } }catch (Exception e){ str+="222-"; return; }finally { str+="333-"; //return; } str+="444";//Unreacheable statement } }
3、不管try、catch、finally里面有没有return,都会执行的组合是:try-finally 或者 try-catch-finally。如下代码中3处标记行号地方,每一个不管用咩用,都不影响最终输出结果。
import java.util.Scanner; public class Main { static String str=""; public static void main(String[] args) { //Scanner scanner = new Scanner(System.in);在线笔试代码用 test(0); System.out.println(str); str=""; test(1); System.out.println(str); } private static void test(int i){ try{ if(i==1) throw new Exception(); else { str+="111-"; return;//1 } }catch (Exception e){ str+="222-"; return;//2 }finally { str+="333-"; return;//3 } //str+="444";//Unreacheable statement } }输出结果:
111-333- 222-333-
4、在返回值方面,finally里面的return值会覆盖try、catch里面的return值。
public class Main {
public static void main(String[] args) throws Exception{
//Scanner scanner = new Scanner(System.in);//在线笔试用
System.out.println(getNum(0));
System.out.println(getNum(1));
System.out.println(getNum(2));
System.out.println(getNum(4));
}
/**
* 测试问题:在返回值方面:finally里面的return值会覆盖try,catch里面的return值
* @param num
* @return
*/
static int getNum(int num){
try{
int result=2/num;
return result;
}catch(Exception e){
return 0;
}finally {
if(num==0)
return -1;
if(num==1)
return 1;
}
}
}
输出结果:
-1 1 1 0
相关文章推荐
- 有 Return 的情况下 Try Catch Finally的执行顺序(详细的代码以及解释)
- 有return的情况下try catch finally的执行顺序(最有说服力的总结)
- try catch finally与return的执行顺序
- 有return的情况下try catch finally的执行顺序
- try, catch, finally, return的执行顺序
- Java异常捕获之try-catch-finally-return的执行顺序.md
- Java异常处理机制以及try-catch-finally-return执行顺序
- 有return的情况下try catch finally的执行顺序(最有说服力的总结)
- 简单理解,当try中有return时finally是否会被执行,如何执行
- 有return的情况下try catch finally的执行顺序(最有说服力的总结)
- 有return的情况下try catch finally的执行顺序(最有说服力的总结)
- 转载 : 有return的情况下try catch finally的执行顺序(最有说服力的总结)
- 有return的情况下try catch finally的执行顺序
- 有return的情况下try catch finally的执行顺序的全面总结
- try catch finally return 的执行顺序
- Java中try-catch-finally-return的执行顺序
- 有return的情况下try catch finally的执行顺序
- 有return语句情况下,try-catch-finally的执行顺序
- 在有return的情况下try catch finally的执行顺序
- 在try/catch里return语句比finally语句先执行