"Здравей, Амиго! Чух, че Риши ти е обяснил нещо ново и вълнуващо?!"
— Точно така, Ким.
„Моята тема ще бъде не по-малко интересна. Искам да ви разкажа за това How класовете се зареждат в паметта.“
Класовете в Java са файлове на диска, които съдържат byte code, който е компorран Java code.
"Да аз помня."
Java машината не ги зарежда, ако не е необходимо. Веднага щом някъде в codeа има извикване на клас, Java машината проверява дали е заредена. И ако не, тогава го зарежда и инициализира.
Инициализирането на клас включва присвояване на стойности на всички негови статични променливи и извикване на всички статични блокове за инициализация.
„Това изглежда подобно на извикване на конструктор на обект. Но Howво е блок за статична инициализация?“
„Ако трябва да изпълните сложен code (например да заредите нещо от файл), за да инициализирате обекти, можем да го направим в конструктор. Статичните променливи обаче нямат тази възможност. Но тъй като нуждата все още остава, можете добавете блок or блокове за статична инициализация към класовете. Те са основно еквивалентни на статичните конструктори."
Ето How изглежда:
Код | Какво наистина се случва |
---|---|
|
|
Много прorча на това, което се случва, когато се извика конструктор. Дори съм го написал като (несъществуващ) статичен конструктор.
— Да, разбрах.
"Много добре."
GO TO FULL VERSION