top of page
Anchor 0
Anchor 1
Anchor 2
Anchor 3
Anchor 4
Anchor 5
Anchor 6
Anchor 8
Anchor 9
Anchor 10
Anchor 11
Anchor 12
Anchor 13
Anchor 14
Anchor 15
Anchor 16
Anchor 17
Anchor 18
Anchor 19
Anchor 20
Anchor 21
Anchor 22
Anchor 23
Anchor 24
Anchor 25
Anchor 26
Anchor 27
Anchor 28
Anchor 29
Anchor 30
Anchor 31
Anchor 32
Anchor 33
Anchor 34
Anchor 35

Јазикот Јава

 

Јава е најпопуларен програмски јазик. Се смета дека денес во Јава работат околу 10  (десет) милиони програмери.

Јава е развиен од James Gosling, Mike Sheridan и Patrick Naughton во фирмата Sun Microsystems во 1995 година. Многу брзо Јава станал попу-ларен поради можноста за правење т.н. мали апликации – аплети (програми кои се извршуваат на интернет преку веб-разгледувач). Во 1998/99 година се појавила подобрена верзија Јава 2, а наскоро и верзија за мобилни уреди –  Mobile Java. Денес, програмскиот јазик Јава работи на над 6 000 000 000 (шест милијарди) мобилни уреди, од кои 250 000 000 (двеста и педесет милиони телефони). Исто така, Јава работи на сите видови и типови компјутери – од играчки конзоли, таблети, лаптопи, па сè до суперкомпјутери.

Главни предности на јазикот Јава се:

  • Едноставен, пријателски (англ. friendly), јазик за објектно ориентирано програмирање. (Објектно ориентираните јазици го „пресликуваат“ ре-алниот свет од објекти во компјутерска програма.)

  • Независен од платформата, т .е. од оперативниот систем под кој работи компјутерот.

         Тоа се изразува со:  Write once, run anywhere/everywhere (WORA/WORE)

