Тем, что это даже синтаксически разные вещи. Как и вопрос о 
методах Object, это способ начать разговор.
finalize – метод-финализатор из 
Object, мы уже рассмотрели 
в предыдущих постах.
final – модификатор, который применяется к переменным, полям, методам и классам. Переменная или поле становится неизменяемым и требует 
инициализации. Финальный метод нельзя переопределить в наследниках. Финальный класс не может иметь наследников вообще. Используется для создания хорошего (
Effective Java Item 15) API по принципу наименьших привилегий.
Когда в методе используется локальная переменная внешней области видимости, она обязана быть 
effectively final. В этом случае ключевое слово 
final необязательно, но значение всё равно не должно меняться.
finally – часть языковой конструкции 
try-catch-finally.
Любое исключение, выброшенное из блока 
try переводит исполнение в самый соответствующий ему 
catch (при наличии). Этим продиктована необходимость располагать блоки 
catch в строгом порядке, от типа исключения-наследника, к родителю. В случае multicatch тот же порядок должен соблюдаться и внутри одного catch. 
Больше примеров про порядок. 
После выполнится блок 
finally. Выполняется он в любом случае, было исключение или нет. Типичное использование – освобождение ресурсов, обязательные завершающие действия.
Для требующих финализации классов («ресурсов») добавляется интерфейс 
AutoCloseable, повторяющийся код блока 
final выносится в метод 
close и вызывается неявно в конце 
try-with-resources. Если в этой конструкции присутствует и явный 
finally, он будет выполнен после.