有一个代码:
private static int f (){
try {
return 1;
}
finally {
return 2;
}
}
public static final void main(String[] args) {
System.out.println(f());
}
OUTPUT: 2
似乎不言而喻,编译器命中后return 1应该结束方法并输出一个,因为方法是逐行执行的。但是编译器的行为有点奇怪,而不是返回一个,它属于该部分finally.
问题:编译器如何真正“看到”代码?也许他认为这个街区try是来自街区的呼唤finally?像这样:
int finallyCompilator(){
int tryCompilator();
return 2; //Здесь код метода finally
}
tryCompilator(){
return 1; //Здесь код метода try
}
但即便如此,编译器将如何“看到”catch 块(如果有的话)还不清楚?



