java.png

Pojavljivanjem Jave u informatici 1991. godine, kompanija Sun Microsystems je počela da istražuje kako najbolje iskoristiti potraživanja tržišta koje se razvija. Nešto kasnije, James Gosling je proučavao mogućnost stvaranja univerzalne softverske platforme koja ne zavisi od hardvera. U početku je namjeravao da upotrebi C++, ali je uskoro odustao od te ideje. Otisnuo se u stvaranju novog programskog jezika, koji je nazvao Oak (hrast). Gosling je odlučio da svoj izum zasnuje na već provjerenom C++-u, ali da upotrebi samo one osobine koje su dobre i koje mu odgovaraju. Iz jezika C++ je izostavio višestruko naslijeđivanje, automatsku konverziju tipova, korišćenje pokazivača i način upravljanja memorijom jezika C++. Iako je ovo rešenje bilo veoma intersantno, tžište nije bilo spremno za ovakav proizvod, pa je Oak „bačen“. Sa naglim rastom World Wide Weba, ljudi u kompaniji Sun Microsystems su se sjetili i odmah „iz naftalina“ izvukli Oak i dali mu novo ime Java, po ukusnoj vrst kafe sa istoimenog ostrva. Sun je u Javi napravio sopstveni pretraživač HotJava. Do ljeta 1995. godine, Java se izvršavala na platformama SPARC Solaris, Win NT, Win 95 i Linux. Jeseni 1995. godine, izlazi verzija Java beta 1 i pretraživač Netscape Navigator 2.0 koji podržava Javu. Verzija Java 1.0 zvanično je izdata u januaru 1996.



Kako Java funkcionise

Programske jezike mozemo podijeliti na dvije grupe, po tome na koji nacin se izvrsavaju na procesoru. Mašinski jezik sastoji se od vrlo jednostavnih naredbi koje CPU računara može direktno izvršavati. Nasuprot tome, skoro svi programi su pisani u višim programskim jezicima kao što su Java, Pascal, ili C++. Program pisan u višem jeziku ne može biti izvršen direktno na računaru. Takav program je potrebno prvo prevesti u mašinski jezik. To pretvaranje obavlja zasebni program zvan kompajler (compiler). Kompajler prevodi program iz višeg jezika u mašinski program koji se može izvršiti na računaru. Nakon što je program jednom preveden, program u mašinskom jeziku se može izvršiti neograničen broj puta, ali naravno, samo na jednoj vrsti računara (jer svaka vrsta računara ima zasebni mašinski jezik). Da bi program bio izvršen na drugom računaru potrebno je ponovno ga prevesti, koristeći drugi kompajler, u prikladan mašinski jezik. Postoji alternativa kompajliranju programa pisanih u višem jeziku. Umjesto korištenja kompajlera, koji odjednom prevodi čitav program, moguće je koristiti interpreter, koji prevodi naredbu po naredbu prema potrebi. Interpreter je program koji se ponaša kao CPU s nekom vrstom dobavi-i-izvrši ciklusa. Da bi izvršio program, interpreter radi u petlji u kojoj uzastopno čita naredbe iz programa, odlučuje šta je potrebno za izvršavanje te naredbe, i onda izvršava potrebne mašinske naredbe. Jedna od primjena interpretera je izvršavanje viših programskih jezika. Ipak, interpreteri imaju i drugu namjenu: omogućuju izvršavanje mašinskog programa pisanog za jednu vrstu računara na sasvim različitom računaru. Izvršavanje kompajliranih programa je zapravo brže od izvršavanja interpretiranih, ali interpretirani nose prednost u interoperabilnosti (vec pomenuta mogucnost izvrsavanja na bilo kom racunaru). Java u svom izvrsavanju koristi jedan vid interpretera, posebno modeliran da ispuni sve zahtjeve tako kompleksnog jezika, zvan Java Virtual Machine.

Java Virtual Machine – JVM

java-overview2.pngProjektanti Jave su se odlučili na korištenje kombinacije kompaliranja i interpretiranja. Programi pisani u Javi se prevode u mašinski jezik, ali u mašinski jezik računara koje zapravo ne postoji. Ovaj prividni (virtualni) računar se zove "Java Virtual Machine". Mašinski jezik za Java Virtual Machine se zove Java bajt kod (Java byte code). Nema razloga zbog kojega Java bajt kod ne bi mogao biti korišten kao mašinski jezik i nekog stvarnog računara, osim ovog prividnog. Sun Microsystems i jeste razvio je CPU-ove koji izvršavaju Java bajt kod kao svoj mašinski jezik, ali oni nisu usli u siru upotrebu. Ipak, jedna od glavnih prednosti Jave je da zapravo može biti korištena na bilo kojem računaru tj.bilo kojoj platformi. Sve što je na tom računaru potrebno je interpreter za Java bajt kod. Takav interpreter oponaša Java Virtual Machine na isti način kao što prividni računar oponaša sopstveni računar. Naravno, Java interpreter je potreban za svaku vrstu računara, ali nakon što računar dobije Java bajt kod interpreter, može izvršavati bilo koji Java bajt kod program. A isti taj Java bajt kod program može biti izvršen na bilo kom računaru koji ima takav interpreter. Ovo je jedna od glavnih osobina Jave: isti kompajlirani program se može izvršavati na više različitih vrsta računara.

