метод за финализиране в Java

Възможен дубликат:
Защо методът finalize() в java.lang.Object е защитен?

Методът за финализиране е дефиниран със защитен обхват, тогава как е възможно някой друг обект, като например събирача на отпадъци, да може да го извика.


person shreyasva    schedule 03.03.2011    source източник
comment
докато GC не използва този механизъм (той играе по свои собствени правила), само защото методът е частен, не означава, че не можете да го изпълните дори извън класа, вижте AccessibleObject.setAccessible(boolean); Това важи и за полетата за достъп. Модификаторите за достъп са за контролиране на разумното използване на клас.   -  person MeBigFatGuy    schedule 03.03.2011


Отговори (4)


Тъй като събирачът на боклук е част от спецификацията на езика и следователно може да прави всичко, което спецификацията на езика казва, че може.

person Jörg W Mittag    schedule 03.03.2011

protected не е същото като private и събирачът на боклук може да има достъп до него, дори ако е частен.

Защо е методът finalize() в java.lang. Защитен обект?

person Brandon Frohbieter    schedule 03.03.2011


От гледна точка на спецификацията на езика на Java, събирачът на отпадъци не е обект и не се управлява от нормалните правила за достъп. Той е „част от JVM“ и може да прави неща, които обикновеният Java код не може. (Наистина, вероятно изобщо не е реализиран като Java код!)

Помисли за това. Ако GC трябваше да отговаря на правилата за достъп, тогава той нямаше да има достъп до private полета на обекти по време на фазата на маркиране и следователно не можеше да определи дали обектите са достъпни. С други думи, няма да може да изпълни изискванията на JLS за управление на паметта.

person Stephen C    schedule 03.03.2011