You are on page 1of 21

1991. g. James Gosling poinje rad na programskom jeziku Oak. 1992. g.

Sun Microsystems predstavlja


Star7, PDA ureaj sa touchscreen-om i animiranim grafikim korisnikim sueljem, na kojem Oak radi.
1995. g. programski jezik Oak mijenja naziv u Java. Od 2010. g. je vasnitvo Oracle korporacije. Stoga je,
pored platformske nezavisnosti, Internet najzasluniji za ogroman uspjeh koji je Java postigla
Java nasljeuje sintaksu iz programskog jezika C, a objektni model adaptira iz jezika C++.
Razlika u odnosu na C++:
Nema preklapanje/nadjaavanje operatora, viestruko nasljeivanje, pokazivae, preprocesorske naredbe
Ne podrava definisanje vlastitog tipa podatka: strukture, enum tip podatka (moe od 1.5)
Ne podrava funkcije (izvan klase). Ne podrava goto instrukciju. Ne podrava utomatsko upravljanje
memorijom (engl. garbage collector).
Java osobine: Jezik visokog nivoa koji je: jednostavan ,neovisan o arhitekturi ,objektno-orijentisan
,prenosiv ,distribuiran ,visokih performansi ,interpreterski ,vienitni ,robusan ,siguran ,s dinamikim
povezivanjem metoda, s ugraenim "sakupljanjem smea" (garbage collection) .
- kompajler generie tzv. bytecode koji je slian mainskom kodu ali iziskuje dodatnu interpretaciju koji
izvrava JVM neto bre izvravanje prethodno kompajliranih programa, od onih koji se interpretiraju . Java
predstavlja mjeavinu interpretiranog i prevedenog izvravanja. Prevodi se izvorni kd u bytecode, a
zatim se bytecode interpretira u odreeni mainski kd . Preduslov da Java funkcionie jeste postojanje JVM
(Java Virtual Machine) u tom okruenju.
-Java Virtuelna Maina (JVM) predstavlja jednu vrstu softverskog procesora sa svojim setom instrukcija.
Sastoji se od ogromnog broja biblioteka sa definisanim funkcionalnostima (tzv. standardne klasne
biblioteke) koje program napisan u Javi moe koristiti za obavljanje rutinskih operacija
- JRE omoguuje operativnom sistemu da izvrava programe napisane u Java jeziku, dok JDK donosi pored
okruenja za pokretanje Java programa i set alata koji se koriste od strane programera za razvoj aplikacija.
JRE sadri JVM i skup najrazliitijih biblioteka sa predefinisanim funkcionalnostima koje aplikacije mogu
da koriste, a JDK sadri JRE i alate za programere.
U okviru JVM-e se pojavljuje JIT (Just In Time Compiler). On slui da ubrza interpretaciju koda, tako to
prepoznaje naredbe koje se esto ponavljaju i vri prevoenje ovih naredbi u toku izvravanja programa.
Postoji tri Java edicije/platforme:
Java Standard Edition JSE za uobiajenu primjenu, sadri kompajler (compiler), interpreter (JVM),
ostale alate
Java Enterprise Edition JEE za poslovnu primjenu, nadogradnja na JSE
Java Micro Edition JME za male naprave (PDA, telefone, automobile i sl.).
Tu su jo i: JavaFX platforma za bogate internetske aplikacije (RIA)
JavaCard - tehologija prua sigurnu okolinu za aplikacije koje se izvravaju na pametnim karticama i
drugim ureajima s ogranienim memorijskim i procesorskim kapacitetima

JavaDB Sun/Oracle distribucija Apache Derby 100% Java tehnologija baze podataka otvorenog koda
(transakcijska, sigurna, jednostavna za koritenje, podrava standarde SQL, JDBC API i Java EE, i vrlo je
mala (2.5 MB).)
JavaTV - Java ME bazirana tehnologija koja prua rjeenje za razvoj Java aplikacija koje se izvravaju na
TV i drugim box ureajima.
-S pozicije razvoja i koritenja razlikuju se:
JRE Java Runtime Environment ukljuuje interpreter (JVM), biblioteke (klasa i suelja) i ostale
komponente koje su potrebne za izvravanje Java aplikacija. Potrebno instalirati na raunaru da bi se
izvravale Java aplikacije.
JDK (SDK) Java Development Kit ukljuuje razvojne alate (kompajler, debugger i dr.) i JRE.
- Java razvojno okruenjev5 i v6 uvodi: Uvodi : Generiko programiranje Proirenje petlje -
Umetanje/uzimanje primitivnih podataka - Enumeracijski podaci Varijabilni broj argumenata
Statiko ukljuivanje Metapodaci, anotacije
- Java okolina v 7.0 Uvodi znaajne novosti: koritenje znaka _ u brojanim podacima za postizanje
preglednosti, koritenje string vrijednosti u switch instrukciji, try-with-resource instrukcija hvatanje
vie tipova iznimki i ponovno bacanje iznimki s poboljanom provjerom tipa,
dodan paket java.nio.file za bolji pristup datotekama, Java Virtual Machine podrka za ne-Java
programske jezika (Groovy, JRuby, Jython, Scala i dr.)
- Program moe biti pripremljen za izvravanje unutar:
virtuelne maine JDK (Java Development Kit) aplikacija (znakovno ili grafiko suelje)
virtuelne maine preglednika applet virtuelne maine preglednika Java Web Start
- Kompajliranje Java programa provodi se: pozivanjem ugraenog kompajlera unutar razvojne okoline
(NetBeans, Eclipse,...) ili Pozivanjem kompajlera u komandnoj liniji javac nazivprograma.java
- Izvravanje Java aplikacije provodi se:
izvravanjem JDK virtuelne maine u komandnoj liniji java nazivprograma
- Izvravanje Java appleta provodi se: ukljuivanjem posebne oznake unutar HTML dokumenta
Java komentari
Postoji vie vrsta komentara:
// - jedna linija do kraja linije
/* ... */ - jedna ili vie linija
/** ... */ - jedna ili vie linija koje e sluiti kao dokumentacija nakon primjene javadoc programa
sloeni tipova podataka:
klasa konstrukt koji povezuje podatke (varijable) i ponaanje nad tim podacima (metode)
suelje definie skup metoda koje trebaju implementirati konkretne klase
paket organizacijski oblik povezivanja srodnih klasa