Postavlja se pitanje zašto uopšte koristiti prelazni Java bajt kod? Zašto se ne bi isporučivao izvorni Java program pa da ga svako kompajlira za sebe u mašinski jezik računara na kojem ga želi koristiti? Prvi od mnogo razloga je da kompajler mora razumijeti Javu, složeni jezik. Kompajler, sam po sebi, vrlo je složen program, dok je, za razliku od njega, Java interpreter prilično mali, jednostavan program. Zbog toga je jednostavnije napisati interpreter za novu vrstu računara, a jednom kad je urađeno, taj računar može pokretati bilo koji kompajlirani Java program. Sa druge strane, bilo bi mnogo složenije napisati Java kompajler za isti računar. Osim toga, mnogi Java programi su namijenjeni razmjeni preko mreže. Ovo vodi do očitih sigurnosnih pitanja: korisnik ne želi dodati i pokrenuti program koji bi mogao nanijeti štetu njegovom računaru ili podacima. Java interpreter služi kao međuposrednik između korisnika i Java programa. Korisnik zapravo pokreće interpreter koji izvršava Java program. Interpreter može zaštititi korisnika i računar od moguće opasnih radnji tog programa.


Osnovna građa Java programa

Dva su osnovna dijela programiranja: podaci i naredbe. Za rad s podacima potrebno je razumijevanje varijabli i tipova, a za rad s naredbama potrebno je razumjeti upravljačke strukture (control structures) i potprograme (subroutines). Veliki broj kurseva posvećen je usvajanju ovih modela.

Varijabla je samo lokacija u memoriji (ili nekoliko lokacija posmatranih kao jedinica) kojemu je dodijeljeno ime da ga se u programu može lako pozivati i koristiti. Programer treba voditi računa samo o imenu, vođenje računa o memorijskom mjestu dužnost je kompajlera. Programer ne smije gubiti iz vida da ime upućuje na neku vrstu mjesta u memoriji koje može sačuvati podatke, čak i ako ne mora znati gdje je to tačno u memoriji.

U Javi i većini ostalih jezika varijabla ima tip (type) koji ukazuje na vrstu podataka koje može sačuvati. Jedna vrsta varijabli može sadržavati integer - cjelobrojne vrijednosti, dok druga sadrži floating point - brojeve s decimalnim mjestima. Računar pravi razliku između integer 17 i floating point 17.0, zapravo u računaru izgledaju sasvim različito. Takođe postoje i tipovi za pojedinačne znakove, nizove znakova, kao i za manje uobičajene tipove kao što su datumi, boje, zvukovi ili bilo koji drugi tip podataka koje bi program mogao sačuvati.

Programski jezici uvijek imaju naredbe za stavljanje i vađenje podataka u i iz varijabli i za obradu tih podataka. Na primjer, sljedeća "izjava dodjeljivanja", koja se može pojaviti u Java programu, kaže računaru da uzme podatak iz varijable "glavnica", pomnoži taj broj sa 0.07 i sačuva rezultat u varijablu "kamata":

kamata = glavnica * 0.07;

Takođe postoje i ulazne naredbe za uzimanje podataka od korisnika ili iz datoteka na diskovima računara i izlazne naredbe za slanje podataka u suprotnom smjeru. Ove osnovne naredbe - za pomicanje podataka s mjesta na mjesto i za obradu podataka su dijelovi za izradu svih programa. Ovi dijelovi su složeni u složene programe korištenjem upravljačkih struktura i potprograma.

Program je niz naredbi. U običnom odvijanju računar izvodi ove naredbe redom kako se pojavljuju jednu za drugom. Ovo je očito vrlo ograničen način jer bi računar vrlo brzo ostao bez naredbi koje treba izvršiti. Upravljačke strukture su posebne naredbe koje mogu izmijeniti tok odvijanja programa.


Postoje dvije osnovne vrste upravljačkih struktura: petlje, koje omogućavaju ponavljanje niza naredbi i grananja koja omogućuju računaru da odluči između više različitih postupaka ispitivanjem uslova koji se javljaju za vrijeme izvršavanja programa.

Na primjer, moguće je da ako je vrijednost varijable "glavnica" veća od 10000, tada se "kamata" računa množenjem sa 0.05; a ako nije tada se kamata računa množenjem glavnice sa 0.04. Program treba neki način zapisa ove odluke. U Javi to je moguće ostvariti korištenjem sljedeće "if" naredbe:

if (glavnica > 10000){
     kamata = glavnica * 0.05;
}else{
     kamata = glavnica * 0.04;
}

Detalji za sada nisu bitni, važno je zapamtiti da računar može ispitati uslov i odlučiti na osnovu toga što dalje da radi.

Petlje se koriste kad istu radnju treba izvršiti više od jednom.

Na primjer, ako se želi ispisati natpise s imenom za svako ime u adresaru moglo bi se napisati "Uzmi prvo ime i adresu i ispiši natpis; uzmi drugo ime i adresu i ispiši natpis ..." što vrlo brzo postaje jako smiješno i moglo bi uopšte ni da ne radi ako unaprijed nije poznato koliko imena zapravo ima. Ono što bi zapravo htjeli reći je nešto kao: "Dok god ima imena za obradu, uzmi slijedeće ime i adresu i ispiši natpis." Ovakvo ponavljanje se u programu izražava petljom.

