Junior
Что такое ключевое слово final и метод finalize в Java, и в чем их отличие?
sobes.tech AI
Antwoord van AI
Het sleutelwoord final wordt gebruikt om modificaties te beperken.
- Voor variabelen: de waarde van de variabele kan niet worden gewijzigd nadat deze is geïnitialiseerd.
- Voor methoden: de methode kan niet worden overschreven in een subklasse.
- Voor klassen: de klasse kan niet worden geërfd.
De methode finalize() is een methode van de klasse Object, die wordt aangeroepen door de garbage collector vlak voordat het object uit het geheugen wordt verwijderd, en biedt de laatste mogelijkheid om bronnen op te schonen. Er is geen garantie dat deze methode wordt aangeroepen.
// Voorbeeld van gebruik van final
final int CONSTANT_VALUE = 100;
// CONSTANT_VALUE = 200; // Compileerfout
class BaseClass {
final void finalMethod() {
// Method body
}
}
class DerivedClass extends BaseClass {
// @Override
// void finalMethod() { // Compileerfout, final methode
// // Method body
// }
}
final class FinalClass {
// Class body
}
// class AnotherClass extends FinalClass { // Compileerfout, kan niet erven van een final klasse
// // Class body
// }
// Voorbeeld van gebruik van finalize
class Resource heavyResource; // Verondersteld een resource
class MyObject {
public MyObject() {
heavyResource = new Resource(); // Resource initialiseren
}
@Override
protected void finalize() throws Throwable {
try {
// Resource opschonen voordat het object wordt verwijderd
if (heavyResource != null) {
heavyResource.release();
}
} finally {
super.finalize(); // Het is belangrijk om finalize van de ouderklasse aan te roepen
}
}
}
Verschillen:
| Kenmerk | final | finalize() |
|---|---|---|
| Doel | Modificatie beperken (onveranderlijkheid, verbod op overschrijven/erfenis) | Resources opschonen voordat het object wordt verwijderd door de garbage collector |
| Toepasbaar op | Variabelen, methoden, klassen | Methode van de klasse Object |
| Wordt aangeroepen | Wordt niet aangeroepen, het is een modifier | Wordt aangeroepen door de garbage collector (geen garantie) |
| Trefwoord | Ja | Nee, het is een gewone methode |