Програма напишана во Јава може да се извршува на компјутер кој работи под кој било оперативен систем. Значи, ако програмата работи на еден компјутер, не мора повторно да се преведува за да работи на друг компјутер. (Ова се постигнува на тој начин што изворната програма напишана во Јава се преведува во меѓукод т.н. бајт-код (англ. bytecode), кој потоа може да се извршува (интерпретира) на кој било компјутер со т.н. Јава виртуелна машина (англ. Java Virtual Machine – JVM).)

  • Јава користи интерпретатор (англ. interpreter). (Интерпретатор е преведувач кој директно преведува дел по дел од програмата во машин-ски јазик и ги извршува овие делови, т. е. не прави посебна извршна датотека како преведувачот.(англ. compiler)

  • Работи со голема ефикасност.

  • Овозможува истовремено и паралелно извршување на програмите.

Од 2007 година фирмата Sun Microsystems овозможила бесплатна дистрибуција на кодот на Јава.

До март 2023 година има објавено 20 верзии на програмскиот јазик Јава.

Најважна особина на Јава во однос на С++, битна за програмерите е: за изработка на иста програма во Јава е потребно двапати помалку време отколку во С++.

Мени

Елементи на јазикот Јава

 

Јазикот Јава има азбука, која е множеството на дозволени знаци (симболи):

  • Малите букви од англиската азбука: a –  z.

  • Големите букви од англиската азбука: A –  Z.

  • Цифрите: 0 –  9.

  • Специјалните знаци: ~ ! @ # $ % ^ & * ( ) –  + = { } [ ] : ; '...', "...", <> ? /

Од азбуката на Јава се формираат зборови кои може да бидат:

  • Клучни зборови (англ. keywords).

  • Бројни, симболички и текстуални константи.

  • Имиња (идентификатори).

  • Оператори.

Посебен вид симболи се одделувачите (сепараторите) со кои се одделуваат зборовите еден од друг.

Тоа се:

  • Празно место (бланко).

  • Нов ред.

  • Табулатор.

Како и сите виши про­грамски јазици така и Јава има своја граматика која ги содржи пра­вилата за градење зборови и наредби. Јава има одредено множество резервирани зборови (англ. reserved words) и уште едно множество зборови наречени идентификатори (англ. identificators). Иденти-фикаторите се зборови формирани од програмерите по одредени правила.

Со точно дефинирани комбинации на зборови и симболи се конструи­раат наредбите на јазикот. Притоа, се користат строги правила наречени синтаксички правила или само синтакса (англ. syntax) на јазикот. При преведување на програмата, со синтаксичките  правила се про­верува ис-правноста на секоја наредба.

Секоја наредба во програмата мора да има точно дефинирано значење и да предизвика точно дефинирани дејства. Значењето (смислата) на наредбите е наречено се­мантика (англ. semantics) на јазикот.

Мени

Програма во Јава

На слика 1 е дадена програмата Zdravo.java.

                                   Слика 1

Програмата печати на екранот:

Zdravo, kako ste?

Да ја објасниме секоја линија од програмата.

Линија 1, Линија 3, Линија 8: Празна линија.

Празните линии служат за поголема прегледност на програмата, а преведувачот ги игнорира.

Линија 2: Декларација на класа:

                public class Zdravo {

Секоја јава-програма има барем една класа (англ. class). Резервираниот збор class служи за декларација (англ. declaration) на класата. По зборот class, се наведува името на класата, во нашиот пример Zdravo.

Кога класата ја дефинира програмерот, таа се нарекува кориснички дефинирана класа (англ. user defined class).

Резервираните зборови во Јава започнуваат со мала буква. Имињата на класите (вообичаено) започнуваат со голема буква.

Резервираниот збор public е атрибут на класата.

Првиот дел од големите загради ( { ), по името на класата Zdravo, означува почеток на телото на класата (англ. class body). Тоа мора да заврши со вториот дел на големите загради ( } ). Во нашиот пример тоа е заградата во Линија 9. Линиите во телото на класата (од Линија 4 до Линија 7) се пишуваат вовлечени надесно (најчесто) за една табуларна позиција и тоа го нарекуваме назабување (англ. indentation).

Линија 4: Главната метода:

                public static void main(String[] args) {

Jава-програмите се состојат од методи. Метода е постапка (алгоритам) која по извршувањето дава резултати. На пример, метода за множење на два броја, метода за наоѓање квадратен корен од број итн. Секоја јава-апликација мора да има само една главна метода наречена main(), која мо-ра да биде декларирана, како што е во примерот. Зборот void значи дека методата main() не дава никаков резултат.

Забелешка: По името на методата, ќе ставаме мали загради за да се разликува тоа од истоимениот збор на променлива, на константа и сл.

Првиот дел од големите загради ( { ) по методата main() означува почеток на телото на методата. Телото на секоја метода завршува со вториот дел на големите загради ( } ), во нашиот пример тоа е заградата во Линија 7. Линиите во телото на методите, исто како и во телото на класите, се назабуваат.

Линија 5: Коментар:

                // TODO Auto-generated method stub

Добра програмерска практика е програмите да се коментираат. Затоа, препорачливо е на почетокот на секоја програма да се става коментар за тоа што работи програмата.

На пример, со коментарот:

       // Mojata prva programa Zdravo.java

Исто така, корисно е на почетокот на секоја класа и метода да се ставаат коментари.

Во дадената програма, Линија 5 не му кажува ништо на компјутерот и преведувачот не ја преведува. Затоа, таа линија се нарекува коментар. Коментар е текст наменет за поголема прегледност на програмата, кој е корисен за оној којшто го чита програмскиот код. Исто така, коментарите се корисни и за други програмери кои треба да ја доработат, изменат или подобрат програмата. Често се случува програмерот да внесе коментар во програмата за да може полесно да ја разбере кога подоцна самиот тој ќе ја разгледува.

Забележувате дека секој коментар започнува со две коси црти //. Значи, сè што ќе се напише по // до крајот на линијата претставува коментар.

При преведување на програмата, преведувачот ги игнорира (не ги преведува) коментарите.

Линија 6: Наредба за печатење цела линија:

       System.out.println("Zdravo, kako ste?");

Со оваа наредба на компјутерот му се наредува да го отпечати на екранот она што е ставено во наводници во малите загради, т. е. текстот Zdravo, kako ste?

Линија 7: } (вториот дел од големите загради) крај на методата main().

Линија 9: } (вториот дел од големите загради) крај на класата Zdravo.

Мени

Наредба за печатење

Линијата 6 од програмата на слика 1 е наредбата за печатење на текстот ставен во мали загради. Кој било текст ставен во наводници, во прог-рамските јазици се нарекува стринг (англ. string). Овој термин ќе го користиме во продолжение.

Со наредбата:

System.out.println(... );

се печати до крајот на линијата. Со следната наредба за печатење по неа, се печати во нова линија.

За да печатиме во продолжение во истата линија, се користи наредбата

System.out.print(...);

Односно, ако по оваа наредба, наредбата за печатење е System.out.print();  или System.out.println(... );, се печати во продолжение во истата линија.

На пример, излезот од програмата на слика 2 ќе биде:

             

                                   Слика 2

Како што забележуваме во отпечатениот излез, последниот збор од втората наредба и првиот збор од третата наредба се споени. За да се раз-делат, треба да се остави празно место на крајот на стрингот од втората наредба или на почетокот на стрингот од третата наредба.

Наредбите во линиите 6, 7, 8 и 9 од слика 2 понекогаш се нарекуваат и искази. Можете да забележите дека секој исказ завршува со знакот точка и запирка (;).

Во една линија може да се напишат повеќе наредби за печатење, при што тие треба да бидат одделени со знакот точка и запирка.

Ако наредбата за печатење е долга, можеме да ја префрлиме во следната линија со притискање на копчето Enter.

Бидејќи насловите на книгите се пишуваат во наводници, за да се отпечатат наводниците "...", пред нив се става спротивна коса црта,  т. е. \". На пример, во програмата од слика 3, стрингот "Kales Angja" треба да се напише "\"Kales Angja\"".

Исто така, за печатење на празна линија се задава командата:

System.out.println();

 

 

                                   Слика 3

Честопати, некој подолг стринг треба да го отпечатиме во повеќе линии. За таа цел се користи специјалната секвенца \n. На пример, ако сакаме да отпечатиме:

 

тоа може да се направи со една наредба:

System.out.println("Avtor na knigata\n\"Kales Angja\"\n e \nStale Popov");

Во Јава постојат повеќе т.н. излезни секвенци или. ескејп-секвенци (англ. escape sequences). Ќе наведеме неколку:

\n               Преминување во нова линија.

\”                Печатење наводници ".

\’                 Печатење полунаводници ’ .

\t                Преминување на следната табуларна позиција.

\\                Печатење спротивна коса црта \.

Со наредбите за печатење println и print можеме да отпечатиме и броеви, па дури и вредности на аритметички изрази, како што е покажано на слика 4.

                                   Слика 4

Гледаме дека изразите се ставаат во загради, додека за печатење на изразот по стрингот се става знакот +. Овој знак не е знак за собирање, туку знак за придружување во смисла на спојување (англ. concatenation) на два стринга. 

Мени

Имиња на податоци

 

Имињата (идентификаторите) на податоците во Јава може да бидат:

  • Клучните зборови.

  • Кориснички дефинирани имиња.

Идентификатор доаѓа од зборот идентификација, што значи утврдување на идентитетот. Имињата на податоците служат за утврдување на тоа кој е тој податок и затоа се нарекуваат идентификатори.

Клучните зборови не може да се користат како идентификатори.

Резервираните зборови имаат специфично значење и примена. Такви се: const, double, float, int, unsigned, break, continue, else, for и други.

Кориснички дефинираните имиња се формираат од корисниците (програмерите) со почитување на следниве правила:

  • Името започнува со буква или долна црта (_) (англ. underscore) или со знакот $. 

  • Должината на името е неограничена.

  • Малите и големите букви се разликуваат. На пример, jas и Jas се различни.

  • Името може да содржи и мали и големи букви од абецедата, цифри 0 –  9, долна црта _ и знак $.

  • Името не смее да содржи празно место.

  • Името не смее да содржи специјален знак, како: !, @, #, ^  итн.

  • Името не смее да биде клучен или резервиран збор.

Вообичаена практика во Јава е имињата да започнуваат со мала буква, а ако тоа содржи и други зборови, тие се пишуваат со голема буква. На пример, prvaPrograma, kvadratenKoren, smetkaVoBanka, imeIPrezimeNaUcenik итн.

Друга практика е користењето на цели зборови наместо кратенки.

На пример, правилни имиња на податоците во Јава се:

i, ajTi, i2j3, imeNaKuce, ocenkaPoInformatika, _ime, BROJ_PI.

Неправилни имиња на податоци во Јава се:

5_ka                                        - почнува со цифра.

dol@ri                                     - содржи специјален знак @.

char                                        - клучен збор.

jaSakam Makedonija      - има празно место.

Мени

Типови податоци

Примитивни типови

 

целоброен тип:                              byte

                                                               short

                                                               int

                                                               long

реален тип:                                      float

                                                               double

знаковен тип:                                  char

логички тип:                                     boolean

Референтни типови

 

наброив тип:                                    enum

текстуален тип:                              String

низа:                                                    Array

класа:                                                  class

интерфејс:                                        interface

Во продолжение, накратко ќе ги објасниме примитивните типови податоци и референтниот тип String.

Целобројниот тип податоци се вредностите на позитивните и на негативните цели броеви од точно одредено подмножество на множес-твото цели броеви Z = {... –2,        –1, 0, 1, 2...},  за секој поттип (byte, short, int, long). 

Податоци од типот byte се вредности од подмножеството [–128,127]  и зафаќаат меморија од 8 бита.

Податоци од типот short се вредности од подмножеството [–32768,327677]  и зафаќаат меморија од 16 бита.

Податоци од типот int се вредности од подмножеството [–2^31, 2^31 – 1]  и зафаќаат меморија од 32 бита.

Податоци од типот long се вредности од подмножеството [–2^63, 2^63 – 1]  и зафаќаат меморија од 64 бита.

Реалниот тип податоци се вредности на позитивните и на негативните реални броеви, т. е. на децималните броеви од точно одредено под-множество на множеството реални броеви R = {... –2.0..., –2.001... –1.0... –0.534... 0.0... 0.8732... 1.0... 2.0...},  за се-кој поттип float и double.

Податоци од типот float се реалните вредности кои зафаќаат меморија од 32 бита, од кои 23 бита за вредноста и 8 бита за експонентот. Тие се со т.н. обична точност (англ. single precision).

Податоци од типот double се реалните вредности кои зафаќаат меморија од 64 бита, од кои 52 бита за вредноста и 11 бита за експонентот. Тие се со т.н. двојна точност (англ. double precision).

Логичкиот тип податоци (boolean) имаат само две вредности: true и false. Тие зафаќаат меморија од 1 бит.

Знаковниот тип податоци (char) се вредности од множеството на знаци Уникод (англ. Unicode), и тоа: букви, цифри и специјални знаци. Тие зафаќаат меморија од 16 бита. При нивното користење како вредност, се ставаат во полунаводници за да се разликуваат од други исти знаци. На пример, целиот број 5 се разликува од знакот ‘5’. Карактеристичен знаковен податок е едно празно место ‘ ’.

Забелешка: Unicode е стандардно множество на знаци кое се користи во Јава. Множеството ASCII знаци е подмножество од множеството Unicode.

Со спојување на знаковните податоци, може да се формираат низи (секвенци) од знаци, кои се третираат како посебен тип податоци наречени стрингови.

Текстуалниот тип податоци или тип стринг (String) е тип на податоци чија вредност е кој било текст ставен во наводници.

Примери:

"Java programiranje"

" "         // Ова е стринг со едно празно место – бленк (англ. blank) стринг.

""          // Ova e prazen стринг (англ. null string) и се разликува од blank стрингот.

"Stringot mora da se napise vo edna linija i da zavrsi so navodnici, ne smee da premine vo nova linija, zatoa ova ne e string"

Забележете дека последниот од примерите не е стринг. Ако стрингот мора да биде подолг од една линија, тој се дели на повеќе стрингови, кои лесно се спојуваат со знакот +.

На пример, со изразот:

"Makedonija" + " " + "2023"

ќе се добие стрингот "Makedonija 2023".

Оваа операција со стрингови се нарекува спојување (англ. concatenation).

Референтните типови податоци се карактеризираат со тоа што до нив нема директен пристап, туку пристапот е овозможен преку т.н. ре-ференци (англ. references). Референцата е променлива наречена референтна променлива која упатува на податокот (објектот) во меморијата.

Наброив тип податоци се податоците кои може да добиваат вредности од однапред зададено множество на константи, кои мора да бидат идентификатори, а не броеви.

 

Декларирање на константни и на променливи податоци

 

Рековме дека податоците може да бидат константни и променливи.

Константи се оние идентификатори чија вредност (содржина на локацијата во меморијата) не се менува за време на извршување на прог-рамата.

Константите се декларираат со зборот final по кој се наведуваат типот и името, а потоа мора да ѝ се додели вредност на константата, со опера-торот за доделување = .

final тип  име = вредност;

Забелешка: Во општите дефиниции ќе користиме коси букви.

Вака декларираната константа се нарекува именувана константа (англ. named constant). Вообичаена практика во Јава е константите да се пишуваат со големи букви. Ако константата содржи повеќе зборови, тие треба да се разделуваат со долна црта.

Примери:

final int GODINA = 2345;

final double ZEMJINO_ZABRZUVANJE = 9.81;

final String drzava = "MAKEDONIJA";

Променливи се оние идентификатори чија вредност (содржина на локацијата во меморијата со која е поврзано нивното име), може да се менува во програмата.

Променливите се декларираат со:

                тип име;              

а, ако при декларацијата се врши и иницијализација, со:                                  

                тип име = вредност или израз;

Наредбата за доделување вредност на променлива е:

                име = вредност или израз;

Примери:

short i;                                                  // Deklaracija na celobrojnata promenliva i od tipot short.

int m = 10, n = 17;                            // Deklaracija i inicijalizacija na celobrojni promenlivi

char znak = '+';                                 // Deklaracija i inicijalizacija na znakovna promenliva

boolean  semafor = true;             // Deklaracija i inicijalizacija na logi;ka promenliva

String drzava;                                   // Deklaracija na promenlivata drzava od tip String

enum godisnoVreme {PROLET, LETO, ESEN, ZIMA}          // Definicija na nabroiviot tip  godisnoVreme  

godisnoVreme pro, le, es, zi;       // Deklaracija na promenlivi od nabroiviot tip godisnoVreme

Мени

Оператори со податоци

 

Oператори со целобројни податоци:

+                 Собирање.

‒                 Одземање и негација.

*                  Множење.

/                  Цел дел од количникот на два цели броја.

%                Остаток од делење на два цели броја т.н. делење по модул.

Скратена форма на операторите за целобројни податоци се:

+=                           -=                            *=                           /=                            %=

Оператори со реални податоци:

+              собирање

‒              одземање или негација

*              множење

/               реално делење (ако барем еден од податоците е реален)

%            остаток од делење

Овие оператори може да се користат во скратена форма.

+=                           -=                            *=                           /=

Забелешка: Знакот минус (–) пред еден операнд се нарекува унарен оператор,  т. е. унарен минус.

Оператори со логички податоци:

&&          логичко И (AND)

||              логичко ИЛИ (OR)

!               логичко НЕ (NOT)

Релациски оператори:

<              помало

<=           помало или еднакво

>              поголемо

>=           поголемо или еднакво

==           еднакво

!=             различно

Оператори со битови:

&             логичко И за битови                                         ~              комплемент

|               логичко ИЛИ за битови                                   <<           поместување налево

^              исклучиво ИЛИ за битови                             >>           поместување надесно

>>>         неозначено поместување надесно

Мени

Инкрементирање и декрементирање

 

Ако вредноста на променливата х се зголемува за 1 (велиме, се инкрементира), наредбата е:              

х = х + 1;

За извршување на оваа наредба, воведен е посебен оператор, наречен оператор за инкрементирање (англ. increment opera-tor) ++.

Соодветнo на операторот за инкрементирање, воведен е и оператор за декрементирање (англ. decrement operator) ‒ ‒, со кој се намалува вредноста на променливата за 1.

Операторите за инкрементирање и за декрементирање можат да бидат префиксни или постфиксни:

Префиксно, значи дека инкрементирањето/декрементирањето се врши пред да се користи вредноста на променливата, а постфиксно значи дека инкрементирањето/декрементирањето се врши по користење на променливата.

++x;           префиксно инкрементирање

x++;           постфиксно инкрементирање

 --x;            префиксно декрементирање

x--;             постфиксно декрементирање

Мени

Формати за претставување на децималните податоци

 

Децималните податоци во програмските јазици се претставуваат на два начини:

  • Во децимален формат (f-формат).

  • Во експоненцијален формат (e-формат, Е-формат).

Буквата f доаѓа од зборот „float“, а буквата е доаѓа од зборот „exponent“.

Децималните броеви во f-формат се запишуваат со децимална точка на фиксно место, која точно ги дели целиот и децималниот дел на бројот. Затоа, тој начин на претставување на децималните броеви се нарекува претставување со неподвижна точка (англ. fixed point). На пример: 1234.56, ‒0.25, 0.5432, ‒123.45 итн.

                Во е-формат (или Е-формат) точката е подвижна, при што се користи експонент. На пример, бројот 123456789.12 може да се запише со поместување на децималната точка каде било лево или десно:

1234567891.2х10^(-1) , 12345.678912х10^4 , 0.0012345678912х10^11 ́

                Истите броеви во e- или Е-формат се запишуваат на следниов начин:

1.234568e+08, 1.234568E+08.

Овој начин на запишување на децимални броеви се нарекува претставување со подвижна точка (англ. floating point).

Мени

Конверзија на типот на податоци

 

Кога на променлива од повисок тип ѝ се доделува вредност од понизок тип се нарекува имплицитна (автоматска) конверзија или типска принуда (англ. type coercion).

Експлицитна (принудна) конверзија е доделување вредност од повисок тип на  променлива од понизок тип. Притоа се користи операторот (), кој се нарекува оператор за кастирање (англ. cast operator) наречен и каст-оператор.

Примери:

celBroj = (int) 6.7f;

realenBroj = (float) 5;

На следнава слика е претставена можната имплицитна конверзија на типовите податоци.

 

Мени

Стрингови

               

Стринговите се податоци составени од знаци. Таквите податоци се третираат како посебни структури составени од примитивниот тип char, а се наречени тип  String.

Овие податоци се нарекуваат и текстуални податоци бидејќи нивната вредност е текст ставен во наводниции. Вредноста уште се нарекува текстуална константа или стринг-константа.  На пример, стринг-константи се:

"Zdravo, kako ste?"

"Macedonia bibliska zemja"

Стринговите во Јава може да содржат букви (големи и мали од абецедата), цифри и специјални знаци, и тоа: +, -, *, / и $.

Основните карактеристики на стринг-константите се:

  • Се запишуваат во наводници.

  • Секој знак има индекс, почнувајќи од најлевиот, кој има индекс 0.

  • Должината на стринг-константа е еднаква на бројот на знаци, вклучувајќи ги и празните места.

  • Максималната должина на стринг-константа во Јава е 2147483647 (= 2^31 ‒  1).

Примери:

String moeIme;             // Deklaracija na string promenlivata moeIme

String datumDenes = "21.06.2345"; // Deklaracija so inicijalizacija

Мени

Почетни вредности на променливи

 

На променливите во Јава кои не се дефинирани (туку само декларирани),

преведувачот им доделува подразбирлива (дифолт, англ. default) вредност,

зависно од типот.

Мени

Константи со минимални и со максимални вредности на типовите податоци

 

Опсегот на вредностите на секој тип податоци зависи од компјутерот на кој се извршува програмата. Минималните и максималните вредности се дефинирани како константи.

Забелешка: Зборовите со големи букви MIN_VALUE и MAX_VALUE се имиња на константи. Имињата пред константите одделени со точка, се имиња на класите во кои се дефинирани константите

Мени

Преполнување

 

Оваа појава кога вредноста на податокот излегува надвор од опсегот на типот се нарекува преполнување (англ. overflow).

Пример:

 

 

 

 

Мени

Читање податоци

               

Силата на јазикот Јава се состојат во тоа што тој има голем број класи во кои има дефинирано многу методи.

Класите во Јава се групирани во т.н. пакети (англ. packages). Сите пакети ја сочинуваат т.н. Библиотека на јава-класи (англ. Java Class Library) или попозната како Java API (Java Application Programming Interface).

Ако сакаме да користиме некоја метода во нашата програма, треба да ја знаеме класата во која се наоѓа таа метода и пакетот во кој се наоѓа таа класа.

За читање на податоците внесени преку тастатуратата, во Јава се користат методи кои се наоѓаат во класата Scanner, а оваа класа се наоѓа во пакетот java.util. Затоа, во програмата треба да се вчита (импортира) класата Scanner со т.н. декларација за внесување (импортирање) (англ. import declaration):

import java.util.Scanner;

која се става пред класата.

На почетокот на главната метода се декларира променлива по слободен избор на името. На пример: input, vlez, citaj или друго име од типот Scanner на следниов начин:

Scanner citaj = new Scanner(System.in);

Променливата citaj се затвора на крајот од програмата со наредбата:

citaj.close();

За читање на вредноста на некоја променлива, се задава наредба соодветна на типот на променливата, и тоа:

promenliva = citaj.nextByte();                          // Za citanje promenliva od tipt byte

promenliva = citaj.nextShort();                        // Za citanje promenliva od tipt short

promenliva = citaj.nextInt();                              // Za citanje promenliva od tipt int

promenliva = citaj.nextLong();                         // Za citanje promenliva od tipt long

promenliva = citaj.nextFloat();                         // Za citanje promenliva od tipt float

promenliva = citaj.nextDouble();                     // Za citanje promenliva od tipt double

promenliva = citaj.next();                                    // Za citanje promenliva od tipt String

promenliva = citaj.nextLine();                           // Za citanje promenliva od tipt String

promenliva = citaj.next().charAt(0);                // Za citanje promenliva od tipt char

Забелешки:

·Со методата next() се чита стринг од еден збор до првото празно место по него.

·Со методата NextLine() се чита стринг од сите знаци (зборови) до крајот на линијата.

Мени

Печатење на податоци

Мени

Форматирано печатење на податоци

 

За форматирано печатење на податоци се користи методата printf() во форма:

                printf(листа_на_формати, листа_на_променливи);

Притоа, за секоја променлива во листа_на_променливи мора да има соодветен формат во листа_на_формати.

Форматите во листа_на_формати се пишуваат со знакот % пред нив. За секој тип податок (променлива) постојат посебни формати.

 

Форматирано печатење на целобројни податоци

 

Формати за печатење на цели броеви се:

%d                          - за декадни цели броеви (основа 10).

%o                          - за октални цели броеви (основа 8).

%x или %X          - за хексадецимални цели броеви (основа 16).

 

Форматирано печатење на децимални податоци

 

Децималните податоци во Јава се печатат во форматите:

f, е, Е, g, G и a, A.

Aко се користат големите букви E, G или A, излезот се печати со големи букви.

 

Форматирано печатење на знаци, на стрингови и на логички податоци

               

%c или %C          - за форматирано печатење на знаци, се користи форматот.

%s или %S           - за форматирано печатење на стрингови се користи форматот.

%b или %B          - за форматирано печатење на логичките вредности true и false, се користи форматот.

Во Јава се користат и други формати за печатење.

Мени

Библиотечни методи

 

Функција во програмските јазици е програма која не може да се извршува самостојно, туку само да се повика од главната функција или од друга функција.

Функциите во јазикот Јава се наречени методи.

Ако сакаме да користиме некоја метода во нашата програма, треба да знаеме во која класа се наоѓа таа метода и во кој пакет се наоѓа таа класа за да можеме да ја импортираме во програмата со наредбата #import.

На пример, ако сакаме да ги користиме математичките методи, како: sqrt(x) – за пресметување квадратен корен од реален број, exp(x) ‒ за прес-метување степенот  e^x,  итн., треба да ја внесеме (импортираме) класата Math, во која се наоѓаат.

Класата Math и други класи, како: Character, String, Boolean итн., се наоѓаат во посебен пакет наречен java.lang. Затоа, за да ги користиме мето-дите од овие класи во иста програма, треба да се внесе (импортира) целиот пакет java.lang (сите класи од него) со наредбата:

                import java.lang.*;

Пакетите во Јава може да се вградени пакети (англ. built-in packages) (наречени и стандардни пакети, кои се дел од JRI – Java Runti-me Environment) или кориснички дефинирани пакети (англ. user-defined packages), кои се дефинирани од корисниците.

Најчесто користените вградени пакети во Јава се:

java.lang          - Содржи класи со методи за примитивните типови податоци, математички методи итн. и се импортира автоматски

                                во секоја програма.

java.io                - Содржи класи со методи за влезните и излезните операции.

java.util             - Содржи класи со методи за структурите на податоците (поврзани листи, дрва и сл.), како и класи со методи за

                                операциите со време и датуми.

java.applet      - Содржи класи со методи за работа со аплетите.

java.awt            - Содржи класи со методи за работа со графиката.

java.net             - Содржи класи со методи за операцииите во компјутерските мрежи.

Забелешка: Јава-аплет е јава-програма која работи во веб-прегледувач (англ. browser).

Мени

Математички методи

 

Најчесто користени математички методи се:

pow(x, y)               – Пресметување x^y.

exp(x)                     – Пресметување е^х, е = 2.7182[1].

sqrt(x)                    – Квардатен корен од х, .

cbrt(x)                    – Кубен корен од х, .

log(x)                      – Природен логаритам од х, ln(x) (со основа е = 2.7182).

log10(x)                 – Декаден логаритам од х,log(x) (со основа 10).

abs(x)                     – Апсолутна вредност од х, |x|.

ceil(x)                     – Заокружување на х на најмалиот реален број не помал од х, чија децимална вредност е 0.

floor(x)                   – Заокружување на х на најголемиот реален број не поголем од х, чија децимална вредност е 0.

round(x)                – Заокружување на најблискиот цел број до х (без децимали).

random()               – Генерирање случаен реален број поголем или еднаков со 0.0 и помал од 1.0

sin(x)                       – Тригонометриска функција sin(x).

cos(x)                      – Тригонометриска функција cos(x).

tan(x)                      – Тригонометриска функција tg(x).

min(x,y)                  – Наоѓање на помалата вредност од х и у.

max(x,y)                 – Наоѓање на поголемата вредност од х и у.

Забалешка: Бројот е = 2.7182 е основа на природните логаритми и се нарекува Ојлеров број (Leonhard Euler, швајцарски математичар). Некои го нарекуваат и Неперов број (John Napier, шкотски математичар).

Методите во Јава може да бидат статички методи (англ. static methods) или нестатички методи (англ. non static methods).

Математичките методи се повикуваат со наведување на класата Math и методата, разделени со точка:

y = Math.pow(x,2);

z = Math.sqrt(x);

Десната страна на наредбите означува повик на метода (англ. method call или method invocation). Со повикување на методите pow() и sqrt()), тие се извршуваат и резултатите се доделуваат на променливите у, т. е. z.

