Junior
Что такое ключевое слово final и метод finalize в Java, и в чем их отличие?
sobes.tech AI
Atsakymas iš AI
Raktas žodis final naudojamas pakeitimų apribojimui:
- Kintamųjų: kintamojo reikšmė negali būti pakeista po inicializacijos.
- Metodų: metodas negali būti perrašytas pogrupyje.
- Klasės: klasė negali būti paveldima.
Metodas finalize() yra Object klasės metodas, kuris kviečiamas šiukšlių surinkėjo prieš ištrindamas objektą iš atminties, suteikdamas paskutinę galimybę išvalyti išteklius. Šio metodo kvietimas nėra garantuotas:
// Pavyzdys `final` naudojimo
final int CONSTANT_VALUE = 100;
// CONSTANT_VALUE = 200; // Klaidų kompiliatorius
class BaseClass {
final void finalMethod() {
// Metodų turinys
}
}
class DerivedClass extends BaseClass {
// @Override
// void finalMethod() { // Klaidų kompiliatorius, metodas `final`
// // Metodų turinys
// }
}
final class FinalClass {
// Klasės turinys
}
// class AnotherClass extends FinalClass { // Klaidų kompiliatorius, negalima paveldėti `final` klasės
// // Klasės turinys
// }
// Pavyzdys `finalize`
class Resource heavyResource; // Tam tikras išteklius
class MyObject {
public MyObject() {
heavyResource = new Resource(); // Išteklių inicializacija
}
@Override
protected void finalize() throws Throwable {
try {
// Išteklių valymas prieš objekto ištrynimą
if (heavyResource != null) {
heavyResource.release();
}
} finally {
super.finalize(); // Svarbu iškviesti tėvo `finalize`
}
}
}
Skirtumai:
| Savybė | final | finalize() |
|---|---|---|
| Paskirtis | Pakeitimų apribojimas (nepakitumas, perrašymo/ paveldėjimo draudimas) | Išteklų valymas prieš objekto ištrynimą šiukšlių surinkėjo |
| Taikoma | Kintamiesiems, metodams, klasėms | Object klasės metodui |
| Kviečiama | Niekada, tai modifikatorius | Kviečiama šiukšlių surinkėjo (be garantijos) |
| Raktažodis | Taip | Ne, tai įprastas metodas |