Java kljune rijei kod definisanja klase


Karakteristite klase u odnosu na kreiranje objekta i nasljeivanje:
abstract apstraktna klasa se ne moe koristiti za instanciranje objekata. Moe se naslijediti. Ukoliko
klasa implementira neko suelje ali ne implementira sve metode suelja, tada mora biti oznaena s abstract.
final zapeeena klasa se ne moe naslijediti. Moe se instancirati objekat ove klase.
Sakrivanje informacija odnosno uahurenje (engl. encapsulation - enkapsulacija) postie se odreivanjem
vidljivosti tako da klasi mogu pristupiti odnosno ona je na raspolaganju:
samo klasama iz njenog paketa osnovno
svim ostalim klasama public
Java kljune rijei kod definisanja metode
Karakteristite metode u odnosu na koritenje i nasljeivanje:
abstract metoda nije implementirana u apstraktnoj klasi. Oekuje se da klasa ima specijalizacije
odnosno da je druge klase nasljeuju i da imaju konkretnu metodu odnosno implementaciju metode.
final metoda se ne moe nadjaavati u klasama koje je nasljeuju.
Java kljune rijei kod definisanja varijabli i metode
Sakrivanje informacija odnosno uahurenje postie se odreivanjem vidljivosti tako da se varijablama i
metodama iz neke klase moe pristupiti odnosno one su na raspolaganju:
klasi i klasama iz istog paketa - osnovno
klasi i svim ostalim klasama public
klasi i njenim sljedbenicama protected
samo klasi - private
Objekat je osnovni entitet u Java programu.
Objekti reprezentuju enititete iz realnog svijeta. Objekat ima: stanje (opis karakteristika) ponaanja (ta
on moe initi ili ta se sa njim moe initi) Ponaanje objekta moe promijeniti njegovo stanje.
Klase (Class)
Klasa je sloeni korisniki definisan tip podatka. Objekat je instanca (konktretizacija) klase..
Klasa je predloak (ablon) objekta. Klasa koristi metode za definisanje ponaanja objekta.
Klasa koja sadri metodu main predstavlja ulaznu taku programa. Vie objekata moe biti kreirano od iste
klase
Programski jezik Java podrava objektno orijentisane osobine:
preklapanje metoda overloading
nasljeivanje inheritance
uahurenje encapsulation
nadjaavanje metoda overriding

Java preklapanje metoda Puno ime metode/funkcije ukljuuje: OVERLOADING


