57
Programski Programski je je zici zici Tematska celina 1/14 ELEMENTI PROGRAMSKOG ELEMENTI PROGRAMSKOG JEZIKA JEZIKA JAVA JAVA

Elementi Programskog Jezika Java 2011

  • View
    232

  • Download
    7

Embed Size (px)

DESCRIPTION

java

Citation preview

  • Programski jeziciTematska celina 1/14ELEMENTI PROGRAMSKOG JEZIKA JAVA

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Alat za radJava Development Kit, Standard EditionTip Jave: J2SEta je potrebno instalirati na svom raunaru: JDKJDK instalacija ukljuuje i JRE (runtime environment)Odakle skinuti: java.sun.comAktuelna verzija: JDK 6 Update 24

    Razvojno okruenje: EclipseTip: Eclipse Classic IDEOdakle skinuti: eclipse.orgPanja: Eclipse se ne instalira, pokree se exe fajlAktuelna verzija: Eclipse Classic 3.6.1Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Pregled tematske celine 1Leksiki elementi jezika JavaIdentifikatoriLiteraliOperatoriKljune reiSeparatoriPromenljive i tipovi podatakaPrimitivni tipovi podatakaKlase i intefejsi kao tipovi podatakaNizovi kao tipovi podatakaUpravljake strukture

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Leksiki elementi JaveU svim programskim jezicima razlikujemo sledee leksike elemente:BELE SIMBOLE,KOMENTARE iTOKENE.Beli simboli su znaci koji se ne vide na ekranu, a slue za ureivanje teksta:blanko znaci,tabulatori,znak za prelaz u novi red, itd.

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Leksiki elementi JaveKomentari su delovi koda koje kompajler pri prevoenju kda jednostavno ignorie, a od znaaja su za programera.Komentari se u Javi obeleavaju na isti nain kao kod jezika C i C++:// komentar koji vai do kraja reda, ili/* komentar koji moe da se protee kroz vie redova, a vai sve do znaka */Po konvenciji, editori u gotovo svim razvojnim okruenjima komentare boje u svetlo zeleno.

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Leksiki elementi JaveSpecijalna vrsta komentara: dokumentacioni komentari.Oni stoje izmeu znakova /** i */Razlika: prvi ima 2 zvezdice a ne jednu.Oni slue da ih Javin generator tehnike dokumentacije (Javadoc) automatski ukljui u dokumentaciju o projektu koju generie.

    Znaaj tehnike dokumentacije pri izradi projekta nije potrebno posebno naglaavati.

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Tokeni su elementi programskog jezika koji imaju sintaksno i semantiko znaenje u kdu.Sintakstno znaenje: znaenje u smislu pravilnog formiranja "reenica" u kdu: zna se kako se ispravno pie odreena "naredba", zna se gde se otvara a gde se zatvara obina zagrada, a gde vitiasta itd. Izvorni kd programa mora da zadovoljava stroga pravila u smislu forme, pa sintaksno znaenje ima upravo taj smisao.Semantiko znaenje se odnosi na smisao koji ima odreeni token ili niz tokena: da li elimo da uporedimo vrednost dve promenljive, ili pak da dodelimo jednoj vrednost druge, itd. Moe se rei da se ovde, za razliku od forme, radi o sutini onoga to elimo od programa.

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Iz pomenutih razloga pojam tokena je na prethodnim slajdovima naglaen crvenom bojom. Token je, uslovno reeno, ono to je za programera najvanije.Leksiki elementiBeli znaci KomentariTOKENI

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *TokeniTokeni se dele na:IDENTIFIKATORE (slue da oznaavaju neto),LITERALE (to su konstante, npr. broj, znakovni niz),KLJUNE REI ("naredbe" programskog jezika),OPERATORE (kao u matematici, plus jo neki), iSEPARATORE (znaci koji razdvajaju neke celine kda).Identifikator je oznaka ("re") koja neto, ta god, oznaava (identifikuje).Formalno, identifikator u Javi poinje slovom, znakom "_" ili znakom "$", a nadalje sledi niz simbola iz skupa {, ,_,$}.Primeri za identifikator: i, j, pro, y10, _neko, $neto...

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *TokeniLiteraliLiterali su konkretne, eksplicitne vrednosti brojevi, slova (karakteri) i dva posebna: true i false.Primeri literala: 2, 3.12, 'x', "abc", true, false.U srpskom (programerskom) jeziku ova vrsta tokena se ponekad naziva konstantom, to moe da unese zabunu. Kada se kae "konstanta", u ovom kontekstu, misli se na konkretnu vrednosti (npr. 21.745) koja je takava kakva je, nepromenljiva. NE misli se na konstantu u klasinom matematikom smislu, kao to je p, ve iskljuivo na konkretnu vrednost (npr. 3.14).

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *TokeniLiteral je, dakle, bilo koja konkretna vrednost u kdu. To ne mora biti samo numerika vrednost! Pored broja, to moe biti i slovo, niz slova itd.Java poznaje etiri tipa vrednosti:numerikeznakovnelogike (tano ili netano, odnosno true i false) ispecijalnu vrednost null (za odreene primene).

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Numeriki literaliMogu da buduCELOBROJNIintlongREALNIfloatdoubleCelobrojni se mogu (kao u C-u) zadavati u:dekadnom brojnom sistemu (piemo ih obino),oktalnom BS (dodajemo nulu ispred) iheksadekadnom BS (dodajemo ispred "0x").

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Numeriki literaliPrimeri za zapis celobrojnih konstanti (literala) u razliitim brojnim sistemima:U dekadnom brojnom sistemu: 25U oktalnom brojnom sistemu: 025U heksadekadnom brojnom sistemu: 0x25Ovo znai:25 025 0x25Setimo se Uvoda u raunarstvo...025 u Javi je (25)8 a to je u dekadnom sistemu 210x25 u Javi je (25)16 a to je u dekadnom sistemu 37Ako nam iz bilo kog razloga treba da radimo sa oktalnim ili hex brojevima ovo je nain.

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Numeriki literaliCelobrojni literali (konstante) su, by default, tipa int, osim ako:njihova vrednost prevazie opseg tipa int,opseg tipa int u Javi je: od -231 do +231-1 ili ako se posebno naglasi da su oni tipa long, dodavanjem slova "L" (svejedno malo ili veliko) iza broja, npr. 34L ili 236l.Konkretno:Ceo broj, npr 25, Java e automatski shvatiti kao literal (konstantu) tipa int.Ceo broj, ali koji veliki (ako "probije" van opsega za int), na primer 2200000000, Java e automatski shvatiti kao long.Broj 25L ili 25l Java e shvatiti kao tip long.

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Numeriki literaliNumerike konstante (literali) realnog tipa Java automatski doivljava kao tip double.Za razliku od celobrojnih, koje Java u startu shvata kao one "manjeg" tipa (int), pa mora specijalno da se naglasi ako su oni "vei" (long) - kod realnih konstanti je obrnuto: Java u startu pretpostavlja da su "veeg" tipa (double), osim ako joj se posebno ne naglasi da je u pitanju "manji" tip (float).Valja se podsetiti da se tipovi float i double ne razlikuju po opsegu vrednosti, nego po preciznosti (broju decimala u razlomljenom delu).Naglaavanje da je u pitanju tip float se radi tako to se iza broja doda slovo "f" ili "F".

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Numeriki literaliPrimer za realne numerike literale:Kada Java kompajler naie na neto poput 2.5, on automatski to shvata kao literal (konstantu) tipa double.Ukoliko Java kompajler naie na 2.5f ili 2.5F, on e onda znati da to treba da shvati kao numeriku konstantu (literal) tipa float.

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Logiki literaliLogiki literali su logike vrednosti, a njih ima samo dve: "istinito" i "neistinito".Oni mogu biti dodeljivani samo promenljivama logikog tipa.Njihov zapis u Javi je:"istinito" se zapisuje kao true, a"neistinito" se zapisuje kao false.Primer:logical prolece_je;// nova promenljiva log. tipaprolece_je = true;// dodeljujemo joj vred. "istina"

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Znakovni literaliKonstanta (literal) znakovnog tipa je bilo koji znak (slovo, broj...), ili niz znakova.Ako se znakovna konstanta sastoji samo od jednog znaka on se omeuje apostrofima: 'a'.Ako se sastoji od niza znakova, omeuje se klasinim navodnicima: "abc".

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Znakovni literaliSpecijalni sluajevi znakovnih konstanti:PITANJE: Ako ve niz znakova mora da nam bude omeen znacima navoda, kako onda da u njemu postoje navodnici? Na primer, ako elimo da formiramo znakovnu konstantu:on kae "zdravo"POKUAJ: Hajde da to napiemo tek tako, bez ikakve "cake":"on kae "zdravo""NEUSPEH: Nakon prvog crvenog navodnika (spoljnog), kompajler e shvatiti da se radi o znakovnoj konstanti. Ali im naie na prvi plavi (unutranji) navodnik, on e smatrati da se tu ta konstanta zavrava. Ostatak (zdravo"") e ga totalno zbuniti, i prijavie greku.

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Znakovni literaliREENJE: Kada elimo da imamo takav "nezgodni" znak (bilo u nekom nizu ili kao jedan znak), koristimo kontra-kosu crtu (backslash) da njome kompajleru naznaimo da taj znak posmatra samo kao znak i nita vie.PRIMER: "on kae \"zdravo\""PRIMER: "ovo je backslash: \\". Kompajler e ovde shvatiti da postoji samo jedan backslash: prvi slui da oznai da je onaj iza njega samo obian znak, a drugi je samo obian znak.NAZIV ZA OVO: poto backslash slui da se "pobegne" od kompajlerovog tumaenja znakova, ovaj znak se naziva "escape character". Kae se: we use backslash to escape special characters in a string.

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Znakovni literaliBackslash slui i za oznaavanje specijalnih upravljakih znaka, koji (suprotno onome do sada) ne treba da se interpretiraju kao obini znaci!Primer ovih upravljakih znakova:\nnew line\thorizontal tab\bbell (beep)itd(slino kao kod C-a).

    Zakljuak: u znakovnim konstantama (znakovnim literalima) kontra-kosa crta (backslash) slui za oznaavanje specijalnih znaka ili za escape-ovanje onih koje kompajler treba da shvati kao obine.

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Specijalni literal: nullOn biva dodeljen automatski svakoj promenljivoj bilo kog referentnog (ne-primitivnog) tipa prilikom kreiranja (uvoenja) te promenljive.Naime, kada se u Javi definise promenljiva nekog dinamikog (referentnog) tipa, npr. tipa klase String: String s;...smatra se da ta promenljiva s u startu, odmah nakon izvenja ove naredbe, ima vrednost null.Ova promenljiva, dakle, nije objekat klase String, ve je samo referenca na objekat ali na objekat koji jo uvek ne postoji! Promenljiva s je za sada referenca koja je spremna da pone da ukazuje na neto, ali jo uvek ne ukazuje ni na ta zato sadri vrednost null.

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *nullPromenljive referentnog tipa moda nalikuju pokazivaima iz jezika C i C++, ali nije u pitanju isti koncept.U Javi ne postoje pokazivai (razlog zbog koga je mnogi vole)...Ovo, dodue, nije tano. U Javi itekako postoje pokazivai svaka promenljiva ne-primitivnog tipa je pokaziva. Ali su ti pokazivai toliko utkani u sm jezik, da su programeri prestali da ih primeuju, i oseaju se kao da ih nema :-)Najbolje je razmiljati ovako: u Javi su sve promenljive (osim primitivnih tipova) dinamike.Na sledeem slajdu bie razjanjeni pojmovi primitivnih i referentnih tipova podataka u Javi.

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *nullReferentni tipovi podataka u Javi su:KLASE, INTERFEJSI iNIZOVI. Koji tipovi podataka onda nisu referentni? Nisu referentni primitivni tipovi. To su oni tipovi podataka koji su ugradjeni u sam programski jezik:celobrojni (int, short...)realni (float, double)znakovni, za pojedinani znak (char) ilogiki (boolean).

    Vie o njima u poglavlju o tipovima podataka.

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Operatori u JaviOperatori u Javi dele se na:aritmetike,operatore dodele,operatore za inkrementiranje i dekrementiranje,logike operatore,operatore poreenja,operatore za pristup lanovima,operator poziva funkcije,operator za konverziju tipa (cast),operator za kreiranje novog objekta,operator za ispitivanje tipa objekta,operator zarez (comma operator), iternarni uslovni operator.

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Operatori u JaviAritmetiki operatori se ne razlikuju se mnogo od operatora u klasinoj matematici:+aritmetiko sabiranje-aritmetiko oduzimanje*aritmetiko mnoenje/aritmetiko deljenjekada su operandi celobrojni, ovo deljenje je celobrojno, i razlomljeni deo se odsecakada je makar jedan operand realan, deljenje je realno.%ostatak pri deljenju (operandi su celobrojni)Poseban sluaj operatora +Ukoliko se primenjuje nad objektima klase String, onda znai nadovezivanje (konkatenaciju) nizova.

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Operatori u JaviOperatori dodele su poznati jo iz jezika C:=x=2 (klasina dodela)+=x+=2 je isto to i x=x+2*=x=x*2/=x=x/2&=x=x&2|=x=x|2^=x=x^22

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Operatori u JaviOperatori za inkrementiranje i dekrementiranje takoe su poznati iz C-a:++--

    Kao i kod jezika C, operacija inkrementiranja odnosno dekrementiranja izvrie se pre ili nakon neke druge operacije, zavisno da li operator stoji sa leve ili sa desne strane operanda.

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Operatori u JaviLogiki operatori osim poznatih od ranije, ovde postoje i dve nove varijante, na koje e biti ukazano:operator and, pie se: & ili &&operator or, pie se: | ili ||operator xor, pie se: ^operator not, pie se: !Nove varijante su kod and i or:Kada se napie &, obavezno se raunaju obe strane operatora; dok kad se napie &&, ukoliko je leva strana false, desna se nee ni raunati.Kada se napie |, obavezno se raunaju obe strane operatora; dok kad se napie ||, ako je leva strana true, desna se nee ni raunati.

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Operatori u JaviOperatori poreenja su poznati iz C-a:==jednako!=nije jednakovee=vee ili jednako.

    Operatori za pristup lanovima......niza: []klase, interfejsa ili paketa: .O ovome e detaljnije biti rei kasnije.

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Operatori u JaviOperator poziva funkcije, opet poznat: "()". objekat.funkcija() Operator za konverziju tipova (cast operator), bie dat kroz primer: float x;x = (float)10; // 10 bi inae bio int Operator za kreiranje novog objekta:newOperator za ispitivanje tipa objekta:instanceof

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Operatori u JaviPreostali operatori su isti kao kod C-a:Operator zarez (comma operator): ",".On povezuje vie izraza u jedan.Ternarni uslovni oprator: " ? : ".Ovaj operator je poznat iz C-a. Primer:int max(a,b) {if (a>b)return a;elsereturn b;}// isti efekat se postie ovim operatorom:(a>b) ? a : b

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Kljune rei jezika JavaPo definiciji, kljune rei programskog jezika su rei (nizovi znakova, ali ne pod navodnicima ili apostrofima) koji imaju unapred definisano sintaksno i semantiko znaenje u programu.Koncept zatite kljunih rei (prisutan kod svih viih programskih jezika, pa i kod Jave) znai da se kljune rei ne mogu koristiti kao identifikatori.Gotovo svi editori (u razvojnim okruenjima) vre naglaavanje (highlighting) kljunih rei, ime programeru stavljaju do znanja da su rei prepoznate kao kljune, odnosno da nema greaka u kucanju. Nagalaavanje obino podrazumeva bojenje tih rei (nakon to su prepoznate) u plavo ili ljubiasto.

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Kljune rei jezika JavaNeformalno reeno jezikom starijih programskih jezika, kljune rei (zovu se jo i rezervisane rei) su zapravo "naredbe" programskog jezika, ukljuujui i nazive primitivnih tipova podataka, neke operatore i sl.Java poznaje sledee kljune rei:

    abstractdefaultifprivatethrowsbooleandoimplementsprotectedtransientbreakdoubleimportpublictrybyteelseinstanceofreturnshortvoidcaseextendsintstaticvolatilecatchfinalinterfacesuperwhilecharfinallylongswitchclassfloatnativesynchronizedconstfornewthiscontinuegotopackagethrow

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *SeparatoriSeparatori su specijalni znaci koji ne oznaavaju operaciju, a imaju funkciju da odvoje odreene logine celine u kdu.U separatore spadaju:()omeuju logiki uslov u if, whileomeuju postavljanje brojaa for petlje itd{}omeuju jedan blok kda;oznaavaju kraj jedne elementarne "naredbe" u kdu

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Promenljive i tipovi podatakaPromenljiva je simbol koji oznaava mesto u operativnoj memoriji gde moe biti smetena neka vrednost.Ta smetena vrednost moe se menjati u svim fazama izvrenja programa.Promenljiva se u kdu predstavlja nizom znakova koji nisu omeeni niim (ni navodnicima, ni apostrofima...) taj niz se zove identifikator.Promenljiva se deklarie (uvodi u program) navoenjem tipa kome pripada, i u nastavku navoenjem imena promenljive:int i;// deklarie se promenljiva i tipa intfloat broj;// deklarie se prom. broj tipa float

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Promenljive i tipovi podatakaDeklarisanje promenljive znai njeno "uvoenje" u program, tako da kompajler moe da je prepozna u nastavku kda.Promenljiva se u Javi moe deklarisati na bilo gde u programu, kad god se za njom pojavi potreba; ali ne moe se koristiti pre nego to se deklarie.Kao to je reeno, prilikom deklarisanja promenljive, programer je u obavezi da navede njen tip. Tip promenljive definie:tip i opseg vrednosti koje promenljiva moe da "primi u sebe" (da sadri), iskup operacija koje se mogu izvriti nad njom.

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Promenljive i tipovi podatakaTip promenljive u Javi moe biti:jedan od primitivnih tipova,neka klasa ili interfejs, iliniz. Tipovi se dele na:VREDNOSNE, iliREFERENTNE (slino dinamikim tipovima iz C-a). Vrednosni su: svi primitivni tipovi.Referentni su: klase, interfejsi i nizovi.

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Promenljive i tipovi podatakaRazlika izmeu vrednosnih i referentnih tipova podataka:Kada se deklarie promenljiva vrednosnog tipa, u memoriji se odmah odvoji prostor za skladiranje njene vrednosti.Kada se deklarie promenljiva referentnog tipa, u memoriji se ne rezervie nikakav prostor. Prostor se rezervie kada se sm objekat kreira operatorom new.Ovo poslednje ima sledei razlog: kada se deklarie podatak tipa neke klase, ne zna se unapred koliko e biti potrebno memorijskog prostora za konkretan objekat, jer on ne mora biti tipa te klase ve moe biti i tipa bilo koje njene podklase, a oni mogu zahtevati i vie memorijskog prostora, to se ne moe znati unapred.Takoe, poto objekti mogu da zauzmu dosta memorije, nema svrhe odvajati je za njih dok se ne pojavi potreba.

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Promenljive i tipovi podatakaPrimitivni tipovi podataka:CELOBROJNI:byte(8 bitova)short(16 bitova)int(32 bita)long(64 bita)RAZLOMLJENI (REALNI):float(jednostruka tanost)double(dvostruka tanost)ZNAKOVNI:char(pojedinani znak... String je neto drugo)LOGIKI:boolean(prima true ili false)

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Promenljive i tipovi podatakaPrimer za deklarisanje promenljivih primitivnih tipova: byte a, b=1;// a se ne inicijalizuje, a b se inic. na 1int a,b;// ovde se nita ne inicijalizujeboolean leto=false;// ovde je sve, nadam se, jasno

    Ukoliko se pri deklaraciji promenljiva ne inicijalizuje nikakvom konkretnom vrednou, promenljive numerikih tipova se automatski inicijalizuju na vrednost 0, znakovne na '\0', a logike na false.

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Klasa kao tip podatakaKada je tip neke promenljive klasa, onda se toj promenljivoj moe dodeliti:objekat te klase, ali iobjekat bilo koje njene izvedene klase (podklase)!

    Prilikom deklarisanja ovakve promenljive, njoj kompajler automatski dodeljuje poetnu vrednost null.Kada se takvoj promenljivoj dodeli neki objekat (da pone da "pokazuje" na njega) tek tada ta promenljiva postaje "upotrebljiva".

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Klasa kao tip podatakaZa razliku od jezika C++, u Javi programer ne mora da vodi rauna o tome da svi objekti budu na vreme izbrisani iz memorije.U trenutku kada ni jedna referenca (promenljiva referentnog tipa) vie ne ukazuje na neki objekat, taj objekat automatski biva uklonjen iz memorije.Ovaj mehanizam se kod Jave naziva garbage collector.On ini programiranje komotnijim, ali programeru ukida preciznu kontrolu nad ivotom objekta, to moe da dovede do problema kod vremenski kritinih aplikacija.

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Klasa kao tip podatakaPrimer za promenljivu tipa klase:(zamislimo da imamo neku klasu Message) Message m1;// deklariemo promenljivu m1 tipa// klase Message; ona sada ima vrednost// null (ne pokazuje ni na ta).m1 = new Message(); // operator new kreira u // memoriji novi objekat klase // Message i njegovu adresu // daje promenljivoj m1. // Od tog trenutka promenljiva // m1 pokazuje na taj objekat. Ovo se moe zapisati i u skraenoj formi: Message m1 = new Message();

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Klasa kao tip podatakaPoto meu primitivnim tipovima u Javi ne postoji tip za znakovni niz (ve samo za pojedinani znak tip char), tu "rupu" popunjava biblioteka klasa String. Evo kako se definiu njeni objekti: Pomou operatora new:Na ovaj nain moe se pozvati bilo koji od njegovih konstruktora i time inicijalizovati objekat. String s = new String("Niz"); Direktno dodeljivanjem konstantne vrednosti (konstantnog znakovnog niza): String s = "Ovo je objkat klase String";

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Niz kao tip podatakaKorienje ovog tipa podsea na korienje klase kao tipa.Da bi se koristio jedan niz u Java programu:treba deklarisati promenljivu tipa niza, itreba kreirati objekat tipa niz, i dodeliti ga njoj. Deklaracija promenljive niza:tip[] ime_promenljiveilitip ime_promenljive[]Bitne su uglaste zagrade!One stoje ba tako ("[]"); sada, dok smo jo u fazi deklarisanja niza, izmeu njih se ne stavlja nita!

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Niz kao tip podatakaKreiranje objekta tipa niza moe se izvriti na dva naina: Korienjem operatora new:int[] a;a = new int[50];Tek tada se definie broj elemenata niza! Direktnom inicijalizacijom (kao kod klase String): int[] b = {1, 2, 3, 6, 8, 12};Na ovaj nain kompajler prebroji koliko ima elemenata izmeu vitiastih zagrada i tako odredi broj elemenata niza; onda rezervie odgovarajui prostor u memoriji i popuni ga vrednostima izmeu vitiastih zagrada.

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Niz kao tip podatakaViedimenzionalni nizovi se definiu kao nizovi iji su elementi nizovi: int[][] matrica;matrica = new int[12][12]; Tip podataka elemenata niza moe biti:neki od primtivnih tipova, ilitip neke klase.

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Upravljake struktureRazlikujemo sledee upravljake strukture:linearnu - {}grananjeif (if-else)switch-case-defaulttry-catch (ovo se koristi kod obrade izuzetaka, o tome e biti rei u okviru odgovarajue tematske celine)petlju iforwhiledo-whileskokbreakcontinuereturnthrow (kod obrade izuzetaka)

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Upravljake struktureLinearna upravljaka struktura (sekvenca): {naredba;naredba;...naredba;} Sekvenca je jedan pojedinaan blok. Posmatra se kao zasebna celina. Moe stajati onde gde se oekuje jedna naredba (kao posle if, posle for i sl).

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Upravljake struktureStrukture grananja:if struktura:if (logiki izraz) if (logiki izraz) else switch struktura:switch (izraz){case : case : default: }

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Upravljake strukturetry-catch struktura (obrada izuzetaka): try {blok naredbi koji je kritian}catch (tip ime_izuzetka) {blok_za_obradu}catch (tip ime_izuzetka) {blok_za_obradu}catch (tip ime_izuzetka) {blok_za_obradu}[finally ] Razlika izmeu Jave i C++-a je u finally bloku. Blok finally izvrie se svakako, makar i da u try bloku nije nastao ni jedan izuzetak.Primer za korienje finally bloka: zatvaranje datoteke (to mora da se uradi, dolo ili ne dolo do izuzetka).

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Upravljake struktureStrukture petlje: for petlja: for(int i=1; i
  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Upravljake struktureNaredbe skoka: naredba break:break;// prekida tekuu prog. strukturubreak oznaka;// prekida strukturu obeleenu oznakomnaredba continue:continue;// prekida tekuu iteraciju aktuelne petljecontinue oznaka; // isto, samo za petlju obel. oznakomnaredba return:return;// kraj metoda tipa voidreturn (izraz);// kraj metoda koji neto vraanaredba throw:throw (izraz);// baca izuzetak

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Upravljake strukturePrimer za break i break (oznaka) razlika: bez labele: for (int i=0;i
  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Upravljake strukturesa labelom:spoljna_petlja:// ovo je oznaka!for (int i=0; i
  • Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011Slajd br. *Kraj tematske celine 1/14Hvala na panji.

    Elektronski fakulte u Niu - Katedra za raunarstvo - Programski jezici 2011

    *Razlika od v01: Ispravio sam formalnu definiciju identifikatora: moe da poinje i slovom, pa sam naveo i takve primere.*Ispravka od v01: Uneo sam opseg za int. Popravio sam stavku oko "probijanja" opsega za ing. Primer za broj je provereno van int opsega.**Ispravke od v01:Nije "trinarni" nego "ternarni" uslovni operator (ako je verovati Laslu Krausu).*Ispravke od v01:operatore sam naglasio bold crveno. Dodao sam malo objanjenja na operatore "/" i "%".kod posebnog sluaja operatora "+" (konkatenacija) izbacio sam drugu stavku, jer obe strane operatora mogu biti bilo kog tipa, i izvrie se konverzija u String (probao sam).*Ispravka od v01: obojio sam operatore u crveno.*Ispravka od v01: obojio sam operatore u crveno.*Ispravka od v01: obojio sam operatore u crveno.*Ispravka od v01: obojio sam operatore u crveno.*Ispravka od v01: obojio sam operatore u crveno.*Ispravke od v01:Napisao sam emu slui operator comma.Ispravio sam trinarni ternarni operator.Dodao sam primer (iz Krausa, C) za ternarni operator.Obojio sam operatore u crveno.**Ispravka od v01: obojio sam operatore u crveno.

    *Ispravka od v01: dodao sam poslednju stavku na slajdu.