去年笔试的时候遇到的题,当时就不太确定,面试的时候面试官说你回去写写代码试试,然而饿哦只是看了看书,直到今天才总结出来,把所有的代码补上了。
1.try-catch-finally结构后+return
(1)try中无异常
public class Test {
public static void main(String[] args){
String test = test();
System.out.println("test:"+test);
}
private static String test() {
try{
System.out.println("try");
}catch(Exception e){
System.out.println("catch");
}finally{
System.out.println("finally");
}
return "abc";
}
}
执行结果:
try
finally
test:abc
(2)try中有异常
private static String test() {
try{
System.out.println("try");
String str=null;
str.toString();
}catch(Exception e){
System.out.println("catch");
}finally{
System.out.println("finally");
}
return "abc";
}
执行结果:
try
catch
finally
test:abc
2.try{ return; }catch(){} finally{} +return
(1)try无异常
public class Test {
public static void main(String[] args){
String test = test();
System.out.println("test:"+test);
}
private static String test() {
try{
System.out.println("try");
return "123";
}catch(Exception e){
System.out.println("catch");
}finally{
System.out.println("finally");
}
return "abc";
}
}
运行结果:
try
finally
test:123
(2)try有异常
public class Test {
public static void main(String[] args){
String test = test();
System.out.println("test:"+test);
}
private static String test() {
try{
System.out.println("try");
String str=null;
str.toString();
return "123";
}catch(Exception e){
System.out.println("catch");
}finally{
System.out.println("finally");
}
return "abc";
}
}
运行结果:
try
catch
finally
test:abc
3.try{ } catch(){return;} finally{} +return;
public class Test {
public static void main(String[] args){
String test = test();
System.out.println("test:"+test);
}
private static String test() {
try{
System.out.println("try");
String str=null;
str.toString();
}catch(Exception e){
System.out.println("catch");
return "456";
}finally{
System.out.println("finally");
}
return "abc";
}
}
运行结果:
try
catch
finally
test:456
4.try{ return; }catch(){} finally{return;}
(1)try无异常
public class Test {
public static void main(String[] args){
String test = test();
System.out.println("test:"+test);
}
private static String test() {
try{
System.out.println("try");
return "123"
}catch(Exception e){
System.out.println("catch");
}finally{
System.out.println("finally");
return "789"
}
}
}
运行结果:
try
finally
test:789
(2)try有异常
public class Test {
public static void main(String[] args){
String test = test();
System.out.println("test:"+test);
}
private static String test() {
try{
System.out.println("try");
String str=null;
str.toString();
return "123";
}catch(Exception e){
System.out.println("catch");
}finally{
System.out.println("finally");
return "789";
}
}
}
运行结果:
try
catch
finally
test:789
5.try{} catch(){return;}finally{return;}
public class Test {
public static void main(String[] args){
String test = test();
System.out.println("test:"+test);
}
private static String test() {
try{
System.out.println("try");
String str=null;
str.toString();
}catch(Exception e){
System.out.println("catch");
return "456";
}finally{
System.out.println("finally");
return "789";
}
}
}
运行结果:
try
catch
finally
test:789
6.try{ return;}catch(){return;} finally{return;}
(1)try无异常
public class Test {
public static void main(String[] args){
String test = test();
System.out.println("test:"+test);
}
private static String test() {
try{
System.out.println("try");
return "123";
}catch(Exception e){
System.out.println("catch");
return "456";
}finally{
System.out.println("finally");
return "789";
}
}
}
运行结果:
try
finally
test:789
(2)try有异常
public class Test {
public static void main(String[] args){
String test = test();
System.out.println("test:"+test);
}
private static String test() {
try{
System.out.println("try");
String str=null;
str.toString();
return "123";
}catch(Exception e){
System.out.println("catch");
return "456";
}finally{
System.out.println("finally");
return "789";
}
}
}
运行结果:
try
catch
finally
test:789
总结:
(1)若finally{}中有return,这个先被执行,其余的return都会被屏蔽掉不能执行(当然这种情况下finally{}后就没有return语句了)
(2)若finally{}中无return,这个时候return语句的优先执行的就是try里面,try里面没有return,又进入异常了,就执行catch里面的return,若try,catch,都没有return,就执行finally{}以后的return语句。