klasu (kojoj pripada ta metoda), naziv i argumente
Stoga se moe pojaviti vie metoda/funkcija istog naziva:
unutar vie klasa sa ili bez istih argumenata
unutar iste klase sa razliitim argumentima
Java nasljeivanje
Nasljeivanje svojstava daje velike prednosti programiranju u smislu efikasnosti Definisanje nasljeivanja
moe ii u dva suprotna smjera: generalizacijom (bottom up) specijalizacijom (top down)
Nasljeivanje generalizacijom
Polazi se od elementarnih objekata te se trae zajednika svojstva (stanje i ponaanje) koja se mogu
izdvojiti u zasebnu klasu. Postupak je iterativan.
Nasljeivanje specijalizacijom
Polazi se od zajednikih svojstava (stanje i ponaanje) koja se nasljeuju u izvedenim klasama.
konkretne koje imaju objekte,
apstraktne koje nemaju objekte (slue za upravljanje zajednikim ponaanjem grupe klasa koje je
nasljeuju abstract class).
Poseban dio je suelje interface - kojim se odreuju apstraktne metode koje trebaju biti konkretizirane u
klasama koje implementiraju suelje. Ako suelje sadri varijable tada su one definisane kao konstante (final
public static).
Java enkapsulacija
Klasa enkaspulira stanja i ponaanja koja se reprezentuju u okviru klase poljima i metodama.
U jeziku Java postoji tehnologija za kontrolu dostupnosti odreenih komponenata poznata kao opseg
vidljivosti (modifikatori pristupa ili kontrola pristupa), a koja podrazumijeva nekoliko kljunih rijei
kojima kreator naglaava u kom e kontekstu komponenta biti vidljiva (public, private, protected).
Svaki lan klase moe biti klasni ili instancni zavisno da li je definisam upotrebom kljune rijei static ili
nije.
Konstruktor predstavlja vrstu specijalne metode u okviru klase i koristi se za kreiranje objekta. Naziv
konstruktora mora biti isti kao i naziv klase.
Metode predstavljaju blokove koda koji obavljaju odreenu funkciju.
Java polimorfizam U objektno orjentisanom programiranju pojam polimorfizma oslikava se kroz dva
pojma odnosno tehnike. To su overriding i overloading. Overriding se ogleda u tome da svaka klasa koja
nasljeuje neku klasu, a samim tim i metodu, moe da definie sopstvenu implementaciju naslijeene
metode. Oznaka @Override slui kao oznaka da je metoda iz roditeljske klase pregaena metodom iz
klasa nasljednika.
public @Override void show()
{

System.out.println("Student: " + firstName + " " + lastName + " ID No. " + indexNumber); }
public @Override void show() {
System.out.println("Professor " + firstName + " " + lastName + " teaches: " + className);
}
Java apstraktna klasa
abstract class Person {
public String firstName;
public String lastName;
public abstract void show();
}
I varijanta:
public class Student extends Person { public String indexNumber;
@Override public void show() {
System.out.println("Student: " + firstName + " " + lastName); }
}
II varijanta: abstract class Student extends Person { public String indexNumber;} public class Apsolvent
extends Student { @Override public void show() { System.out.println(" Apsolvent: " + firstName + " " +
lastName) + " " + indexNumber); } }
Java Interfejsi (Interface)
Apstraktne klase, pored apstraktnih metoda koje sadre samo potpis, mogu sadravati i klasine metode i
atribute. U jeziku Java postoji jo apstraktnija forma, koja sadri samo potpise metoda. Ova forma naziva
se interfejs (interface). Interfejs sadri uglavnom samo potpise metoda, pri emu, kada se interfejs
implementira u klasu, sve metode navedene u njemu moraju biti implementirane u klasi.

Java preklapanje metoda


Unutar vie klasa sa ili bez istih tipova podataka za argumente:
class Proba1 {
void pridruzi(int noviBroj)
{...}

}
class Proba2 {
void pridruzi(int noviBroj)
{...}
}
class Proba3 {
void pridruzi(float noviBroj)
{...}
}
Unutar iste klase sa razliitim tipovima podataka za argumente :
class Proba {
int pridruzi(int noviBroj)
{
return noviBroj;
}
float pridruzi(float noviBroj)
{
return noviBroj;
}
}
Unutar iste klase s razliitim tipom metode i istim/razliitim tipom podatka za argumente:
class Proba {
void pridruzi(int noviBroj)
{}
int pridruzi(int noviBroj)
{
return noviBroj;
}
float pridruzi(float noviBroj)
{
return noviBroj;
}
}

boolean
byte
char
short
int
long
float
double
Java operatori Operatori
postfix
unarni
multiplicative
additive
shift
relacioni
jednakosti
bitovni
bitovni
bitovni
logiki
logiki
ternnarni
pridruivanja

8
8
16
16
32
64
32
64

false
0
x0
0
0
0
0.0F
0.0D
Redoslijed
expr++ expr-++expr --expr +expr -expr ~ !
*/%
+<<>>
<><= >=
== !=
AND &
exclusive OR ^
inclusive OR |
AND &&
OR ||
?:
= += -= *= /= %= &= ^= |= <<= >>= >>>=

Java uslovne naredbe


if...else
if (uvjet) {
instrukcije1
}
[else {
instrukcije2
}]
switch...case
switch (izraz) {
case labela1:
instrukcije1
break;
case labela2:
instrukcije2
break;
...
default:
instrukcije
}
Naredbe za ponavljanje:
do...
do {
instrukcije
} while (uslov);
for...
for ([poetni izraz]; [uslov]; [izraz poveavanja]) {
instrukcije
}
while...
while (uslov) {
instrukcije
}