При секој повик, наведените математички методи враќаат вредност. Затоа, се наречени методи со повратна вредност (англ. value-returning methods).

Мени

Метода за генерирање случајни броеви

 

Во Јава постои посебна метода random(), која генерира случаен број помеѓу 0 и 1, т .е. реален број од интервалот [0, 1).

За генерирање случаен број од примитивниот тип (byte, int, long, float, double), во опсегот на типот, се користат следниве методи:

promenliva = slucaen.nextByte();                    // Slucaen broj od tipot byte

promenliva = slucaen.nextInt();                        // Slucaen broj od tipot int

promenliva = slucaen.nextLong();                   // Slucaen broj od tipot long

promenliva = slucaen.nextFloat();                   // Slucaen broj od tipot float

promenliva = slucaen.nextDouble();               // Slucaen broj od tipot double

Мени

Методи за работа со знаци

 

Во Јава се воведени повеќе методи за работа со знаци, кои се наоѓаат во класата Character:

isDigit(znak)                                           ‒ true, ако znak е цифра (0, 1... 9).

isLetter(znak)                                        ‒ true ако znak е буква.

isLowerCase(znak)                             ‒ true ако znak е мала буква.

isUpperCase(znak)                             ‒ true ако znak е голема буква.

isWhitespace(znak)                            ‒ true ако znak е празно место.

