Sobes.tech
Junior

Что такое ключевое слово final и метод finalize в Java, и в чем их отличие?

sobes.tech IA

Resposta da IA

A palavra-chave final é usada para restringir a modificação.

  • Para variáveis: o valor da variável não pode ser alterado após a inicialização.
  • Para métodos: o método não pode ser sobrescrito numa subclasse.
  • Para classes: a classe não pode ser herdada.

O método finalize() é um método da classe Object, que é chamado pelo coletor de lixo imediatamente antes de remover o objeto da memória, dando a última oportunidade de realizar operações de limpeza de recursos. Não há garantias de que este método seja chamado.

// Exemplo de uso de final
final int CONSTANT_VALUE = 100;
// CONSTANT_VALUE = 200; // Erro de compilação

class BaseClass {
    final void finalMethod() {
        // Corpo do método
    }
}

class DerivedClass extends BaseClass {
    // @Override
    // void finalMethod() { // Erro de compilação, método final
    //     // Corpo do método
    // }
}

final class FinalClass {
    // Corpo da classe
}

// class AnotherClass extends FinalClass { // Erro de compilação, não se pode herdar de uma classe final
//     // Corpo da classe
// }
// Exemplo de uso de finalize
class Resource heavyResource; // Supõe-se uma recurso

class MyObject {
    public MyObject() {
        heavyResource = new Resource(); // Inicialização do recurso
    }

    @Override
    protected void finalize() throws Throwable {
        try {
            // Limpeza do recurso antes de remover o objeto
            if (heavyResource != null) {
                heavyResource.release();
            }
        } finally {
            super.finalize(); // É importante chamar finalize da classe pai
        }
    }
}

Diferenças:

Característica final finalize()
Propósito Restringir a modificação (imutabilidade, proibição de sobrescrever/herdar) Limpeza de recursos antes de o objeto ser removido pelo coletor de lixo
Aplicável a Variáveis, métodos, classes Método da classe Object
Chamada Não é chamado, é um modificador É chamado pelo coletor de lixo (sem garantias)
Palavra-chave Sim Não, é um método comum