21
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

Java-I-i-II-test

Embed Size (px)

DESCRIPTION

Priprema ispita iz java programiranja.. Mislim da nikom nije potrebno :D

Citation preview

Page 1: Java-I-i-II-test

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

Page 2: Java-I-i-II-test

•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

Page 3: Java-I-i-II-test

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

Page 4: Java-I-i-II-test

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()

{

Page 5: Java-I-i-II-test

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. •

Page 6: Java-I-i-II-test
Page 7: Java-I-i-II-test

Java – preklapanje metoda

Unutar više klasa sa ili bez istih tipova podataka za argumente:

class Proba1 {

void pridruzi(int noviBroj)

{...}

Page 8: Java-I-i-II-test

}

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;

}

}

Page 9: Java-I-i-II-test

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 = += -= *= /= %= &= ^= |= <<= >>= >>>=

Page 10: Java-I-i-II-test

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

}

Page 11: Java-I-i-II-test

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.

Page 12: Java-I-i-II-test

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);

Page 13: Java-I-i-II-test

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.:

Page 14: Java-I-i-II-test

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.

Page 15: Java-I-i-II-test

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:

Page 16: Java-I-i-II-test

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.

Page 17: Java-I-i-II-test

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.

Page 18: Java-I-i-II-test

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:

Page 19: Java-I-i-II-test

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.

Page 20: Java-I-i-II-test

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.

Page 21: Java-I-i-II-test

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