Java Kolekcije (Collections) Razlika izmeu niza i kolekcije Niz je tip podatka koji u sebi sadri
skup drugih podataka. Pri tom, niz moe da primi samo podatke jednog tipa i to samo onoliki broj
podataka, koliki je naznaen prilikom inicijalizacije niza. Nije mogue promijeniti veliinu niza nakon
njegove inicijalizacije i nije mogue u njega smjetati razliite tipove podataka. Ovi nedostaci prevazilaze
se drugaijim pristupom, koji podrazumijeva jedan objekat koji u sebi sadri druge objekte uzajamno
povezane referencama. Ovo omoguuje jednostavnu manipulaciju strukturom, jer veoma lako moemo
izbaciti objekat iz liste, tako to emo skinuti referencu na njega, dodati drugi objekat i postaviti referencu
na njega. Pored toga, ovakva struktura, s obzirom da je objektna, bie smjetena u dinamiki dio memorije
(heap) i zbog toga neemo biti ogranieni veliinom ove strukture. Kolekcije, pored toga to slue za
smjetanje podataka, takoer pruaju mogunost i za pristupanje i manipulaciju podacima. Paket
java.util koji predstavlja jedan od osnovnih ugraenih paketa u programskom jeziku Java sadri jedan od
najmonijih Javinih podsistema: The CollectionFramework.
Ovaj okvir (framework) predstavlja sofisticiranu hijerarhiju interfejsa i klasa koji omoguuju tehnologiju
za rukovanje podacima. Sljedee aktivnosti se mogu izvriti upotrebom ovog okvira: dodavanje
objekta u kolekciju, uklanjanje objekta iz kolekcije, pretraga objekata, dobavljanje (koritenje)
objekata, iteracija (prolazak) kroz kolekciju.

Kolekcije se javljaju u 4 oblika:


List Ovo su kolekcije kod kojih se mogu pojaviti duplirani lanovi, odnosno moe doi da veeg broja
pojavljivanja jednog istog elementa. Takoer, ove kolekciju su takozvane orderedkolekcije (potuju
redoslijed unoenja elemenata, pa se stoga moe pristupiti nekom elementu ukoliko poznajemo njegov
indeks, tj. redni broj unosa). Najee koritene klase ove kolekcije su: ArrayList i LinkedList.

Set Kod Set kolekcija se za razliku od prethodnih ne mogu pojaviti duplirani elementi. Ukoliko se u
ovakav tip kolekcija unese objekat koji ve postoji, njegova vrijednost e se upisati preko stare vrijednosti.
Takoer, ovakve kolekcije u jeziku Java ne omoguauju nikakav redosled (postoji klasa ove kolekcije koja
to omoguuje, a to je SortedSet).
MapMap predstavlja kontejner za smjetanje elemenata zajedno sa kljuevima. U ovakvoj strukturi,
lanovi niza se identifikuju prema odreenom kljuu koji ih predstavlja. Ovakve kolekcije ne mogu
sadravati duplirane kljueve. Neke od implementacija ovakve kolekcije su: HashMap, HashTable, TreeMap
i LinkedHashMap.
QueueQueue predstavlja strukturu poznatiju kao FIFO (First In FirstOut). Elementi koji su prvi ubaeni u
ovakvu kolekciju prvi se i uklanjaju iz nje. Ovo je jedna struktura identina strukturi reda u ekaonici u
realnom ivotu.
List
Najee koritena lista u programskom jeziku Java je ArrayList.
Da bismo je koristili, neophodno je implementirati paket java.util.ArrayList, odnosno java.util.* (ovaj
paket je neophodan za sva etiri prethodno pomenuta tipa).
Da bi objekat tipa ArrayList bio kreiran, potreban je konstruktor.
ArrayListmyList = new ArrayList(); NAREDBA
lanove u ArrayList-u dodajemo na sljedei nain:
myList.add("Moje"); myList.add("ime"); myList.add("je...");
U ovako kreiranu listu moemo dodavati lanove bez prethodno definisane veliine liste i ova lista moe
biti neogranieno velika. Loa strana je to je ovakav pristup sporiji od realizacije putem niza.
List Da bismo doli do lana na odreenoj poziciji, koristimo metodu get.
Sami lanovi, numeriu se isto kao i u nizu. U naem primjeru, da bismo doli do stringa ime, kao
parametar metodi get emo proslijediti broj 1:
System.out.println(myList.get(1));
Da bismo izbrisali lana iz liste, koristimo metodu remove:
myList.remove(1); Nakon izvrenja ove naredbe, lista e sadravati dva elementa koji e se ponovo sortirati,
tako da e biti pozicionirani na sljedei nain:
0: Moje 1: je...
U sluaju niza, nakon sline intervencije niz bi izgledao ovako:
0: Moje 1: 2: je...
List
Osim ubacivanja, brisanja i pronalaenja novih lanova, postoji jo nekoliko veoma bitnih
funkcionalnosti koje svaka lista posjeduje.
To su funkcionalnosti za pregled veliine i provjeru lanova.
Za provjeru veliine kolekcije, koristi se metoda size:
for(int i=0;i<myList.size();i++) System.out.println(myList.get(i));
Iteraciju (prolazak) kroz listu moemo izvriti i na sljedei nain. Ovaj nain (for-each) je efikasan kada
je potrebno izlistati sve lanove liste, ali nije koristan ukoliko elimo da vrimo neke ozbiljnije intervencije
na njoj jer ne eksponira iterator (broja): for(String s : myList) System.out.println(s);
Liste mogu prihvatiti bilo koji tip podatka. Tako da moemo napisati :
ArrayListmyList = new ArrayList(); myList.add("Moje"); myList.add("ime"); myList.add("je...");
myList.add(123); for(Object s : myList) System.out.println(s);