Veliki programi su tako složeni da bi ih bilo gotovo nemoguće napisati bez da ih se "razbije" u lakše ostvarive dijelove. Potprogrami (metode) su jedan od načina ostvarivanja tog "razbijanja". Potprogram se sastoji od naredbi za izvršavanje nekog zadatka okupljenih u cjelinu s imenom. Ime se kasnije koristi kao zamjena za čitav niz naredbi. Na primjer, ako je jedan od zadataka koje program mora izvršiti crtanje kuće na ekranu, potrebno je naredbe okupiti u potprogram i dati mu prikladno ime, npr. "nacrtajKucu()". Nakon toga, na bilo kojem mjestu u programu gdje je potrebno nacrtati kuću dovoljno je napisati jednu naredbu:

 nacrtajKucu();
 

Ovo će imati učinak jednak kao ponavljanje svih naredbi za crtanje kuće na svakom mjestu. Prednost nije samo u tome da je manje kucanja. Organiziacija programa u potprograme takođe pomaže organizovanju razmišljanja i napora u razvoju programa. Za vrijeme pisanja potprograma za crtanje kuće moguće se koncentrirati isključivo na problem crtanja kuće, bez razmišljanja o ostatku programa. Jednom kad je potprogram gotov, može se zaboraviti na detalje crtanja kuća - taj problem je riješen. Potprogram postaje kao ugrađeni dio jezika koji je moguće koristiti bez razmišljanja o tome što se događa unutar potprograma.

Varijable, tipovi, petlje, grananja i potprogrami su osnova onog što bi se moglo nazvati tradicionalnim programiranjem. Osim toga, kako programi rastu javlja se potreba za dodatnim strukturama za rješavanje njihove složenosti. Jedno od najučinkovitijih sredstava je objektno orijentirano programiranje.

Šta nam je potrebno za dalje učenje?


Sa razlogom da ćemo u ostalim djelovim opisivati i raditi primjere potrebno je da na svom računaru imate instaliranu java platformu i razvojno okruženje za java programski jezik. Mi ćemo projekte raditi u razvojnom okruženju BlueJ s razlogom što je on za ovaj nivo programiranja dovoljan.

JAVA jdk1.6u7 možete preuzeti sa adrese: http://java.sun.com/javase/downloads/index.jsp

Razvojno okruženje BlueJ možete preuzeti sa adrese http://www.bluej.org/download/download.html

Razvojno okruženje ECLIPSE možete preuzeti sa adrese: http://www.eclipse.org/downloads/


Osnovni Java program

Program je niz naredbi koje računar izvršava da bi obavio neki zadatak.

Da bi računar mogao izvršavati naredbe, one moraju biti pisane na računaru razumljiv način, tj. u programskom jeziku. Programski jezici se razlikuju od ljudskog po svojoj jasnoći i strogosti što je u programu dozvoljeno, a što nije. Pravila koja određuju što je dozvoljeno zovu se sintaksa jezika. Sintaksna pravila određuju osnovni rječnik jezika i način na koji se programi mogu stvarati koristeći petlje, grananja i potprograme. Sintaksno ispravan program je onaj koji je moguće kompajlirati ili izvršiti. Programi koji sadržavaju sintaksne greške će biti odbačeni uz poruku o grešci. Dakle, da bi posltali uspješan programer potrebno je detaljno poznavati sintaksu korištenog programskog jezika.

Sintaksa je, ipak, samo dio priče. Naime, nije dovoljno samo napisati program koji radi, potreban je program koji daje ispravan rezultat, dakle program mora imati smisao. Smisao programa se zove semantika. Semantički ispravan program je onaj koji radi tačno ono što programer traži od njega.

Pri uvođenju novih jezičnih elemenata biće objašnjena i sintaksa i semantika elementa. Zapamtite sintaksu i pokušajte steći osjećaj za semantiku iz razumijevanja datih primjera. Pokušajte napisati i svoje kratke programe da bi provjerili svoje razumijevanje.

Naravno, čak i kad se upoznate sa svim pojedinačnim elementima jezika niste postali programer. Još uvijek morate naučiti kako stvarati složene programe za rješavanje određenih problema. Za to su potrebni i iskustvo i vještina.

Objašnjavanje Jave ćemo početi na uobičajan način: pisanjem programa koji ispisuje poruku "Hello World!". Naizgled jednostavan problem, ali ipak vrlo važan korak u svladavanju novog programskog jezika (pogotovo ako vam je to prvi jezik). Potrebno je da razumijete osnovne postupke:
1. unos programskog teksta u računar
2. kompajliranje programa i
3. izvršavanje kompajliranog programa.

Ovi koraci su različiti za razne računare i Java programerska okružja. U osnovi se taj postupak svodi na pisanje programa u nekom tekstualnom editoru i snimanje programa u neku datoteku. Nakon toga određenom naredbom se program kompjalira, nakon čega dobijate poruku o sintaksnim greškama ili kompajlirani program. U slučaju Jave program se kompajlira u bajt kod, umjesto u mašinski jezik. Na kraju pokrećete program odgovarajućom naredbom. Vaše programsko okruženje može obaviti neke od ovih koraka za Vas, ali se u pozadini zasigurno odvijaju ista tri koraka. Mi ćemo koristiti razvojno okruženje BlueJ.


Program Hello World

Slijedi program "Hello World!". Ne očekujte da ćete sve razumijeti - neke dijelove ćete razumijeti tek nakon nekoliko lekcija.
slika1.jpg

Programsli kod za Hello World program otkucan pomocu alata BlueJ.

Kada pokrenete ovaj program poruka "Hello world!" (bez navodnika) će biti ispisana na ekranu.
Naredba koja zapravo ispisuje poruku je:

