Java's return doesn't always. By using finally clauses, control flow may do very surprising things. Consider this loop:
for(;;) { try { return 1; } finally { break; } } return -1;What value does this snippet return? -1. Surprised? How about this little gem:
while (true) { try { return; } finally { continue; } }