return 语句是在finally之后进行的,如果try中有return ,那么他并不会马上就返回,而是指导finally结束之后才执行返回。如果finaly里面有新的return 那这个新的return将会覆盖原来的return。需要注意的是,在finally中是不能改变原有的返回值,只能替换原来的return。比如说在try 中有一个返回语句:return str;(假设现在str的值为“ abc”),你在finally中将str赋值为str=“abcd”,并没有重新写返回语句,那么最终返回的值依然是abc。
同样,finally也能覆盖catch中的,return。下面给你一段代码,运行一下你就知道了
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
public class TestTry {
public static void main(String...args){
System.out.println(getString());
}
public static String getString(){
String string ="";
try{
string="abc";
File file=new File("/ing.png");
InputStream is=new FileInputStream(file);
return string;
}catch (FileNotFoundException e){
return "abcd";
}
finally{
return "abcde";
}
}
} |