<span style="color: windowtext;">        System.out.println("Hello World!"); </span>
Da bi vidjeli rezultat Vašeg programa, potrebno je da sačuvate otkucani kôd i pokrenete program (kao na slici):
slika2.jpg

Pokretanje programa.

Ova naredba je primjer poziva potprograma. Koristi "ugrađeni" potprogram imena System.out.println da bi obavio zadatak. Prisjetite se da se potprogrami sastoje od naredbi za izvršavanje nekog zadatka, okupljenih i sa određenim imenom. Ime se koristi da bi mogli taj potprogram pozvati kad god treba izvršiti taj zadatak. Ugrađeni potprogram je već definisan kao dio jezika i time dostupan u bilo kojem programu.

Znatiželja Vas mora voditi kroz ostatak programa. Dio programa su komentari. Računar u potpunosti zanemaruje komentare u programu, oni su samo za ljude. Nasuprot tome, komentari su vrlo važni, bez njih razumijevanje programa može biti jako teško. Java ima dvije vrste komentara. Prva vrsta počinje sa: i proteže se do kraja reda. Računar zanemaruje i sve nakon toga u istom redu. Druga vrsta komentara započinje sa /* i završava sa */ i može se protezati preko više redova.

Sve ostalo u programu je neophodno prema sintaksnim pravilima Jave. Svo programiranje u Javi se obavlja u klasama. Prva linija u programu kaže da se klasa zove HelloWorldApp. Ime klase HelloWorldApp ujedno služi i kao ime programa. Klasa nije program sama po sebi, da bi mogla postati program klasa mora sadržavati potprogram imena
main oblika:


        public static void main(String[] args) {
 
               izrazi
 
        }

Kad naredite Java interpreteru da izvrši program, on poziva main() potprogram i izvršava naredbe unutar njega. Ove naredbe stvore skriptu koja govori računaru što točno treba raditi dok se program izvršava. Main() potprogram može pozivati potprograme definisane unutar iste, pa čak i drugih klasa, ali main() potprogram određuje kako i kojim redom će se koristiti drugi potprogrami.

Ime u prvoj liniji je ime programa, i ujedno ime klase. Ako se klasa zove HelloWorldApp, treba biti snimljena u datoteci HelloWorldApp.java, koja dakle sadrži source kôd programa. Kada se ova datoteka kompajlira, nastat će datoteka HelloWorldApp.class koja sadrži Java bajt kod. Java intrepreter izvršava Java bajt kod i za pokretanje programa ne trebate source kôd.


Detalji HelloWorldApp programa


/**
 
 * HelloWorldApp klasa implementira aplikaciju koja
 
 * ispisuje "Hello World!" na standardni izlaz.
 
 */
 
public class HelloWorldApp {
 
    public static void main(String[] args) {
 
        // Ispiši "Hello World!"
 
        System.out.println("Hello World!");
 
    }
 
}
Komentari u Java kodu
"Hello World!" aplikacija ima dva bloka komentara. Prvi blok na početku programa koristi / i */ oznake. Kasnije, linija koda objašnjena je korištenjem komentara sa oznakom. Osim toga Java podržava i treću vrstu komentara, s oznakama kao u C-u /* i */.

Definisanje klase

U Javi, sve metode i varijable postoje unutar klasa ili objekata (instance klase). Java ne podržava globalne metode i varijable. Stoga kostur svakog Java programa čine definicije klasa. Crvena linija u sljedećem kodu započinje blok koji defineše klasu:

//**public class HelloWorldApp {
 
            public static void main(String[] args) {
 
             System.out.println("Hello World!");
 
            }
 
}**//
Class - osnovni blok objektno orijentiranog jezika kao što je Java, je uzorak koji opisuje podatke i ponašanje povezano s instancama (instances) te klase. Kad stvorite instancu klase, stvorili ste objekt koji izgleda i ponaša se kao i druge instance te iste klase. Podaci vezani uz klasu ili objekt su sačuvani u varijablama, a ponašanje vezano uz klase ili objekte se opisuje pomoću metoda. Metode su slične funkcijama ili procedurama u proceduralnim jezicima kao što je C. Uobičajni primjer iz svijeta programiranja je klasa koja predstavlja praugaonik. Klasa sadrži varijable s položajem, širinom i visinom praugaonika. Klasa takođe može sadržati i metodu koja izračunava površinu praugaonika. Jedna instanca klase pravokutnika može sadržati podatke o određenom praugaoniku, kao npr. površina, veličina.(pokušajte uraditi ovaj primjer) Najjednostavniji oblik definicije klase u Javi je:

//**class ime_klase {
 
            ...
 
}**//
Ključna riječ class započinje definiciju klase za klasu koja se zove ime_klase. Varijable i metode jedne klase su obuhvaćene vitičastim zagradama koje označavaju početak i kraj bloka dafinicije klase. Aplikacija "HelloWorld" nema varijabli i ima samo metodu main.

Main metoda

Početna tačka svake Java aplikacije je njena main metoda. Pri pokretanju aplikacije s Java interpreterom definiše se ime klase koja se želi izvršiti. Interpreter poziva main metodu iz te klase. Main metoda upravlja tokom programa, dodjeljuje potrebne resurse i pokreće druge metode potrebne za ispravno izvršavanje programa. Crvena linija u sljedećem kodu započinje definisanje metode main:

//**public class HelloWorldApp {
 
             public static void main(String[] args) {
 
                  System.out.println("Hello World!");
 
            }
 
}**//
Svaka Java aplikacija mora sadržati main metodu čija sintaksa izgleda ovako:

//**public static void main(String[] args)**//

