Junior
Что такое ключевое слово final и метод finalize в Java, и в чем их отличие?
sobes.tech AI
პასუხი AI-სგან
საკვანძო სიტყვა final გამოიყენება ცვლილების შეზღუდვისთვის:
- მნიშვნელობებისთვის: მნიშვნელობა არ შეიძლება შეიცვალოს ინიციალიზაციის შემდეგ:
- მეთოდებისთვის: მეთოდი არ შეიძლება გადაფაროს ქვესკლასში:
- კლასებისთვის: კლასი არ შეიძლება მემკვიდრეობით მიიღოს:
მეთოდი finalize() არის Object კლასის მეთოდი, რომელიც იძახება მტვრის შეგროვებლის მიერ ობიექტის მეხსიერებიდან ამოღების წინ, მისცემს ბოლო შესაძლებლობას რესურსების გაწმენდისთვის. ამ მეთოდის გამოძახება გარანტირებული არ არის:
// გამოყენების მაგალითი `final`
final int CONSTANT_VALUE = 100;
// CONSTANT_VALUE = 200; // კომპილაციის შეცდომა
class BaseClass {
final void finalMethod() {
// მეთოდის სხეული
}
}
class DerivedClass extends BaseClass {
// @Override
// void finalMethod() { // კომპილაციის შეცდომა, მეთოდი `final`
// // მეთოდის სხეული
// }
}
final class FinalClass {
// კლასის სხეული
}
// class AnotherClass extends FinalClass { // კომპილაციის შეცდომა, არ შეიძლება მემკვიდრეობა `final` კლასიდან
// // კლასის სხეული
// }
// გამოყენების მაგალითი `finalize`
class Resource heavyResource; // რაიმე რესურსი
class MyObject {
public MyObject() {
heavyResource = new Resource(); // რესურსის ინიციალიზაცია
}
@Override
protected void finalize() throws Throwable {
try {
// რესურსის გაწმენდა ობიექტის წაშლის წინ
if (heavyResource != null) {
heavyResource.release();
}
} finally {
super.finalize(); // მნიშვნელოვანია გამოიძახოს მშობლის `finalize`
}
}
}
შეთავაზებები:
| მახასიათებელი | final | finalize() |
|---|---|---|
| მიზანი | ცვლილების შეზღუდვა (შეუცვლელობა, გადაფარვა/მემკვიდრეობა აკრძალულია) | რესურსების გაწმენდა ობიექტის წაშლის წინ მტვრის შეგროვებლის მიერ |
| მოყენება | ცვლადებზე, მეთოდებზე, კლასებზე | Object კლასის მეთოდზე |
| კანცელაცია | არ ხდება, ეს მოდიფიკატორია | ხდება მტვრის შეგროვებლის მიერ (გარანტია არაა) |
| საკვანძო სიტყვა | დიახ | არა, ეს ჩვეულებრივი მეთოდია |