toLowerCase(znak)                             ‒ ако znak е голема буква, ја конвертира во мала буква.

toUpperCase(znak)                             ‒ ако znak е мала буква, ја конвертира во голема буква.

toString(znak)                                         ‒ го конвертира знакот znak во стринг.

Мени

Методи за работа со стрингови

               

Овие методи се наоѓаат во класата String.

concat()                                 ‒ Спојување два стринга.                                                              

length()                                  ‒ Должина на стринг.                                                      

compareTo()                        ‒ Лексикографска споредба на стринговите.           

compareToIgnoreCase()    ‒  Лексикографска споредба на стрингови независно од големи и мали букви.                  

indexOf()                                ‒ Барање прво појавување на знак или стринг во даден стринг.       

lastIndexOf()                        ‒ Барање последно појавување на знак или стринг во даден стринг.

charAt()                                  ‒ Издвојување знак од стринг.                                      

substring()                            ‒ Издвојување потстринг од стринг.                                           

replace()                                ‒ Замена на знак во стринг.                                                           

replaceAll()                           ‒ Замена на сите потстрингови со нов стринг.        

replaceFirst()                       ‒ Замена на првото појавување на потстринг со нов стринг.              .              

toLowerCase()                    ‒ Претворање на сите знаци од стринг во мали.     

toUpperCase()                    ‒ Претворање на сите знаци од стрин во големи.   

valueOf()                                ‒ Претворање податок (int, long, float, double, char, boolean) во стринг.

isEmpty()                               ‒ Проверка дали е стрингот празен.                                           

trim()                                        ‒ Истиот стринг без почетните и крајните празни места.                    

Мени

Методи за конверзија на стринг во број

 

Byte.parseByte(s)                                ‒ Конверзија на стрингот ѕ во цел број од тип byte.

Short.parseShort(s)                              ‒ Конверзија на стрингот ѕ во цел број од тип short.

Integer.parseInt(s)                               ‒ Конверзија на стрингот ѕ во цел број од тип int.

Long.parseLong(s)                              ‒ Конверзија на стрингот ѕ во цел број од тип long.

Float.parseFloat(s)                              ‒ Конверзија на стрингот ѕ во реален број од тип float.

Double.parseDouble(s)                     ‒ Конверзија на стрингот ѕ во реален број од тип double.

Мени

Контролни наредби

 Мени

Контролни наредби за избор

 

Контролните наредби за избор се користат за избор на една од можните насоки за продолжување на извршувањето на програмата.