Sintaksa metode sadrži tri modifikatora:
· public kaže da main metodu može pozvati bilo koji objekt;
· static kaže da je main metoda metoda klase, tj. nepromjenjiva je i konačna, što znači da je nijedna druga metoda ne može zamijeniti svojom deklaracijom;
· void kaže da main metoda ne vraća nikakvu vrijednost.

Kako pozvati main metodu ?
Java interpreter počinje izvršavati aplikaciju pozivom main metode klase koju pokrećemo. Main metoda nakon toga poziva sve druge metode potrebne za izvršavanje aplikacije. Pozivanje Java interpretera za klasu koja nema main metodu završit će odbacivanjem zahtjeva i porukom:
//

      In class NoMain: void main (String argv[]) is not defined

Argumenti main metode
Kao što se vidi u sljedećem isječku koda, metoda main prihvaća samo jedan argument: polje elemenata tipa
String.

      **public static void main(String[] args)**

Ovo polje je mehanizam kroz koji sistem koji izvršava aplikaciju predaje podatke aplikaciji. Svaki String u polju se zove argument komandne linije. Argumenti komandne linije omogućavaju korisnicima promjene u izvođenju programa bez ponovnog kompajliranja.
"Hello World!" aplikacija ignoriše argumente iz komandne linije, pa ih sada ne treba razmatrati.


Korištenje klasa i objekata

"Hello World!" aplikacija je najjednostavniji Java program koji možete napisati a koji nešto radi. Zbog toga što je tako jednostavan nema potrebe za definisanjem drugih klasa osim HelloWorldApp. Ipak većina programa su složeniji i zahtijevaju pisanje više klasa i pripadajućeg koda. "Hello World!" aplikacija koristi drugu klasu, klasu System, koja je dio API-ja danog s Java okružjem.System klasa omogućava sistemski nezavisan pristup funkcijama zavisnim o sistemu. Java API možete pogledati na linku http://java.sun.com/javase/6/docs/api/. Crveni dio koda prikazuje upotrebu varijable klase (class variable) klase System i metode instance klase System:

**public class HelloWorldApp {
 
             public static void main(String[] args) {
 
                  System.out.println("Hello World!");
 
 }
 
}**

Korištenje metode ili varijable klase
Pogledajmo prvi dio naredbe

      **System.out.println("Hello World!");**

Konstrukcija System.out je puno ime varijable out u klasi System. Uočite da aplikacija nikad ne stvara klasu System i da se out poziva direktno iz imena klase. To je zato što je out varijabla klase - varijabla povezana s klasom umjesto s instancom te klase. Isto tako se može metode vezati za klasu i dobiti metodu klase. Za pozivanje varijabli i metoda klase tačkom se spoje ime klase i ime varijable ili metode klase.

Korištenje metode ili varijable instance
Metode i varijable koje nisu metode klase ili varijable klase se zovu metode instance ili varijable instance. Metode i varijable instance se pozivaju iz objekta. Iako je System.out varijabla varijabla klase, odnosi se na instancu PrintStream klase (klasa koja dolazi s Java razvojnim okruženjem) koja primjenjuje standardni izlazni niz. Kad se System klasa učita u aplikaciju stvara instancu PrintStream i pridjeljuje novi PrintStream objekt out varijabli klase. Sad, kad postoji instanca klase, može se pozvati jedna od metoda instance:

      **System.out.println("Hello World!");**

Očito je da je poziv metode i varijable primjera sličan pozivu metode i varijable klase. Udružuje se poziv objekta (out) i ime metode ili varijable primjera (println) s tačkom između naziva. Java kompajler omogućava zajedničko nizanje poziva na varijable i metode klasa i instance, što na kraju izgleda kao linija u primjeru programa:

      **System.out.println("Hello World!");**

Ova linija koda ispisuje "Hello World!" na standardnom izlaznom nizu aplikacije.
Zaključak!
Metode i varijable klase vezane su uz određenu klasu. Sistem na kojem se izvršava aplikacija postavlja varijablu klase jednom za klasu, bez obzira na broj instanci te klase. Varijablama i metodama klase se pristupa preko klase. Metode i varijable instance su vezane uz određeni objekt (instancu klase). Prilikom svakog stvaranja objekta, novi objekt dobija kopiju svih varijabli instance definisanih u toj klasi. Varijablama i metodama primjera pristupa se preko objekata.


Varijable i primitivni tipovi

Imena su ključna za programiranje. U programima, imena se koriste za pozivanje različitih stvari. Da bi mogao koristiti te stvari, programer mora razumjeti pravila davanja imena i pravila korištenja imena. Zapravo, programer mora znati sintaksu i semantiku imena.

Prema sintaksnim pravilima Jave, ime je niz od jednog ili više karaktera. Mora počinjati slovom i mora biti u potpunosti sastavljeno od slova, brojeva i donje crte "_". Nekoliko primjera ispravnih imena:

  **N
  n
  rate
  x15
  quite_a_long_name
  HelloWorld**

Velika i mala slova smatraju se različitima pa su:
  **HelloWorld
  helloworld
  HELLOWORLD i
  HElloWorLD**

sasvim različita imena.

Neka imena rezervisana su za posebne namjene u Javi i programer ih ne može koristiti za druge namjene. Rezervisane riječi uključuju:

  **class
  public
  static
  if
  else
  while**
i nekoliko desetaka drugih riječi.
Java koristi Unicode skup karaktera koji obuhvaća hiljade znakova različitih jezika i pisama.

