Qual é a lógica de execução de blocos try/catch/finally quando há "return"s envolvidos? Por exemplo: se eu uso um return no bloco try e um return no bloco finally, qual valor será devolvido? Eu queria entender o que é especificado pelo Java para este caso. Procurei no JLS e não encontrei nada específico.
O código abaixo, por exemplo, possui apenas os tais 2 returns. Quando rodado, ele incrementa o i dentro do try mas devolve o valor -1 do return do finally. Por que isso?!?!
class Finally {
static int i = 0;
public static void main (String args[]) {
System.out.println(teste());
System.out.println(i);
}
static int teste() {
try {
return i++;
} finally {
return -1;
}
}
}