Sobes.tech
Junior

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

sobes.tech AI

Respuesta de la IA

La palabra clave final se usa para restringir la modificación.

  • Para variables: no se puede cambiar el valor de la variable después de la inicialización.
  • Para métodos: no se puede sobrescribir el método en una subclase.
  • Para clases: no se puede heredar de la clase.

El método finalize() es un método de la clase Object, que es llamado por el recolector de basura justo antes de eliminar el objeto de la memoria, dando la última oportunidad para realizar operaciones de limpieza de recursos. No hay garantías de que este método sea llamado.

// Ejemplo de uso de final
final int CONSTANT_VALUE = 100;
// CONSTANT_VALUE = 200; // Error de compilación

class BaseClass {
    final void finalMethod() {
        // Cuerpo del método
    }
}

class DerivedClass extends BaseClass {
    // @Override
    // void finalMethod() { // Error de compilación, método final
    //     // Cuerpo del método
    // }
}

final class FinalClass {
    // Cuerpo de la clase
}

// class AnotherClass extends FinalClass { // Error de compilación, no se puede heredar de una clase final
//     // Cuerpo de la clase
// }
// Ejemplo de uso de finalize
class Resource heavyResource; // Se supone un recurso

class MyObject {
    public MyObject() {
        heavyResource = new Resource(); // Inicialización del recurso
    }

    @Override
    protected void finalize() throws Throwable {
        try {
            // Limpieza del recurso antes de eliminar el objeto
            if (heavyResource != null) {
                heavyResource.release();
            }
        } finally {
            super.finalize(); // Es importante llamar a finalize de la clase padre
        }
    }
}

Diferencias:

Característica final finalize()
Propósito Restringir la modificación (inmutabilidad, prohibición de sobrescribir/heredar) Limpieza de recursos antes de que el recolector de basura elimine el objeto
Se aplica a Variables, métodos, clases Método de la clase Object
Se llama No se llama, es un modificador Se llama por el recolector de basura (sin garantía)
Palabra clave No, es un método ordinario