Varijable

Programi upravljaju podacima sačuvanim u memoriji. U mačinskom jeziku podaci se mogu pozivati samo pozivom numeričke adrese memorijske lokacije na kojoj je podatak sačuvan. U Javi se za poziv podataka koriste imena umjesto brojeva. Programer treba zapamtiti samo ime, a računar vodi računa o tome gdje je stvarno podatak smješten. Ovakvo ime koje služi za pozivanje podataka sačuvanih u memoriji se zove varijabla.
Tačno gledano, varijabla nije ime samog podatka nego mjesta u memoriji koje čuva podatke. O varijabli treba razmišljati kao o kutiji u koju se čuvaju podaci za kasnije korištenje. Varijabla se odnosi izvorno na kutiju i neizvorno na podatak. Budući se podaci u kutiji mogu mijenjati za vrijeme izvršavanja programa, varijabla će ukazivati na različite vrijednosti ali uvijek na istu kutiju. Zablude mogu nastati, pogotovo kod neiskusnih programera, jer varijabla kad se koristi na jedan način ukazuje na kutiju, a korištena na drugi način odnosi se na podatak.

Jedini način na koji se u Javi može sačuvati podatak u varijablu je korištenjem
naredbe pridjeljivanja vrijednosti (assignment statement) u obliku:

        **varijabla  =  izraz;**

gdje izraz predstavlja bilo što što se odnosi na neku vrijednost ili računa neku vrijednost. Kad računar za vrijeme izvođenja naiđe na naredbu pridjeljivanja, procjenjuje izraz i rezultat čuva u varijablu.
Razmotrimo izraz:


        **kamata = postotak * glavnica;**

Ovdje se vrijednost izraza postotak*glavnica čuva u varijablu kamata. * u izrazu je operator množenja, kamata i glavnica su varijable, a zapravo se množe vrijednosti sačuvane u njima.

Vidimo da kad se varijable koriste u izrazu, koristimo zapravo vrijednosti sačuvane u njima. U ovom izrazu računar radi sa vrijednostima.
Varijable u Javi su takve da čuvaju samo jednu određenu vrstu podataka i nijednu drugu. Svako kršenje ovog pravila kompajler će smatrati sintaksnom greškom. Kaže se da je Java "strogo pisani" jezik jer nameće ovo pravilo. Postoji osam tzv. primitivnih tipova ugrađenih u Javu.
Primitivni tipovi su:

   **byte
   short
   int
   long
   float
   double
   char
   boolean**
 

Prve četiri vrste čuvaju cijele brojeve, a razlikuju se po rasponu brojeva koje mogu sačuvati. Float i double čuvaju realne brojeve i razlikuju se po rasponu i preciznosti. Char čuva jedan znak iz Unicode skupa, a boolean jednu od dvije logičke vrijednosti (true ili false).

v.jpg
Tablica. Primitivni tipovi podataka

Varijabla se može koristit u programu samo ako je prethodno deklarisana. Naredba deklarisanja varijable (variable declaration statement) se koristit da bi se varijabla deklarisala i dodjelilo joj se ime. Kada računar izvršava naredbu deklaracije varijable, rezerviše dio memorije za tu varijablu i povezuje ime varijable s tim dijelom memorije. Jednostavni oblik naredbe deklaracije je:

    **tip_varijable    ime_varijable;**

npr. int brojac;
String je složeni tip podataka. Stringovima se smatraju svi nizovi obuhvaćeni dvostrukim navodnicima. Detaljnije o stringovima obradićemo u nekim od sledećih brojeva.





Detalji izraza

Izraz je dio koda programa koji predstavlja ili računa neku vrijednost. Izraz može biti konstanta, varijabla, poziv funkcije ili više ovakvih elemenata kombinovanih operatorima (npr. + ili >). Vrijednost izraza može se pridati varijabli, koristiti kao ulazna vrijednost izlaznog potprograma ili pomoću operatora povezati s drugim vrijednostima u složeniji izraz. Glavni dijelovi izraza su literali (kao npr. 674, 3.14, true ili 'x'), varijable i pozivi funkcija (funkcija je potprogram koji vraća vrijednost). Konstante, varijable i pozivi funkcija su jednostavni izrazi. Složeniji izrazi se stvore korištenjem operatora za kombinovanje jednostavnih izraza. Kad u jednom izrazu postoji više operatora, javlja se problem prioriteta, koji određuje kako će se operatori grupisati pri procjenjivanju, tj. koji će operator imati prednost pri izvođenju. Npr. u izrazu a + b * c, prvo se izračunava b * c, a zatim se a sabira s rezultatom. Kaže se da množenje ima prioritet u odnosu na sabiranje. Ukoliko se želite zaobići zadane prioritete potrebno je koristiti zagrade, (a + b) * c koje će prvo sabrati, a zatim pomnožiti vrijednosti.

Aritmetički operatori

