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 | Sí | No, es un método ordinario |