C, PHP, VB, .NET

Дневникът на Филип Петров


Архив за октомври, 2009

* Изключения дефинирани от потребителя

Публикувано на 21 октомври 2009 в раздел ПИК3 Java.

Вече се запознахме подробно как се хвърлят изключения в Java. Веднага остава въпроса „можем ли ние сами да си дефинираме изключения“. Отговорът е положителен.

Всичко, което трябва да направите при дефиниране на изключение е да създадете клас, който наследява клас Exception: Прочети още…

.

 


* Wait, notify и notifyAll

Публикувано на 19 октомври 2009 в раздел ПИК3 Java.

Вече се запознахме с методът sleep() за нишки в Java, както и възможността да прекъснем „спането“ на нишката чрез метод interrupt().  Използването на метод sleep() всъщност прехвърля текущата нишка в „Not Runnable“ статус за определен период от време и по този начин дава процесорно време на другите нишки. Важно е да се спомене, че ако методът, който е извикал sleep(), е синхронизиран (synchronized), никой не може да достъпи обектите в него по време на неговия „sleep“ период! Извикването на „interrupt()“ за тази нишка ще прекъсне sleep() преждевременно.

Когато имаме обект (говорим за който и да е обект създаден с оператор new), разполагаме с нестатичен метод Object.wait(). Този метод на пръв поглед предизвиква същия ефект както Thread.sleep() – прехвърля текущата нишка (тази, която е извикала метода) в „Not Runnable“ статус за определено време. Такъв обект се нарича „заключващ обект“ за нишката. Първата разлика е, че Object.wait() може да бъде извикан само в синхронизиран метод. Втората разлика е, че Object.wait() може да приспи нишката за неопределено време, докато Thread.sleep() е с фиксирано. Освен това sleep() е статичен метод – по-правилно е да го извикваме чрез Thread.sleep(), а не чрез инстанция на обект. Прочети още…

.

 


* Синхронизация на нишки

Публикувано на 17 октомври 2009 в раздел ПИК3 Java.

Когато имаме многонишково приложение, ние много често работим и със споделени ресурси. Нека демонстрираме с един пример – имаме масив с наредени числа. Имаме две нишки – такава, която променя числата с произволни и такава, която сортира числата по големина: Прочети още…

.

 


* Ревю – 200

Публикувано на 17 октомври 2009 в раздел Музика.

Днес бях много приятно изненадан от една нова песен на Васил Гюров (формално на Ревю). По принцип откакто Милена Славова започна все по-малко да присъства в Ревю групата започна да наподобява като стил на Нова Генерация (приемете го като мое лично мнение). В това няма нищо нелогично естествено, тъй като все пак и Ревю и Нова Генерация имаха едни и същи корени. Все пак радващото е, че Васко продължава да прави нови и все по-качествени парчета. Личи си когато някой си върши работата със сърце, а не от комерсиални подбуди.

В песента „200“ Гюров е събрал доста впечатляващ състав – Кирил Маричков (Щурците), Денис Ризов (една от най-любимите ми групи – Ахат) и Иван Лечев (ФСБ)! Прекрасното акустично звучене (типично за Ревю) е запазено, което няма как да не ме зарадва. Интересното е, че песента освен всичко е и доста тежка. Може би се дължи отчасти на доста многото бас от инструментите, но според мен най-главна е цялостната атмосфера на песента. Ако някой от вас обича такъв стил леко меланхолична музика, то съм сигурен, че ще оцени много високо тази песен: Прочети още…

.

 


* Нишки

Публикувано на 16 октомври 2009 в раздел ПИК3 Java.

Понятието „нишки“ можете да разгледате като „разклонение на една програма на подпрограми, които работят едновременно“. Представете си например един HTTP сървър. Работата, която извършва е да прехвърля данните поискани от даден клиент. Когато обаче има повече от един клиент едновременно, то ако нямаме „многонишковост“ те трябва да се изчакват един друг на „опашка“. Ако имаме един клиент, който изтегля огромно количество информация, то всички останали би трябвало да го изчакват, а това определено не е уместно. Пускането на нишка за всеки един клиент означава, че ние ще обслужваме всички с равно количество процесорно време, независимо кой се е свързал с HTTP сървъра първи, кой втори и кой последен. Прочети още…

