Sobes.tech
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 კლასის მეთოდზე
კანცელაცია არ ხდება, ეს მოდიფიკატორია ხდება მტვრის შეგროვებლის მიერ (გარანტია არაა)
საკვანძო სიტყვა დიახ არა, ეს ჩვეულებრივი მეთოდია