Junior
Что такое ключевое слово final и метод finalize в Java, и в чем их отличие?
sobes.tech AI
Odpowiedź od AI
Ključna riječ final se koristi za ograničavanje modifikacije.
- Za varijable: vrijednost varijable ne može se promijeniti nakon inicijalizacije.
- Za metode: metoda se ne može prepisati u podklasi.
- Za klase: klasa se ne može naslijediti.
Metoda finalize() je metoda klase Object, koja se poziva od strane sakupljača smeća neposredno prije uklanjanja objekta iz memorije, pružajući posljednju priliku za izvršavanje operacija čišćenja resursa. Nema garancije da će se ta metoda pozvati.
// Primjer korištenja final
final int CONSTANT_VALUE = 100;
// CONSTANT_VALUE = 200; // Greška pri kompilaciji
class BaseClass {
final void finalMethod() {
// Tijelo metode
}
}
class DerivedClass extends BaseClass {
// @Override
// void finalMethod() { // Greška pri kompilaciji, metoda final
// // Tijelo metode
// }
}
final class FinalClass {
// Tijelo klase
}
// class AnotherClass extends FinalClass { // Greška pri kompilaciji, ne može naslijediti finalnu klasu
// // Tijelo klase
// }
// Primjer korištenja finalize
class Resource heavyResource; // Pretpostavlja se neka resurs
class MyObject {
public MyObject() {
heavyResource = new Resource(); // Inicijalizacija resursa
}
@Override
protected void finalize() throws Throwable {
try {
// Čišćenje resursa prije uklanjanja objekta
if (heavyResource != null) {
heavyResource.release();
}
} finally {
super.finalize(); // Važno je pozvati finalize roditeljske klase
}
}
}
Razlike:
| Značajka | final | finalize() |
|---|---|---|
| Svrha | Ograničiti modifikaciju (nepromjenjivost, zabrana prepisivanja/korištenja nasljeđivanja) | Čišćenje resursa prije nego što ga sakupljač smeća ukloni |
| Primjenjuje se na | Varijable, metode, klase | Metoda klase Object |
| Poziva se | Ne poziva se, to je modifikator | Poziva ga sakupljač smeća (bez garancije) |
| Ključna riječ | Da | Ne, to je obična metoda |