Professional Documents
Culture Documents
Predavanje Java PDF
Predavanje Java PDF
ta je program
Kako napisati pravilno program za raunar
Prednosti i mane korienja Jave
Kako program napisan u Javi promeniti u formu koju
Uvod u programiranje 1 Java svaki raunar razume
Uvod Primer Java koda i komentari
1
ta predstavlja raunarski program Kompajliranje
Da bi raunar mogao da izvri odreene zadatke (na Raunari ne razumeju programe napisane u
primer odtampa ocene koje student dobije na ispitu), programskim jezicima kao to su Pascal i Java
moraju mmu se zadati instrukcije za obavljanje Programi se moraju prvo kompajlirati ili prevesti u
zadatka mainski kod koji raunar moe da izvrava
Skup instrukcija koje vode raunar da izvri odreeni Program i postupak pomou koga se kod
zadatak ine raunarski program programskog jezika prevodi u mainski kod naziva se
Mi piemo program (skup instrukcija) u programskim kompajler i kompajliranje
jezicima kao to su C, Pascal ili Java Razliite platforme, ili hardver sa operativnim
Koristimo ove programske jezike jer su razumljivi sistemom zahtevaju razliit mainski kod, programi
oveku se moraju odvojeno kompajlirati za razliite
Ali kako raunar razume instrukcije koje mu platforme
zadajemo?
2
Pokretanje programa Pokretanje programa
3
Kompajliranje i izvravanje programa u Javi Prednosti korienja Jave
4
Komentari Pregled lekcije
Uvod
ta su promenljive
Tipovi promenljivih
Imena promenljivih
Dodele vrednosti
Primitivni tipovi podataka
Uvod u programiranje 1 Java Ostali tipovi podataka (String)
Promenljive i osnovni tipovi podataka
5
Promenljive Promenljive
U matematikoj algebri, promenljive su simboli koji Promenljive se mogu predstaviti kao prazne kutije u
predstavljaju odreene vrednosti u formulama koje se mogu smestiti odreene vrednosti
Na kutiju se moe nalepiti nalepnica sa imenom, na
Na primer promenljiva x u sledeoj formuli primer KutijaX i koristiti vie puta
f(x)=x*2+2 Takoe mogu se obavljati odreene operacije, bez
Moe predstavljati bilo koju numeriku vrednost obzira na sadraj same kutije:
Pomeri KutijuX na policu A
Slino, promenljive u raunarskim programimasu Postavi predmet Z u KutijuX
simboli koji predstavljaju odreene podatke Otvori KutijuX
Ukloni sadraj iy KutijeX
6
Deklaracija promenljivih u Javi Dodela vrednosti promenljivih u Javi
Promenljive se kreiraju tako to se deklarie njihov Dodela vrednosti promenljivih se obavlja koristei sledeu
tip i ime na sledei nain: sintaksu:
ime = vrednost;
tip ime;
Na primer:
Deklarisanje celobrojne promenljive sa imenom x: x = 100;
int x; pozdrav=Zdravo;
Deklarisanje stringa sa imenom pozdrav: Nelegalno je dodeliti promenljivoj vrednost pogrenog tipa:
String pozdrav; x = Zdravo;
x = 1.2;
U prethodnim primerima promenljive nisu dodeljene
pozdrav = 123;
vrednosti, ve su samo formirane prazne kutije
U okviru jednog koraka moe se promenljiva deklarisati i
dodeliti joj se vrednost
int x =100;
String pozdrav=Zdravo;
SI1P1 2004 25/15 SI1P1 2004 26/15
Imena promenljivih (identifikatori) mogu biti Java je case-sensitive razlikuju se mala i velika
proizvoljne duine, ali moraju poeti sa: slova.
slovo (a z), Bosko nije isto kao bosko, odnosno BOSKO.
znak dolar ($), Treba birati imena promenljivih koja su
ili, donjom crtom ( _ ). informativna.
Imena promenljivih ne mogu sadravati specijalne Dobar izbor: int studentIspitOcena;
operacione simbole kao to su +, -, *, /, &, %, ^, ... Lo izbor: int tempvar3931;
Korienje rezervisanih rei Jave je takoe Preporuka je da imena promenljivih poinju malim
nelegalno. slovom i da svaka re unutar imena poinje sa
Na primer class, static, int, ... velikim: studentIspitOcena.
7
Imenovanje promenljivih u Javi Celobrojni tip
String nije primitivan tip podataka. Oni nasleuju Inicijalizuju decimalnu vrednost broja:
klasu Object, diskutovae se kasnije. double y = 1.23;
String je niz karaktera izmeu apostrofa i na double w = -3.21e-10; // -3.21x10-10
primerneki tekst. Koristi se d da bi se vrednost prikazala kao
decimalna:
Stringovi mogu koristiti specijalan operator + koji double y = 1d/3; // y = .333333333
kreira novi String: double z = 1/3; // z = 0.0 Zato?
String pozdrav= Zd+ ravo; Float se moe definisati kao i double, ali treba
String josJedanPozdrav= pozdrav+ !; dodati i f:
float z = 1.23f;
Double je precizniji nego Floats, ali izvravanje
operacija due traje
SI1P1 2004 31/15 SI1P1 2004 32/15
8
Logiki tip Karakter
Boolean (logiki tip) je tip podataka koji se koristi u Karakter je tip podataka koji se koristi da bi se
situacijama kada postoje dve opcije tano ili predstavio pojedinaan karakter, kao to je slovo,
netano (true ili false). broj, odreeni znak ili neki drugi simbol.
Vrednosti true i false su case sensitive. Ne prihvata Karakteri su pojedinani simboli smeteni izmeu
se True ili TRUE. jednostrukih navodnika
Ovaj tip podataka se koristi za testiranje osobina Ne treba ih izjednaavati sa String-ovima.
podataka i za kontrole toka Primer:
Primer: char prvoSlovoImena = 'e' ;
boolean daLiCitati = true; char pitanje = '?' ;
boolean fileOpen = false;
Pitanja Iskazi
Koje tipove podataka treba koristiti za sledee informacije?: Iskazi su komande koje dovode do odreenih
1. Broj stanovnika Srbije dogaaja
2. Broj stanovnika na Zemlji Svi iskazi moraju se zavravati sa ;
3. i
Deklarisanje promenljiv je jedan iskaz
4. Status dokumenta (otvoren/zatvoren)
5. Ime Dodeljivanje vrednosti promenljivoj je jedan iskaz
6. Prvo slovo imena Poziv metoda ili funkcije su iskazi:
7. $ 237.66 System.out.println(Hello, World);
int U narednim lekcijama emo uiti kako da se
long kontrolie izvravanje iskaza
double
boolean
String
char
SI1P1 double
2004 35/15 SI1P1 2004 36/15
9
Rezervisane rei Tipovi podataka
Tipovi podataka
10
Uvod ta su operatori
11
Proritet izvravanja operacija Proritet izvravanja operacija
U prethodnom primeru rezultat deljenja (10 + 15) / 5 je bio Osnovni operator dodele (=) dodeljuje
celobrojan (5).
Ali ta se deava ako hocmo da izvrimo operaciju 63 / 35?
vrednost ex promenljivoj var
U zavisnosti od tipa podatka u kome su smeteni brojevi, var= expr;
dobijamo razliite rezultate.
int i= 63;
Java dozvoljava da se kombinuju aritmetiki
int j= 35; i operator dodele u jedinstven operator
System.out.println(i/ j); Primeri:
Izlaz: 1
double x= 63;
x= x+ 5; je isto to i x+= 5;
double y= 35; y= y* 7; je isto to i y*= 7;
System.out.println(x/ y);
Izlaz: 1.8
Rezultat celobrojnog deljenja je samo ceodeo dobijenog
rezultata!
SI1P1 2004 47/15 SI1P1 2004 48/15
12
Inkrement/dekrement Inkrement/dekrement
++ se zove inkrement operator. Koristi se da bi se Inkrement / dekrement operator ima dve forme :
poveala vrednost promenljive za 1. -Prefix forma ++i; --i;
Na primer: -Postfix forma i++; i--;
i= i+ 1; Prefix forma prvo doda/oduzme 1 od promenljive i
Moe se napisati i kao: tek onda nastavi sa ostalim operatorima u izrazu
++i; Primer:
ili i++; int numOranges= 5;
-- se zove dekrement operator. Koristi se da bi se int numApples= 10;
smanjila vrednost promenljive za 1. int numFruit;
i= i-1; numFruit= ++numOranges+ numApples;
Moe se napisati i kao : numFruit je dobio vrednost 16
--i; numOranges je dobio vrednost 6
ili i--;
SI1P1 2004 49/15 SI1P1 2004 50/15
Postfix forma i++, i -- prvo izvri ceo izraz, pa onda Relacionalni operatori uporeuju dve vrednosti
povea/smanji vrednost promenljive Dobijeni rezultat je logikog tipa (true ili false) u
Primer: zavisnosti od relacije operanada
int numOranges= 5;
int numApples= 10;
int numFruit;
numFruit= numOranges++ + numApples;
numFruit je dobio vrednost 15
numOranges je dobio vrednost 6
13
Primer relacionalnih operatora Kondicionalni operatori
boolean x= true;
boolean y= false;
boolean result;
1. result= (x&& y);
U ovom sluaju vrednost promenljive result je false
(x|| y) je true
(true && x) je true
U ovom sluaju vrednost promenljive result je true
14
Korienje && i || Korienje && i ||
Primer Operatori
15
Izrazi Rezervisane rei
16
Uvod
ta su kontrolne strukture
Tipovi kontrolnih struktura:
Blok
Izrazi odluivanja
Uvod u programiranje 1 Java Petlje
Kontrole toka
17
if struktura if-else struktura
if (grade == 'A')
System.out.println(Pera je dobio A.");
else if (grade == 'B')
System.out.println("Pera je dobio B.");
else if (grade == 'C')
System.out.println("Pera je dobio C.");
else
System.out.println("Pera je dobio F.");
18
switch struktura switch struktura
switch (expression) {
case value1:
statement1;
case value2:
statement2;
default:
default_statement;
}
Napomena: Svaki izraz nakon true sluaja e se izvriti
SI1P1 2004 73/15 SI1P1 2004 74/15
switch (expression) {
case value1:
statement1;
break;
case value2:
statement2;
break;
default:
default_statement;
break;
}
19
switch struktura Petlje
20
for petlja for petlja
while (expression){
statement
}
21
while petlja Korienje break naredbe
int index = 0;
while (index <= 10){
index++;
if (index==3)
break;
System.out.println(Indeks je + index);
}
Indeks je 1
Indeks je 2
Mogue je unutar bilo koje vrste petlje ubaciti bilo U okviru programa realizuje se i opcija za podizanje
koju vrstu petlje para sa rauna. Kako treba koristiti if strukturu da
bi se korektno izvrila data opcija.
If struktura se koristi da bi se proverilo da li je iznos
koji se podie manji ili jednak trenutnom iznosu u
banci.
22
Pitanja 2 Pitanja 3
Brojevi od 100 do 0.
ta su nizovi
23
Nizovi Deklarisanje nizova
Nizove definie tip, ime i veliina. Deklaracija nizova je slina deklaraciji obinih
Niz od tri celobrojne veliine koji se zove prices: promenljivih, samo to se koriste srednje zagrade [
].
tipPodataka[] imeNiza;
Niz od tri string veliine koji se zove people
int[] prices;
String[] people;
Na drugi nain deklarisanje je mogue:
Pojedinana vrednost u okviru niza je element niza.
Pozicija svakog elementa u okviru niza je njegov tipPodataka imeNiza[];
indeks.
int prices[];
SI1P1 2004 93/15 SI1P1 2004 94/15
Za razliku od obinih promenljivih pri korienju Pojedinanom elementu niza se pristupa pomou
nizova, potrebno je rezervisati eljenimemorijski njegovog indeksa.
prostor. (U jeziku C postoji naredba malloc()) U Javi indeksi kreu od broja 0 i poslednji ima
Koristi se kljuna re new da bi se rezervisala indeks n-1, gde je n veliina niza.
memorija: Na primer niz prices ima veliinu 3, i njegovi
imeNiza = new tipPodataka[veliina]; elementi imaju indekse 0, 1, i 2.
uvati se Array out of Bounds greaka.
prices = new int[3]; imeNiza[indeks]
people = new String[4]; Sa elementima niza se moe postpuati kao sa
Prvi primer rezervie prostor za niz celih brojeva obinim promenljivima
veliine 20, a drugi primer niz Stringova veliine 10. prices[0] = 6;
Moe se kombinovati deklaracija sa rezervisanjem prices[1] = 80;
int[] prices=new int[3];
SI1P1 2004 95/15
prices[2] = 10;
SI1P1 2004 96/15
24
Korienje nizova Inicijalizacija nizova
Elementima niza Stringova se pristupa na identian Mogu se definisati i svi elementi niza, pri njegovom
nain: deklarisanju.
Tada se koristi velika zagrada da bi se odvojili
String[] people; elementi niza od ostatka koda i zarez da bi se
people = new String[4]; odvojili pojedinani elementi.
people[0] = Lana;
people[1] = Pera; String[] people= {Lana,Pera, Mika, Maja};
people[2] = Mika; int[] prices = {6, 80, 10};
people[3] = Maja; Svi elemnti niza i ovom sluaju moraju biti istog
tipa.
25
Duina niza Primer
Primer 2 Primer 3
26
Primer sortiranja 1 Primer sortiranja 2
Nizovi koji su do sada razmatrani mogu se Primer: Karta zemljita je podeljena na mreu 20 x
posmatrati kao jedan red vrednosti 55 razliitih imanja. U svakom polju treba upisati
Dvodimenzionalni niz se moe posmatrati kao povrinu odreenog imanja.
mrea (ili matrica) vrednosti. Prvo je potrebno deklarisati dvodimenzionalni niz:
Svakom elementu dvodimenzionalnog niza se moe
pristupiti pomou dva indeksa: redni broj reda i double[][] heights;
redni broj kolone. heights= new double[20][55];
Dvodimenzionalni niz je u sutini niz iji je svaki Ovaj dvodimenzionalni niz ima 20 redova i 55
element novi niz kolona
Da bi se pristupilo pojedinanom imanju koje se
nalazi u 11-om redu i 23-oj koloni:
heights[11][23]
SI1P1 2004 107/15 SI1P1 2004 108/15
27
Viedimenzionalni nizovi
28
Koncept metoda Izraunavanje kvadratnog korena
Metodi mogu da prihvate ulazne podatke u formi Kvadratni koren je dobar primer upotrebe metoda.
argumenata Metod koji slui za dobijanje kvadratnog korena
Nakon toga mogu da izvre odreene operacije sa prihvata broj kao argument i kao rezultat vraa
argumentima kvadratni koren od tog broja.
Na kraju mogu da vrate vrednost koju su dobili kao
rezultat izraunavanja, t.j. da generiu izlaz
Izraunavanje kvadratnog korena obuhvata i vie Metod ima 4 dela: tip rezultata, ime, argumente, i
meukoraka izmeu operacija prihvatanja ulaznog telo metoda
podatka i generisanja izlaza. Tip, ime i argumenti, zajedno, se jo nazivaju i
Kada se koristi ovaj metod, korisnika ne interesuju potpis metoda
pojedinani koraci. Jedino to mu je potrebno je da
se dobije korektan rezultat.
Skrivanje internog rada metoda od korisnika, ali
obezbeivanje korektnog rezultata se naziva jo i
apstrakcija
29
Tip rezultata metoda Generisanje rezultata
Tip rezultata metoda moe biti bilo kog tipa U okviru metoda se koristi naredba return da bi se
podataka. definisao rezultat izvravanja operacije metoda.
Tip metoda se odreuje na osnovu tipa podataka Njegova forma je:
koji se generie kao izlaz. return vrednost_izvravanja;
Metod moe i da ne vraa rezultat, u kom sluaju se Tip promenljive vrednost_izvravanja mora da
deklarie kao tipa void. bude istog tipa kao i tip samog metoda:
double sqrt(int num) {
double answer;
// Izrauna se vrednost kvadratnog korena num
// i rezultat smesti u promenljivu answer
return answer;
}
Metod se zavrava odmah nakon izvravanja Metod tipa void ima return naredbu bez definisane
naredbe return specifine vrednosti
Zato je u veini sluajeva return naredba poslednja return;
naredba u okviru metoda
Na prvi pogled se ini da je ovaj pristup beskoristan,
Metod moe imati i vie return naredbi.
ali se u praksi void esto koristi.
int absoluteValue(int num){ Dobar primer je metod kada je potrebno samo neto
if (num < 0) prikazati na ekranu.
return num; Kao se u okviru metoda tipa void ne navede naredba
else return, podrazumeva se da se ona izvrava na kraju
metoda
return num;
}
30
Argumenti metoda Argumenti metoda
Metodi mogu dobijati ulazne podatke u formi Vie argumenata metoda se odvajaju zarezom:
argumenata. double pow(double x, double y)
Argumenti se koriste kao promenljive u okviru tela
metoda. Argumenti mogu biti razliitog tipa
Kao promenljive, i argumentima se mora int indexOf(String str, int fromIndex)
specificirati tip. Telo metoda je blok specificiran sa velikim
Argumenti se definiu unutar zagrada koje se nalaze zagradama, { }. U okviru tela metoda se definiu
iza imena metoda. akcije metoda.
Argumenti metoda se mogu koristiti bilo gde u
double podeli(double a, double b) { okviru metoda.
double odgovor; Svi metodi moraju imati velike zagrade bez obzira
odgovor = a / b; da li se telo metoda sastoji od jedne naredbe ili ak
return odgovor; od nijedne.
}
SI1P1 2004 121/15 SI1P1 2004 122/15
Da bi se pozvao odreeni metod, potrebno je Do sada smo koristili jedino metod main
specificirati ime metoda, iza koga treba navesti listu Ovaj metod je taka odakle uvek poinje
argumenata odvojenih zarezom i u okviru zagrada
izvravanje Java programa
main metod je static i ima strog format koji se mora
pow(2, 10); //rauna 2 na 10
potovati:
public static void main(String[] args) {
Ako metod nema argumenata, treba navesti ime
metoda sa praznim zagradama: ...
size(); }
Neki metodi mogu sadrati re static pre tipa
metoda:
static double divide(double a, double b) {
return a / b;
}
SI1P1 2004 123/15 SI1P1 2004 124/15
31
main metod Primer
class SayHi{
public static void main(String[] args) { ta nije u redu u sledeem delu programa
System.out.println("Hi, " + args[0]);
} static double addSometimes(num1, num2){
} double sum;
Ako se otkuca java Program arg1 arg2 argN u if (num1 < num2){
okviru komandne linije, sve nakon imena klase se sum = num1 + num2;
automatski uitava u niz pod imenom args: String completed = completed;
java SayHi Bosko return completed;
U ovom primeru lan args[0] e sadravati String }
Bosko", i izlaz proma e biti "Hi, Bosko"
}
Primer Primer
32
Najvaniji pojmovi
Tipove podataka: int, double, boolean, String Neki podaci se pamte zajedno.
Promenljive: Pamte vrednost odreenog tipa. String[] imena
Nizovi: Pamte vie vrednost odreenog tipa. int[] ocene
Kontrolne strukture: If-then, For petlje ... Metodi poinju da se komplikuju.
Metodi: Delovi koda kojima moemo proslediti Metodi mogu vratiti rezultat samo jednog tipa.
argumente i izvriti ih. Programeri ne ele da razmiljaju o svim
Da li je to sve to nam je potrebno? neprikazanim tipovima.
33
Apstrakcija ta je objekat
34
Klase Klase
Klasa je uzorak ili kalup pomou koga se stvara Osnovna anatomija klase
objekat
Svaka klasa moe sadrati: public class imeKlase{
- lanove podataka (osobine/karakteristike lanove podataka
objekta/klase) Konstruktori
- Metode (definiu ponaanje objekata dobijenoh od Metodi
klase)
}
- Konstruktore (specijalne metode)
class prekidacZaSvetlo{
boolean upaljeno = true;
}
Re class govori okruenju da elimo da definiemo
novi tip Object-a.
Klase su definicije stanja i ponaanja.
Objekti su instance klasa.
Sve u okviru Jave je objekat i ima svoju klasu.
35
Prva klasa: prekidacZaSvetlo Definisanje ponaanja
public static void main(String[] args) { Konstruktori povezuju objekte sa podacima koji su
prekidacZaSvetlo s = new prekidacZaSvetlo(); im potrebni da bi se inicijalizovali
System.out.println(s.upaljeno); Objekti imaju default konstruktor koji nema nijedan
s.pritisni(); argument, kao prekidacZaSvetlo().
System.out.println(s.upaljeno); Mogu se definisati sopstveni konstruktori koji mogu
imati proizvoljan broj argumenata.
}
Konstruktori nemaju tip povratka i moraju imati isto
Pomou new se kreira novi objekat.
ime kao klasa:
Iza new mora se navesti konstruktor.
ImeKlase(definisanje argumenata) {
Metodi se pozivaju na sledei nain:
telo konstruktora
imePromenljive.imeMetoda(argumenti)
}
ta se dobija kao izlaz ovog programa?
36
Konstruktori Konstruktori
37
Apstrakcija Problem apstrakcije
Obe prethodne verzije se imaju isto ponaanje. Korisnik klase prekidacZaSvetlo koji pristupa
Klasu prekidacZaSvetlo treba tretirati kao logikoj promenljivoj upaljeno, grei ako se ova
apstrakciju: ne interesuje nas unutranjikod, ve promenljiva promeni u celobrojnu
samo njeno ponaanje class PrimerGreske{
Interni kod = implementacija
public static void main(String[] args) {
Spoljanje ponaanje = interfejs
prekidacZaSvetlo ls= new prekidacZaSvetlo ();
Pisanje koda i poboljanje implementacije se moe
ovbavljati sve dok je interfejs isti if (ls.upaljeno) // greska!
Sve dok je korisnjenje objekta date klase isto, ne System.out.println("upaljeno!");
zanima nas kako je dobijeno dato ponaanje. else
U velikim projektima, gde ima vie timova, System.out.println(Nije upaljeno!");
programera jedino zanima njegov deo koda (na
primer Microsoft, Google, Goldman Sachs, Morgan }
Stanley i finansijske kompanije) }
SI1P1 2004 149/15 SI1P1 2004 150/15
Ako se polja ili metodi oznae kao private, tada im class prekidacZaSvetlo{
druge klase ne mogu pristupiti private boolean upaljeno = true;
Ako se polja ili metodi oznae kao public, tada im public boolean daLiJeUpaljeno() {
bilo koja druga klasa moe pristupiti
return upaljeno;
Ako se ne specificira posebno da li je polje ili metod
}
public ili private, tada se podrazumeva da je public.
void pritisni() {
upaljeno = !upaljeno;
}
}
38
Novi problemi Promenljive i objekti
U prethodnom primeru polje upaljeno je definisano Postoje dve vrste podataka u Javi: promenljive i
kao private objekti
class prekidacZaSvetlo{ Promenljive: byte, short, int, long, double, float,
private boolean upaljeno = true; boolean, char
== proverava da li dve promenljive imaju istu
vrednost
Ako se iz druge klase pristupa ovom polju desie se
greka pri kompajliranju Objekti: definisani u okviru Java klasa
== proverava da li su dva objekta isti objekat
if (ls.upaljeno) // greska
Reference Reference
Pomou new se uvek stvara nova jedinstvena g != h se dobija, jer g i h predstavljaju reference na
instanca klase razliite objekte
Kada se instanca povee sa odreenom Covek g = new Covek(Lana", 3);
promenljivom, tada promenljiva sadri referencu ili Covek h = new Covek(Lana", 3);
vezu sa datim objektom
Covek g = new Covek(Lana", 3);
g h
Covek h = new Covek(Lana", 3);
U ovom primeru g i h predstavljaju reference na dva
razliita objekta koji u ovom trenutku imaju
identina stanja
Lana Lana
3 3
SI1P1 2004 155/15 SI1P1 2004 156/15
39
Reference Pitanja
Maja
34
SI1P1 2004 157/15 SI1P1 2004 158/15
40
Java API
Primer Analiza
41
Analiza MyMath - ponovo
static PI final
42
final MyMath nova verzija
U primeru je dodata re "static" i pred deklaracije Statiki metodi ne vre operacije da specifinim
metoda square(): instancama njihovih klasa
public static double square(doublex) { Ovi metodi imaju pristup samo statikim poljima i
return x * x; metodama klase
} Ne mogu pristupiti nijednom elemntu koji je ne-
Sada je metod square() podeljen izmeu svih statiki
instanci ove klase postoji samo jedan square Metodi klase" je bolja definicija
metod za celu klasu, ne jedan za svaku instancu Suprotni termin je metodi instance"
43
Math klasa Primeri static polja
Detaljniji pregled klase Math u okviru Javinog API Konstante koje se koriste u okviru klasa (uobiajeno
Ne moe se kreirati instanca klase Math, ona slui je da su deklarisane pomou final)
za smetanje korisnih static metoda Potrebna je samo jedna po klasi, nije potrebna po
Svi metodi i polja su static: jedna u svakom objektu
Math.sqrt(16) Sledea deklaracija:
Math.PI public static final double TEMP_CONVERT= 1.8;
Math.abs(-3) Ako se ova deklaracija promenljive TEMP_CONVERT
nalazi u okviru klase Temperature, moe se koristiti
na sledei nain:
double t = Temperature.TEMP_CONVERT * temp;
Tradicionalno (C, C++) konstante se piu velikim
slovima, PI , TEMP_CONVERT, ...
SI1P1 2004 173/15 SI1P1 2004 174/15
Za metode koji koriste samo argumente i na taj Da li sledei podaci treba da budu static ili ne-
nain ne koriste instance static?
public static double pow(double b, double p) Podatak koji definie brzinu svetlosti
// Math class, getName() metod u okviru klase Person
Za metode kojima trebaju samo static podaci zbir() metod koji kao rezultat vraa zbir dva svoja
Takoe, koristi se i kod main metoda kod klase argumenta
pomou koje se startuje program Podatak koji definie irinu u okviru Rectangle klase
U trenutku startovanja programa ne postoji objekti static
koje bi main metod mogao da koristi non
static
non
44
Pristup i organizacija
Oblast vaenja: Odakle moemo pristupiti Oblast vaenja promenljive, polja, metode ili klase
pojedinanim podacima. je deo programa iz koga se moe pristupiti ovim
Kako se koriste Java paketi. elementima.
Kako se kreiraju Java paketi. Promenljivama se moe pristupiti iz bloka u okviru
koga su deklarisane.
Block se oznaava pomou { i }.
Lokalne promenljive: Promenljive koje su definisane
samo u trenutnom bloku.
Pristup polju, metama i klasama je definisana
pomou njihovih specifikatora.
45
Anonimne promenljive Primer oblasti vaenja promenljive
46
Primer oblasti vaenja i petlje Pitanje
Pitanje 2 Pitanje 3
47
Imenovanje promenljivih u velikim projektima Hijerarhijska organizacija
Veliki projekti mogu imati na hiljade klasa. Imena su organizovana u hijerarhijski raspored.
Moete saraivati i deliti klase sa ljudima koji se Bill Gates: Porodica: Gates, lan: Bill.
nalaze irom sveta. rti.etf.bg.ac.yu
Kako da budete sigurni da se ime vae klase nee 254-020-5555555: Kenya (254), Nairobi (020), Broj
poklopiti sa nekim imenom neke druge? 5555555
Moete koristiti dugaka jedinstvena imena.. java.lang.String: String je klasa, u okviru lang
UtilityClassForPreparingTaxReturnsByAnthonyGfrom paketa, koji se nalazi u okviru osnovnog java
WestlandsNairobiKenya paketa.
Ovakav nain je teak za pamenje i korienje.
Potrebno je organizovati klase u skupove ili delove Deklaracija paketa mora biti prva linija u fajlu koja
programa koji se nazivaju paketi. nije komentar.
Na ovaj nain se smanjuje problem konflikta imena i Prva klasa definisan au okviru fajla mora da ima isto
prepoznavanja funkcionalnosti, na primer java.util. ime kao i ime fajla.
Moe se ograniiti pristup na nivou paketa. Samo prva klasa moe biti tipa public.
Pripadnost klase paketu se definie sa: javac i java e traiti navedene poddirektorijume ili
package imePaketa; JAR (Java Archive) fajlove za navedeni kod:
class imeKlase{ putanja \mypkg\util za paket mypkg.util (na
/* Telo klase */ Windows operativnom sistemu)
} putanja /mypkg/util/arrays za paket
mypkg.util.arrays (na Unix operativnom sistemu)
48
Korienje paketa Specifikatori pristupa
package examples;
class Person {
String name;
//Telo klase ce se dopuniti:
// Dodavanjem polja za rodjendan
// Dodavanjem metoda za definisanje rodjendana
// Dodavanjem metoda za citanje rodjendana
}
49
Primer Primer
Primer Primer
50
Pojam nasleivanja
51
Problem: dupliranje koda Primer
52
Kikuyu podklasa Pitanje
53
Primer Pitanje
Podklasa moe preklopiti odgovarajui metod svoje superklase Kada se preklopi odreeni metod, mogue je pozvati
kopiju tog metoda superklase koristei naredbu
super.metod()
54
Koje se linije nee kompajlirati Konverzija tipova
Primer Primer
55
Primer Primer
class Employee {
// Data
private String firstName, lastName;
// Constructor
public Employee(String fName, String lName)
{firstName= fName; lastName= lName;}
// Method
public void printData()
{System.out.println(firstName+ " " + lastName);}
}
Primer Primer
56
Primer Primer
57
U ovoj lekciji
ta predstavlja izuzetak
Uobiajena terminologija
Zato koristiti izuzetke
Uvod u programiranje 1 Java Kako se deava izuzetak
Obrada gre
greaka pomo
pomou izuzetaka Kako se obrauje izuzetak
O izuzecima koji se moraju obraditi i o
onima koji se ne moraju
Primeri Java izuzetaka
Kako napisati svoj sopstveni izuzetak
Izuzetak je dogaaj koji se dogodio tokom Kada se izuzetak (exception) dogodi koristi se izraz
izvravanja programa i moe da prouzrokuje prekid da je baen izuzetak (throw)
normalnog toka izvravanja instrukcija Kada se izvre odreene operacije sa izuzetkom
Mogui razlozi izuzetaka: kae se da je izuzetak obraen (handled)
Pristup elementu izvan granica niza Deo koda pomou koga se izvre odreene operacije
Pokuaj upisa u read-only dokument sa izuzetkom naziva se obrada izuzetaka (exception
Pokuaj itanja nakon kraja dokumenta handler)
Slanje nelegalnih argumenata nekom metodu
Nelegalne aritmetike operacije (n.p. deljenje sa 0)
Otkaz hardverskih resursa
58
Zato koristiti izuzetke Poruke kod izuzetaka
Poruke od izuzetaka imaju sledei format: Poruka kod izuzetka u primeru sa nizovima
java.lang.ArrayIndexOutOfBoundsException: 2 at
ArrayExceptionExample.main(ArrayExceptionExample.j
[exception class]: [additional ava:4)
description of exception] at Koja je klasa izuzetka?
java.lang.ArrayIndexOutOfBoundsException
[class].[method]([file]:[linenumber])
Kom indeksu niza se pristupa, a on je izvan granica?
2
Koji metod generie izuzetak?
ArrayExceptionExample.main
Koji fajl sadri ovaj metod?
ArrayExceptionExample.java
Koja linija fajla generie izuzetak?
SI1P1 2004 235/15
4
SI1P1 2004 236/15
59
Generisanje izuzetaka Obrada izuzetaka
Svi metodi mogu koriste naredbu throw da bi Moe se koristiti try-catch blok da bi se obradio
prihvatili izuzetak izuzetak koji se desio
if (student.equals(null)) try{
throw new NullPointerException(); // kod u okviru koga moe da se desi izuzetak
Naredba throw zahteva poseban argument: }
throwable objekat catch([Tip izuzetka] e) {
Ova vrsta objekata je instanca bilo koje podklase // ta da se izvri ako se desio izuzetak
Throwable klase }
Ova klasa obuhvata sve tipove greaka i izuzetaka
U okviru opisa API mogu se pronai i opisi svih
throwable objekata
Vie moguih izuzetaka se moe istovremeno Moe se koristiti opcioni finally blok na kraju try-catch bloka
finally blok obezbeuje mehanizam da regulie sve to se deilo
obraditi pomou vie sukcesivnih catch blokova u okviru try bloka
try{ Moe se iskoristiti za zatvranje fajla ili oslobaanja nekog
drugog resursa
// kod u okviru koga moe da se desi vie izuzetaka Try-Catch-Finally Blok
}
try{
catch (IOException e) { // kod u okviru koga moe da se desi izuzetak
// obrada IOException }
catch([Type of Exception] e) {
} // ta da se izvri ako se desio izuzetak
catch (ClassNotFoundException e2) { }
finally{
// obrada ClassNotFoundException
// naredbe u okviru bloka e se uvek izvriti
} // bez obzira ta e se dogoditi u okviru bloka
}
SI1P1 2004 239/15 SI1P1 2004 240/15
60
Izuzeci koji se ne mogu proveravati Izuzeci koji se mogu proveriti
Izuzeci koji se ne mogu proveravati (unchecked Izuzeci koji se mogu proveriti (checked exceptions)
exceptions) ili runtime izuzeci se pojavljuju u okviru ili non-runtime exceptions su izuzeci koji se mogu
Java runtime sistema desiti izvan Java runtime sistema
Primeri ovih izuzetaka Na primer izuzeci koji se mogu desiti tokom
Aritmetike operacije (deljenje sa nulom) ulazno/izlaznih operacija su non-runtime izuzeci
pointer exceptions (pokuaj da se pristupi lanu Kompajler proverava da li su non-runtime izuzeci
objekta pomou null reference) obraeni (ili specificirani korienjem throws
Izuzeci sa indeksima (pokuaj da se pristupi naredbe)
elementu niza sa indeksom koji je preveliki ili
premali)
Metod koji ne sadri catch ili specificira da moe da
generie unchecked exceptions, takoe moe u
nekim sluajevima ih generisati
SI1P1 2004 241/15 SI1P1 2004 242/15
61
Nasleivanje i izuzeci Pisanje sopstvenih izuzetaka
Metod moe specificirati manje izuzetaka, ali ne Postoje najmanje 2 tipa konstruktora izuzetaka:
vie od metoda koji nasleuje Default konstruktor: bez argumenata
public class MyClass { NullPointerExceptione = new NullPointerException();
public void doSomething() throws IOException, Konstruktor koji ima detaljnu poruku: postoji jedan
SQLException { String argument
// do something here IllegalArgumentExceptione e =
} new IllegalArgumentException(Broj mora biti
} pozitivan");
public class MySubclass extends MyClass {
public void doSomething() throws IOException {
// do something here
}
}
SI1P1 2004 245/15 SI1P1 2004 246/15
Sopstveni izuzeci moraju biti podklase klase Exception i Ako korisnik oekuje da se izuzetak pojavi, trebalo
moraju imati najmanje dva standardna konstruktora bi da bude tipa checked
public class MyCheckedException extends
Ako korisnik ne moe da preduzme nita da bi se
IOException{
oporavio od datog izuzetka, trebalo bi da bude
public MyCheckedException() {}
unchecked tipa
public MyCheckedException(String m){
super(m);}
}
public class MyUncheckedException extends
RuntimeException{
public MyUncheckedException() {}
public MyUncheckedException(String m)
{super(m);}
}
SI1P1 2004 247/15 SI1P1 2004 248/15
62
Sadraj lekcije
63
Java I/O Streams Input i Output Stream
Java programi komuniciraju sa spoljanjim svetom Objekat pomou koga moemo proitati ulazne
pomou Streams podatke je Input Stream
Streams se koriste za itanje i upis podataka
I/O Streams su jednodirekcioni
Ulazni (Input) stream se koristi za ulazne podatke u
program
Izlazni (output) stream se koristi za podatke koji
predstavljaju rezultat izvravanja programa
Izvor i odredite podataka mogu biti: fajlovi,
mrene konekcije, drugi programi, ... Objekat pomou koga moemo prikazati izlazne
podatke je Output Stream
64
Rad sa Stream klasama Java I/O klase
1. Otvaranje streama instanciranjem novog stream Paket java.io sadri klase koje s ekoriste za
objekta itanje/upis podataka iz/u fajlove
2. Rad sa informacijama pomou read/write, Da bi se itali/upisivali podaci, moraju se intancirati
read/write u okviru metoda Stream klasa podklase jedne od sledee 4 abstraktne superklase:
3. Zatvaranje streama pozivom close() metoda datog
objekta
65
BufferedReader klasa Upotreba BufferedReader klase
66
Kopiranje fajlova Prihvatanje podataka sa tastature
67
Parsiranje Delimiteri
StringTokenizer StringTokenizer
Kada se pokuava proitati nova ulazna linija, kao Kada se formira tokenizer objekat, potrebno je
rezultat se dobija jedan, u optem sluaju dugaki specificirati koji se karakteri koriste kao delimiteri u
string. konkretnom sluaju
Potrebno je pronai delimitere u okviru tog stringa i Default konstruktori pretpostavljaju da su \t\n\r
odvojiti svaki pojedinani deo informacije (tokens) delimiteri
Da bi se obavila ova operacija koristi se klasa StringTokenizerr = new StringTokenizer(line);
StringTokenizer u okviru paketa java.util Drugi konstruktori prihvataju kao argument String
koji moe definisati proizvoljan niz karaktera kao
delimiter
68
StringTokenizer StringTokenizer
Parsiranje brojeva
69