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 |