Постојат два вида контролни наредби за избор, и тоа:

  • Контролни наредби за избор од две можности if-else и if.

  • Контролна наредба за избор од повеќе можности switch.

Мени

Контролна наредба if-else

 

Со контролната наредба if-else во Јава се реализира алгоритамската контролна структура ако-тогаш-инаку. Со неа се избира на една од двете можни насоки за продолжување на извршувањето на програмата.

 

 

 

 

 

 

При извршување на контролната наредба if-else, прво се испитува uslov-от. Ако uslov-от е исполнет (има вредност true), се извршува naredba А, а ако не е исполнет (има вредност false), се извршува naredba B.  

Ако треба да се извршат повеќе наредби кога uslov-от е исполнет или кога тој не е исполнет, тие наредби се ставаат во блок со големи загради {}.

 Мени

Контролна наредба if

 

Ако во контролната наредба if-else не постојат наредби во гранката else за продолжување на извршувањето на програмата, таа се нарекува кон-тролна наредба if. Со неа се реализира алгоритамската контролна структура ако-тогаш.

При извршување на наредбата if, прво се испитува uslov-от. Ако uslov-от е исполнет (има вредност true), се извршува naredba А, а ако uslov-от не е исполнет (има вредност false), извршувањето на програмата продолжува со следната наредба.

Ако треба да се извршат повеќе наредби, тие се ставаат во блок со големи загради {}.

Мени

Контролна наредба if-else-if

 

Алгоритамската контролна структура ако–тогаш–или–ако во Јава се изразува со наредбата if-else-if.

На пример:

if (a * a + b * b == c * c) {

       System.out.println("Da");

} elseif (a * a + c * c == b * b) {

       System.out.println("Da");

} elseif (b * b + c * c == a * a) {

       System.out.println("Da");

} else {

       System.out.println("Ne");

}

 Мени

Условен оператор ?:

 

Условниот оператор се користи за претставување на едноставни наредби if-else.

На пример:

if (m > n)

       max = m;

else

       max = n;

може да се запише пократко:

max = (m > n) ? m : n;

Мени

Контролна наредба switch

 

Контролната наредба switch се користи за избор на една од повеќе можни насоки за продолжување на извршувањето на програмата. Со неа се реализира алгоритамската контролна структура случај.

Изразот во заграда (izraz) може да биде кој било израз чии вредности се од целоброен, знаковен, логички или наброив тип. Ознаките a, b... k се константи од целоброен, знаковен, логички или наброив тип. За секој случај (case), се извршуваат сите наредби сè до првата контролна наредба break, чие дејство е скок (излез) на крајот на контролната наредба switch. Затоа, мора да се користи контролната наредба break по секој case. Ако не се наведе контролната наредба break, извршувањето продолжува со следниот case. По naredba Х не се става наредбата break.            

Ако izraz не добие ниту една вредност од наведените константи по зборот case, тогаш се извршуваат наредбите по зборот default. Одделот default е опционален, значи не мора да се наведе. Ако не постои, по извршување на која било гранка case, се скока на следната наредба по кон-тролната наредба switch.

Мени

Контролни наредби за повторување

 

Контролните наредби за повторување се користат тогаш кога е потребно една иста група наредби да се извршат повеќепати. Едно извршување на групата наредби се нарекува еден циклус.

Во Јава постојат три контролни наредби за повторување, и тоа:

  • for.

  • while.

  • do-while.

Мени

Контролна наредбa for

 

Општиот облик на контролната наредба for е:

for(иницијализација; услов; ажурирање){

            naredba А;

            naredba B;

            ...

            naredba L;

}

Иницијализација е дел во кој се задаваат почетни вредности на променливите кои се користат во телото на контролната наредба. Овој дел се извршува еднаш пред да започне повторувањето на циклусите.

Услов е делот за испитување на условот пред повторно да се изврши циклусот. Тој е логички израз. Ако услов има вредност true, тогаш циклусот повторно ќе се изврши, а ако има вредност false, тогаш циклусот не се извршува, туку дејството продолжува со следната наредба по наредбата for. Бидејќи услов-от може да не биде исполнет и пред започнување на првиот циклус, може да не се изврши ниту еден циклус.

Делот за ажурирање во контролната наредба for се извршува по извршување на секој циклус. Во него се ажурираат променливите кои се корис-тат во телото на наредбата.

Со контролната наредба for во Јава се имплементираат алгоритамските контролни  структури за повторување со броење на циклусите за–зголемувај–до, за–намалувај–до и за–до–чекор.

Формата на контролната наредба for е:

Мени

Контролна наредба while

 

Со контролната наредба while во Јава се имплементира алгоритамската контролна структура за повторување со излез на почетокот од циклусот додека–извршувај.

Општиот облик на контролната наредба while е:

while(uslov){

            naredba A;

            naredba B;

            ...

            naredba H;

}

Со контролната наредба whilе циклично се извршува иста група наредби. Едно извршување на наредбите од naredba A до naredba H е еден циклус. Пред почетокот на секој циклус, се испитува дали е исполнет uslov-от, кој претставува логички израз со две вред­ности: точно (true) или неточно (false). Додека uslov-от е ис­пол­нет (точен), се извршуваат циклусите. Кога во не­кое испитување на uslov-от ќе се констатира дека тој не е испол­нет (не е точен), се прескокнува контролната наредба while и дејството продолжува со следната контролна наредба.

Бидејќи uslov-от се испитува пред почетокот на секој циклус, може да се случи тој да не е исполнет уште на почетокот од првиот циклус. Затоа мо-же да не се изврши ниту еден циклус.

Мени

Контролна наредба do-while

 

Со контролната наредба do-while во Јава се имплементира алгоритамската контролна структури за повторување со излез на крајот од циклусот извршувај–додека.

Општиот облик на контролната наредба do-while е:

do{

             naredba A;

             naredba B;

             ...

             naredba T;

}while(uslov);

Со контролната наредба do-while се извршува иста група наредби. Едно извршување на наредбите од naredba A до naredba T е еден циклус. Првиот циклус секогаш се извршува. На крајот од првиот циклус и од секој нареден циклус се испитува дали е исполнет uslov-от, кој претставува логички израз со две вред­ности: true (точно) или false (неточно). Циклусите се извршуваат додека е ис­пол­нет (точен) uslov-от, Кога во не­кое испитување на uslov-от ќе се констатира дека тој не е испол­нет (не е точен), дејството продолжува со следната контролна наредба по наредбата do-while.

Бидејќи uslov-от се испитува на крајот на секој циклус, со оваа наредба мора да се изврши барем еден циклус.

Мени

Контролни наредби за скок

 

Контролна наредба continue

 

Контролната наредба continue се користи во контролните наредби за повторување for, while и do-while, како безусловен скок на крајот од теков-ниот цилус. Тоа се прави кога во некоја наредба од циклу­сот, пред тој да заврши, е исполнет одреден услов и не е потребно да се извршат остана­тите наредби од циклусот. Со неа се скока на крајот од циклусот, односно се излегува од те-ковниот циклус и дејството продолжува со следниот циклус.

Со контролната наредба continue во Јава се реализира алгоритамската контролна структура продолжи.

 

Контролна наредба break

 

Контролната наредба break се користи во контролните наредби за повторување for, while и do-while, како безусловен скок на крајот од наредбата некоја од овие наредби. Тоа се прави кога во некој циклу­с, пред тој да заврши, е исполнет одреден услов и не е потребно да се продолжи со пов-торување на циклусите, а извршувањето на програмата продолжува со следната наредба.

Со контролната наредба break во Јава се реализира алгоритамската контролна структура прекин.

Со контролната наредба break се излегува само од наредбата во чие тело се наоѓа. Ако наредбата break се наоѓа во вгнездена наредба за повто-рување, тогаш со неа се излегува само од вгнездената наредба.

Оваа контролна наредба најчесто се користи за излез од наредбите со бесконечен број циклуси.

 

Контролна метода exit()

 

Контролната методата exit() се користи за скок на крајот на програмата. Таа се става на она место во програмата каде што се очекува операција со чие извршување може да дојде до прекин на програмата и до нејзино нерегуларно завршување.

Оваа контролна метода често се користи при детектирање на грешки кои може да доведат до погрешни резултати или до прекин на програмата, како што е случај со читање од датотека која не постои.

Контролната метода exit() е во класата System и се повикува со наредбите: 

System.exit(0) – за регуларно (успешно) завршување на програмата.

System.exit(1) – за нерегуларно (неуспешно) завршување на програмата, т. е. вредноста 1 покажува дека се случила грешка при извршувањето.

Со контролната метода exit() во Јава се реализира алгоритамската контролна структура излез.

 Мени

Кориснички методи

 

Покрај библиотечните методи, во Јава е овозможено корисниците да пишуваат свои методи. Тие се наречени кориснички дефинирани методи (англ. user-defined methods) или само кориснички методи (англ. user methods).