Aritmetički operatori uključuju sabiranje (+), oduzimanje (-), množenje (*) i dijeljenje (/). Mogu se koristiti na vrijednostima bilo koje numeričke vrste: byte, short, int, long, float, ili double. Kad računar izvršava jednu od ovih operacija, vrijednosti koje uzima u račun moraju biti iste vrste. Ukoliko se vrste varijabli u računu razlikuju, računar će jednu od varijabli prevesti u drugu vrstu. Npr. pri računanju 37.4 + 10 računalo prevodi cjelobrojnu vrijednost 10 u realnu vrijednost 10.0 i zatim izračunava 37.4 + 10.0. Iako su 10 i 10.0 naizgled iste vrijednosti, računar ih interno posmatra sasvim različito. Najčešće računar ovo pretvaranje obavlja automatski. Rezultat operacije (nakon što je jedna od varijabli prevedena u drugu vrstu) je iste vrste kao i varijable na kojima je operacija izvršena. Rezultat množenja dviju cjelobrojnih varijabli je cjelobrojna varijabla, rezultat množenja double varijabli je opet double. Oprez je potreban kod operatora dijeljenja. Rezultat dijeljenja dviju cjelobrojnih varijabli je cijeli broj, a eventualni ostatak kod dijeljenja se odbacuje, npr. 7 / 2 je 3, a ne 3.5, 1 / N je 0 za svaki cijeli broj N veći od 1 (za dobijanje tačnog rješenja ovog izraza potrebno je pretvoriti jednu varijablu u real: 1.0/N). Java ima i operator koji računa ostatak cjelobrojnog dijeljenja. Taj operator označava se znakom %. Primjeri ostatka cjelobrojnog dijeljenja: 7 % 2=1, 34577 / 100 = 77, 50 / 8 = 2. Najčešća primjena ovog operatora je pri ispitivanju da li je broj N paran ili neparan: ako je N % 2 = 0 broj N je paran, a ako je 1 broj N je neparan. Druga česta primjena je dijeljivost brojeva: broj N je dijeljiv s M ako je N % M = 0.
Posljednji važni operator je minus, koji daje negativnu vrijednost broja. Tako, na primjer, operacije -x i (-1)*x daju jednake rezultate.

Inkrement i dekrement

Dodavanje i oduzimanje 1 postojećoj vrijednosti neke varijable vrlo su česti postupci u programiranju. Uobičajeni zapis tih operacija je:

        **brojac  =  brojac + 1;
 
        brojac  =  brojac - 1;**

Postupak izvođenja ovih izraza je da se uzme stara vrijednost varijable, izračuna se koliko iznosi ta vrijednost uvećana (ili umanjena) za 1 i rezultat se čuva kao nova vrijednost varijable. Drugi način zapisivanja ovih postupaka je:

        **brojac++;
 
        brojac--;**
++ i -- se nazivaju operatori inkrementa (++) i dekrementa (--) i mogu se primijeniti na svim vrstama numeričkih varijabli i na char varijablama.

Relacioni operatori

Java podržava logičke (boolean) varijable i izraze za opis koji može biti true ili false. Jedan od načina stvaranja logičkog izraza je uporedjivanje dvije vrijednosti pomoću relacijskog operatora. Relacijski operatori ispituju da li su dvije vrijednosti jednake, jedna veća od druge... Relacijski operatori u Javi su:

        **A == B       Da li je A "jednak" B?
 
        A != B       Da li je A "različit od" B?
 
        A < B        Da li je A "manji od" B?
 
        A > B        Da li je A "veći od" B?
 
        A <= B       Da li je A "manji ili jednak" B?
 
        A >= B       Da li je A "veći li jednak" B?**

Ovi operatori mogu se koristiti za uporedjivanje bilo koje vrste numeričkih vrijednosti i vrijednosti vrste char. Za znakove, operatori < i > su određeni prema odgovarajućim Unicode vrijednostima znakova, pri čemu treba voditi računa o tome da to nije jednako abecednom redosljedu. Operatori == i != mogu biti korišteni za uporedjivanje logičkih vrijednosti kao u ovom primjeru:

        **boolean istiZnak;
 
        istiZnak = ((x > 0) == (y > 0));**

Logički operatori

U govornom jeziku korištenjem riječi "i", "ili" i "ne" se mogu izgraditi složene rečenice. Iste takve riječi postoje i u Javi i zovu se logički operatori. Namjena im je, kao i u govornom jeziku, stvaranje manje ili više složenih rečenica.

Logički operator "i" se zapisuje kao && i služi slaganju dviju logičkih vrijednosti.

Tablica istine za logički operator "i":


A
B
A & B
0
0
0
0
1
0
1
0
0
1
1
1



Logički operator "ne" je unarni operator, označava se kao: ! i zapisuje se ispred elementa i mijenja njegovu logičku vrijednost iz true u false ili iz false u true.

Operator dodjele

Operator dodjele = dodjeljuje varijabli s lijeve strane vrijednost izraza s desne strane operatora. Računar po potrebi mijenja vrijednost izraza da bi odgovarala vrsti varijable u koju se upisuje. Ovo prevođenje se obavlja isključivo kad može biti obavljeno bez promjene značenja vrijednosti. Primjeri pridjeljivanja:

        **int a;
 
        double x;
 
        short b;
 
        a = 17;
 
        x = A;  // a se prevodi u double
 
        b = A;  // nije dozvoljeno, nema automatskog prevođenja iz int u short
 
               // jer neke int vrijednosti nadilaze opseg short varijabli**

koje se ne može obaviti automatski, koristi se izričito pretvaranje tipova (type casting) tako da se željena vrsta varijable upisuje u zagrade ispred vrijednosti koju se želi pretvoriti. Na primjer:

**double a;
 
int b;
 
a = 17.7;
 
b = (int)a;  // a se izričito prevodi u integer. b poprima vrijednost 17.**
 

Grupe operatora i prioriteti operatora
Na najnižem nivou, u Javi se sa podacima radi pomoću operatora. Kako je Java izvedena iz C++-a, većina ovih operatora biće poznata C i C++ programerima. U Javi su dodata neka poboljšanja i pojednostavljenja. Postoje četiri osnovne grupe operatora i to su:

