Technically speaking, the
return in the try block won’t be ignored if a
finally block is defined, only if that finally block also includes a
It’s a dubious design decision that was probably a mistake in retrospect (much like references being nullable/mutable by default, and, according to some, checked exceptions). In many ways this behaviour is exactly consistent with the colloquial understanding of what
finally means – “no matter what happens beforehand in the
try block, always run this code.” Hence if you
return true from a
finally block, the overall effect must always to be to return true, no?
In general, this is seldom a good idiom, and you should use
finally blocks liberally for cleaning up/closing resources but rarely if ever return a value from them.