try catch 经常用,但是对于一些特殊情况没有写代码测试过,今天来试一试。
1.正常情况
结论:代码按照顺序执行,没有特殊情况。
public static void main(String[] args) throws UnknownHostException {
Integer ff = testFinally();
System.out.println("ff:"+ff);
}
static Integer testFinally(){
Integer integer = new Integer("123");
try {
integer = new Integer("124");
System.out.println("1:"+integer);
return integer;
} catch (Exception e){
integer = new Integer("125");
System.out.println("2:"+integer);
//return integer;
} finally {
integer = 126;
System.out.println("3:"+integer);
//return integer;
}
integer = new Integer("127");
return integer;
}
2.finally中有 return语句
结论:finally之后就不可以写代码了,但是依然没有什么特殊情况。
static Integer testFinally(){
Integer integer = new Integer("123");
try {
integer = 124;
System.out.println("1:"+integer);
//return integer;
} catch (Exception e){
integer = 125;
System.out.println("2:"+integer);
//return integer;
} finally {
integer = 126;
System.out.println("3:"+integer);
return integer;
}
//integer = 127;
//return integer;
}
3.try 或 catch中有renturn语句
结论:在return之前会先执行finally内的语句,但是对于return要返回的对象,finally中修改的结果并不会被返回,而是返回finally执行之前的结果。
即使finally中也有return语句,也是返回try中return的结果。
public static void main(String[] args) throws UnknownHostException {
Integer ff = testFinally();
System.out.println("ff:"+ff);
}
static Integer testFinally(){
Integer integer = new Integer("123");
try {
integer = 124;
System.out.println("1:"+integer);
return integer;
} catch (Exception e){
integer = 125;
System.out.println("2:"+integer);
//return integer;
} finally {
integer = 126;
System.out.println("3:"+integer);
//return integer;
}
integer = 127;
return integer;
}
总结:如果遇到需要再try中return的情况,finally就不要修改返回值了,因为在返回值中不会生效。
finally一般都是用来关闭资源和一些必须做的收尾,而不是逻辑代码。
自己写的测试代码和一些理解,如果有错误,希望在评论区指正,我会把错误的地方改掉。