- aritmetički operatori
- operatori na bitovima
- relacijski operatori
- logički operatori
Operator kombinuje jedan ili više argumenata i daje novu vrijednost. Argumenti se zadaju u obliku drugačijem od uobičajnih poziva metoda, ali efekat ostaje isti. Vjerovatno vam je dobro poznat opšti concept operatora. Sabiranje i unarni plus (+), oduzimanje i unarni minus (-), množenje (*), dijeljenje (/) i dodjela vrijednosti (=) manje-više su u svakom programskom jeziku. Svi operatori daju neku vrijednost u zavisnosti od svojih operanada. Pored toga, operator može da promjeni vrijednost operanda. To se naziva sporedan efekat (engl. Side effect). Operatori koji mjenjaju svoje operande najčešće se upotrebljavaju baš radi generisanja tog sporednog efekta, ali treba imati na umu da i ti operatori proizvode vrijednost, kao i operatori bez sporednog efekta. Skoro svi operatori rade samo s prostim tipovima podataka. Izuzeci su =. ==. i =!, koji rade sa svim objektima. Pored toga, klasa String podržava i operatore + i +=. U sledećim tablicama objašnjena su značenja operatora.


Aritmetički operatori
Operator
Namjena
+
Sabiranje
-
Oduzimanje
*
Množenje
/
Dijeljenje (za brojeve s pomičnim zarezom), cjelobrojno dijeljenje
%
Ostatak cjelobrojnog dijeljenja (modulo)
++
Inkrementiranje (povećavanje vrijednosti za 1)
+=
Sabiranje i dodjela vrijednosti
-=
Oduzimanje i dodjela vrijednosti
*=
Množenje i dodjela vrijednosti
/=
Dijeljenje i dodjela vrijednosti, cjelobrojno dijeljenje i dodjela vrijednosti
%=
Ostatak cjelobrojnog dijeljenja (modulo) i dodjela vrijednosti
--
Dekrementiranje (smanjivanje vrijednosti za 1)
Operatori na bitovima
Operator
Namjena
~
Unarno NE (NOT) na bitovima
&
I (AND) na bitovima
|
ILI (OR) na bitovima
^
Ekskluzivno ILI (XOR) na bitovima
>>
Pomicanje bitova udesno
>>>
Pomicanje bitova udesno uz popunjavanje nulom (logičko pomicanje)
<<
Pomicanje bitova ulijevo
&=
I (AND) na bitovima
|=
ILI (OR) na bitovima uz dodjeljivanje vrijednosti
^=
Ekskluzivno ILI (XOR) na bitovima uz dodjeljivanje vrijednosti
>>=
Pomicanje bitova udesno uz dodjeljivanje vrijednosti
>>>=
Pomicanje bitova udesno uz popunjavanje nulom uz dodjeljivanje vrijednosti
<<=
Pomicanje bitova ulijevo uz dodjeljivanje vrijednosti

Relacijski operatori
Operator
Namjena
==
Unarno NE (NOT) na bitovima
!=
I (AND) na bitovima
>
ILI (OR) na bitovima
<
Ekskluzivno ILI (XOR) na bitovima
>=
Pomicanje bitova udesno
<=
Pomicanje bitova udesno uz popunjavanje nulom (logičko pomicanje)

||
Logički operatori
Operator
Namjena
!
Logička negacija
&
Logički AND
|
Logički OR
^
Logički XOR
&&
Uvjetni AND
Uvjetni OR
==
Jednakost
!=
Nejednakost (različito od)
&=
AND uz dodjeljivanje vrijednosti
|=
Logički OR uz dodjeljivanje vrijednosti
^=
Logički XOR uz dodjeljivanje vrijednosti
?:
Ternarni operator

Prioriteti operatora

Prioriteti operatora definišu kako će izraz biti izračunat kada se u njemu javlja više operatora. Java ima specifična pravila koja odredjuju poredak izračunavanja. Najlakše se pamti pravilo da se množenje i djeljenje vrše prije sabiranja i oduzimanja. Programeri često zaborave ostala pravila o prioritetima, pa stoga nije na odmet da koristite zagrade za izričito navođenje poretka izračunavanja. Na primjer, pogledajte naredbe (1) i (2):

**public class Prioriteti{
 
 
 
            public static void main(String[] args){
 
                        int x = 1, y = 2, z = 3;
 
                        int a = x + y – 2/2 + z;                         //(1)
 
                        int b = x + (y - 2) / ( 2 + z);                 //(2)
 
                        System.out.println(“a=+ a + “ b=+ b);
 
 
 
}
 
}
 
/* Izlaz
 
a=5 b=1
 
*/**


Te naredbe izgledaju gotovo jednako, ali iz izlaza vidite da zbog upotrebe zagrada u (2) imaju sasvim različita značenja. Obratite pažnju na upotrebu operatora + u naredbi System.out.println(). U tom kontekstu, + znači „nadovezivanje znakovnih nizova“ i, ako treba, „konverzija znakovih nizova“. Kada prevodilac naiđe na String + ne-String, pokušaće da konvertuje ne-String u String. Kao što vidite iz izlaza, a i b je uspješno konvertovalo iz tipa int u String.

... mnogo jos toga moze da se pise u vezi Java programiranja... kupite BIT pa citajte JAVA PROGRAMIRANJE :)))))


Za sve sto vam treba pozovite na skype**

My status