These three names sound alike but are unrelated, which is exactly why interviewers ask about them together. final stops reassignment, overriding or inheritance, finally is a block that always runs after try, and finalize() was an old garbage collector hook. Use final for constants and values that must not change, and finally or try-with-resources for clean-up. Do not use finalize() in new code, since it is deprecated and may never run.