Методите во Јава кои враќаат една вредност се наречени методи со повратна вредност (англ. value-returning methods).

Друг вид методи во Јава се методите без повратна вредност наречени методи void (англ. void methods).

Мени

Кориснички методи со повратна вредност

 

Корисничките методите со повратна вредност, исто како и функ­циите во математиката, имаат само еден излезен резултат. Тие може да немаат влезни параметри или да имаат еден или повеќе влезни параметри.

Корисничките методи може да бидат статички и нестатички.

Статичките методи (англ. static methods) се означуваат со зборот static. Тие може да бидат со повратна вредност или без повратна вредност.

Општата форма на статички методи со повратна вредност е:

static  тип име(листа_на_влезни_параметри){

                тело на методата (наредби)

                return резултат;

}

тип          ‒ типот на вредноста која ја враќа методата,

име         ‒ името на методата,

листа_на_влезни_параметри       ‒ ги содржи имињата на параметрите и нивните типови кои се одделени со запирки.

 

Забелешки:

  • Насловот на методата не завршува со точка и запирка ( ; )

  • Листата на параметри мора да ги содржи и имињата и типовите на параметрите.

  • Резултат е резултатот од методата кој може да биде една променлива или израз (од променливи и/или константи и/или методи). Променлива-та мора да е од ист тип со тип (типот) на методата.

  • Имињата на методите со повратна вредност (по конвенција) се пишуваат како и променливите, т. е. со мала почетна буква. Ако името се сос-тои од повеќе збора, секој следен збор се пишува со голема буква. Имињата може да се користат во изрази, а и како аргументи на други методи, т. е. исто како и променливите.

Повратната вредност може да биде од кој било тип, како: int, double, String итн. Затоа, методите се нарекуваат int-метода, double-метода, String- метода итн.

Метода со повратна вредност се повикува (најчесто) со наредба за доделување:

променлива = име(листа_на_аргументи);

а во изрази и други наредби само со име-то и листа_на_аргументи.

Листа_на_аргументи и листата_на_влезни_параметри на методата име мора да имаат:

  • Ист број на аргументи и параметри.

  • Ист редослед на аргументите и параметрите.

  • Ист или конвертибилен тип на соодветните аргументи и параметри.

Ќе наведеме примери за повикување на методи со повратна вредност:

xNaY = stepen(x, y);

System.out.println("Kvadraten koren od " + x + " = " + kvKoren(x));

При повик на метода со повратна вредност, вредностите на аргументите (кои  претходно мора да се дефинирани – имаат вредност) се пренесу-ваат (копираат) во соодветните параметри.

Мени

Кориснички методи без повратна вредност

 

Корисничките методи кои не враќаат вредност имаат тип на повратна вредност  која се означува со void. Затоа се наречени методи од тип void.

Клучниот збор void означува дека таа метода не враќа вредност, но дека по нејзиното извршување дејството продолжува со следната наредба во програмата (или методата) од која е повикана таа метода.

На пример, дефиницијата на метода под име pecatenje() може да биде:

static void pecatenje(String poraka, float rezultat) {

       System.out.println(poraka + rezultat);

       // poraka – e string

       // rezultat e rezultat od presmetkite

}

Оваа метода може да се повика од методата main() или од друга метода.

На пример:

pecatenje("\nRezultatot e: ", x);

Мени

Класни и локални променливи

 

Променливите кои се креирани во програмите и во потпрограмите имаат одредено подрачје на видливост (англ. scope of visibility) наречено и подрачје на пристап (англ. scope of  access). За подрачје на пристап на некоја променлива се смета она подрачје во кое има пристап до промен-ливата, т. е. може да се вршат операции со неа.

Некои променливи може да се користат во целата програма, некои само во методата, а некои само во делови (блокови) од методата.

Според подрачјето на видливост, променливите може да бидат:

  • Класни променливи.

  • Локални променливи.

Подрачјето на видливост на класните променливи, односно пристапот до нив е целата класа, т. е. главната метода и сите статички кориснички дефинирани методи во класата.

Класните променливи се декларираат со зборот static.

На пример:

static int x = 5;

Локалните променливи може да имаат подрачје на пристап само во телото на методата во која се декларирани или само во насловот на мето-дата или само  во блокот помеѓу заградите {}. Видливоста започнува со декларацијата на локалната променлива. Затоа, локална променлива не може да се користи пред да се декларира.

Времето од креирањето на една променлива во меморијата (веднаш по извршување на наредбата за декларација) до нејзиното исчезнување (крај на блокот, крај на методата или крај на програмата) се нарекува живот на променливата (англ. variable life time). Поточно, променливата жи-вее додека се извршува кодот од нејзиното подрачје на видливост.

Класните променливи живеат цело време додека се извршува програмата.

Локалните променливи живеат од моментот на креирање (декларирање) до крајот на подрачјето на видливост, кое може да биде целата метода или само блок меѓу заградите {}.

Мени

Преоптоварување на методи 

 

Една од добрите особини на Јава е преоптоварување на методи (англ. method overloading). Тоа се методи со исто име кои имаат различен број и тип на параметри, односно методи со исто име кои се разликуваат по потписите (англ. method signatures). Сè додека некоја преоптоварена (англ. overloaded) метода може да се препознае врз основа на нејзиниот потпис, таа не доаѓа во конфликти со другите методи.

За две методи велиме дека се преоптоварени ако:

  • имаат исто име,

  • имаат различни листи на параметри (по број или по тип или по редослед),

  • се декларирани во истo подрачје на видливост.

На пример, следниве методи се преоптоварени:

static int max(int x, int y) {return x + y;}

static int max(int x,float u) {return x+(int)u;}

static double max(float u, double v) {return (int)(u + v);}

Разрешување на преоптоварени методи (англ. method overload resolution) е постапка со која повикот на методата се насочува кон една од преоптоварените методи, односно од сите методи со исто име се избира најсоодветната.

Мени

Генерички методи

 

Генеричките методи се декларираат со:

static <T> T imeNaMetoda(T parametar1, T parametar2,..., T parametarN) {...}

Буквата Т означува тип. Така, ако генеричката метода е со повратна вредност, тогаш Т ќе има тип од типовите во Јава.

На пример, ако генеричката метода:

static <T> T pecati(T eden, T dva, T tri) {

       return tri;

}

се повика со:

int a = 123, b = 45, c = 67;

int posledenVnesenCelBroj = pecati(a, b, c);

тогаш типот Т ќе биде int. Ако, пак, се повика со:

char g = 'r', h = 'a', i = 'm';

char posledenVnesenZnak = pecati(g, h, i);

тогаш типот Т ќе биде char.

                Ако генеричката метода е без повратна вредност, тогаш се декларира со тип void:

static <T> void pecati(T eden, T dva, T tri) {

       System.out.printf("%s %s %s", eden, dva, tri);

}

При повикот на генеричка метода, се врши замена на параметрите на методата со соодветните аргументи од повикот, а иствремено се врши и замена на типот на параметрите со соодветниот тип на аргументите.

Мени

Рекурзивни методи

 

Релациите со кои следниот елемент се пресметува од еден или од повеќе претходно зададени или пресметани елементи, се нарекуваат реку-рентни релации (англ. recurrence relations).

На пример:

xn + 1 = xn + 2, n >= 1, x1 = 1, n = 1, 2, 3, 4...                             ‒ Непарни броеви.

n! = n(n ‒ 1)!, n >= 1, 0! = 1 , n = 1, 2, 3, 4...                              ‒ Факториел на природни броеви.

Fn = Fn-1 + Fn-2 , F0 = 1, F1 = 1, n = 0, 1, 2, 3…                       ‒ Броевите на Фибоначи.

Рекурзивни методи се оние кои се повикуваат самите себеси. Таквото повратно (рекурентно) повикување се нарекува рекурзија (англ. recursion).

Рекурзивните методи во Јава може да бидат со или без повратна вредност.

На пример, рекурзивната метода која го пресметува збирот на првите n природни броеви е:

static long zbirN(int n) {

       if (n == 0)

              return 0;

       else

              return n + zbirN(n - 1);

}

 

Задача:  Ханојски кули 

Постои легенда според која во некој храм на Далечниот Исток, свештениците имале задача да пренесат 64 златни диска (сите со различен ради-ус) од еден столб на друг, користејќи трет помошен столб. Столбовите биле дијамантски. Дисковите биле поставени на првиот столб еден над друг, подредени од најголем (најдолу) до најмал (најгоре). Свештениците смееле да пренесуваат само по еден диск на ден, при што пренесениот диск морал да се стави врз поголем, на кој било од столбовите. Кога сите дискови ќе се пренеселе на другиот столб, ќе се случи крај на светот, вели легендата.

                На пример, почетната состојба со 4 диска е:

 

 

 

 

 

 

 

