Java 2 JDK 5 Pog 01 Od Pocetka

Embed Size (px)

DESCRIPTION

programski jezik java - Uvod

Citation preview

  • 1Uvod u Javu

    itajui ovo poglavlje stei ete najosnovniju predstavu o programskom jeziku Java. U ovoj fazi nije toliko bitno da razumete sve detalje koje emo ovde pomenuti zato to emo sve teme iz ovog poglavlja kasnije obraditi mnogo detaljnije. Ovde samo elimo da vam predstavimo opte koncepte na kojima se zasnivaju teme narednih poglavlja, najee situacije u kojima se koriste Java programi, kao i vrste programa koji odgovaraju svakoj od tih situacija.

    Dakle, u ovom poglavlju ete nauiti:

    q osnovne karakteristike jezika Java;

    q kako Java programi rade na vaem raunaru;

    q zato Java programi mogu da rade na razliitim raunarima;

    q osnovne postavke objektno orijentisanog programiranja;

    q kako izgleda jednostavan Java program i kako ga moete pokrenuti korienjem alata Java Development Kit;

    q ta je HTML i kako ga koristiti da bi se Java program ukljuio u veb stranicu.

    ta je zapravo Java?Java je inovativni programski jezik koji je postao nezaobilazan kada su u pitanju programi koji treba da se izvravaju na razliitim sistemima. Najpre, Java vam omoguava da piete male programe, takozvane aplete. To su programi koje moete da ugradite u veb stranice kako biste obezbedili odreenu funkcionalnost. Ugraivanje izvrnog koda u veb stranice donosi neke vrlo interesantne mogunosti. Umesto da se na njoj na uobiajen nain pasivno prikau tekst i grafiki elementi, veb stranica moe da bude interaktivna, i to na nain koji vi izaberete. U nju moete da ubacite animacije, igre, obradu interaktivnih transakcija itd. mogunosti su praktino neograniene.

  • Poglavlje 1

    Naravno, ugraivanje programskog koda u veb stranice donosi posebne bezbednosne zah-teve. Kada pristupa stranici u koju je ugraen Java kd, korisnik Interneta mora biti siguran da taj kd nee ugroziti rad njegovog raunara ili otetiti podatke koje uva u njemu. To znai da izvrenje ugraenog koda mora biti kontrolisano, ime se spreava bilo kakvo neeljeno ugroavanje vaeg raunara i osigurava da svaki Java kd napravljen sa loim namerama bude efikasno zaustavljen. U okviru Jave postoje mere koje smanjuju mogunost slinih doga-aja vezanih za Java aplete.

    Javina podrka za mrene aplikacije i aplikacije bazirane na Internetu ne zavrava se na aple-tima. Primera radi, Java serverske strane (Java Server Pages, JSP) predstavlja mono sredstvo za pravljenje serverskih aplikacija koje su u stanju da dinamiki prave i HTML stranice i da ih zatim alju po konkretnim zahtevima klijenata. Naravno, stranice koje generie JSP mogu da sadre i Java aplete.

    Osim toga, Java omoguava i pravljenje iroke lepeze programa koji se neizmenjeni mogu izvravati na svakom raunaru iji operativni sistem podrava Java okruenje. Ovo se odnosi na veinu savremenih raunara. ak moete da napiete programe koji e funkcionisati i kao obini programi i kao apleti.

    Poslednjih godina Java je znaajno unapreena, naroito od pojave standarda Java 2. Dijapazon funkcija koje prua standardna operativna Java znaajno je povean. Sada u okviru ovog programskog jezika postoje obimne mogunosti za pravljenje aplikacija sa interaktiv-nim grafikim korisnikim interfejsom (GUI), detaljnu obradu slika i programiranje grafikih elemenata, kao i podrka za pristup relacionim bazama podataka i mrenu komunikaciju sa udaljenim raunarima. Praktino sve vrste aplikacija sada mogu uspeno da se programiraju u Javi i sve one odlikuju se potpunom prenosivou.

    Naravno, Java se jo uvek razvija i raste. U itavom nizu poboljanja izdvojiemo verziju 1.4 koja je donela mogunost itanja i pisanja jezika XML. Java 5.0 koja se pojavila nakon verzije 1.4 donela je neke nove i vane jezike mogunosti, kao i znaajna proirenja biblioteka klasa. Ovo su samo neke od tema o kojima emo govoriti u ovoj knjizi.

    Karakteristike JaveVerovatno najvanija Javina karakteristika jeste injenica da je dizajnirana tako da u startu bude mainski nezavisna. Java programi mogu se neizmenjeni koristiti na svakoj platformi koja podrava ovaj programski jezik. Naravno, manji problemi su uvek mogui budui da u krajnjoj liniji uvek zavisite od naina na koji je Java implementirana na datom raunaru. Meutim, Java programi su, svakako, sutinski u mnogo veoj meri prenosivi od programa pisanih u drugim programskim jezicima. Aplikacija napisana u Javi zahtevae samo jedan skup iskaza izvornog koda, bez obzira na broj razliitih platformi na kojima e se koristiti. U svakom drugom programskom jeziku vrlo esto je neophodno da se izvorni kd aplikacije prilagodi konkretnom raunarskom okruenju, naroito ako ima zahtevan grafiki korisniki interfejs. Prema tome, Java omoguava znaajne utede i vremena i resursa kada su u pitanju razvoj, podrka i odravanje osnovnih aplikacija na veem broju razliitih softverskih i har-dverskih platformi.

    Sledeu veoma vanu karakteristiku Jave predstavlja njena objektna orijentisanost. Objektno orijentisan pristup programiranju takoe predstavlja sutinsku karakteristiku svih Java pro-grama, tako da emo u nastavku ovog poglavlja razmatrati i ta to konkretno znai. Objektno orijentisani programi su razumljiviji i za njihovo odravanje i proirivanje potrebno je manje vremena nego za programe koji su pisani bez korienja objekata.

  • Uvod u Javu

    Osim toga to je objektno orijentisana, u Javi su izbegnute mnoge tekoe i komplikacije koje prate neke druge objektno orijentisane programske jezike. Zahvaljujui tome, Java je jedno-stavnija i za uenje i za korienje. Uopteno govorei, u Javi ne postoje zamke koje su karak-teristine za druge programske jezike. Uenje je, zahvaljujui tome, bre, dok je za postiza-nje kompetentnosti i samopouzdanja potrebno mnogo manje stvarnog programiranja. Pored svega pomenutog, Java se i lake testira.

    Programski jezik Java odlikuje se i ugraenom podrkom nacionalnih skupova znakova. Programi se u Javi jednako lako piu za korienje u Grkoj ili Japanu, kao i za zemlje u kojima je u upotrebi engleski jezik. Naravno, podrazumeva se da navedene jezike i dobro poznajete. Programi se u startu mogu napraviti tako da podravaju nekoliko razliitih svetskih jezika i automatski se prilagoavaju okruenju u kome se kd izvrava.

    Uenje JaveJava nije teak programski jezik, ali je ipak potrebno uloiti dosta truda da bi se savladao. Prilino je kompaktan, ali i vrlo moan. Da bi se efikasno programiralo u Javi, pored osta-log, potrebno je da razumete i biblioteke koje idu uz program, a one su ve prilino obimne. Redosled kojim ete u ovoj knjizi uiti kako Java funkcionie i kako da je koristite briljivo je strukturiran. Zahvaljujui tome, strunost i programersko samopouzdanje sticaete na rela-tivno lak i bezbolan nain. Koliko god je to bilo mogue, u poglavljima je izbegnuto korienje pojmova koje jo niste nauili. To znai da vae prve aplikacije nee imati grafiki korisniki interfejs. Iako vas to verovatno privlai, ukljuivanje GUI u prve aplikacije bi bilo isto kao kada biste uili da plivate skoivi u bazen u onom delu koji je najdublji. Ali, ako biste u vodu uli u najpliem dela bazena i prvo pokuali samo da se odrite na povrini, opasnosti da se udavite praktino ne bi bilo. Osim toga, sve su anse da biste, uz ovakav pristup, posle izve-snog vremena bili solidan pliva.

    Java programiKao to smo ve rekli, postoje dve vrste programa koje moete da piete u Javi: one koji se ugrauju u veb stranice i zovu Java apleti i normalne nezavisne programe koje nazivamo Java aplikacije. Java aplikacije dalje mogu da se podele na konzolne aplikacije, koje podravaju samo izlaz u vidu znakova na ekranu vaeg raunara (na raunaru pod operativnim siste-mom Windows, to je komandna linija) i aplikacije sa prozorima, u kojima moete da napra-vite i koristite vei broj prozora. U aplikacijama sa prozorima koriste se mehanizmi uobiajeni za programe ove vrste kao to su meniji, palete alata, okviri za dijalog i slino.

    Uei osnove programskog jezika Java, kao ilustracije odreenih mehanizama posluie nam konzolne aplikacije. Ove aplikacije imaju jednostavan ulaz i izlaz u vidu komandne linije. To e vam pomoi da se usredsredite na specifinosti jezika i ne razmiljate o sloenim proble-mima vezanim za kreiranje i upravljanje prozorima. Tek kada ovladate svim mogunostima Java jezika, prei emo na aplikacije sa prozorima i na primere apleta.

    Uenje Jave ta vas ekaPre nego to bilo gde krenemo, uvek prethodno imamo ideju gde smo se zaputili i kojim emo putem ii. Zato pogledajmo kako e izgledati nae putovanje kroz Javu. Uopteno govorei, uei Javu pomou ove knjige proi ete kroz pet etapa:

  • Poglavlje 1

    1. Prvu etapu predstavlja ovo poglavlje. U njemu je dat prikaz osnovnih postavki vezanih za strukturu Java programa i objanjenje kako oni funkcioniu. Izmeu ostalog, govo-riemo o tome ta su objektno orijentisani programi i kako se izvrni program pravi iz izvorne datoteke sa Java kodom. Razjanjavanje ovih koncepata na samom poetku znaajno e vam olakati savladavanje Jave.

    2. Zatim ete nauiti kako se kombinuju iskazi, koja sredstva moete da koristite za upi-sivanje osnovnih podataka u program, kako da izvodite proraune i kako da donosite odluke koje se baziraju na rezultatima tih prorauna. Ovo su ona najosnovnija znanja koja su neophodna za prelazak na sledei nivo.

    3. U treoj etapi baviemo se klasama njihovim definisanjem i korienjem. Klase opi-suju strukturu objekata, to znai da ete se ovde prvi put sresti sa objektnom orijenti-sanou Jave. Na kraju ove etape imaete najosnovnija znanja o tome kako funkcionie programski jezik Java i biti spremni da ta znanja praktino upotrebite.

    4. U etvrtoj etapi nauiete kako da aktivnosti koje vai programi izvravaju podelite na odvojene zadatke koji mogu da se izvravaju simultano. Ovo je posebno vano uko-liko, primera radi, u jednu veb stranicu elite da ugradite nekoliko apleta, a ne elite da svaki od njih mora da eka na zavretak izvrenja onog prethodnog. Ili, moda ete eleti da neka lepa animacija nastavi da se izvrava dok vi igrate neku igricu, a da su oba programa deo iste veb stranice.

    5. U petoj etapi detaljno emo vam pokazati kako da implementirate aplikaciju ili aplet sa grafikim korisnikim interfejsom i kako da, u ovom kontekstu, realizujete interakciju sa korisnikom. Ovde e mogunosti Javinih biblioteka klasa doi do punog izraaja. Kada zavrite ovu etapu, biete potpuno spremni da u Javi napiete kompletne aplika-cije ili aplete.

    Dakle, kada proitate ovu knjigu, trebalo bi da budete solidan Java programer. Sve ostalo je ve stvar iskustva.

    Da bismo vam pokazali kako Java funkcionie, u ovoj knjizi smo koristili zaokruene primere. Preporuujemo vam da sve ove primere napravite i isprobate, ak i one najjednostavnije, i da ih sve sami ukucate. Slobodno eksperimentiite. Ukoliko vam neto nije sasvim jasno, slobodno izmenite primer i posmatrajte ta e se desiti. Najbolje bi bilo da sami napiete neki svoj primer. Ako niste sigurni kako funkcionie neki aspekt Jave o kome smo ve govorili, bez oklevanja ga isprobajte praktino. Ne zaboravite da se na grekama ui, i to veoma uspeno.

    Java okruenjeProgrami napisani u Javi mogu da se izvravaju na najrazliitijim raunarima i pod raznim operativnim sistemima. Vai programi e jednako dobro raditi na PC raunaru pod bilo kojom podranom verzijom operativnog sistema Microsoft Windows, kao i na nekoj Linux ili Sun Solaris radnoj stanici. Ovo je mogue zato to se program napisan u Javi zapravo ne izvrava direktno na vaem raunaru, ve u okviru standardizovanog okruenja po imenu Java 2 Platforma koje se u vidu softvera implementira na itavom nizu raunara i operativnih sistema. Platforma Java ima dve komponente softversku implementaciju hipotetikog rau-nara po imenu Java virtuelna maina (Java Virtual Machine, JVM) i Javin programski interfejs aplikacije (Java Application Programming Interface, Java API) koji predstavlja skup softverskih komponenti koje obezbeuju sve ono to vam je neophodno za pisanje zaokruenih interak-tivnih aplikacija u Javi.

    Java kompajler pretvara Javin izvorni kd koji ste napisali u binarni program koji se sastoji od bajtkodova. Bajtkodovi predstavljaju mainske instrukcije za Java virtuelnu mainu.

  • Uvod u Javu

    Prilikom izvravanja programa napisanog u Javi, program po imenu Java interpreter ispituje i deifruje bajtkod, proverava njegovu autentinost i bezbednost i zatim u okviru komponente Java virtuelne maine izvrava akcije koje su naznaene bajtkodom. Java interpreter moe da se izvrava samostalno ili u okviru pretraivaa veba kao to su, na primer, Netscape Navigator, Mozilla ili Microsoft Internet Explorer u kojima se automatski poziva kad god veb stranica koja se prikazuje sadri aplet.

    S obzirom na to da se Java programi sastoje od bajtkoda, a ne od mainskih instrukcija, oni su u potpunosti izolovani od konkretnog hardvera na kome se izvravaju. Svaki raunar na kome postoji Java okruenje moe da izvrava va Java program jednako dobro kao i bilo koji drugi. Osim toga, Java interpreter se nalazi izmeu vaeg programa i samog raunara, tako da moe da sprei izvrenje svih neovlaenih akcija u okviru programa.

    U prolosti su fleksibilnost i bezbednost povlaile i sporije izvrenje Java programa. Interpretirani Java program se obino izvravao deset puta sporije od ekvivalentnih programa kod kojih su upotrebljene nativne mainske instrukcije. Meutim, u aktuelnim implementaci-jama Jave ove slabije performanse su u velikoj meri nadoknaene, pa u programima koji nisu raunski zahtevni kao to su, na primer, oni koje ete ugraivati u veb stranice, neete prime-titi ba nikakvu razliku u performansama. Prilikom korienja platforme JVM, dela aktuelnog kompleta Java 2 Development Kit (JDK) koji moete da preuzmete sa veb lokacije kompanije Sun, postoji svega nekoliko situacija u kojima ete primetiti pad performansi u odnosu na program kompajliran do nivoa nativnog mainskog kda.

    Razvoj Java programaZa korienje ove knjige potrebna vam je platforma Java 2 Platform, Standard Edition (J2SE), verzija 5.0 ili neka aktuelnija. Komplet JDK za itav niz hardverskih platformi i operativ-nih sistema moete da preuzmete ili sa veb lokacije kompanije Sun http://java.sun.com (za Windows, Solaris ili Linux) ili sa lokacija na koje ete biti upueni sa ove. Komplet JDK koji ete ovde koristiti moete da preuzmete sa adrese http://java.sun.com/j2se. Verzije kompleta Java Development Kit za Mac OS X moete da preuzmete sa adrese http://devworld.apple.com/java/.

    Skreemo vam panju na to da je platforma J2SE 5.0 nasledila verziju J2SE 1.4. Bilo bi logino da je verziju 1.4 nasledila verzija 1.5, ali je odlueno da se, zbog znaaja novih funkcija i sveu-kupne zrelosti proizvoda, nova verzija nazove 5.0. Kodna imena za module u verziji 5.0 i dalje koriste notaciju 1.5.0, koju ete videti i u imenima direktorijuma i na nekoliko drugih mesta.

    Jedan aspekt terminologije takoe nekada ume da zbuni komplet Java Development Kit se nekada naziva ba tako JDK ili Java Development Kit, a nekada SDK ili Software Development Kit. U verziji 5.0 koristi se termin JDK, dok se u verziji 1.4 koristio termin SDK. Prema tome, u pitanju je samo mala terminoloka razlika, a znaenje je praktino isto. Radi doslednosti, svaku verziju kompleta Java Development Kit u ovoj knjizi emo nazivati JDK.

    Za pravljenje izvornih datoteka Java programa koje ete koristiti u kompletu JDK, potreban vam je editor teksta. Dolazi u obzir svaki editor koji u sadraj datoteke ne ugrauje formati-ranje. Postoji itav niz podesnih besplatnih programa od kojih su neki ba i namenjeni Javi, tako da ete bez veih problema pronai onaj koji vam najvie odgovara. Nama je najvie odgovarao editor Jcreator. Postoje i potpuno besplatna verzija ovog programa, ali i komerci-jalna verzija koja je neto bogatija funkcijama. Za poetak vam je ova besplatna verzija sasvim dovoljna i moete je preuzeti sa adrese http://www.jcreator.com. Ukoliko elite da ispitate i neke druge editore, obavezno posetite veb lokaciju http://www.download.com.

    Postoji nekoliko izuzetnih profesionalnih okruenja za razvijanje Java programa iji su proi-zvoai kompanije Sun, Borland, Metrowerks i Symantec. U pitanju su okruenja u kojima su

  • Poglavlje 1

    pravljenje i editovanje Java izvornog koda, kao i kompajliranje programa i naknadno otkla-njanje greaka maksimalno olakani. U rukama iskusnih programera ovo su veoma mone alatke. Ipak, preporuujemo vam da se, uei Javu pomou ove knjige, naroito ako nemate zavidno programersko iskustvo, drite kompleta JDK kompanije Sun i nekog najjednostav-nijeg editora za pravljenje izvornog koda. Verovatno se pitate zato vam ne preporuujemo korienje alatki koje olakavaju i ubrzavaju programiranje. Postoji vie razloga. Najpre, pro-fesionalni sistemi za razvoj programa kriju od vas mnogo toga to morate da znate ukoliko elite da savladate Javu. Zatim, ova okruenja koriste se za pravljenje sloenih aplikacija sa mnogo koda i bolje je da se u fazi uenja te kompleksnosti klonite. Praktino sva komerci-jalna okruenja za razvoj Java programa imaju unapred ugraene funkcije koje ubrzavaju programiranje. Ovo je izuzetno korisno za iskusne programere, ali predstavlja ozbiljnu smet-nju u procesu uenja. Treba da vodite rauna i o tome da su komercijalna okruenja nekada povezana sa konkretnom verzijom platforme Java 2. To znai da neke od najnovijih funkcija moda nee funkcionisati. Ukratko, profesionalna okruenja za programiranje u Javi name-njena su prvenstveno obuenim i iskusnim programerima, tako da vam preporuujemo da na njih preete tek kada proitate ovu knjigu.

    Sa druge strane, ukoliko iz bilo kog razloga elite da radite u nekom komercijalnom sistemu za razvoj Java programa, a imate problema sa nekim primerom iz knjige, dati primer uvek moete da, korienjem komandne linije, isprobate i u okviru kompleta JDK. Po svoj prilici, primer e funkcionisati bez problema.

    Instaliranje kompleta JDKNa veb lokaciji kompanije Sun postoje detaljne instrukcije o postupku instaliranja kompleta JDK u okviru raznih operativnih sistema, tako da ovde neemo ulaziti u sve varijacije ovog postupka. Ipak, trebalo bi da obratite panju na nekoliko stvari koje moda neete primetiti u dokumentaciji postupka instaliranja.

    Najpre, komplet JDK i njegova dokumentacija su potpuno nezavisni i instaliraju se posebno. Komplet JDK za operativni sistem Windows postoji u dve verzije kao veb instalacija u kojoj se datoteke preuzimaju redom i kao kompletno preuzimanje .exe datoteke ijim se aktivi-ranjem pokree celokupna instalacija. Dokumentaciju kompleta JDK ini veliki broj HTML hijerarhijski ureenih datoteka koje se distribuiraju u formi ZIP datoteke. Bie vam lake da najpre instalirate JDK, pa tek onda i dokumentaciju. Ukoliko pod operativnim sistemom Windows komplet JDK instalirate na jedinicu C:, dobiete strukturu direktorijuma kao na slici 1-1.

    Direktorijum jdk1.5.0_n sa slike 1-1 nekada se naziva i Javin koreni direktorijum, a nekada Javin home direktorijum. U imenu stvarnog korenog direktorijuma moe se pojaviti i broj izdanja kompleta, to znai da bi ime direktorijuma moglo da glasi jdk.5.0_n, gde n predstav-lja broj izdanja. Primera radi, u prvom izdanju za odravanje ovaj direktorijum zvao bi se jdk.5.0_01.

    U direktorijumu sample nalaze se primeri aplikacija koje koriste protokol JNLP (Java Network Launching Protocol) koji se koristi za izvravanje aplikacija ili apleta sa mrenog servera bez potrebe korienja pretraivaa ili preuzimanja i instaliranja koda.

    Nema razloga da previe razmiljate o sadraju ovih direktorijuma, pogotovo ne sada, na samom poetku, ali bi trebalo da putanjama koje definiete u okviru svoje promenljive okru-enja PATH dodate i putanju jdk.5.0\bin. Ovo e vam omoguiti da kompajler i interpreter aktivirate sa bilo kog mesta, bez prethodnog navoenja putanje. Ukoliko ste JDK instalirali na jedinici C:, onda e ova putanja glasiti C:\jdk.5.0\bin.

  • Uvod u Javu

    jdk1.5.0

    bin demo include sample jre

    bin lib

    lib

    Koreni direktorijumu kome se nalaze datoteke

    izvornog koda za klasestandardne biblioteke

    JNLP primeri

    Izvrne datoteke za Runtime Biblioteke klasa

    Java RuntimeKompajler, interpreter

    +ostaleizvrne

    datoteke

    Poddirektorijumi u kojima se nalazi

    probni kd

    Datoteke zaglavlja za

    nativni C kod

    Datoteke koje su potrebne izvrnim

    datotekama

    Slika1-1

    Samo jedno upozorenje ukoliko ste prethodno instalirali neki komercijalni proizvod za pro-gramiranje u Javi, proverite da li je on moda izmenio vau promenljivu okruenja PATH i u nju ubacio putanje do vlastitih Java izvrnih datoteka. Ako jeste, prilikom pokretanja Java kompajlera ili interpretera pojavie se verzija datog komercijalnog proizvoda, a ne ona koju ste dobili uz JDK. Ovaj problem moete da reite tako to ete sami ukloniti neeljenu putanju ili putanje. Ukoliko iz nekog razloga ne elite da uklonite ove putanje komercijalnog proi-zvoda, prilikom svakog pokretanja kompajlera ili interpretera moraete da navedete njihovu punu putanju. U direktorijumu jre nalaze se Java Runtime elementi koji se koriste prilikom izvravanja Java programa. Klase Javine biblioteke uvaju se u direktorijumu jre\lib. Njih, meutim, neete moi da vidite pojedinano zato to su upakovane u arhivu rt.jar. Ovde nita ne dirajte. Java Runtime prilikom izvrenja vaih programa sam iz ove arhive uzima ono to mu je potrebno.

    Promenljiva okruenja CLASSPATH predstavlja est izvor problema i zabune za poetnike u ovom programskom jeziku. Aktuelni komplet JDK NE ZAHTEVA definisanje ove promenljive, ali ako ju je ve definisala neka druga verzija Jave ili nekog drugog sistema, ona e vam gotovo sigurno napraviti probleme. Komercijalni sistemi za programiranje u Javi i verzije kompleta JDK starije od 1.2 najee definiu promenljivu CLASSPATH. Zato obavezno proverite da li je ova promenljiva okruenja definisana na vaem sistemu. Ako jeste, a vi vie ne koristite apli-kaciju koja je ovu promenljivu instalirala, slobodno je obriite. Sa druge strane, ukoliko ba morate da je zadrite recimo da elite da zadrite sistem koji je definisao ili delite raunar sa nekim kome je ona i dalje potrebna, prilikom svakog izvravanja Java koda moraete da privremeno definiete promenljivu CLASSPATH korienjem opcije komandne linije. U nastavku ovog poglavlja pokazaemo vam kako se to radi.

    Ukoliko elite da se i JDK dokumentacija instalira u hijerarhiju prikazanu na slici 1-1, raspa-kujte je u Java korenom direktorijumu. Ako ste komplet JDK instalirali na jedinici C:, to bi onda bila putanja C:\jdk.5.0. Nakon toga, u Java korenom direktorijumu pojavie se i poddi-rektorijum docs u koji treba da instalirate datoteke ove dokumentacije. Kada budete eleli da koristite ovu dokumentaciju, jednostavno pokrenite datoteku index.html koja e se nalaziti u ovom poddirektorijumu..

    Raspakivanje izvornog koda biblioteka klasaIzvorni kd biblioteka klasa nalazi se u arhivi src.zip koju ete pronai u Java korenom direktorijumu jdk.5.0. Kada savladate osnove programskog jezika Java, pretraivanje ovog izvornog koda bie vam od velike koristi. ak i iskusnijim Java programerima ove izvorne datoteke mogu pomoi da shvate kako odreene stvari funkcioniu ili zato neto ne funkcio-

  • Poglavlje 1

    nie. Izvorne datoteke moete da raspakujete iz arhive pomou programa Winzip, pomonog programa JAR koji se dobija uz JDK ili bilo kog drugog programa koji je u stanju da raspakuje .zip arhive. Skreemo vam panju na to da je u pitanju velika arhiva i da e taj postupak potrajati.

    Nakon raspakivanja sadraja arhive src.zip u Java korenom direktorijumu \jdk1.5.0 pojavie se poddirektorijum src u koji e se automatski instalirati izvorni kd. Ukoliko elite da ga pregledate i u njemu pronaete neku klasu u bilo kom editoru teksta, samo otvorite .java datoteku koja vas zanima..

    Kompajliranje Java programaJavin izvorni kd se uvek uva u datotekama sa oznakom tipa .java. Kada napravite izvorni kd za program i sauvate ga u datoteci .java, potrebno je da se izvorni kd obradi Java kom-pajlerom. Pre nego to upotrebite kompajler koji se dobija uz JDK, direktorijum u kome se nalazi va izvorni kd uinite tekuim direktorijumom, a zatim zadajte sledeu komandu:

    javac MyProgram.java

    U ovom sluaju javac je ime Java kompajlera, a MyProgram.java ime izvorne datoteke programa. U ovoj komandi pretpostavlja se da se u tekuem direktorijumu nalazi vaa izvorna datoteka. Ukoliko ona nije tu, kompajler nee moi da je pronae. Isto tako, ovde smo pretpostavili i to da izvorna datoteka odgovara definiciji programskog jezika Java iz aktuelne verzije kompleta JDK. Postoji i opcija komandne linije source kojom moete da naznaite verziju Jave. Za JDK 5.0 komanda koju smo ve naveli bi uz dodatak ovog parametra glasila:

    javac -source 5 MyProgram.java

    Skreemo vam panju na to da kao vrednost opcije source moete da koristite i 1.5 i u tom sluaju komanda izgleda ovako:

    javac -source 1.5 MyProgram.java

    U praksi moete da zanemarite ovu opciju komandne linije osim ukoliko ne elite da kompaj-lirate Java program koji je napisan u starijoj verziji kompleta JDK. Za kompajliranje koda koji je napisan u JDK 1.4, napisali biste sledeu komandu:

    javac -source 1.4 oldSourceCode.java

    Evo i jednostavnog programa koji moete da isprobate u kompajleru:

    public class MyProgram { public static void main(String[] args) { System.out.println(Rome wasnt burned in a day!); }}

    Sve to ete kao rezultat dobiti jeste ispisivanje jedne reenice u komandnoj liniji. S obzirom na to da je poenta ovog programa samo isprobavanje kompajlera, sada neemo objanjavati kako on radi. Naravno, ovaj kd morate da upiete upravo onako kako je naveden i snimite izvornu datoteku kao MyProgram.java. Ako pogreite, kompajler e da signalizira greku.

  • Uvod u Javu

    Ukoliko biste eleli da prevaziete postojeu definiciju promenljive CLASSPATH recimo, zato to ju je definisao neki drugi sistem za programiranje u Javi, komanda bi izgledala ovako:

    javac -classpath . MyProgram.java

    Iza rei classpath dolazi vrednost ove promenljive, a u ovom sluaju stoji samo taka. Na ovaj nain definie se samo putanja do tekueg direktorijuma. To znai da e kompajler vau izvornu datoteku (ili datoteke) potraiti u tekuem direktorijumu. Ukoliko zaboravite na ovu taku, kompajler nee moi da pronae izvorne datoteke u tekuem direktorijumu. U svakom sluaju, opciju classpath. moete da ubacite bez ikakvog straha zato to ona nikako ne moe da kodi.

    Skreemo vam panju na to da svoje izvorne datoteke ne treba da uvate u strukturi direk-torijuma kompleta JDK zato to vam to moe napraviti probleme. Bolje je da izvorne kodove svojih programa uvate u posebnim direktorijumima koje ste sami napravili.

    Ako u vaem programu nema greaka, kompajler e da generie bajtkod program koji pred-stavlja ekvivalent vaeg izvornog koda. Bajtkod program se uva kao datoteka istog imena kao izvorna datoteka, ali sa oznakom tipa .class. Javini izvrni moduli uvek se uvaju u vidu datoteka sa oznakom tipa .class. Prema podrazumevanim parametrima, datoteka .class bie sauvana u onom direktorijumu u kome se nalazi i izvorna datoteka.

    Opcije komandne linije koje smo vam ovde prikazali samo su neke od opcija koje moete da koristite u kompajleru. Meutim, one su sasvim dovoljne za kompajliranje svih primera iz ove knjige. U okviru JDK dokumentacije postoji detaljan opis svih raspoloivih opcija kom-pajlera. Pored toga, navoenjem opcije help moete da dobijete spisak standardnih opcija koje vam stoje na raspolaganju.

    Ukoliko za razvijanje programa u Javi koristite neki drugi proizvod, prilikom kompajliranja programa ete verovatno koristiti neki pristupaniji grafiki korisniki interfejs u kome neete morati da na ovaj nain upisujete komande. Meutim, oznake tipa rezultujuih izvornih i klasnih datoteka svuda su iste.

    Izvravanje Java aplikacijeDa biste pokrenuli izvravanje bajtkod programa u vidu datoteke .class pomou Java inter-pretera koji je deo kompleta JDK, direktorijum u kome se nalazi datoteka .class uinite teku-im i zatim upiite komandu:

    java -enableassertions MyProgram

    Skreemo vam panju na to da smo za identifikovanje programa koristili samo ime MyProgram, a ne ime datoteke MyProgram.class koju je generisao kompajler. Poetnici esto prave ovu greku i, po analogiji sa operacijom kompajliranja, koriste ime datoteke. Kada biste imenu MyProgram dodali i oznaku tipa .class, va program se ne bi izvrio i dobili biste sledeu poruku o greci:

    Exception in thread main java.lang.NoClassDefFoundError: MyProgram/class

    Dok kompajler oekuje da pronae ime vae izvorne datoteke, Java interpreteru potrebno je ime klase u ovom sluaju MyProgram a ne ime datoteke. Datoteka MyProgram.class sadri i klasu MyProgram. Uskoro emo vam objasniti i ta je klasa.

  • Poglavlje 1

    10

    Opcija enableassertions neophodna je kod JDK 5.0 programa koji koriste tvrdnje. S obzirom na to da ete tvrdnje koristiti im nauite ta su one zapravo, bilo bi dobro da razvijete naviku stalnog korienja ove opcije. Ukoliko elite, opciju enableassertions moete i da skratite u ea.

    Ukoliko elite da preskoite postojeu definiciju promenljive CLASSPATH, ova opcija je ista kao i kod kompajlera. I u kompajleru i u interpreteru moete da koristite skraenicu umesto classpath upiite samo cp. Evo kako bi ova komanda mogla da izgleda:

    java -ea -cp . MyProgram

    Kako bi izvrio va program, Java interpreter analizira i zatim izvrava bajtkod instrukcije. Implementacija Java Virtual Machine je identina na svim raunarskim okruenjima koja podravaju Javu, tako da moete biti sasvim sigurni u prenosivost svog programa. Kao to smo ve rekli, va program e jednako dobro da radi na Unixovoj implementaciji Jave, kao i pod bilo kojim drugim operativnim sistemom (Microsoft Windows, Solaris, Linux, OS/2) koji podrava Javu. (Ipak vodite rauna o tome koja je verzija Jave podrana. Neka okruenja kao to je, na primer, Macintosh malo kasne, tako da e se za njih implementacija Jave 2 pojaviti neto kasnije nego za Windows ili Solaris.)

    Izvravanje apletaJava kompajler koji je deo kompleta JDK, kompajlira i aplikacije i aplete. Meutim, aplet se ne izvrava na isti nain kao i aplikacija. Da bi mogao da se pokrene, aplet se mora ugraditi u veb stranu. Nakon toga moete da ga pokrenete ili pomou pretraivaa u kome je ukljuena opcija Java 2 ili korienjem krajnje jednostavnog i ogoljenog pretraivaa appletviewer koji se dobija uz JDK. Preporuujemo vam da za pregledanje apleta u fazi uenja koristite appletvi-ewer. Ako va aplet ne bude funkcionisao, tano ete znati da li je problem u vaem kodu ili u integraciji sa pretraivaem.

    Kompajlirani aplet koji ste ugradili u veb stranu i sauvali u tekuem direktorijumu svog raunara kao MyApplet.html moete da pokrenete sledeom komandom:

    appletviewer MyApplet.html

    Ali kako se aplet ubacuje u veb stranu?

    Jezik HTML

    Jezik za oznaavanje hiperteksta (Hypertext Markup Language, HTML) jeste jezik koji se koristi za definisanje veb strana. Kada veb stranu definiete kao HTML dokument, ona se uva kao datoteka sa oznakom tipa .html. HTML dokument se sastoji od niza elemenata koji se identi-fikuju tagovima. Dokument poinje sa , a zavrava se sa . Ovi graninici i predstavljaju tagove i svaki element HTML dokumenta nalazie se unutar slinog para tagova u uglastim zagradama. Tagovi elemenata ne razlikuju upotrebu malih i velikih slova, tako da ih moete koristiti bez ikakvih ogranienja, ali se prema konvenciji uvek koriste velika slova kako se ne bi meali sa tekstom. Evo primera HTML dokumenta koji ima naslov i malo teksta:

    This is the title of the document

  • Uvod u Javu

    11

    Ovde moete da stavite bilo kakav tekst. Telo dokumenta moe da sadri sve vrste ostalih HTML elemenata, ukljuujui i Java aplete. Skreemo vam panju na to kako svaki element poinje tagom koji ga identifikuje, a zavrava se istim tim tagom kome je dodata jedna kosa crta. Parom tagova oko Java apleta u prethodnoj reenici postigli bismo ispisivanje teksta polucrnim slovima.

    Postoje dva elementa koji se mogu pojaviti direktno unutar elementa . Kao to moete da vidite u prethodnom primeru, u pitanju su elementi i . Element obez-beuje informacije o dokumentu, a nije obavezno njegov deo. Tekst obuhvaen tagovima , koji je u ovom primeru u okviru elementa , predstavljae naslovnu liniju pro-zora u kom se prikazuje stranica.

    Tagovi ostalih elemenata mogu se nalaziti u okviru elementa i u pitanju su tagovi za naslove, liste, tabele, hiperveze ka drugim stranama i Java aplete. Postoje elementi za koje nije potrebno stavljati zavrni tag zato to se smatraju praznim. Takav je, na primer, kd elementa kojim se postavlja horizontalna linija celom irinom stranice. Ovim tagom moete da podelite stranu i odvojite jednu vrstu elemenata od druge.

    Dodavanje apleta u HTML dokumentZa veinu parova tagova elemenata u poetnom kodu moete da navedete atribut elementa koji definie dodatne ili kvalifikujue podatke o elementu. Ovako je Java aplet identifikovan u okviru taga . Sledi primer u kome ete videti kako se Java aplet ugrauje u HTML dokument:

    A Simple Program

    Dvema osenenim linijama izmeu tagova za horizontalne linije istakli smo to da se bajtkod apleta nalazi u okviru klase MyFirstApplet.class. Ime datoteke koja sadri bajtkod apleta navodi se kao vrednost atributa code kontrolnog koda . Druga dva atributa width i height definiu irinu i visinu dela ekrana koji e aplet da koristi prilikom svog izvrenja. Ovi parametri moraju se precizirati za svaki aplet. Evo kako izgleda Javin izvorni kd jednostav-nog apleta.

    import javax.swing.JApplet;import java.awt.Graphics;

    public class MyFirstApplet extends JApplet {

    public void paint(Graphics g) { g.drawString(To climb a ladder, start at the bottom rung, 20, 90); }}

  • Poglavlje 1

    1

    Skreemo vam panju na to da Java razlikuje upotrebu velikog i malog slova. Ukoliko re public upiete sa velikim slovom P, program se nee kompajlirati. Kada pokrenete aplet, on e vam samo prikazati poruku na ekranu. Za sada nije mnogo bitno ta se deava u pozadini prikazivanja ove poruke ovim primerom smo samo eleli da vam ilustrujemo kako se aplet ugrauje u HTML stranu. Ukoliko ovaj kd kompajlirate i prethodnu specifikaciju HTML strane snimite kao MyFirstApplet.html u istom direktorijumu u kome je i kd Java apleta, aplet ete moi da pokrenete i pomonim programom appletviewer. Komanda je sledea:

    appletviewer MyFirstApplet.html

    Nakon toga pojavie se prozor poput ovoga na slici 1-2.

    Slika1-2

    Ovaj prozor je prikazan u Internet Exploreru pod operativnim sistemom Windows XP i vero-vatno bi neto drugaije izgledao u nekom drugom pretraivau i pod nekim drugim opera-tivnim sistemom. Budui da su visina i irina prozora u apletu navedeni u pikselima, njegove stvarne dimenzije zavisie od rezolucije i veliine vaeg monitora.

    S obzirom na to da JDK automatski instalira Javin dopunski modul, trebalo bi da ovaj primer funkcionie bez ikakvih problema u Internet Exploreru. U sluaju da ne radi, iz menija Tools vaeg Internet Explorera izaberite stavku Internet Options. U kartici Advanced pronaite opciju Use JRE v1.5.0 for (requires restart) i proverite da li je izabrana. Za pre-traivae Mozilla 1.x ili Netscape 7.x moete da u instalacionoj dokumentaciji kompleta JDK pronaete kako se ovaj Java dopunski modul naknadno ukljuuje.

    Objektno orijentisano programiranje u JaviKao to smo na poetku ovog poglavlja ve istakli, Java je objektno orijentisan programski jezik. Prilikom korienja jezika koji nisu objektno orijentisani vi, u osnovi, reenje svakog problema morate da iskaete pomou brojeva i znakova osnovnih tipova podataka kojima moete da manipuliete u jednom programskom jeziku. U objektno orijentisanim program-skim jezicima stvari stoje malo drugaije. U njima i dalje moete da radite sa brojevima i znacima koji se nazivaju osnovnim tipovima podataka, ali i da definiete druge vrste entiteta koji su relevantni za konkretan problem koji elite da reite. Dakle, u objektno orijentisanim jezicima za reavanje problema koriste se entiteti ili objekti koji su povezani sa datim proble-mima. Ova injenica e uticati na nain strukturiranja programa, ali i na termine kojima se for-mulie reenje problema. Ukoliko se, primera radi, va problem tie bejzbol igraa, u vaem Java programu e se po svemu sudei nai i objekat po imenu BaseballPlayer; ako se bavite proizvodnjom voa u Kaliforniji, u vaem programu bi mogao da se nae objekat Oranges.

  • Uvod u Javu

    1

    Osim injenice da imaju veoma razumnu strukturu, objektno orijentisani programi su obino mnogo razumljiviji.

    U Javi je praktino sve definisano objektima. Ako se ranije niste bavili objektno orijentisanim programiranjem (ili jeste, ali ne u toj meri), ovo vam se na prvi pogled moe uiniti zastrau-juim. Samo hrabro! Javini objekti su sasvim jednostavni toliko jednostavni da emo odmah prei na njih kako biste to pre shvatili principe na kojima se ovaj programski jezik zasniva. U tom smislu, ve od samog poetka biete na pravom putu.

    Ipak, ovo ne znai da emo bilo ta preskoiti. Na ovom mestu emo se baviti, pre svega, osnovnim konceptima. Tamo gde je to potrebno, u tome e nam pomoi i segmenti Java koda. Sav kd koji emo ovde koristiti u potpunosti emo objasniti u poglavljima koja slede. Sada samo pokuajte da razumete pojam objekata, a njihovi konkretni praktini detalji doi e kasnije na red.

    ta su zapravo objekti?Objekt moe da bude bilo ta. Objekti su svuda oko nas. Tako bi, na primer, Drvo mogao da predstavlja odreenu klasu objekata drvea u celini. Uopteno govorei, objekat Drvo je prilino apstraktan koncept iako se svako drvo uklapa u ovu kategoriju, bolje je imati kon-kretnije objekte za vrste drvea. Tako bi hrast u mom dvoritu bio oznaen sa mojHrast, jasen u vaem dvoritu sa onoProkletoDrvo, a uvena ogromna sekvoja u SAD, koja je pod zatitom drave, sa generalSherman i svi oni predstavljaju konkretne primere drveta. Potklase objekta Tree u ovom kontekstu su Hrast, Jasen i Sekvoja. Skreemo vam panju na to da ve ovde lagano ulazimo u terminologiju klasa je termin koji se odnosi na specifikaciju skupa obje-kata koji imaju zajednika svojstva. Na slici 1-3 prikazane su neke klase drvea, kao i njihovi meusobni odnosi.

    Dakle, klasa je specifikacija ili shematski plan u formi segmenta programskog koda koja definie kakva je struktura odreene vrste objekta. Potklasa je klasa koja nasleuje sva svoj-stva roditeljske klase, ali ima i neke posebnosti. Klase Hrast i Jasen koje pripadaju klasi Drvo moraju imati karakteristike ove opte klase inae ne bi mogle da joj pripadaju. Meutim, svaka potklasa klase Drvo, kao to je, na primer, klasa Hrast, ima i neke posebnosti kojima se razlikuje od ostalih tipova klase Drvo.

    Naravno, klasu ete definisati tako da se uklopi u ono to elite da uinite sa nekim kontek-stom u aplikaciji. Ovde nema iskljuivosti. U naem trivijalnom problemu specifikacija klase Drvo mogla bi da obuhvati samo ime vrste i njenu visinu. Ali, ukoliko biste se bavili botani-kom, va problem bi mogao da zahteva postojanje mnogo sloenije klase, ili skupa klasa, koje bi morale da obuhvate i veliki broj drugih osobina drvea.

    Za svaki objekat koji e va program da upotrebi mora negde da postoji odgovarajua defi-nicija klase u koju se uklapaju objekti tog tipa. Ovo pravilo vai i u Javi, ali i u svim drugim objektno orijentisanim programskim jezicima. Koncepcija klasa u programiranju identina je sa klasifikovanjem stvari u stvarnom svetu. To je pogodan i ustanovljen nain za grupisanje stvari.

    Primerak klase jeste tehniki termin za postojei objekat neke klase. Klasa Jasen predstavlja specifikaciju tipa objekta, a va objekat vasJasen napravljen je prema toj specifikaciji. Dakle, objekat vasJasen bio bi primerak klase Jasen. im definiete klasu, moete da kreirate objekte ili primerke date klase. Ova konstatacija dovodi nas do sledeeg bitnog pitanja. Po emu se objekat jedne klase (recimo, Jasen) razlikuje od objekta koji pripada nekoj drugoj klasi (na primer, Sekvoja)? Drugim reima, kojim se to informacijama definie klasa?

  • Poglavlje 1

    1

    Opte drvo

    Izvedeno iz Izvedeno iz

    Izvedeno iz

    Sekvoja

    Hrast

    Jasen

    Pravljenjeprimerka

    Objekti tipaJasen

    mojJasen vasJasen

    Pravljenjeprimerka

    Objekti klase Drvo odlikovae se odreenim zajednikim svojstvima.

    Svaki objekat u okviru ove klase imae neke sopstvene

    vrednosti ovih svojstava.

    Slika1-3

    ta definie klasu objekata?Verovatno ste ve sami pogodili kako glasi odgovor na ovo pitanje. Definicija klase identifi-kuje sve parametre koji definiu objekat date klase. Ovakva definicija nam je za sada dovoljna. Moda bi neko drugi definisao klasu veim ili manjim skupom parametara koji definiu istu vrstu objekta sve zavisi od toga ta zapravo elite da uradite sa datom klasom. Vi odluujete koje ete aspekte objekata upotrebiti za definisanje date klase objekata, a birate ih u zavisnosti od vrste problema za koji su vam objekti te klase potrebni. Zamislimo sada neku konkretnu klasu objekata.

    Kada biste, primera radi, definisali klasu Hat, u njenoj definiciji biste mogli da koristite samo dva parametra. Tip kape biste mogli da definiete nizom znakova Fedora ili Bezbol kapa, a veliinu numerikom vrednou. Parametri koji definiu objekat neke klase nazivaju se promenljive primerka, atributi klase ili polja klase. Promenljive primerka mogu da budu osnovni tipovi podataka kao to su brojevi, ali isto tako i objekti drugih klasa. Primera radi, naziv objekta Hat mogao bi da bude definisan tipom String gde klasa String definie objekte koji se sastoje od niza znakova.

  • Uvod u Javu

    1

    Naravno, postoje i mnoge druge osobine kojima biste mogli da upotpunite definiciju objekta Hat atribut boja mogao bi da bude drugi niz znakova, na primer, Plava. Prilikom definisa-nja klase, opredeljujete se za onaj skup atributa koji ispunjava vae zahteve. U terminologiji objektno orijentisanog programiranja, ovo se naziva apstrahovanje podataka zato to iz ita-vog niza mogunosti jednog tipinog objekta vi izdvajate one atribute koje elite da koristite.

    U Javi bi definicija klase Hat izgledala ovako:

    class Hat { // Ovde se nalazi ono to detaljno definie klasu. // Ovde bismo mogli da definiemo naziv kape, njenu veliinu, // moda boju i sve drugo to nam je potrebno.}

    Naziv klase dolazi iza rei class, a detalji njene definicije izmeu velikih zagrada.

    Zbog svog posebnog znaenja, re class u programskom jeziku Java naziva se kljuna re i njeno korienje rezervisano je samo za ovaj kontekst. U Javi postoji mnogo drugih kljunih rei sa kojima ete se vremenom upoznati. Zapamtite da se nijedna od njih ne sme koristiti u neke druge svrhe.

    Ovde neemo ulaziti u detalje definisanja klase Hat zato to vam to trenutno nije neophodno. Redovi izmeu zagrada u naem prethodnom primeru nisu kd, ve komentari programa, budui da poinju sa dve kose crte. Kompajler u Java programima ignorie sve to se u nekom redu nalazi iza ove dve kose crte, tako da ih moete koristiti za ostavljanje objanje-nja. Uopteno govorei, to vie korisnih komentara dodate u svoj program, tim bolje. U Javi postoje i drugi naini za pisanje komentara, o emu emo govoriti u poglavlju 2.

    Svaki objekat vae klase imae konkretan skup definisanih vrednosti koje ga karakteriu. Primera radi, mogli biste da imate objekat tipa CowboyHat koji bi bio definisan vrednostima Stetson za tip, Belo za boju i brojem 7 za veliinu (slika 1-4).

    Iako su objekti tipa CowboyHat sa slike 1-4 definisani skupom od tri vrednosti za koje ne biste oekivali da se menjaju u datom primerku, uopteno govorei, vrednosti parametara koji definiu objekte ne moraju biti fiksirane. Bilo bi logino da su vrednosti tip i veliina datog objekta CowboyHat fiksirane budui da eiri obino ne menjaju svoju veliinu bar to ne ine kada je suvo. Ali, tu bi mogli da postoje i neki drugi atributi (slika 1-5).

    Na primer, mogao bi da postoji i parametar vlasnik u kome bi bilo zapisano ime vlasnika. Ova vrednost bi onda mogla da se promeni kad god bi eir prodajom, ili na neki drugi nain, promenio vlasnika. Isto tako, mogli bismo da imamo i parametar hatOn koji bi nam govorio da li je vlasnik stavio eir na glavu (vrednost tano) ili nije (vrednost netano).

  • Poglavlje 1

    1

    Primerciklase

    class CowboyHat {

    String type; String color; int size;

    {

    tip: Stetsonboja: belaveliina: 6

    tip: Stetsonboja: sivaveliina: 7

    Slika1-4

    Primerciklase

    class CowboyHat {

    String owner; String type; String color; int size; boolean hatOn;

    {

    vlasnik: Jedtip: Stetsonboja: belaveliina: 6hatOn: netano

    vlasnik: Slimtip: Stetsonboja: sivaveliina: 7hatOn: tano

    Figure1-5

  • Uvod u Javu

    1

    Operacije sa objektimaSuprotno onome to biste mogli da zakljuite gledajui sliku 1-5, objekat neke klase nije samo skup razliitih podataka. Osim parametara koji karakteriu neki objekat, u okviru klase je precizirano ta moete da uinite sa njenim objektom odnosno, definisane su operacije koje je mogue izvesti sa objektima date klase. Naravno, da biste u programu imali bilo kakvu korist od objekata, najpre morate da odluite na koji nain elite da ih koristite. U tom smislu, vano je znati o kojoj je vrsti objekta re, koje atribute on sadri i ta vi nameravate sa njim da uinite.

    U sluaju klase CowboyHat sa slike 1-5, mogli biste da imate operacije koje biste nazvali putHatOn i takeHatOff, ije bi znaenje bilo u skladu sa njihovim nazivima i koje imaju smisla kod obje-kata CowboyHat. Ove operacije bi kod konkretnog objekta CowboyHat mogle da definiu vrednost hatOn. Da biste odredili da li je va CowboyHat stavljen ili nije, samo treba da proverite ovu vrednost. Isto tako, mogli biste imati i operaciju changeOwner kojom biste definisali promenljivu u okviru koje se evidentira ime aktuelnog vlasnika eira. Na slici 1-6 sa objektom CowboyHat redom smo izveli dve operacije.

    vlasnik: TimBtip: Stetsonboja: belaveliina: 7eirStavljen: netano

    changeOwner putH

    atOn

    vlasnik: JonFtip: Stetsonboja: belaveliina: 7eirStavljen: tano

    vlasnik: JonFtip: Stetsonboja: belaveliina: 7eirStavljen: netano

    Slika1-6

  • Poglavlje 1

    1

    Naravno, za svaku vrstu objekta moete imati one operacije koje vi elite. Kada biste za objekte Hat eleli da dodate operaciju ShootHoleIn, ni to ne bi bio nikakav problem. Treba samo da definiete ta data operacija ini sa objektom.

    Moda se u ovom trenutku pitate kako se definie operacija za neku klasu objekata. Kao to ete uskoro i videti, to se svodi na pravljenje segmenta koda po imenu metod koji se identifi-kuje imenom koje mu dodelite. Metodima moete da prosledite razne podatke cele brojeve, brojeve u pokretnom zarezu, nizove znakova ili objekte klasa. Sve ove podatke obrauje kd datog metoda. Metod i sam moe da kao rezultat vrati podatke. Izvoenje operacija sa objek-tima svodi se na izvravanje metoda koji definie te operacije.

    Naravno, na odreenu klasu moete da primenite samo one operacije koje su u okviru nje ve definisane. To znai da upotrebljivost i fleksibilnost klase zavise od toga koliko ste je promiljeno definisali. U poglavlju 5 emo se vratiti na ovu temu.

    Da biste bili u stanju da prepoznate definiciju klase, razmotriemo kako izgleda jedna pot-puna definicija. Kd klase CowboyHat o kojoj smo ve govorili mogao bi da se ilustruje kao na slici 1-7.

    class CowboyHat {

    }

    private String owner;private int size;private boolean hatOn=false;

    // Konstruktor za pravljenje objekta CowboyHatpublic CowboyHat(String person, int theSize) { size = theSize; // Definisana je veliina eira owner = person; // Definisan je vlasnik eira}

    // Metod za stavljanje eira na glavupublic void putHatOn() { hatOn = true; // Zapisano je da je eir na glavi}

    // Metod za skidanje eirapublic void takeHatOff() { hatOn = false; // Zapisano je da je eir skinut}

    // Metod za promenu vlasnikapublic void changeOwner(String newOwner) { owner = newOwner;}

    // Metod za dobijanje veliine eirapublic int getSize() { return size; // Vraanje veliine eira}

    // Ime aktuelnog vlasnika// Veliina eira// Da li je eir na glavi ili nije

    Zagradama je obuhvaena definicija klase

    Unutar ovih zagrada nalazi se kd metoda putHatOn()

    Ovim se naznaavaju atributi klase

    Ovo je poseban metod kojim se kreiraju objekti Hat

    Ovo su ostali metodi klase

    Slika1-7

  • Uvod u Javu

    1

    Ovaj kd emo sauvati kao datoteku po imenu CowboyHat.java. Ime datoteke koje sadri defi-niciju klase uvek je isto kao ime klase, dok se oznakom tipa .java identifikuje Javin izvorni kd.

    Kd za definiciju klase nalazi se unutar vitiastih zagrada koje idu iza identifikacije klase (slika 1-7). Kd svakog metoda klase takoe se nalazi unutar zagrada. Klasa ima tri promen-ljive primerka owner, size i hatOn, a ova poslednja se uvek inicijalizuje vrednou false. Svaki objekat koji se kreira u skladu sa specifikacijom ove klase imae svoju nezavisnu kopiju svake od ovih promenljivih. To znai da e svaki objekat imati sopstvene vrednosti za vlasnika, veliinu eira i to da li je eir na glavi ili nije. Da bi kd bio krai, u ovoj verziji klase smo malo ograniili parametar type.

    Kljunom reju private koja je primenjena na svaku promenljivu primerka osigurava se to da samo kd u okvirima metoda klase moe da pristupi ovim vrednostima direktno i promeni ih. Metodi klase takoe mogu da se navedu uz korienje kljune rei private. Spreavanje pri-stupa nekim lanovima klase spolja jeste veoma vana funkcija. Na ovaj nain se unutranjost klase titi od menjanja ili drugih vidova neispravnog korienja. Nekome ko iz nekog drugog programa koristi vau klasu dozvoliete da pristupi samo onim delovima vae klase za koje vi smatrate da je to uputno. Zahvaljujui tome, vi moete da izmenite unutranje funkcioni-sanje klase, a da se to ne odrazi na ostale programe koji tu klasu koriste. Moete da izmenite sve ono to ste unutar klase oznaili kljunom reju private, pa ak i sam kd unutar bilo kog javnog metoda. Jedino ne smete da menjate ime metoda i brojeve i tipove vrednosti koji se tom metodu predaju ili se od njega dobijaju.

    Naa klasa CowboyHat ima pet metoda, to znai da sa objektom CowboyHat moete da uinite pet razliitih stvari. Jedan od njih je i specijalni metod konstruktor koji kreira objekat CowboyHat ovaj metod ima isto ime kao klasa. Svim onim to se nalazi unutar zagrada koje idu iza imena konstruktora, navode se podaci koji se predaju ovom metodu prilikom njegovog izvravanja odnosno, kreiranja objekta CowboyHat.

    U praksi biste morali da definiete jo nekoliko drugih metoda da bi ova klasa bila upotrebljiva. Primera radi, bio bi vam potreban i metod za poreenje CowboyHat obje-kata kako biste videli koji je od njih vei. Meutim, u ovom trenutku samo elimo da kod vas stvorimo predstavu o tome kako kd izgleda. Detalji nam ovde nisu vani jer emo se na njih vratiti u poglavlju 5.

    Programski iskazi u JaviKao to ste videli na primeru klase CowboyHat, kd svakog metoda neke klase stoji unutar zagrada, a sastoji se od programskih iskaza. Znak taka-zarez oznaava kraj svakog pro-gramskog iskaza. Ukoliko je potrebno, u Javi jedan iskaz moe da obuhvati i nekoliko redova koda, jer se kraj svakog od njih odreuje znakom taka-zarez, a ne krajem reda. Evo jednog Javinog programskog iskaza:

    hatOn = false;

    Ako elite, ovo biste mogli da napiete i ovako:

    hatOn = false;

  • Poglavlje 1

    0

    U iskaze moete da ubacite i razmake i tabulatorske znake i oni se mogu prostirati kroz neko-liko redova ime se postie bolja itkost, naroito u jako dugim iskazima. Ipak, postoje i neka razumna ogranienja. Recimo, ne moete da stavite znak za razmak usred imena nekog pri-merka. Kada biste napisali hat On, kompajler bi to proitao kao dve rei.

    EnkapsuliranjeU ovom odeljku emo vam predstaviti jo jedan termin kojim kasnije moete da impresioni-rate svoje prijatelje. U pitanju je enkapsuliranje. Taj termin se odnosi na postupak sakrivanja podataka i metoda unutar objekta. Ovo sakrivanje se postie tako to se ove stavke u definiciji klase navedu uz kljunu re private. U klasi CowboyHat promenljive primerka owner, type i hatOn su enkapsulirane. Njima je mogue pristupiti jedino putem metoda koji su definisani u okviru klase. Prema tome, vrednosti koje ove promenljive sadre mogu da se izmene jedino pozivom metoda koji je za to zaduen. Mogunost ovakvog enkapsuliranja lanova klase veoma je bitna za bezbednost i integritet objekata klase. Moda ete u nekom programu imati klasu sa podacima koji mogu da prime samo neke konkretne vrednosti. Sakrivanje podataka lanova i obavezno korienje metoda za njihovo definisanje ili menjanje, pruie vam garancije u pogledu valjanosti definisanih vrednosti.

    Neto ranije smo ve pomenuli veliku prednost enkapsuliranja mogunost sakrivanja implementacije klase. Ograniavanje pristupa lanovima klase pruie vam slobodu da unu-tranjost date klase menjate, a da se to ne odraava na programe koji je koriste. Dok god su spoljne karakteristike metoda koji se pozivaju izvan klase neizmenjene, interni kd moete da izmenite kako god vi to elite.

    U konkretnom objektu primerku klase CowboyHat enkapsulirane su promenljive owner, size, kao i hatOn, koje pokazuju status eira. Spolja je mogue pristupiti samo konstruktoru i meto-dima putHatOn(), takeHatOff(), changeOwner() i getSize().

    Kad god u tekstu budemo pozivali na neke metode, koristiemo zagrade kako biste mogli da ih razlikujete od drugih pojmova koji imaju imena. Neke od primera ove vrste ve ste videli u prethodnom pasusu. S obzirom na to da u definiciji i u progra-mima metodi uvek imaju zagrade, sasvim je logino da ih na isti nain navodimo i u tekstu.

    Klase i tipovi podatakaU programiranju se u osnovi bavimo nainima na koje se razni tipovi podataka obrauju ili transformiu. Budui da klase definiu tipove objekata sa kojima e program da radi, na defi-nisanje klase moete da gledate isto kao i na definisanje tipa podataka. Prema tome, klasa Hat je tip podatka kao to je to i klasa Tree i svaka druga klasa koju ete definisati. U Javi postoji i biblioteka standardnih klasa koje e vam pruiti itav niz programerskih alatki i funkcija. Dakle, u najveem broju sluajeva u vaim programima pisanim u Javi deavae se obraiva-nje, manipulisanje i transformisanje objekata raznih klasa.

    U Javi postoje i neki jednostavni tipovi podataka koji nisu klase, a nazivaju se osnovni tipovi podataka. O njima emo neto detaljnije govoriti u narednom poglavlju, a sada emo rei samo toliko da su u pitanju tipovi za numerike vrednosti kao to su, recimo, 99 ili 3,75, zatim

  • Uvod u Javu

    1

    za jednostavne znake kao to su A ili ?, ili za logike vrednosti kao to su true ili false. U Javi postoje i klase koje odgovaraju svakom od osnovnih tipova podataka iz razloga o kojima emo govoriti neto kasnije. Primera radi, u Javi postoji klasa Integer koja definie objekte koji enkapsuliraju cele brojeve. Svaki entitet vaih Java programa koji ne pripada osnovnim tipovima bie objekat neke klase ili klase koju ste vi definisali, ili one koja je bila deo Java okruenja ili nekog drugog programerskog paketa.

    Klase i potklaseMnogi skupovi objekata koje biste mogli da definiete u okviru klase mogli bi se dalje podeliti na specijalizovane podskupove koji su takoe predstavljeni klasama. Jedna od karakteristika Jave upravo je i ta mogunost definisanja jedne klase kao specijalizovane verzije neke druge. Tako je, zapravo, i u stvarnosti. Uvek postoji vie naina na koje biste mogli da podelite kola ili umu. Klasa etinar bi, primera radi, bila potklasa klase Drvo. To znai da klasa etinar ima sve promenljive primerka i metode klase Drvo, ali i neke dodatne koje je ine posebnom. Klasa etinar je potklasa klase Drvo, dok je klasa Drvo natklasa klase etinar.

    Zbog toga to smo prilikom njenog definisanja za polaznu taku upotrebili klasu Drvo, za klasu etinar emo rei da je izvedena iz klase Drvo i da od nje nasleuje sve atribute.

    Prednosti korienja objekataKao to smo ve rekli, objektno orijentisani programi napisani su korienjem objekata koji su specifini za probleme o kojima je re. Primera radi, u simulatoru flipera mogli biste da defi-niete i upotrebite objekte Table, Ball, Flipper i Bumper. Ovakva koncepcija je izuzetno pogodna zato to olakava razvoj i proirivanje programa i ini njihov kd razumljivijim. U okviru Jave postoji itav niz standardnih klasa koje e vam pomoi u razvoju programa, a uvek moete da napravite i svoje opte klase koje ete koristiti u onim oblastima koje vas posebno interesuju.

    S obzirom na to da u objektu postoje i metodi koji dejstvuju na njega i podaci koji ga definiu, greke u programiranju su mnogo ree ukoliko se koriste objekti. Vai objektno orijentisani Java programi bi morali da budu pouzdaniji od svojih ekvivalenata u proceduralnim pro-gramskim jezicima. Pravljenje objektno orijentisanih programa traje due zato to moramo da osmislimo i napravimo klase, ali pisanje samog koda kod njih nekada ide ak i mnogo bre nego kod proceduralnih programskih jezika. Osim toga, objektno orijentisani programi se lake odravaju i proiruju.

    Struktura Java programaPogledajmo sada kakva je struktura programa napisanih u Javi:

    q Program napisan u Javi uvek se sastoji od jedne ili vie klasa.

    q Kodovi svake klase obino se nalaze u posebnim datotekama, a svakoj od ovih datoteka morate dati isto ime kao i klasi koju njom definiete.

    q Izvorna Javina datoteka mora imati oznaku tipa .java.

  • Poglavlje 1

    Prema tome, datoteka u kojoj je definisana klasa Hat zvae se Hat.java, a datoteka u kojoj je definisana klasa BaseballPlayer BaseballPlayer.java.

    Na slici 1-8 ilustrovali smo tipian program koji se sastoji od nekoliko datoteka.

    Kompletan program sastoji se od 5 datoteka.

    CLASS-Y0ROGRAM[

    $EFINICIJAKLASE

    ]

    -Y0ROGRAM*AVA #OATJAVA 3HOEJAVA 3OCKJAVA (ATJAVA

    CLASS#OAT[

    $EFINICIJAKLASE

    ]

    CLASS3HOE[

    $EFINICIJAKLASE

    ]

    CLASS3OCK[

    $EFINICIJAKLASE

    ]

    CLASS(AT[

    $EFINICIJAKLASE

    ]

    Slika1-8

    Ovaj program nam je oigledno povezan sa odevanjem, jer etiri od pet klasa predstavljaju odevne predmete. Svaka izvorna datoteka sadri definiciju klase i sve datoteke koje ine pro-gram uvaju se u istom direktorijumu. U izvornim datotekama vaih programa nalazi se sav kd koji ste vi napisali, ali to ne znai da je tu apsolutno sve to je ugraeno u va program. U vaim programima bie i koda iz standardne javina biblioteke klasa i zato emo sada raz-motriti o emu je tu zapravo re.

    Javina biblioteka klasaU Javi, biblioteka predstavlja skup klasa, najee srodnih mogunosti, koje moete da kori-stite u svojim programima. Javina biblioteka klasa donosi vam itav niz pogodnosti. Bez nekih od njih vai programi ne bi ni funkcionisali, dok vam neke druge jednostavno znaajno olakavaju posao. S obzirom na sveobuhvatnost standardne biblioteke klasa, ovde neemo previe ulaziti u detalje, ali ete videti kako se primenjuju mnoge od njihovih mogunosti.

    Budui da biblioteka klasa u osnovi predstavlja skup klasa, ona se i uva u vidu skupova datoteka od kojih svaka sadri definiciju jedne klase. Ove klase su grupisane u povezane sku-pove koji se nazivaju paketi i svaki od njih se uva u posebnom direktorijumu. Jedna klasa moe da pristupi bilo kojoj drugoj klasi iz istog paketa, dok joj klase iz drugih paketa mogu, ali i ne moraju biti dostupne. Na ovu temu emo se vratiti u poglavlju 5.

    Ime paketa bazira se na putanji do direktorijuma u kome se uvaju klase koje datom paketu pripadaju. Primera radi, klase iz paketa java.lang uvaju se u direktorijumu java\lang (ili, java/lang pod Unixom). Ova putanja povezana je sa konkretnim direktorijumom koji je auto-matski poznat Java runtime okruenju koje izvrava va kd. Uvek moete da napravite i vlastite pakete u kojima e se nalaziti vae klase koje elite da koristite u nekom drugom kontekstu ili one koje su na neki nain povezane.

    U okviru kompleta JDK postoji sve vei broj standardnih paketa verovatno vie od 100. Evo paketa koje ete najee koristiti:

  • Uvod u Javu

    Naziv paketa Opis

    java.lang Ove klase podravaju osnovne jezike funkcije, rukovanje nizovima i znakovnim nizovima. Klase iz ovog paketa, prema podrazumeva-nim parametrima, uvek stoje na raspolaganju vaim programima zato to se uvek automatski uitavaju sa njima.

    java.io Klase za ulazne i izlazne operacije sa podacima.

    java.util U ovom paketu nalaze se razne pomone klase kao to su, na pri-mer, klase za rukovanje podacima koji se nalaze u kolekcijama, tj. grupama podataka.

    javax.swing Ove klase obezbeuju komponente za pravljenje grafikih korisni-kih interfejsa (GUI) koje su fleksibilne i lake za korienje. Nazivaju se i Swing komponente.

    java.awt Klase iz ovog paketa obezbeuju originalne GUI komponente (JDK 1.1), kao i neku najosnovniju podrku neophodnu Swing komponen-tama.

    java.awt.geom Ovim klasama definiu se dvodimenzionalni geometrijski oblici.

    java.awt.event Klase iz ovog paketa koriste se u implementaciji aplikacija sa prozo-rima za rukovanje dogaajima u okviru vaih programa. Dogaaji su, na primer, pomeranje mia, pritisak njegovog levog tastera ili izbor neke stavke iz nekog menija.

    Kao to smo ve napomenuli, u svojim programima prema podrazumevanim parametrima moete da koristite bilo koju klasu iz paketa java.lang. Za korienje klasa iz drugih paketa obino se koriste iskazi import u kojima se navode imena klasa koje su vam potrebne. To znai da klase moete da referencirate jednostavnim navoenjem njihovih imena. Kada ne biste koristili iskaz import, prilikom svakog korienja neke klase morali biste da navedete njeno puno kvalifikovano ime. Kao to ete uskoro i videti, puno kvalifikovano ime obuhvata osnovno ime klase, kao i ime paketa u kome se ta klasa nalazi. Korienje punih naziva klasa bi va program uinilo nezgrapnim i svakako manje itljivim. Pisanje takvih programa bi vam bilo osetno tee.

    Pomou iskaza import u svoj program moete da uvezete jednu ili sve klase nekog paketa. Dva iskaza import, koje ste videli na poetku koda apleta koji smo vam pokazali na poetku poglavlja, predstavljaju primere uvoza jedne klase. Prvi ovakav iskaz glasio je:

    import javax.swing.JApplet;

    Ovim iskazom uvozi se klasa po imenu JApplet koja je definisana u okviru paketa javax.swing. Formalno, ime ove klase nije JApplet njeno puno kvalifikovano ime je javax.swing.JApplet. Nekvalifikovana imena moete da koristite samo kada u svoj program uvozite klasu ili ceo paket u kome se ona nalazi. Klase iz paketa mogu i da se referenciraju (bez uvoenja), ali se tada koristi puno kvalifikovano ime u ovom sluaju, javax.swing.JApplet. Ukoliko elite, ovo moete da isprobate na datom apletu. Samo izbriite dva iskaza import iz datoteke i u pro-gramu upotrebite puna kvalifikovana imena klasa. Kada ponovo kompajlirate ovaj program, trebalo bi da funkcionie isto kao i ranije. Dakle, puno kvalifikovano ime klase ini ime paketa u kome je data klasa definisana iza koga slede taka i ime koje je dato klasi u njenoj definiciji.

  • Poglavlje 1

    Iskazom koji sledi mogli biste da uvezete imena svih klasa u okviru paketa java.swing:

    import javax.swing.*;

    Zvezdicom koja se nalazi na kraju iskaza navodi se da treba uvesti sve klase. Kompajliranje vaeg koda bie bre ukoliko uvezete samo one klase koje se u kodu koriste. Ali, ako koristite mnogo klasa nekog paketa, moda e vam se vie isplatiti da uvezete ceo taj paket. Time ete sebi utedeti trud oko kucanja velikog broja iskaza za uvoenje. Da bismo broj redova kodova sveli na minimum, mi smo se u ovoj knjizi upravo drali tog pristupa. Ipak, skreemo vam panju i na to da uvoenje svih klasa nekog paketa donosi i odreene rizike. Vrlo lako se moe dogoditi da u njima postoje klase sa identinim imenima koja ste vi dali svojim klasama, zbog ega bi u kompajliranju koda nastali veliki problemi.

    U poglavlju 5 emo vam jo detaljnije prikazati korienje iskaza import, a videete i kako se prave i koriste. Osim toga, u ostatku knjige ete vrlo esto biti u situaciji da koristite standardne pakete klasa.

    Kao to smo ve rekli, standardne klase na vaem disku nisu sauvane kao direktorijumi ili datoteke. One su upakovane u jednu komprimovanu datoteku po imenu rt.jar koja se nalazi u direktorijumu jre/lib. Ovaj direktorijum se automatski pravi prilikom instaliranja kompleta JDL. Datoteka .jar je Javina arhiva komprimovana arhiva sa Javinim klasama. Standardne klase koje e biti potrebne vaim programima uitavaju se automatski iz datoteke rt.jar, tako da neete imati nikakav neposredan kontakt sa njom.

    Java aplikacijeU svakoj Java aplikaciji postoji klasa koja definie metod po imenu main(). Ova klasa imae ime koje ete koristiti kao argument za Java interpreter prilikom pokretanja aplikacije. Klasu moete da nazovete kako god elite, ali metod koji se prvi izvrava u nekoj aplikaciji uvek se naziva main(). Nakon pokretanja Java aplikacije, metod main() obino prouzrokuje izvrenje metoda koji pripadaju drugim klasama, dok se najjednostavnija mogua Java aplikacija sastoji samo od jedne klase koja ima samo metod main(). Kao to ete videti u produetku, metod main() koristi se u konkretnom i nepromenljivom obliku. Ukoliko se odstupi od ovog oblika, Javin interpreter nee prepoznati ovaj metod kao metod od koga poinje izvrenje.

    Na primeru jednog Javinog programa moemo videti kako ovaj metod funkcionie. Kd programa treba da upiete u nekom editoru za obian tekst, ili to uinite u okviru editora svog Java razvojnog sistema. Kada upiete sav kd, sauvajte ga kao datoteku pod onim ime-nom koje ste koristili za klasu i sa oznakom tipa .java. U ovom primeru ime datoteke glasie OurFirstProgram.java. Kd ovog programa prikazan je na slici 1-9.

    Program se sastoji od definicije klase koju smo nazvali OurFirstProgram. U definiciji klase postoji samo jedan metod metod main(). Prvi red definicije metoda main() uvek ima sledei oblik:

    public static void main(String[] args)

  • Uvod u Javu

    PUBLICCLASS/UR&IRST0ROGRAM[

    ]

    PUBLICSTATICVOIDMAIN3TRING;=ARGS[3YSTEMOUTPRINTN+RAKATOA%!34OF*AVA]

    Ovo je definicija metoda MAIN.Kljuna re PUBLIC govori da je metod globalno dostupan.Kljunom reju STATIC osigurava se njegova dostupnost ak i ako ne postoje objekti date klase.Kljuna re VOID govori da ovaj metod ne vraa neku vrednost.

    Ovo je definicija klase /UR&IRST0ROGRAM. Definicija klase sadri samo metod MAIN.

    Slika1-9

    Kd ovog metoda stoji izmeu para velikih zagrada. Ova verzija metoda ima samo jedan izvrivi iskaz:

    System.out.println(Krakatoa, EAST of Java??);

    ta, u stvari, ovaj iskaz ini? Analizirajmo ga sleva nadesno.

    q System je ime standardne klase koja sadri objekte koji enkapsuliraju U/I ureaje vaeg sistema tastaturu za ulaz komandne linije i ekran za izlaz komandne linije. Klasa System se nalazi u okviru paketa java.lang, tako da joj uvek moete pristupiti korie-njem prostog imena System.

    q Objekat out u okviru klase System predstavlja standardni izlazni tok to je komandna linija na vaem ekranu. lan out, zapravo, predstavlja posebnu vrstu lana klase System. Poput metoda main() nae klase OurFirstProgram, i on je statian. To znai da out postoji ak i kada ne postoje objekti tipa System (neto vie o ovome u poglavljima koja slede). Korienjem imena klase System iza kojega stoji taka, a zatim ime metoda out System.out referencira se lan out.

    q Segment u desnom kraju iskaza, println(Krakatoa, EAST of Java??), poziva metod println() koji pripada objektu out, to dovodi do prikazivanja teksta na vaem ekranu onog teksta koji se nalazi izmeu zagrada kod metoda println. Ovim smo prikazali jedan od naina za pozivanje metoda klase korienje imena objekta iza koga sledi taka i ime metoda. Ono to se nalazi izmeu zagrada koje slede nakon imena metoda

  • Poglavlje 1

    jesu informacije koje se prosleuju metodu prilikom njegovog izvrenja. Kao to smo ve rekli, za println() to je tekst za koji elimo da se prikae u okviru komandne linije.

    Da bi sve bilo kompletno, kljune rei public, static i void koje se pojavljuju u okviru defi-nicije metoda ukratko su objanjene u komentarima programskog koda. Ako vam i dalje nisu najjasniji, ne treba da brinete zato to emo ih mnogo detaljnije opisati u poglavlju 5.

    Ovaj program moete da kompajlirate u JDK kompajleru korienjem komande:

    javac source 5 OurFirstProgram.java

    Isto to moete da uinite i navoenjem opcije classpath:

    javac classpath . OurFirstProgram.java

    Ukoliko se program nije kompajlirao, negde postoji greka. Evo moguih izvora problema:

    q Zaboravili ste da u okviru promenljive okruenja PATH navedete putanju do direktori-juma jdk1.5.0\bin ili to niste uinili tano. Zbog toga va operativni sistem nije uspeo da pronae javac kompajler koji se nalazi u tom direktorijumu.

    q Pogreili ste prilikom kucanja koda programa. Podseamo vas da se u Javi razlikuju mala i velika slova, to znai da OurfirstProgram nije isto to i OurFirstProgram. Pored toga, u nazivu klase ne sme biti razmaka. Kada ustanovi greku, kompajler najee odredi i broj reda u kome je greka utvrena. Posebno vodite rauna da ne pomeate broj 0 i malo slovo o, ili broj 1 i malo slovo l. Znaci kao to su take, zarezi ili take-zarezi jako su bitni za kd i moraju se uvek nalaziti na pravim mestima. Male (), srednje [] i velike zagrade {} uvek idu u paru i ne mogu se meusobno zamenjivati.

    q Ime izvorne datoteke mora da se poklapa sa imenom klase. I najmanja razlika izmeu njihovih imena rezultirae grekom. Ova datoteka mora da ima oznaku tipa .java.

    Kada se program kompajlira, moete da ga pokrenete komandom:

    java ea OurFirstProgram

    Opcija ea nije neophodna zato to u ovom programu nema tvrdnji, ali je bolje da steknete naviku da ih stavljate u program kako to ne biste zaboravili kada bude bilo bitno. Ukoliko je potrebno, moete da navedete i opciju classpath:

    java ea classpath . OurFirstProgram

    Ukoliko pretpostavimo da je izvorna datoteka uspeno kompajlirana i da ste naveli puta-nju do direktorijuma jdk1.5.0\bin, nemogunost izvravanja programa vrlo esto je posledica tipografskih greaka u imenu klase. Jo jedan od moguih uzroka greke bio bi da umesto imena klase OurFirstProgram napiete OurFirstProgram.class.

    Kada ga pokrenete, program e na ekranu ispisati sledei tekst:

    Krakatoa, EAST of Java??

  • Uvod u Javu

    Java i UnicodeProgramiranje podrke za jezike u kojima postoje znaci koji se razlikuju od latininog skupa znakova uvek je predstavljalo veliki problem. Postoji mnogo 8-bitnih skupova znakova koji su definisani za razne svetske jezike, ali ukoliko elite da u istom kontekstu kombinujete latinine i iriline znakove, situacija postaje prilino komplikovana. Kada biste eleli da tu dodate i podrku za japanski jezik, to jednostavno ne bi bilo mogue zato to vam u okviru 8-bitnog skupa znakova na raspolaganju stoji svega 256 razliitih kodova, to znai da ne biste imali dovoljno kodnih znakova. Unicode je standardni skup znakova koji je trebalo da omo-gui kodiranje znakova neophodnih za veinu svetskih jezika. U njemu se znaci predstavljaju 16-bitnim kodom (to znai da svaki znak zauzima 2 bajta) i tih 16 bitova omoguava do 65 535 kodnih znakova razliitih od nule. Ovako veliki broj raspoloivih kodnih znakova dozvoljava da se svakom znaajnijem nacionalnom skupu znakova dodeli vlastiti skup kodova. Jedan takav skup znakova je, primera radi, Kanji koji se koristi u japanskom jeziku i koji zahteva hiljade kodnih znakova. To, meutim, nije sve. Unicode podrava tri forme kodiranja koje omoguavaju predstavljanje miliona dodatnih znakova.

    Kao to ete videti u poglavlju 2, Javin izvorni kd je u Unicode znacima. Svi komentari, iden-tifikatori (drugim reima, imena proitajte poglavlje 2) i literali znakova i znakovnih nizova mogu da koriste sve znake Unicode skupa koji predstavljaju slova. Java i interno podrava Unicode za predstavljanje znakova i nizova, ime je dobijen radni okvir za sveobuhvatnu meunarodnu podrku u programima. Uobiajeni ASCII skup koji vam je, verovatno, ve poznat poklapa se sa prvih 128 znakova Unicode skupa. Ako se zanemari to da na svaki znak obino odlaze 2 bajta, vi u potpunosti moete da ignoriete injenicu da radite sa Unicode znacima osim, naravno, ukoliko u startu elite da napravite aplikaciju koja podrava vie svetskih jezika.

    Rekli smo da na svaki Unicode znak obino odlaze dva bajta zato to Java podrava Unicode 4.0 koji omoguava i korienje 32-bitnih znakova po imenu surogati. Ako mislite da je skup od 65 535 znakova koje moete da predstavite sa 16 bitova dovoljan, varate se. U jezicima Dalekog istoka kao to su japanski, korejski ili kineski postoji vie od 70 000 ideograma, tako da se surogati koriste za predstavljanje znakova koji ne postoje u osnovnom viejezinom skupu koji se definie 16-bitnim znacima.

    ZakljuakU ovom poglavlju prikazali smo vam osnovne karakteristike programskog jezika Java. Videli ste kako se u Javi postie prenosivost, a zatim smo vam predstavili i osnovne elemente objek-tno orijentisanog programiranja. Ukoliko vam neto o emu smo do sada priali nije ba naj-jasnije, ne brinite. Sve to smo pominjali u ovom poglavlju ponoviemo znatno detaljnije u nastavku knjige.

    U ovom poglavlju nauili ste sledee:

    q Java apleti su programi koji se ugrauju u HTML dokumente, dok su Java aplikacije zasebni programi. Java aplikacije mogu biti programi konzole koji podravaju isklju-ivo tekstualni izlaz na ekranu, ali i aplikacije sa prozorima i grafikim korisnikim interfejsom.

    q Programi napisani u Javi su po svojoj sutini objektno orijentisani.

    q Java izvorni kd uva se u vidu datoteka sa oznakom tipa .java.

  • Poglavlje 1

    q Programi napisani u Javi kompajliraju se u bajtkod koji predstavlja instrukcije za kom-ponentu Java Virtual Machine, koja je identina na svim raunarima na kojima je imple-mentirana, ime se obezbeuje prenosivost Java programa.

    q Java objektni kd uva se u vidu datoteka sa oznakom tipa .class.

    q Programe napisane u Javi izvrava Java interpreter koji analizira bajtkodove i izvrava operacije koje su u njima naznaene.

    q Okruenje Java Development Kit (JDK) podrava kompilaciju i izvrenje Java aplikacija i apleta.

    IzvoriIzvorni kd za primere iz ove knjige moete da preuzmete sa adrese http://www.wrox.com.

    Osim samog izvornog koda, u nekim primerima se preuzimaju i pomone datoteke kao to su, na primer, .gif datoteke sa ikonama. Osim toga, na ovoj lokaciji pronai ete i reenja ve-banja koja se nalaze na kraju veine poglavlja.