.

    Коментарите са изключени за Нишки
 


* Константи в Java

Публикувано на 15 октомври 2009 в раздел ПИК3 Java.

Константите в Java се създават чрез ключова дума „final“. Както е по дефиниция – константите задължително се инициализират и след това не могат да бъдат променяни:

   final int x = 5;
   // x = 6; <<< Не е възможно

В Java обаче е възможно константата само да се декларира и да бъде инициализирана по-късно: Прочети още…

.

 


* Garbage Collection

Публикувано на 15 октомври 2009 в раздел ПИК3 Java.

В програмният език C++ съществува понятието „деструктор“ – метод който „почиства“ преди даден обект да бъде унищожен. Такъв метод е често използван там, защото в C++ програмистът сам контролира кога един обект да бъде изтрит (чрез „обратния“ на new оператор delete). В Java програмистът няма контрол над унищожението на обектите. Цялата тежест над това е прехвърлена върху т.нар. Garbage Collector.

Добавено през 2023 г.: В по-стари версии на Java (преди JDK 18) имаше аналогия на „почистващ метод“ (деструктор) – това е метод „finalize()“. Именно той се извикваше в момента, в който даден обект е изтрит от Garbage Collector. Долният код вече не е актуален, но ще го оставя за историческа справка.

Програмистите, които преминават от C++ към Java ще забележат бързо, че Garbage Collector не се извиква често. При по-малките програми даже е възможно да не бъде извикан въобще. Ето ви един пример: Прочети още…

.

 


* Статични вложени член класове

Публикувано на 15 октомври 2009 в раздел ПИК3 Java.

Вече се запознахме с не-статични вложени член класове. За дефинирането на понятието „статичен вложен член клас“ е много подходяща аналогията с вече познатите статични методи. Нека си припомним главните характеристики на статичните методи:

  1. Те са общовалидни за всички инстанции на класа;
  2. Могат да бъдат извиквани без инстанция;
  3. Могат да променят и достъпват всички статични полета на класа;
  4. Не могат да променят или достъпват не-статични полета и методи на класа.

Абсолютно същите принципи са валидни и за статичните класове. Когато един вложен клас е статичен то той:

  1. Е общовалиден за всички инстанции на външния клас;
  2. Има достъп само до статичните полета и методи на своя външен клас;
  3. Може да бъде инициализиран без да е нужна инстанция на външния клас;
  4. Няма достъп до не-статичните полета и методи на своя външен клас.

Нека дадем един пример за клас, който има два вложени класа – статичен и не-статичен: Прочети още…

.

 


* Бране на ябълки

Публикувано на 15 октомври 2009 в раздел Семейни.

Миналата събота отидохме на вилата на бабата и дядото на Милена (приятелката ми), за да берем ябълки. Намира се във вилна зона близо до Перник и се стига по черен път. За щастие беше сухо и топло и нямаше проблеми с придвижването. Предлагам кратка фотогалерия… Прочети още…

.

 


* Анонимни класове в Java

Публикувано на 15 октомври 2009 в раздел ПИК3 Java.

„Анонимните“ класове са специален вид локални класове. Специалното при тях е, че те нямат специални имена и на тях винаги правим само една инстанция.

Нека вземем за пример изчисляването на дължината на хипутенизата на правоъгълен триъгълник. „Не-анонимно“ би било извикването на програмата:

    double a = 3;
    double b = 4;
    double c = Math.sqrt(a*a + b*b);
    System.out.println(c);

Защо обаче трябва да пазим променливата „c“ ако не я използваме повече в програмата след това? Ако тя не ни е нужна, то ние по-често изписваме: Прочети още…

.