Step 1: In Java the finally block always runs before the method actually hands back control, even when the try block has already prepared a return value.
Step 2: When the try block hits its return, Java holds that value but still enters finally first.
Step 3: If finally has its own return, that new return replaces the earlier one. The value from try is thrown away.
Step 4: So the return inside finally is the one that takes effect. Answer is (C).