public class TestFinally {
static int i;
public static void main(String[] args) {
System.out.println("程序执行至main()时i的值为:"+returnValue());
}
public static int returnValue(){
i=0; // L1
try{
i = 1; // L2
return i = i + 5; // L3
} finally {
i = 4; // L4
System.out.println("程序执行至finally时i的值为:"+i);
}
}
}
程序执行至main()时i的值为6,为什么不是9.
static int i;
public static void main(String[] args) {
System.out.println("程序执行至main()时i的值为:"+returnValue());
}
public static int returnValue(){
i=0; // L1
try{
i = 1; // L2
return i = i + 5; // L3
} finally {
i = 4; // L4
System.out.println("程序执行至finally时i的值为:"+i);
}
}
}
程序执行至main()时i的值为6,为什么不是9.
return i = i + 5; // L3
到这里,i的值是6
所以return 会记住,它要返回6所以就算你在finally里面改变了i的值,对return也不会有影响!
public static void main(String args[])
{
System.out.println((new StringBuilder("\u7A0B\u5E8F\u6267\u884C\u81F3main()\u65F6i\u7684\u503C\u4E3A\uFF1A")).append(returnValue()).toString());
} public static int returnValue()
{
i = 0;
int j;
i = 1;
j = i += 5;
i = 4;
System.out.println((new StringBuilder("\u7A0B\u5E8F\u6267\u884C\u81F3finally\u65F6i\u7684\u503C\u4E3A\uFF1A")).append(i).toString());
return j;
Exception exception;
exception;
i = 4;
System.out.println((new StringBuilder("\u7A0B\u5E8F\u6267\u884C\u81F3finally\u65F6i\u7684\u503C\u4E3A\uFF1A")).append(i).toString());
throw exception;
} static int i;