Primjer e, bez problema, obraditi sve priloene vrijednosti, iako postoji razlika u tipovima. Ovo je mogue
poto kolekcija sve elemente pretvara u objekat prilikom smjetanja, a prilikom ekstraktovanja ih
opet vraa u prvobitni tip. Ovo se naziva Boxing (pretvaranje u objekat) i Unboxing (vraanje u prvobitni
tip).
esto je potrebno provjeriti da li lista sadri neku vrijednost. Ovo je, naravno, mogue izvesti runo:
for(String s : myList)
if(s.equals("ime"))
System.out.println("Vrijednost postoji!");
Ali, List interfejs sadri i metodu (contains) koja obavlja ovaj posao i vraa vrijednost tipa boolean:
System.out.println(myList.contains("ime")); //ispisat e true
Listu je, u svakom trenutku, mogue konvertovati u niz.
String[] niz = new String[myList.size()];
for(int i=0;i<myList.size();i++) niz[i]=myList.get(i);
Ili uz pomo metode toArray: String[] niz = myList.toArray(new String[myList.size()]);
Brisanje liste vri se metodom clear.

myList.clear();

Map
esto upotrebljavani tip kolekcije u Javi.
To je niz parova : klju i vrijednost, odnosno asocijativni niz.
Klase koje omoguavaju upotrebu ovih kolekcija u Javi nasljeuju interfejs Map.
U ovakvoj strukturi, lanovi niza se identifikuju prema odreenom kljuu koji ih predstavlja.
Npr., u kolekciji osoba, JMBG bi bio klju, dok bi podaci (ime, prezime, adresa), predstavljali vrijednost za
svaku osobu. Ako bismo eljeli da pronaemo odreenu osobu, dovoljno bi nam bilo da znamo njen matini
broj, odnosno, klju.
Najee koritena klasa ovog tipa je HashMap.
Primjer upotrebe ove klase.
HashMaphashMap = new HashMap();
Nakon instanciranja klase hashMap parovi se dodaju upotrebom metode put:
hashMap.put("1234567890123", "Ivo Ivi"); hashMap.put("1234567890124", "Edo Edi");
Vrijednost, koja stoji ispod kljua, mogue je dobiti metodom get:
System.out.println(hashMap.get("1234567890124"));
Generalno pravilo je da niz kljueva i parova sadri samo unikatne (jedinstvene) kljueve. U sluaju
HashMap klase unos istoimenih kljueva nee izazvati greku, ali e, prilikom pretrage, ispod kljua biti
samo posljednji dodani klju (stari klju e biti pregaen).
Java - Obrada i generisanje izuzetaka
Pojam izuzetka
Izuzetak reprezentuje greku koja se moe dogoditi u toku izvravanja programa (runtime). Greka je
odstupanje od normalnog ponaanja aplikacije. Izuzetak je dogaaj koji nastaje u toku izvravanja programa
kada doe do greke i koji remeti normalni tok odvijanja programa.
Uzrok izuzetka mogu biti razliiti problemi. Npr. mogue je da aplikacija zahtijeva odreeni fajl sa fajl
sistema koji ne postoji. U tom sluaju nije napravljena nikakva greka u kodu, osim to je programer uzeo u
obzir da e potrebni fajl uvijek postojati, a to ipak nije sluaj. Pored ovoga, izuzetak se moe javiti i zbog
loe napisanog koda. Npr.:

