Junior
Что такое ключевое слово final и метод finalize в Java, и в чем их отличие?
sobes.tech MI
Válasz az MI-től
A final kulcsszó a módosítás korlátozására szolgál.
- Változók esetén: a változó értéke nem módosítható az inicializálás után.
- Metódusok esetén: a metódus nem írható felül az alosztályban.
- Osztályok esetén: az osztály nem örökölhető.
A finalize() a Object osztály egyik metódusa, amelyet a szemétgyűjtő hív meg közvetlenül az objektum memória-ból való eltávolítása előtt, utolsó lehetőségként a erőforrások tisztítására. Nincs garancia arra, hogy ez a metódus meghívásra kerül.
// A final használatának példája
final int CONSTANT_VALUE = 100;
// CONSTANT_VALUE = 200; // Fordítási hiba
class BaseClass {
final void finalMethod() {
// A metódus törzse
}
}
class DerivedClass extends BaseClass {
// @Override
// void finalMethod() { // Fordítási hiba, final metódus
// // A metódus törzse
// }
}
final class FinalClass {
// Osztály törzse
}
// class AnotherClass extends FinalClass { // Fordítási hiba, nem örökölhető final osztályból
// // Osztály törzse
// }
// A finalize() használatának példája
class Resource heavyResource; // Egy erőforrás
class MyObject {
public MyObject() {
heavyResource = new Resource(); // Erőforrás inicializálása
}
@Override
protected void finalize() throws Throwable {
try {
// Az erőforrás tisztítása az objektum eltávolítása előtt
if (heavyResource != null) {
heavyResource.release();
}
} finally {
super.finalize(); // Fontos meghívni a szülő finalize() metódusát
}
}
}
Különbségek:
| Jellemző | final | finalize() |
|---|---|---|
| Cél | A módosítás korlátozása (változhatatlanság, felülírás/öröklés tilalma) | Erőforrások tisztítása az objektum eltávolítása előtt a szemétgyűjtő által |
| Alkalmazásra kerül | Változók, metódusok, osztályok | Az Object osztály metódusa |
| Hívásra kerül | Nem hívódik meg, csak módosító | A szemétgyűjtő hívja meg (garancia nélkül) |
| Kulcsszó | Igen | Nem, ez egy szokásos metódus |