Категория ‘ПИК-3 Java’

* Списъци, динамични масиви, стекове и опашки

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

1. Масиви: Когато се заговори за понятието „списък“ всеки начинаещ програмист моментално се досеща за най-често използваната в учебните примери структура – масив. Масивите представляват наредени елементи от един и същи тип данни (може да бъде както примитивен тип, така и данни от определен клас). Те са с константна дължина (т.е. точно определен брой елементи). Това е колкото полезно (няма опасност от „утечки на памет“), толкова и неудобно (трябва да се пазим от проблема с „препълване“, често се заделя повече памет отколкото е необходима, и др.). Можем да обобщим проблемите свързани с използването на масив в три точки: Прочети още…

.



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

Публикувано на 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() е с фиксирано. Освен това ако имаме Thread T, то T.sleep() ще „приспи“ нишката T, докато T.wait() ще приспи текущата нишка (тази, която е извикала метод T.wait()), докато някой друг не извика T.notify(). Прочети още…

.



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

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

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

.



* Нишки

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

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

.

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


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

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

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

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

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

.



* Garbage Collection и метод finalize()

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

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

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

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

.



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

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

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

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

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

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

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

.



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

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

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

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

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

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

.



* Локални класове в Java

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

„Локални“ класове са тези класове, които са дефинирани вътре в програмен блок. Досега знаем как да влагаме класове като членове на даден клас. Когато говорим за локални класове, то се има в предвид клас, който е създаден в тялото на метод. На пръв поглед това е доста странно и нетипично място за дефиниране на клас.

Първото и може би най-важно нещо, което трябва да знаем за локалните класове е, че те са валидни само и единствено в програмния блок, в който са дефинирани. Можете веднага да си направите аналогия с „локални променливи“. Прочети още…

.