Првите 2 премесувања се:

Ако претпоставиме дека секоја секунда се пренесува по 1 диск, тогаш се потребни 2^64 ‒ 1 секунди, што изнесува приближно 584.942.417.355 години.

Мени

Низи

Мени

Еднодимензионални низи

 

Постојат проблеми за чие решавање потребно е да се воведат голем број променливи. На пример, за да се пресмета просечниот успех на еден ученик, потребно е да се внесат оценките по сите предмети и за секоја оценка да се воведе по една целобројна променлива, како:

ocenka_1                              ocenka_2              ...             ocenka_n

Ако претпоставиме дека има 12 предмети, потребни се 12 променливи за оценките на еден ученик. Ако во класот има 30 ученици, тогаш се потребни 12 х 30 = 360 променливи за оценките на сите ученици. Програма со толкав број променливи не само што е непрегледна туку ќе биде и многу долга. При нејзиното пишување, повеќе време ќе се потроши за пишување на имињата на променливите отколку за самата програма.

Во ваквите случаи, кога се работи со голем број податоци од ист тип, тие се организираат во посебни структури наречени низи (англ. arrays). Елементите на низата може да бидат од кој било тип, но сите елементи мора да се од ист тип.

Секој елемент во низата има свој реден број: ocenka_1, ocenka_2… ocenka_n. Ваквите величини во математиката се запишуваат на тој начин што редните броеви се ставаат како индекси: o1, o2 on. Индексот го означува редниот број на елементот во низата: 1 – првиот елемент, 2 – вториот елемент итн. n го означува n – тиот  елемент.

Да се потсетиме за аритметичките и геометриските низи. Низата а1, а2... аn се нарекува аритметичка низа ако разликата на кои било два соседни елементи е иста, додека кај геометриската низа количникот на кои било два соседни елементи е ист. Исто така, гледаме дека сите елементи имаат исто име, а индексите им се 1, 2, 3... n.

Индексите може да се означат како точки на бројна оска, т. е. во еден правец, една димензија. Должината е една димензија. Површината (правоа-голник) има должина и ширина, значи има две димензии. Просторот (зграда) има три димензии: должина, ширина и висина.

Затоа, низите со еден индекс (една димензија) се нарекуваат еднодимензионални низи  (англ. one-dimensional arrays).

Ако знаеме дека низата има n елементи, тогаш се запишува со: а1, а2... аn или  пократко со a[i]n или само a[]n, што значи дека индексот i има вред-ности од 1 до n. Се користат и следниве ознаки: [а]n и a[1..n].

Во програмските јазици, променливите што добиваат вредности на податоци од едно­ди­мензионална низа се запишуваат на тој начин што индек-сот се става во средни загради: a[1], a[2]... a[n]. Иако името на сите елементи им е исто, тие се различни променливи кои се разликуваат по индек-сот.

Во многу програмски јазици индексите почнуваат од 0 до n ‒ 1.

Низите во Јава се означуваат на истиот начин, при што индексите се ненегативни цели броеви, а првиот индекс секогаш е 0. За низа од n елемен-ти, индексите се 0, 1, 2, 3... n ‒ 1. На пример, ознаките на елементите за низа од n елементисе: a[0], a[1]...  a[n ‒ 1].

Ако сакаме да ја означиме само низата, без бројот на елементи, тогаш ќе користиме ознака а[] за да се разликува од променлива со исто име.

Еднодимензионалните низи во Јава се декларира­ат на след­ниов начин:

тип  име[] = new тип[број];

или

тип  име[];

име = new тип[број];

тип        ‒ е тип на низата, кој го означува типот на елементите на низата, како byte, short, int, long, float, double, char, boolean, String.

име         ‒ е името на низата.

[]               ‒ е ознака дека променливата име не е обична променлива, туку е низа.

new         ‒ е клучен збор кој означува дека низата ќе се креира во меморијата.

Пример

int a[] = new int[5];            

Низата a[] има 5 елементи и тоа: a[0], a[1], a[2], a[3] и a[4]. Типот на елементите на низата е int и на нив може да им се доделуваат само целобројни вредности. 

Примери

float br[] = new float[25];

String [] iminjа;

iminja = new String[5];

final int BROJELEMENTI = 100;    

char []c = new char[BROJELEMENTI];

На елементите на низа може да им се доделуваат вредности со наредбата за доделување или при иницијализација.

Доделување вредности може да се врши посебно на секој елемент:

Примери

int a[] = newint[10];

a[0] = 1;     a[9] = 10;    a[3] = ‒4;    a[5] = 5;

Доделување вредности на елементите на низа може да се врши и при декларирањето, т. е. со иницијализирачка листа (англ. initializer list):

double b[] = {5.6, ‒2.34, 7.8, ‒3.45, 6.789};  

Програмскиот сегмент за читање елементи на целобројната низа a[] од n елементи е:

int n = a.length;                                      // каде length е функција за должина на низата а[].

for (inti = 0; i < n; i++)

       a[i] = citaj.nextInt();

Програмскиот сегмент за печатење елементи на знаковната низа a[] од n елементи е:

int n = a.length;

for (int i = 0; i < n; i++)

       System.out.println(a[i]);

Мени

Наредба for базирана на опсег

 

Има многу проблеми во кои се извршува некоја операција врз сите елементи на низа, независно од нивниот редослед. На пример, во задачата за наоѓање на најмалиот елемент во низата, не мора првиот да се земе за најмал, туку може кој било. Потоа тој се споредува со останатите, неза-висно од редоследот. Кога ќе се најде некој помал од дотогаш најмалиот, тој ќе биде најмал.

За решавање вакви проблеми, во Јава се користи наредбата for базирана на опсег (англ. range-based for):

for(променлива : низа) {

                наредба А;

                наредба Б;

                ...

                наредба К;

}

во која:

променлива е променлива од типот низа.

низа е името на низата.

Мени

Дводимензионални низи

 

Има примери во математиката и во други области, каде што за запишување на некои податоци мора да се користат 2, 3, ... и повеќе индекси.

На пример, знаеме дека секоја точка во рамнината е одредена со две димензии – координати:  х-координата и у-координата, т. е. А(х,у).

Aко знаеме дека во еден клас има m ученици и n предмети, тогаш нивните оценки може да се запишат како шема:

 

 

 

 

 

Дводимензионалната низа се означува со o[i,j]m,n , што значи дека индексот i има вредности од 1 до m, а индексот ј има вредности од 1 до n. Пок-ратко, низата се означува со o[]m,n, при што m и n покажуваат дека низата е дводимензионална.

Во литературата се користи и записот o[1..m] [1..n].

Општиот елемент се означува со oi,j.

Дводимензионалните низи во математиката се нарекуваат матрици.

Ваквите дводимензионални низи во програмские јазици, па и во Јава, се запишуваат со o[m][n] , а општиот елемент е со два индекси во загради, о[i][j]. На пример, o[2][7] = 5, o[3][10] = 2 итн. Во Јава е погрешно претставувањето со o[2,7].

Декларација на дводимензионална низа е слична како декларација на еднодимензионална низа:

тип  име[][] = new тип[број1] [број2];

или

тип  име[][];

име = new тип[број1] [број2];

каде:

тип        ‒ е тип на елементите на низата (byte, short, int, long, float, double, char, boolean, String).

име         ‒ е името на низата.

број1     ‒ е едната димензија.

број2     ‒ е другата димензија.

Првите индекси на дводимензионална низа се: 0, 1, 2, ... , број1 ‒ 1.

Вторите индекси на дводимензионална низа се: 0, 1, 2, ... , број2 ‒ 1.

Пример

Со декларацијата:

int a[][] = new int[3][4];

се декларира низата а[]3,4 од 12 елементи, на кои првиот индекс им е 0, 1 или 2, а вториот индекс им е 0,1, 2 или 3.

Вредности на елементите на дводимензионална низа им се доделуваат со наредба зтаа доделување. 

Пример

float c[][] = new float[10][15];

c[0][4] = ‒5.23f;

c[9][2] = 9.543f;

Дводимензионална низа може да се иницијализира при декларирање и со иницијализирачката листа.

int d[][] = {{‒3, 5},{0, 1 },{7, ‒2}};

При декларација на дводимензионална низа во Јава, на елементите автоматски им се доделуваат почетни вредности во зависност од типот.

Во Јава може да се декларира дводимензионална низа со различна должина на редиците бидејќи се смета дека секоја редица е еднодимензио-нална низа.

Мени 

Текстуални низи

 

За разлика од стринговите, во Јава може да се декларира низа од знаци, т. е. текстуална низа од типот char:

char s[] = new char[26];

char drzava[] = {'M', 'a', 'k', 'e', 'd', 'o', 'n', 'i', 'j', 'a'};

char selo[] = new char[9];

Ако доделиме вредности:

selo[0] = 'B';

selo[5] = 'e';

