Upload
umjetnik-nimra-civo-temha
View
4
Download
0
Embed Size (px)
DESCRIPTION
Priprema ispita iz java programiranja.. Mislim da nikom nije potrebno :D
Citation preview
1991. g. James Gosling počinje rad na programskom jeziku Oak. 1992. g. Sun Microsystems predstavlja
Star7, PDA ureĎaj sa touchscreen-om i animiranim grafičkim korisničkim sučeljem, na kojem Oak radi.
1995. g. programski jezik Oak mijenja naziv u Java. Od 2010. g. je vasništvo Oracle korporacije. Stoga je,
pored platformske nezavisnosti, Internet najzaslužniji za ogroman uspjeh koji je Java postigla
Java nasljeĎuje sintaksu iz programskog jezika C, a objektni model adaptira iz jezika C++.
Razlika u odnosu na C++:
Nema preklapanje/nadjačavanje operatora, višestruko nasljeĎivanje, pokazivače, preprocesorske naredbe
Ne podržava definisanje vlastitog tipa podatka: strukture , enum tip podatka (može od 1.5)
Ne podržava funkcije (izvan klase). Ne podržava goto instrukciju. Ne podržava utomatsko upravljanje
memorijom (engl. garbage collector).
Java osobine: Jezik visokog nivoa koji je: jednostavan ,neovisan o arhitekturi ,objektno-orijentisan
,prenosiv ,distribuiran ,visokih performansi ,interpreterski ,višenitni ,robusan ,siguran ,s dinamičkim
povezivanjem metoda, s ugraĎenim "sakupljanjem smeća" (garbage collection) .
- kompajler generiše tzv. bytecode koji je sličan mašinskom kodu ali iziskuje dodatnu interpretaciju koji
izvršava JVM nešto brže izvršavanje prethodno kompajliranih programa, od onih koji se interpretiraju . Java
predstavlja mješavinu interpretiranog i prevedenog izvršavanja. Prevodi se izvorni kôd u bytecode, a
zatim se bytecode interpretira u odreĎeni mašinski kôd . Preduslov da Java funkcioniše jeste postojanje JVM
(Java Virtual Machine) u tom okruženju.
-Java Virtuelna Mašina (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 može koristiti za obavljanje rutinskih operacija
- JRE omogućuje operativnom sistemu da izvršava programe napisane u Java jeziku, dok JDK donosi pored
okruženja za pokretanje Java programa i set alata koji se koriste od strane programera za razvoj aplikacija.
JRE sadrži JVM i skup najrazličitijih biblioteka sa predefinisanim funkcionalnostima koje aplikacije mogu
da koriste, a JDK sadrži JRE i alate za programere.
U okviru JVM-e se pojavljuje JIT (Just In Time Compiler). On služi da ubrza interpretaciju koda, tako što
prepoznaje naredbe koje se često ponavljaju i vrši prevoĎenje ovih naredbi u toku izvršavanja programa.
Postoji tri Java edicije/platforme:
•Java Standard Edition – JSE – za uobičajenu primjenu, sadrži 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 pruža sigurnu okolinu za aplikacije koje se izvršavaju na pametnim karticama i
drugim ureĎajima s ograničenim memorijskim i procesorskim kapacitetima
•JavaDB – Sun/Oracle distribucija Apache Derby 100% Java tehnologija baze podataka otvorenog koda
(transakcijska, sigurna, jednostavna za korištenje, podržava standarde SQL, JDBC API i Java EE, i vrlo je
mala (2.5 MB).)
•JavaTV - Java ME bazirana tehnologija koja pruža rješenje za razvoj Java aplikacija koje se izvršavaju na
TV i drugim “box” ureĎajima.
-S pozicije razvoja i korištenja razlikuju se:
•JRE – Java Runtime Environment – uključuje interpreter (JVM), biblioteke (klasa i sučelja) i ostale
komponente koje su potrebne za izvršavanje Java aplikacija. Potrebno instalirati na računaru da bi se
izvršavale Java aplikacije.
•JDK (SDK) – Java Development Kit – uključuje razvojne alate (kompajler, debugger i dr.) i JRE.
- Java razvojno okruženjev5 i v6 uvodi: Uvodi : Generičko programiranje – Proširenje petlje -
Umetanje/uzimanje primitivnih podataka - Enumeracijski podaci Varijabilni broj argumenata
Statičko uključivanje Metapodaci, anotacije
- Java okolina – v 7.0 Uvodi značajne novosti: korištenje znaka _ u brojčanim podacima za postizanje
preglednosti, korištenje string vrijednosti u switch instrukciji, try-with-resource instrukcija hvatanje
više tipova iznimki i ponovno bacanje iznimki s poboljšanom provjerom tipa,
dodan paket java.nio.file za bolji pristup datotekama, Java Virtual Machine podrška za ne-Java
programske jezika (Groovy, JRuby, Jython, Scala i dr.)
- Program može biti pripremljen za izvršavanje unutar:
virtuelne mašine JDK (Java Development Kit) – aplikacija (znakovno ili grafičko sučelje)
virtuelne mašine preglednika – applet virtuelne mašine preglednika– Java Web Start
- Kompajliranje Java programa provodi se: pozivanjem ugraĎenog kompajlera unutar razvojne okoline
(NetBeans, Eclipse,...) ili Pozivanjem kompajlera u komandnoj liniji javac nazivprograma.java
- Izvršavanje Java aplikacije provodi se:
izvršavanjem JDK virtuelne mašine u komandnoj liniji java nazivprograma
- Izvršavanje Java appleta provodi se: uključivanjem posebne oznake unutar HTML dokumenta
Java – komentari
Postoji više vrsta komentara:
// - jedna linija – do kraja linije
/* ... */ - jedna ili više linija
/** ... */ - jedna ili više linija koje će služiti kao dokumentacija nakon primjene javadoc programa
složeni tipova podataka:
klasa – konstrukt koji povezuje podatke (varijable) i ponašanje nad tim podacima (metode)
sučelje – definiše skup metoda koje trebaju implementirati konkretne klase
paket – organizacijski oblik povezivanja srodnih klasa
Java – ključne riječi kod definisanja klase
Karakteristite klase u odnosu na kreiranje objekta i nasljeĎivanje:
• abstract – apstraktna klasa se ne može koristiti za instanciranje objekata. Može se naslijediti. Ukoliko
klasa implementira neko sučelje ali ne implementira sve metode sučelja, tada mora biti označena s abstract.
• final – zapečećena klasa se ne može naslijediti. Može se instancirati objekat ove klase.
Sakrivanje informacija odnosno učahurenje (engl. encapsulation - enkapsulacija) postiže se odreĎivanjem
vidljivosti tako da klasi mogu pristupiti odnosno ona je na raspolaganju:
• samo klasama iz njenog paketa – osnovno
• svim ostalim klasama – public
Java – ključne riječi kod definisanja metode
Karakteristite metode u odnosu na korištenje i nasljeĎivanje:
• abstract – metoda nije implementirana u apstraktnoj klasi. Očekuje se da klasa ima specijalizacije
odnosno da je druge klase nasljeĎuju i da imaju konkretnu metodu odnosno implementaciju metode.
•final – metoda se ne može nadjačavati u klasama koje je nasljeĎuju.
Java ključne riječi kod definisanja varijabli i metode
Sakrivanje informacija odnosno učahurenje postiže se odreĎivanjem vidljivosti tako da se varijablama i
metodama iz neke klase može 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) •ponašanja (šta
on može činiti ili šta se sa njim može činiti) •Ponašanje objekta može promijeniti njegovo stanje.
Klase (Class)
•Klasa je složeni korisnički definisan tip podatka. •Objekat je instanca (konktretizacija) klase..
•Klasa je predložak (šablon) objekta. •Klasa koristi metode za definisanje ponašanja objekta.
•Klasa koja sadrži metodu main predstavlja ulaznu tačku programa. •Više objekata može biti kreirano od iste
klase
Programski jezik Java podržava objektno orijentisane osobine:
preklapanje metoda – overloading
nasljeĎivanje – inheritance
učahurenje – encapsulation
nadjačavanje metoda– overriding
Java – preklapanje metoda Puno ime metode/funkcije uključuje: OVERLOADING
klasu (kojoj pripada ta metoda), naziv i argumente
Stoga se može pojaviti više metoda/funkcija istog naziva:
unutar više klasa sa ili bez istih argumenata
unutar iste klase sa različitim argumentima
Java – nasljeĎivanje
NasljeĎivanje svojstava daje velike prednosti programiranju u smislu efikasnosti Definisanje nasljeĎivanja
može ići u dva suprotna smjera: generalizacijom (bottom up) specijalizacijom (top down)
NasljeĎivanje generalizacijom
•Polazi se od elementarnih objekata te se traže zajednička svojstva (stanje i ponašanje) koja se mogu
izdvojiti u zasebnu klasu. Postupak je iterativan.
NasljeĎivanje specijalizacijom
•Polazi se od zajedničkih svojstava (stanje i ponašanje) koja se nasljeĎuju u izvedenim klasama.
konkretne – koje imaju objekte,
apstraktne – koje nemaju objekte (služe za upravljanje zajedničkim ponašanjem grupe klasa koje je
nasljeĎuju – abstract class).
Poseban dio je sučelje – interface - kojim se odreĎuju apstraktne metode koje trebaju biti konkretizirane u
klasama koje implementiraju sučelje. Ako sučelje sadrži varijable tada su one definisane kao konstante (final
public static).
Java – enkapsulacija
Klasa enkaspulira stanja i ponašanja koja se reprezentuju u okviru klase poljima i metodama.
U jeziku Java postoji tehnologija za kontrolu dostupnosti odreĎenih komponenata poznata kao „opseg
vidljivosti” (modifikatori pristupa ili kontrola pristupa), a koja podrazumijeva nekoliko ključnih riječi
kojima kreator naglašava u kom će kontekstu komponenta biti vidljiva (public, private, protected).
Svaki član klase može biti klasni ili instancni zavisno da li je definisam upotrebom ključne riječi 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 odreĎenu 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
nasljeĎuje neku klasu, a samim tim i metodu, može da definiše sopstvenu implementaciju naslijeĎene
metode. • Oznaka @Override služi kao oznaka da je metoda iz roditeljske klase „pregažena“ 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 sadrže samo potpis, mogu sadržavati i „klasične“ metode i
atribute. • U jeziku Java postoji još apstraktnija forma, koja sadrži samo potpise metoda. Ova forma naziva
se interfejs (interface). • Interfejs sadrži 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 više 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 različitim tipovima podataka za argumente :
class Proba {
int pridruzi(int noviBroj)
{
return noviBroj;
}
float pridruzi(float noviBroj)
{
return noviBroj;
}
}
Unutar iste klase s različitim tipom metode i istim/različitim tipom podatka za argumente:
class Proba {
void pridruzi(int noviBroj)
{}
int pridruzi(int noviBroj)
{
return noviBroj;
}
float pridruzi(float noviBroj)
{
return noviBroj;
}
}
boolean 8 false
byte 8 0
char 16 x0
short 16 0
int 32 0
long 64 0
float 32 0.0F
double 64 0.0D
Java operatori Operatori Redoslijed
postfix expr++ expr--
unarni ++expr --expr +expr -expr ~ !
multiplicative * / %
additive + -
shift <<>>
relacioni <><= >=
jednakosti == !=
bitovni AND &
bitovni exclusive OR ^
bitovni inclusive OR |
logički AND &&
logički OR ||
ternnarni ? :
pridruživanja = += -= *= /= %= &= ^= |= <<= >>= >>>=
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 ([početni izraz]; [uslov]; [izraz povećavanja]) {
instrukcije
}
while...
while (uslov) {
instrukcije
}
Java – Kolekcije (Collections) Razlika izmeĎu niza i kolekcije • Niz je tip podatka koji u sebi sadrži
skup drugih podataka. •Pri tom, niz može da primi samo podatke jednog tipa i to samo onoliki broj
podataka, koliki je naznačen prilikom inicijalizacije niza. •Nije moguće promijeniti veličinu niza nakon
njegove inicijalizacije i nije moguće u njega smještati različite tipove podataka. •Ovi nedostaci prevazilaze
se drugačijim pristupom, koji podrazumijeva jedan objekat koji u sebi sadrži druge objekte uzajamno
povezane referencama. Ovo omogućuje jednostavnu manipulaciju strukturom, jer veoma lako možemo
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, biće smještena u dinamički dio memorije
(heap) i zbog toga nećemo biti ograničeni veličinom ove strukture. Kolekcije, pored toga što služe za
smještanje podataka, takoĎer pružaju mogućnost i za pristupanje i manipulaciju podacima. Paket
java.util koji predstavlja jedan od osnovnih ugraĎenih paketa u programskom jeziku Java sadrži jedan od
najmoćnijih Javinih podsistema: The CollectionFramework.
Ovaj okvir (framework) predstavlja sofisticiranu hijerarhiju interfejsa i klasa koji omogućuju tehnologiju
za rukovanje podacima. Sljedeće aktivnosti se mogu izvršiti upotrebom ovog okvira: dodavanje
objekta u kolekciju, uklanjanje objekta iz kolekcije, pretraga objekata, dobavljanje (korištenje)
objekata, iteracija (prolazak) kroz kolekciju.
Kolekcije se javljaju u 4 oblika:
List Ovo su kolekcije kod kojih se mogu pojaviti duplirani članovi, odnosno može doći da većeg broja
pojavljivanja jednog istog elementa. TakoĎer, ove kolekciju su takozvane orderedkolekcije (poštuju
redoslijed unošenja elemenata, pa se stoga može pristupiti nekom elementu ukoliko poznajemo njegov
indeks, tj. redni broj unosa). Najčešće korištene 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.
TakoĎer, ovakve kolekcije u jeziku Java ne omogućauju nikakav redosled (postoji klasa ove kolekcije koja
to omogućuje, a to je SortedSet).
MapMap predstavlja kontejner za smještanje elemenata zajedno sa ključevima. U ovakvoj strukturi,
članovi niza se identifikuju prema odreĎenom ključu koji ih predstavlja. Ovakve kolekcije ne mogu
sadržavati duplirane ključeve. Neke od implementacija ovakve kolekcije su: HashMap, HashTable, TreeMap
i LinkedHashMap.
QueueQueue predstavlja strukturu poznatiju kao FIFO (First In FirstOut). Elementi koji su prvi ubačeni u
ovakvu kolekciju prvi se i uklanjaju iz nje. Ovo je jedna struktura identična strukturi reda u čekaonici u
realnom životu.
List
Najčešće korištena 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 sljedeći način:
myList.add("Moje"); myList.add("ime"); myList.add("je...");
U ovako kreiranu listu možemo dodavati članove bez prethodno definisane veličine liste i ova lista može
biti neograničeno velika. Loša strana je što je ovakav pristup sporiji od realizacije putem niza.
List Da bismo došli do člana na odreĎenoj poziciji, koristimo metodu get.
Sami članovi, numerišu se isto kao i u nizu. U našem primjeru, da bismo došli 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 izvršenja ove naredbe, lista će sadržavati dva elementa koji će se ponovo sortirati,
tako da će biti pozicionirani na sljedeći način:
0: Moje 1: je...
U slučaju niza, nakon slične intervencije niz bi izgledao ovako:
0: Moje 1: 2: je...
List
Osim ubacivanja, brisanja i pronalaženja novih članova, postoji još nekoliko veoma bitnih
funkcionalnosti koje svaka lista posjeduje.
To su funkcionalnosti za pregled veličine i provjeru članova.
Za provjeru veličine kolekcije, koristi se metoda size:
for(int i=0;i<myList.size();i++) System.out.println(myList.get(i));
Iteraciju (prolazak) kroz listu možemo izvršiti i na sljedeći način. Ovaj način (for-each) je efikasan kada
je potrebno izlistati sve članove liste, ali nije koristan ukoliko želimo da vršimo 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 možemo 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 priložene vrijednosti, iako postoji razlika u tipovima. Ovo je moguće
pošto kolekcija sve elemente pretvara u objekat prilikom smještanja, a prilikom ekstraktovanja ih
opet vraća u prvobitni tip. Ovo se naziva Boxing (pretvaranje u objekat) i Unboxing (vraćanje u prvobitni
tip).
Često je potrebno provjeriti da li lista sadrži neku vrijednost. Ovo je, naravno, moguće izvesti ručno:
for(String s : myList) if(s.equals("ime")) System.out.println("Vrijednost postoji!");
Ali, List interfejs sadrži i metodu (contains) koja obavlja ovaj posao i vraća vrijednost tipa boolean:
System.out.println(myList.contains("ime")); //ispisat će true
Listu je, u svakom trenutku, moguće 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 vrši se metodom clear. myList.clear();
Map
Često upotrebljavani tip kolekcije u Javi.
To je niz parova : ključ i vrijednost, odnosno asocijativni niz.
Klase koje omogućavaju upotrebu ovih kolekcija u Javi nasljeĎuju interfejs Map.
U ovakvoj strukturi, članovi niza se identifikuju prema odreĎenom ključu 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 pronaĎemo odreĎenu osobu, dovoljno bi nam bilo da znamo njen matični
broj, odnosno, ključ.
Najčešće korištena 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 ključa, moguće je dobiti metodom get:
System.out.println(hashMap.get("1234567890124"));
Generalno pravilo je da niz ključeva i parova sadrži samo unikatne (jedinstvene) ključeve. U slučaju
HashMap klase unos istoimenih ključeva neće izazvati grešku, ali će, prilikom pretrage, ispod ključa biti
samo posljednji dodani ključ (stari ključ će biti pregažen).
Java - Obrada i generisanje izuzetaka
Pojam izuzetka
Izuzetak reprezentuje grešku koja se može dogoditi u toku izvršavanja programa (runtime). Greška je
odstupanje od normalnog ponašanja aplikacije. Izuzetak je dogaĎaj koji nastaje u toku izvršavanja programa
kada doĎe do greške i koji remeti normalni tok odvijanja programa.
Uzrok izuzetka mogu biti različiti problemi. Npr. moguće je da aplikacija zahtijeva odreĎeni fajl sa fajl
sistema koji ne postoji. U tom slučaju nije napravljena nikakva greška u kodu, osim što je programer uzeo u
obzir da će potrebni fajl uvijek postojati, a što ipak nije slučaj. Pored ovoga, izuzetak se može javiti i zbog
loše napisanog koda. Npr.:
publicclassTestClass {
publicstaticvoidmain(String[] args) {
int[] brojevi= new int[4];
brojevi[7] = 10;
Posljedice pojave izuzetka
Izuzetak se može javiti u okviru metoda. (Jer ako nešto nije dobro definisano prilikom kreiranja
komponenti , program se neće ni prevesti.)
Kada se greška pojavi u toku izvršavanja jedne metode kreira se objekat koji se predaje izvršnom sistemu.
Ovaj objekat naziva se objekat izuzetka (exceptionobject) i on sadrži informacije o samoj greški, koje
obuhvataju tip greške i stanje programa u trenutku kada se greška dogodila.
Proces kreiranja objekta izuzetka i predaja ovog objekta izvršnom sistemu naziva se izbacivanje izuzetka
(throwing an exception).
Nakon što metoda u kojoj je došlo do greške izbaci izuzetak, izvršni sistem pokušava da pronaĎe dio koda
koji će izvršiti obradu nastalog izuzetka.
Traži se (pronalazi) ona metoda koja sadrži kod za rukovanje nastalim izuzetkom, odnosno njegovo
hvatanje.
Ukoliko se niti u jednoj metodi ne pronaĎe kod za obradu nastalog izuzetka, izuzetak završava u virtuelnoj
mašini.
Problem je što JVM-a u ovoj situaciji prekida izvršavanje aplikacije i prikazuje poruku izuzetka, odnosno
greške. Ukoliko pokrenemo kod iz gornjeg primera, možemo vidjeti proizvedenu grešku:
Obrada izuzetaka
Hvatanje izuzetaka odnosno njihova obrada postiže se korištenjem blokova try-catch.
U prethodnom primjeru hvatanje izuzetka bismo izvršili:
publicstaticvoidmain(String[] args) {
int brojevi[] = new int[4];
try {
brojevi[7] = 10;
} catch (Exceptionexc)
{
System.out.println("Index izvan okvira!"); }
}
Na ovaj način, neće doći do prekida izvršavanja aplikacije, već ćemo na izlazu dobiti poruku: Index izvan okvira!
Koristimo dvije ključne riječi try i catch.
One označavaju blokove za rukovanja izuzetkom.
Prvi blok koji je definisan i kao try blok sadrži kod u kome očekujemo grešku, a drugi blok (catch blok )
predstavlja blok u kome se nalazi kod koji će tu grešku obraditi.
Oba bloka su obavezna i nije ih moguće 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 uhvaćen.
Pored try i catch blokova, postoji i treći blok, koji se naziva finally. Ovaj blok se izvršava svaki put, bez
obzira na ishod prethodnih blokova. U njemu se, obično, nalaze sistemi za zatvaranje resursa (zatvaranje
toka, konekcije sa bazom i sl.).
Korištenje bloka finaly
•Ponekad želimo da definišemo blok koda koji će se izvršiti kada try/catch blokovi završe sa svojom
logikom.
•Npr., kada doĎe do pojave izuzetka u metodi koja rukuje mrežnomkonekcijom, doći će do toga da
konekcija ostane otvorena, što može izazvati razne probleme. Ovakav problem lako se može riješiti
upotrebom finally bloka, koji se može iskoristiti da se u okviru njega riješe slične situacije.
•Prethodni primjer sa dodatkom finally bloka bi izgledao ovako:
Finally blok izvršiće se u svakoj situaciji kada izvršavanje programa napusti try/catch blok.
Java - Uvod u rad sa bazama podataka
Baza podataka (database ili skraćeno DB) predstavlja organizovanu kolekciju podataka. Iako postoje
mnogi tipovi baza podataka (hijerarhijske, objektnoorijentisane, relacione), relacione baze podataka, koje
organizuju podatke u tabele sa meĎusobnim povezanostima (relacijama) su najzastupljenije.
Bazama podataka se manipuliše korištenjem sistema za rukovanje bazama podatka
(databasemanagementsystem) ili skraćeno DBMS.
Za komunikaciju se koristi strukturni jezik upita (StructuredQuery Language), poznatiji kao SQL.
Java pruža podršku za manipulaciju bazama podataka kroz upotrebu JDBC API-a.
JDBC predstavlja skraćenicu za Java DatabaseConnectivity, što predstavlja biblioteku za obavljanje
svih operacija rukovanja bazom podataka:
uspostavaljanje konekcije sa bazom
kreiranje sql upita
izvršavanje upita
pregled i modifikacija rezultata
Server/Klijent i Embedded
sistemi za upravljanje bazama podataka
Najčešće okruženje u kome se koriste baze podatka predstavlja tzv. klijent/server okruženje.
U ovakvom okruženju baza podataka predstavlja server, gdje se skladište podaci, kome pristupaju
autorizovani korisnici i obavljaju manipulaciju podacima.
Ovakvo okruženje je svojstveno za softverske informacione sisteme sa dosta korisnika i velikim bazama
podataka.
Pod korisnikom u okakvim sistemima podrazumijeva se aplikacija koja zahtijeva vršenje odreĎenih
operacija manipulacije podacima.
Server/Klijent korištenje baze podataka :
U Javi, kod ovakvih sistema, klijentska aplikacija, i sam engine baze podatka se izvršavaju u okviru
zasebnih virtuelnih mašina.
Kod ugraĎenog (embedded) okruženja sam engine baze podataka
izvršava se u okviru iste JVM-a kao i aplikacija.
Ovakvo okruženje karakteristično je za jednostavne Java aplikacije sa
jednim korisnikom, a sama baza podataka je praktično nevidljiva za
krajnjeg korisnika, pošto je startovana i zaustavljena od strane same
aplikacije i ne zahtijeva praktično nikakvu administraciju.
Ovakav način korištenja baze podataka posebno je pogodan za
desktop aplikacije. Baza podataka ima samo jednog korisnika. Na
korisnika se ovdje misli na samu aplikaciju.
Pošto će baza biti praktično ugraĎena (embedded) u samu aplikaciju,
jedino ta aplikacija imat će mogućnost pristupa bazi podataka.
Embedded korištenje baze podataka:
Ovakav scenario je nekada posebno poželjan, pošto će možda aplikacija koju
razvijamo upravo zahtijevati ovakvu bazu, pa bi korištenje komplikovanih
klijent/server okruženja nepotrebno zakomplikovalo cijeli sistem, jer bi bilo
potrebno na računaru 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 obraĎena relaciona baza podatka, a ovi sistemi se nazivaju RDBMS
(RelationalDatabaseManagementSystem).
Sistemi za upravljanje bazama podatka : MySQL, Microsoft SQL Server, SQLite, ApacheDerby,
Oracle RDBMS.
Danas najkorišteniji 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
omogućilo da testiraju napisani JDBC kod.
Ovaj sistem za rukovanje bazama podatka naziva se Java DB i predstavlja distribuciju Apache-vogopen-
source projekta pod nazivom Derby.
Java DB se kompletno bazira na Java programskom jeziku i SQL-u i karakteriše ga veoma malo zauzeće
memorije (oko 2MB).
Java DB posjeduje mogućnost rada u jednostavnom ugraĎenom (embedded) okruženju i u klijent/server
okruženju.
U okviru NetBeans razvojnog okruženja postoji GUI (grafičko korisničko okruženje) za upravljanje JAVA
DB bazama podataka.
Da bismo pristupili ovoj NetBeans funkcionalnosti dovoljno je odabrati naslov Services:
Tabele se mogu dodati korištenjem SQL upita ili kroz GUI, gdje će na osnovu našeg unosa okruženje
izgenerisati odgovarajući SQL upit.
•Da bismo samostalno unijeli SQL upit možemo odabrati opciju ExecuteCommand.
Da bismo kreirali našu 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 pokreće klikom na ikonu Run SQL .
JDBC
Kreirat ćemo novi projekat, tj. Java aplikaciju u kojoj ćemo se povezati na kreiranu bazu i izvršiti 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 različite operacije nad podacima u bazi, tj. kako bi se izvršile
mnogobrojne SQL naredbe kojima se manipuliše podacima.
Iako se JDBC primarno koristi za komunikaciju sa sistemima za rukovanje relacionimbazama podataka
(RDBMS), on se može koristiti i za komunikaciju i sa bazama smještenim 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 omogućuje aplikaciji da se konektuje na bazu podataka korištenjem URL-a
DataSource skriva detalje konekcije kako bi se omogućila 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 specifični za odreĎenu bazu.
U svakoj od navedenih metoda, prvo se navodi konekcionistring, koji predstavlja URL i koji se sastoji iz
prefiksa jdbc:, nakon čega slijede podaci specifični za odreĎenu bazu.
U našem slučaju konekcionistring glasi: jdbc:derby://localhost:1527/test_database
Da bi se kreirao objekat tipa Connection potrebno je napisati sljedeću liniju:
Connectionconn = DriverManager.getConnection("jdbc:derby://localhost:1527/test_database",
"test_user", "123");
Pošto metoda getConnection klase DriverManager može 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 više nije potrebna.
U gornjem kodu linija kojom se uspostavlja konekcija sa bazom podataka smještena je u okviru malih
zagrada try bloka, pa će se nakon završetka try bloka konekcija automatski zatvoriti.
JDBC
Statementinterfejsi
Nakon kreiranja konekcionog objekta, aplikacija može vršiti interakciju sa bazom podataka navoĎenjem
SQL naredbi (CREATE TABLE, INSERT, SELECT, UPDATE, DELETE, DROP TABLE).
JDBC podržava SQL naredbe kroz sledeće interfejse:
java.sql.Statement
java.sql.PreparedStatement
java.sql.CallableStatement
Klasa Connectiondeklariše metode: createStatement(), prepareStatement() i prepareCall() koje redom
vraćaju : Statement, PreparedStatement i CallableStatement.
Statement i ResultSet
Statement je interfejs koji je najlakši za korištenje.
Metoda createStatement() klase Connection je metoda koja je najlakša za dobijanje Statement instance.
Kôd 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 izvršeno je
1.Kreiranje konekcije na bazu podataka.
2.Kreiranje Statement objekta sa nazivmstInsert i korištenjem metode execute izvršena 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
korištenjem metode executeQuery, izvršena SQL naredba za dobavljanje zapisa iz baze. Ova metoda vraća
ResultSet objekat u okviru koga će se nalaziti pročitani zapisi.
4.Za čitanje zapisa iz ResultSet objekta koristi se jedna while petlja, a za provjeru dostupnosti pročitanih
polja iz baze koristi se metoda next, koja vraća true ili false u zavisnosti od postojanja sljedećeg zapisa.
5.Prilikom čitanja podataka iz ResultSet, koriste se metode za specifične tipove podataka. Na ovaj način vrši
se mapiranje podataka iz baze u tip podataka podržan u Java jeziku.
CallableStatement
•CallableStatement predstavlja najspecijalizovaniji od pomenuta tri interfejsa.
•Koristi se za izvršavanje SQL stored procedura.
•Stored procedure predstavlja listu SQL naredbi koje su grupisane u logičku cjelinu koja obavlja odreĎenu
funkciju.
•Java DB se razlikuje od većine 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 smeštaju u okviru same baze.
MySQL je višenamjenskarelaciona baza, veoma popularna u raznim sferama programiranja.
•Da bismo upravljali MySQL bazom, koristimo MySQLconnector/JDBC.
•Za definisanje SQL upita može se koristiti Statement interfejs.
•Za definisanje SQL upita sa dinamičkim parametrima može se koristiti interfejs PreparedStatement.
•Za pozivanje storedprocedure-a se koristi interfejs CallableStatement.
•MySQL je višenamjenskarelaciona baza, veoma popularna u raznim sferama programiranja. Brza je, ima
veliki kapacitet i podržana je od strane svih važnijih operativnih sistema. Besplatna je.
Da bismo koristili neku programsku tehnologiju sa nekom bazom podataka, proizvoĎač baze mora
omogućiti paket drajvera za tu tehnologiju.
Ovi drajveri nazivaju se konektori i obično sadrže 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 moguće je
skinuti sa adrese:
http://dev.mysql.com/downloads/connector/j/5.1.html
TakoĎe, ovaj konektor ugraĎen 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 preporučuje se instalacija Wamp paketa jer u sebi sadrži i web server, kao i
PHPmyAdmin web aplikaciju za rukovanje MySQL bazom podataka, koja je nezaobilazna MySQL kontrola
na većini hostingprovajdera.
•Za dalji rad potrebno je kreirati bazu podataka Test i u njoj tabelu Korisnici sljedeće strukture:
CREATE TABLE „korisnici‟ (
„id‟ INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
„email‟ VARCHAR( 256 ) NOT NULL , „password‟ VARCHAR( 236 ) NOT NULL ) ENGINE = innodb