publicclassTestClass {
publicstaticvoidmain(String[] args) {
int[] brojevi= new int[4];
brojevi[7] = 10;
Posljedice pojave izuzetka
Izuzetak se moe javiti u okviru metoda. (Jer ako neto nije dobro definisano prilikom kreiranja
komponenti , program se nee ni prevesti.)
Kada se greka pojavi u toku izvravanja jedne metode kreira se objekat koji se predaje izvrnom sistemu.
Ovaj objekat naziva se objekat izuzetka (exceptionobject) i on sadri informacije o samoj greki, koje
obuhvataju tip greke i stanje programa u trenutku kada se greka dogodila.
Proces kreiranja objekta izuzetka i predaja ovog objekta izvrnom sistemu naziva se izbacivanje izuzetka
(throwing an exception).
Nakon to metoda u kojoj je dolo do greke izbaci izuzetak, izvrni sistem pokuava da pronae dio koda
koji e izvriti obradu nastalog izuzetka.
Trai se (pronalazi) ona metoda koja sadri kod za rukovanje nastalim izuzetkom, odnosno njegovo
hvatanje.
Ukoliko se niti u jednoj metodi ne pronae kod za obradu nastalog izuzetka, izuzetak zavrava u virtuelnoj
maini.
Problem je to JVM-a u ovoj situaciji prekida izvravanje aplikacije i prikazuje poruku izuzetka, odnosno
greke. Ukoliko pokrenemo kod iz gornjeg primera, moemo vidjeti proizvedenu greku:

Obrada izuzetaka
Hvatanje izuzetaka odnosno njihova obrada postie se koritenjem blokova try-catch.
U prethodnom primjeru hvatanje izuzetka bismo izvrili:
publicstaticvoidmain(String[] args) {
int brojevi[] = new int[4];
try
{
brojevi[7] = 10;
}
catch (Exceptionexc)
{
System.out.println("Index izvan okvira!");
}
}
Na ovaj nain, nee doi do prekida izvravanja aplikacije, ve emo na izlazu dobiti poruku:
Index izvan okvira!

Koristimo dvije kljune rijei try i catch.


One oznaavaju blokove za rukovanja izuzetkom.

Prvi blok koji je definisan i kao try blok sadri kod u kome oekujemo greku, a drugi blok (catch blok )
predstavlja blok u kome se nalazi kod koji e tu greku obraditi.
Oba bloka su obavezna i nije ih mogue navesti posebno.
Catch blok obavezno prihvata i parametar Exception tipa. Exception klasa je osnovna klasa izuzetka i
izuzetak ove klase u parametru e biti uvek uhvaen.
Pored try i catch blokova, postoji i trei blok, koji se naziva finally. Ovaj blok se izvrava svaki put, bez
obzira na ishod prethodnih blokova. U njemu se, obino, nalaze sistemi za zatvaranje resursa (zatvaranje
toka, konekcije sa bazom i sl.).

Koritenje bloka finaly


Ponekad elimo da definiemo blok koda koji e se izvriti kada try/catch blokovi zavre sa svojom
logikom.
Npr., kada doe do pojave izuzetka u metodi koja rukuje mrenomkonekcijom, doi e do toga da
konekcija ostane otvorena, to moe izazvati razne probleme. Ovakav problem lako se moe rijeiti
upotrebom finally bloka, koji se moe iskoristiti da se u okviru njega rijee sline situacije.
Prethodni primjer sa dodatkom finally bloka bi izgledao ovako:
Finally blok izvrie se u svakoj situaciji kada izvravanje programa napusti try/catch blok.

Java - Uvod u rad sa bazama podataka


Baza podataka (database ili skraeno DB) predstavlja organizovanu kolekciju podataka. Iako postoje
mnogi tipovi baza podataka (hijerarhijske, objektnoorijentisane, relacione), relacione baze podataka, koje
organizuju podatke u tabele sa meusobnim povezanostima (relacijama) su najzastupljenije.
Bazama

podataka

se

manipulie

koritenjem

sistema

za

rukovanje

bazama

podatka

(databasemanagementsystem) ili skraeno DBMS.


Za komunikaciju se koristi strukturni jezik upita (StructuredQuery Language), poznatiji kao SQL.
Java prua podrku zamanipulaciju bazama podataka kroz upotrebu JDBC API-a.
JDBC predstavlja skraenicu za Java DatabaseConnectivity, to predstavlja biblioteku za obavljanje
svih operacija rukovanja bazom podataka:

uspostavaljanje konekcije sa bazom


kreiranje sql upita
izvravanje upita
pregled i modifikacija rezultata
Server/Klijent i Embedded
sistemi za upravljanje bazama podataka
Najee okruenje u kome se koriste baze podatka predstavlja tzv. klijent/server okruenje.
U ovakvom okruenju baza podataka predstavlja server, gdje se skladite podaci, kome pristupaju
autorizovani korisnici i obavljaju manipulaciju podacima.
Ovakvo okruenje je svojstveno za softverske informacione sisteme sa dosta korisnika i velikim bazama
podataka.
Pod korisnikom u okakvim sistemima podrazumijeva se aplikacija koja zahtijeva vrenje odreenih
operacija manipulacije podacima.

Server/Klijent koritenje baze podataka :


U Javi, kod ovakvih sistema, klijentska aplikacija, i sam engine baze podatka se izvravaju u okviru
zasebnih virtuelnih maina.
Kod ugraenog (embedded) okruenja sam engine baze podataka
izvrava se u okviru iste JVM-a kao i aplikacija.
Ovakvo okruenje karakteristino je za jednostavne Java aplikacije sa
jednim korisnikom, a sama baza podataka je praktino nevidljiva za
krajnjeg korisnika, poto je startovana i zaustavljena od strane same
aplikacije i ne zahtijeva praktino nikakvu administraciju.
Ovakav nain koritenja baze podataka posebno je pogodan za
desktop aplikacije. Baza podataka ima samo jednog korisnika. Na
korisnika se ovdje misli na samu aplikaciju.
Poto e baza biti praktino ugraena (embedded) u samu aplikaciju,
jedino ta aplikacija imat e mogunost pristupa bazi podataka.

Embedded koritenje baze podataka:


Ovakav scenario je nekada posebno poeljan, poto e moda aplikacija koju
razvijamo upravo zahtijevati ovakvu bazu, pa bi koritenje komplikovanih
klijent/server okruenja nepotrebno zakomplikovalo cijeli sistem, jer bi bilo
potrebno na raunaru korisnika instalirati bazu podatka i baviti se njenom
administracijom.

Java DB
Za upravljanje bazama podataka koriste se sistemi za upravljanje bazama podatka ili DBMS
(DatabaseManagementSystem).
Ovdje e biti obraena relaciona baza podatka, a ovi sistemi se nazivaju RDBMS
(RelationalDatabaseManagementSystem).
Sistemi za upravljanje bazama podatka : MySQL, Microsoft SQL Server, SQLite, ApacheDerby,
Oracle RDBMS.
Danas najkoriteniji sistem za rukovanje bazama podatka je MySQL.
MySQL kao sistem za rukovanje bazama podatka koriste i: Facebook, Twitter, Youtube, Flicker,
Wikipedia i mnogi drugi.
Java DB
JDK od verzije 6 dolazi sa integrisanim sistemom za rukovanje bazama podatka, kako bi se programerima
omoguilo da testiraju napisani JDBC kod.
Ovaj sistem za rukovanje bazama podatka naziva se Java DB i predstavlja distribuciju Apache-vogopensource projekta pod nazivom Derby.
Java DB se kompletno bazira na Java programskom jeziku i SQL-u i karakterie ga veoma malo zauzee
memorije (oko 2MB).
Java DB posjeduje mogunost rada u jednostavnom ugraenom (embedded) okruenju i u klijent/server
okruenju.
U okviru NetBeans razvojnog okruenja postoji GUI (grafiko korisniko okruenje) za upravljanje JAVA
DB bazama podataka.
Da bismo pristupili ovoj NetBeans funkcionalnosti dovoljno je odabrati naslov Services:
Tabele se mogu dodati koritenjem SQL upita ili kroz GUI, gdje e na osnovu naeg unosa okruenje
izgenerisati odgovarajui SQL upit.
Da bismo samostalno unijeli SQL upit moemo odabrati opciju ExecuteCommand.
Da bismo kreirali nau tabelu potrebno je napisati SQL upit:
CREATE table USERS (ID INTEGER NOT NULL PRIMARY KEY GENERATED ALWAYS AS
IDENTITY (START WITH 1, INCREMENT BY 1), USERNAME VARCHAR(30), PASSWORD
VARCHAR(30)
SQL komanda se pokree klikom na ikonu Run SQL.
JDBC
Kreirat emo novi projekat, tj. Java aplikaciju u kojoj emo se povezati na kreiranu bazu i izvriti osnovne
operacije.
Za manipulisanje podacima iz baze podataka kroz aplikaciju napisanu u Java programskom jeziku korisiti
se JDBC (Java DatabaseConnectivity) API.
JDBC se koristi kako bi se obavile razliite operacije nad podacima u bazi, tj. kako bi se izvrile
mnogobrojne SQL naredbe kojima se manipulie podacima.
Iako se JDBC primarno koristi za komunikaciju sa sistemima za rukovanje relacionimbazama podataka
(RDBMS), on se moe koristiti i za komunikaciju i sa bazama smjetenim u okviru fajla.

Prije bilo kakvog rada sa bazom podataka, potrebno je uspostaviti konekciju.


Za to JDBC posjeduje klasu java.sql.DriverManager i interfejs javax.sql.DataSource:
DriverManager omoguuje aplikaciji da se konektuje na bazu podataka koritenjem URL-a
DataSource skriva detalje konekcije kako bi se omoguila maksimalna portabilnost
Potrebno je da se uradi dodavanje jar biblioteke drajveraRDBMS-a koji elimo da koristimo.
Nakon dodavanja tabela, da bi se konektovalo na bazu podataka (Java DB bazu) koristi se jedna od metoda
DriverManager klase:
ConnectiongetConnection(Stringurl)
ConnectiongetConnection(Stringurl, Propertiesinfo)
ConnectiongetConnection(Stringurl, Stringuser, Stringpassword)
U svakoj od metoda, prvo se navodi konekcionistring, koji predstavlja URL i koji se sastoji iz prefiksa
jdbc:, nakon ega slijede podaci specifini za odreenu bazu.
U svakoj od navedenih metoda, prvo se navodi konekcionistring, koji predstavlja URL i koji se sastoji iz
prefiksa jdbc:, nakon ega slijede podaci specifini za odreenu bazu.
U naem sluaju konekcionistring glasi: jdbc:derby://localhost:1527/test_database
Da bi se kreirao objekat tipa Connection potrebno je napisati sljedeu liniju:
Connectionconn

DriverManager.getConnection("jdbc:derby://localhost:1527/test_database",

"test_user", "123");
Poto metoda getConnection klase DriverManager moe da izbaci izuzetak tipa java.sql.SQLException ili
izuzetak nekog tipa izvedenog iz ovog izuzetka , potrebno je liniju za uspostavljanje konekcije obavezno
smjestiti u okviru blokova za obradu izuzetaka.
JDBC
try

(Connectionconn

DriverManager.getConnection("jdbc:derby://localhost:1527/test_database",

"test_user", "123");) {
}
catch (SQLException ex)
{
System.out.println("Error in databaseconnection: \n" + ex.getMessage());
}
Konekcija se mora zatvoriti kada vie nije potrebna.
U gornjem kodu linija kojom se uspostavlja konekcija sa bazom podataka smjetena je u okviru malih
zagrada try bloka, pa e se nakon zavretka try bloka konekcija automatski zatvoriti.
JDBC
Statementinterfejsi
Nakon kreiranja konekcionog objekta, aplikacija moe vriti interakciju sa bazom podataka navoenjem
SQL naredbi (CREATE TABLE, INSERT, SELECT, UPDATE, DELETE, DROP TABLE).
JDBC podrava SQL naredbe kroz sledee interfejse:

java.sql.Statement
java.sql.PreparedStatement
java.sql.CallableStatement
Klasa Connectiondeklarie metode: createStatement(), prepareStatement() i prepareCall() koje redom
vraaju : Statement, PreparedStatement i CallableStatement.
Statement i ResultSet
Statement je interfejs koji je najlaki za koritenje.
Metoda createStatement() klase Connection je metoda koja je najlaka za dobijanje Statement instance.
Kd za insertovanje i itanje vrijednosti u kreiranu tabelu baze podataka (INSERT i SELECT SQL
naredbe) glasi:
Statement i ResultSet
publicstaticvoidmain(String[] args) {
try

(Connectionconn

DriverManager.getConnection("jdbc:derby://localhost:1527/test_database",

"test_user", "123");)
{
StatementstInsert = conn.createStatement();
stInsert.execute("insert intousers (username,password) values ('myUserName','myPassword')");
StatementstSelect = conn.createStatement();
ResultSetrs = stSelect.executeQuery("select * fromusers");
while (rs.next()) {
System.out.println("User:");
System.out.println("Username: " + rs.getString("username"));
System.out.println("Password: " + rs.getString("password"));
System.out.println("\n");
}
} catch (SQLException ex) {
System.out.println("Error in databaseconnection: \n" + ex.getMessage());
}
}
Statement i ResultSet
U prethodnom kodu izvreno je
1.Kreiranje konekcije na bazu podataka.
2.Kreiranje Statement objekta sa nazivmstInsert i koritenjem metode execute izvrena SQL naredba za unos
podataka u bazu.
3.Nakon ubacivanja podataka u bazu, kreiran je novi objekat tipa Statement sa nazivom stSelect, a zatim je
koritenjem metode executeQuery, izvrena SQL naredba za dobavljanje zapisa iz baze. Ova metoda vraa
ResultSet objekat u okviru koga e se nalaziti proitani zapisi.

4.Za itanje zapisa iz ResultSet objekta koristi se jedna while petlja, a za provjeru dostupnosti proitanih
polja iz baze koristi se metoda next, koja vraa true ili false u zavisnosti od postojanja sljedeeg zapisa.
5.Prilikom itanja podataka iz ResultSet, koriste se metode za specifine tipove podataka. Na ovaj nain vri
se mapiranje podataka iz baze u tip podataka podran u Java jeziku.

CallableStatement
CallableStatement predstavlja najspecijalizovaniji od pomenuta tri interfejsa.
Koristi se za izvravanje SQL stored procedura.
Stored procedure predstavlja listu SQL naredbi koje su grupisane u logiku cjelinu koja obavlja odreenu
funkciju.
Java DB se razlikuje od veine ostalih RDBMS-a po pitanju implementacije stored procedura.
U Java DB sistemu, stored procedure se implementiraju kao Java metode sa publicstaticmodifikatorima
pristupa.
U MySQL sistemu za upravljanje bazama podataka storedprocedures se smetaju u okviru same baze.
MySQL je vienamjenskarelaciona baza, veoma popularna u raznim sferama programiranja.
Da bismo upravljali MySQL bazom, koristimo MySQLconnector/JDBC.
Za definisanje SQL upita moe se koristiti Statement interfejs.
Za definisanje SQL upita sa dinamikim parametrima moe se koristiti interfejs PreparedStatement.
Za pozivanje storedprocedure-a se koristi interfejs CallableStatement.
MySQL je vienamjenskarelaciona baza, veoma popularna u raznim sferama programiranja. Brza je, ima
veliki kapacitet i podrana je od strane svih vanijih operativnih sistema. Besplatna je.

Da bismo koristili neku programsku tehnologiju sa nekom bazom podataka, proizvoa baze mora
omoguiti paket drajvera za tu tehnologiju.
Ovi drajveri nazivaju se konektori i obino sadre set funkcionalnosti za rukovanje bazom.
Java sistem za rukovanje bazom podataka naziva se JDBC (Java DatabaseConnectivity) i da bismo uz
pomo njega upravljali MySQL bazom, koristimo MySQLconnector/JDBC. Ovaj konektor mogue je
skinuti sa adrese:
http://dev.mysql.com/downloads/connector/j/5.1.html
Takoe, ovaj konektor ugraen je i u NetBeans pa je dovoljno samo implementirati ga kao biblioteku u
projekat.
Rukovanje bazom podataka
Za manipulisanje podacima iz baze koristi se Data Manipulation set Sql naredbi: Select, Insert, Update i
Delete.
Za instalaciju MySQL servera preporuuje se instalacija Wamp paketa jer u sebi sadri i web server, kao i
PHPmyAdmin web aplikaciju za rukovanje MySQL bazom podataka, koja je nezaobilazna MySQL kontrola
na veini hostingprovajdera.
Za dalji rad potrebno je kreirati bazu podataka Test i u njoj tabelu Korisnici sljedee strukture:
CREATE TABLE korisnici (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
email VARCHAR( 256 ) NOT NULL , password VARCHAR( 236 ) NOT NULL ) ENGINE = innodb

You might also like