низата selo ќе има вредност B____e___. Знакот _ означува празно место.

Работата со текстуални низи е иста како со стрингови. Иницијализација, доделување вредности и печатење на текстуална низа се врши на ист начин. Единствена предност при користење на текстуалните низи, наместо на стринговите, е што операциите со нив се побрзи бидејќи не е пот-ребна нивна алокација.

Да напоменеме дека текстуална низа може да се печати директно.

На пример, со наредбава:

System.out.println(drzava);

ќе се отпечати Makedonija.

Со елементите на текстуална низа се вршат исти операции како и со знаците, при што може да се користат релациските оператори.

За работа со текстуални низи се користат следниве методи:

valueOf()                - Конверзија на текстуална низа или на дел од низата во стринг.

toCharArray()      - Конверзија на стринг во текстуална низа.

getChars()            - Конверзија на дел од стринг во текстуална низа.                

Мени

Датотеки

 

Терминот датотека (англ. file) го означува секое множество податоци зачувани на надворешни мемории под едно име. Тие може да содржат различни видови податоци, како: текст, броеви, слики, видео, звук итн.

Датотеките може да се поделат на:

  • Влезни датотеки – оние од кои може само да се чита.

  • Излезни  датотеки – оние во кои може само да се запишува.

  • Влезно-излезни датотеки – оние од кои може да се чита и во кои може да се запишува.

Читањето податоци од датотека и запишувањето податоци во датотека се врши на ист принцип како и при читање и запишување податоци преку терминал (тастатура и екран). Оперативниот систем ги третира тастатурата и екранот како посебни (стандардни) датотеки за влез и за излез. При читањето, податоците се читаат од датотеката и се запишуваат во меморијата, а при запишувањето податоците се читаат од меморијата и се запишуваат во датотеката.

Датотеките кои се чуваат на надворешни мемории се нарекуваат физички датотеки. Физичките датотеки имаат име и тип, па затоа се запишуваат во форма име.тип.

Физичките датотеки може да бидат текстуални датотеки (англ. text files) или бинарни датотеки (англ. binary files). Во текстуалните датотеки се запишува и чита знак по знак, додека во бинарните датотеки се запишува и чита бајт по бајт.

Операциите (читање, запишување и модификација) со текстуалните датотеки (како .java датотеките) може да се вршат и со уредувач на текст, додека операциите со бинарните датотеки (како .class датотеките) мора да се вршат со посебни апликации.

При обработка на податоци прочитани од датотеки, апликациите користат посебни типови променливи, со кои се симулираат физичките датоте-ки. Овие променливи се наречени променливи за логички датотеки или само логички датотеки. На пример, ако физичката датотека има име studenti.dat, во програмата може да ја наречеме со некое логичко име, на пример, tekst, vlez, izlez и сл.

Податоците во датотека се запишуваат во т.н. записи (англ. records). Записите се состојат од полиња, кои се запишуваат и читаат како посебни целини.

Секоја датотека завршува со маркер за крај на датотеката (англ. end-of-file marker, EOF-маркер).

Најчеста организација на датотеките е секвенцијална и случајна.

Мени

Текстуални датотеки

 

Методите за операции со текстуални датотеки во Јава се наоѓаат во посебни библиотеки на поткласи, и тоа:

java.io.File,  java.util.Scanner,  java.io.PrintWriter и други.

За да може да се користат методите од овие класи, класите треба да бидат вклучени во апликациите со директивата import.

Најчесто се вклучуваат сите поткласи на класата java.io со директивата:

import java.io.*;

За декларирање на логичка променлива (која ја нарековме логичка датотека) поврзана со физичка датотека, во Јава се користат методите од класата File.

Декларација на логичка датотека се врши со наредбата:

File imeNaLogickaDatoteka = new  File(imeNaFizickaDatoteka);

На пример, со наредбата:

File textDat= new File("pesna");

физичката датотека "pesna" се поврзува со логичката датотека textDat. Сите операции во апликацијата кои треба да се извршат со физичката датотека "pesna", се вршат со логичката датотека textDat.

Ако треба да запишуваме во датотеката "pesna", тогаш се декларира променливата од типот PrintWriter.

На пример, со декларацијата:

PrintWriter pisuvaj = new PrintWriter(textDat);

променливата pisuvaj се поврзува со логичката датотека textDat и се користат методите од класата PrintWriter за запишување во физичката дато-тека "pesna".

На пример:

pisuvaj.println(recenica);

За читање од физичката датотека "pesna", нејзината логичка датотека се поврзува со променлива од типот Scanner. 

На пример, со декларацијата:

Scanner citaj = new Scanner(textDat);

променливатата citaj се поврзува со логичката датотека textDat и се користат методите од класата Scanner за читање од физичката датотека "pesna".

На пример:

recenica = citaj.nextLine();

Името на физичката датотека може да се зададе и преку терминал.

На пример:

Scanner citaj = new Scanner(System.in);

System.out.print("Vnesete ime na datotekata: ");

String imeNadatoteka = citaj.nextLine();

// Povrzuvanje so fizickata datoteka

File textDat = new File(imeNadatoteka);

Пред да се отвори некоја датотека за читање, пожелно е да се провери дали таа датотека постои, а тоа се прави со методата exists().

На пример:

if (!textDat.exists()) {

       System.out.println("Ne postoi takva datoteka za citanje. \n");

       System.exit(1);            // Zavrsuvanje na aplikacijata so greska

}

Исто така, пред да се отвори некоја датотека за запишување, добро е да се провери дали веќе постои датотека со тоа име за да не ја избришеме нејзината содржина ако таа постои.

Некои поважни методи за работа со текстуални датотеки се:

close()                    – Метода за затворање датотеката                                                             

hasNext()              – Метода за проверка на податок за читање                                            

exists()                    – Метода за проверка дали постои датотеката                                       

Методи за читање податоци од текстуална датотека     

next()                       – за читање стринг од еден збор.

nextLine()               – за читање стринг од цела линија.

nextByte()              – за читање вредност од типот byte.

nextShort()            – за читање вредност од типот short.

nextInt()                  – за читање вредност од типот int.

nextLong()             – за читање вредност од типот long

nextFloat()             – за читање вредност од типот float.

nextDouble()        – за читање вредност од типот double.

Мени

Бинарни датотеки

 

Методите за операции со бинарни датотеки во Јава се наоѓаат во посебни поткласи на класата java.io, и тоа:

InputStream, FileInputStream, DataInputStream

OutputStream, FileOutputStream. DataOutputStream

и други.

За да може да се користат методите од овие класи, класите треба да бидат вклучени во апликациите со директивата import.

За да не погрешиме, најчесто се вклучуваат сите поткласи на класата java.io со директивата:

import java.io.*;

За декларирање на логичка датотека поврзана со физичка датотека, во Јава постојат класите FileInputStream и FileOutputStream.

Декларацијата на логичка датотека се врши со наредбата:

FileInputStream vleznaDat = new FileInputStream(imeNaFizickaDatoteka);

FileOutputStream izleznaDat = new FileOutputStream(imeNaFizickaDat);

За читање и запишување на податоци од/во бинарна датотека, се декларираат  променливи од типот  DataInputStream и DataOutputStream:

DataInputStream citaj = new DataOutputStream(vleznaDat);

DataOutputStream pisuvaj = new DataOutputStream(izleznaDat);

Методите за читање податоци од бинарна датотека:              

readLine()                       – за читање цела линија.

readBoolean()              – за читање вредност од типот boolean.

readChar()                     – за читање вредност од типот char.

readByte()                      – за читање вредност од типот byte.

readShort()                    – за читање вредност од типот short.

readInt()                          – за читање вредност од типот int.

readLong()                     – за читање вредност од типот long

readFloat()                     – за читање вредност од типот float.

readDouble()                 – за читање вредност од типот double.

readUTF()                       – за читање стринг во формат UTF.

Методите за запишување податоци во бинарна датотека:      

writeBoolean()              – за запишување вредност од типот boolean.

writeChar()                     – за запишување вредност од типот char.

writeChars()                   – за запишување знак од стринг во 2 бајти.

writeByte()                      – за запишување вредност од типот byte.

writeBytes()                    – за запишување на долниот бајт на знакот од стринг.

writeShort()                    – за запишување вредност од типот short.

writeInt()                          – за запишување вредност од типот int.

writeLong()                     – за запишување вредност од типот long

writeFloat()                    – за запишување вредност од типот float.

writeDouble()                – за запишување вредност од типот double.

writeUTF()                      – за запишување стринг во UTF-формат.

Мени

Anchor 36
Anchor 37
Anchor 38
Anchor 39
Anchor 40
Anchor 41
Anchor 42
Anchor 43
Anchor 44
Anchor 45
Anchor 46
Anchor 47
Anchor 48
Anchor 49
Anchor 50
Anchor 7

2023 проф. д-р Ѓорѓи Јованчевски

bottom of page