Académique Documents
Professionnel Documents
Culture Documents
Oznaka predmeta:
Predavanje broj:
Nastavna jedinica:
Nastavne teme:
OP2
01
JAVA
Predavanje br. 1
Predavanje br. 1
Maksimum
Unicode
216-1
+127
+215-1
+231-1
+263-1
1,7e+308
IEEE754
3,4e+038
IEEE754
Primitivni tipovi
Iz tabele 1.1 se vidi da Java raspolae primitivnim tipovima koji su na
isti nain definisani i u drugim programskim jezicima.
Obratiti panju na tip char, koji zauzima dva bajta, umesto uobiajenog
jednog bajta.
Radi se o tome da se tipom char moe predstaviti svaki karakter
definisan Unicode standardom koji definie kodni raspored koji
obuhvata sve dananje zvanine jezike;
To znai da su Java programi u startu osposobljeni da rade sa
viejezinim tekstom, ili u naim uslovima, ravnopravno sa
srpskom latinicom i srpskom irilicom.
Takoe, trebalo bi obratiti panju da je tip boolean 1-nobitni.
String, kao esto korien tip podatka, nema odgovarajui primitivni
tip u Javi.
Predavanje br. 1
Klase i objekti
Plavom bojom su navedene kljune rei jezika. Klasa ima naziv Automobil,
definie jedan atribut koji se zove radi i logikog je tipa (boolean). Definie dve
metode koje se mogu pozvati nad objektima te klase, metode upali i ugasi.
Predavanje br. 1
Klase i objekti
Predavanje br. 1
Klase i objekti
Kako Java ne doputa postojanje bilo ega to bi postojalo izvan neke klase,
postavlja se pitanje odakle poinje izvravanje Java programa.
Java koristi funkciju main, samo to i ta funkcija mora biti metoda neke klase. C
i C++ koriste funkciju main kao osnovnu funkciju od koje poinje izvravanje
programa.
Izgled jedne klase koja sadri metodu main, i predstavlja primer jednog
izvrivog Java programa dat je u sledeem primeru:
class Hello {
public static void main(String args[]) {
System.out.println("Hello world!");
}
}
Predavanje br. 1
10
Predavanje br. 1
11
Test.java
class Test {
public static void main(String args[])
{
Automobil a;
a = new Automobil();
a.upali();
}
}
Predavanje br. 1
12
Reference na objekte
heap
Reference na objekte
objekat klase
Automobil
stack
b
a
objekat klase
Automobil
heap
Predavanje br. 1
14
Reference na objekte
stack
b
a
objekat
klase
Automobil
heap
Predavanje br. 1
15
Operatori
Predavanje br. 1
//error
//error
16
iterativne
for(inicijalizacija; uslov ; iteracija) {naredbe}
for(tip promenljiva:kolekcija) {naredbe}
while(uslov){naredbe}
do {naredbe}while(uslov);
naredbe skoka
break;
continue;
Predavanje br. 1
Inicijalizacija objekata
je deklaracija reference varA koja ukazuje na objekat klase A, pri emu se vri i
inicijalizacija ove reference na novokreirani objekat. U trenutku kada se izvri
ovaj red (kreiranje objekta pomou new A()), na konzoli e se ispisati re
konstruktor.
Ukoliko se unutar definicije klase ne navede nijedan konstruktor, kompajler e
sam generisati tzv. podrazumevani konstruktor koji nema parametre i telo mu
je prazno.
Predavanje br. 1
18
Unitavanje objekata
Predavanje br. 1
19
Unitavanje objekata
Predavanje br. 1
20
Primer metode koja prima tri parametra, sa tipovima String, int i boolean, a
vraa vrednost tipa void (tj. ne vraa rezultat).
void metoda(String name, int value, boolean test) { ... }
Tip rezultata metode moe biti primitivni tip ili referenca na objekat (rekosmo,
konstruktor nema povratni tip).
Promena vrednosti parametra u okviru metode moe da ima ili nema efekta na
promenljivu koja je koriena kao parametar nakon povratka iz metode.
Posmatrajmo sledeu metodu:
void test(Automobil a) {
U pitanju je metoda koja u okviru svog tela vri modifikaciju svog parametra a
preko metode upali.
Predavanje br. 1
21
radi:
false
x
stack
heap
x
x
stack
radi:
false
heap
22
U okviru tela metode test ova kopija reference x se koristi kao parametar
metode i preko nje se pristupa istom onom objektu na koji ukazuje i originalna
referenca x.
Pristup objektu se u ovom sluaju svodi na promenu vrednosti atributa radi na
true (slika c).
Kod vraanja iz metode nazad, sa steka se uklanjaju parametri korieni
prilikom poziva metode. Tako se sa steka uklanja kopija reference x i
ostaje samo originalna referenca. Kada preko nje pristupimo atributu radi,
videe se da je on promenio vrednost (slika d).
c)
d)
x
x
stack
radi:
true
radi:
true
x
heap
stack
heap
23
a)
b)
c)
d)
a=0
a=0
a=0
a=1
a=0
a=0
stack
stack
stack
stack
24
{ ... }
{ ... }
{ ... }
Predavanje br. 1
25
Kljuna re final
Kljuna re final se moe nai ispred definicije atributa ili metode unutar
definicije klase.
Ako se nae ispred atributa, oznaava atribut kome nije mogue promeniti
vrednost.
final atribut predstavlja konstantu.
Inicijalizacija prilikom deklaracije atributa je obavezna.
Primer definicije final atributa :
final int size = 100;
Predavanje br. 1
26
Kljuna re static
Kljuna re static se moe nai ispred definicije atributa ili metode, nezavisno
od pojave kljune rei final.
Kada se nae ispred definicije atributa, oznaava atribut koji pripada klasi, a ne
objektima (kao instancama klase).
Svi objekti date klase dele istu vrednost statikog atributa.
Primer: klasa koja poseduje jedan statiki atribut:
class StaticTest {
static int i = 0;
static void metoda() { i++; }
}
Predavanje br. 1
//
a.i == b.i == 1
27
Kljuna re static
//nepravilno
//pravilno
Predavanje br. 1
28
Nizovi
Nizovi se u Javi definiu slino kao u jeziku C++. Prvi element niza ima indeks
nula.
Primer:
int[] a; //niz iji su elementi tipa int
int[] b; // niz iji su elementi tipa int
Ovim je samo definisana referenca na niz; niz se nakon toga mora kreirati na
nain slian kreiranju objekata.
Primer:
a = new int[5]; //alociranje niza od pet int elemenata
Primer: niz se definie, alocira memorija za njega i odmah inicijalizuje
int[] a = { 1, 2, 3, 4, 5 };
Prilikom definicije niza, referenca na niz se uva na steku, dok se elementi niza
uvaju na heap-u, slino kao i objekti. Slika 1.6 ilustruje ovu situaciju
1 2 3 4 5
a
stack
Predavanje br. 1
heap
29
Nizovi
parking
stack
heap
30
Nizovi
Svaki niz ima definisan atribut length koji predstavlja duinu alociranog niza.
Sada e stanje u memoriji izgledati kao na slici 1.8.
parking
a1
a2
a3
a4
stack
a5
heap
31
Viedimenzionalni nizovi
Viedimenzionalni nizovi se predstavljaju kao nizovi nizova.
Sintaksa je slina jeziku C++.
Primer: sledea definicija e kreirati niz od dva elementa koji su
reference na nizove od tri elementa tipa int.
int[][] a = { {1, 2, 3}, {4, 5, 6} };
Stanje u memoriji nakon kreiranja ovakvog niza izgleda kao na slici 1.9.
1 2 3
4 5 6
a
heap
stack
32
Viedimenzionalni nizovi
Stanje u memoriji nakon kreiranja ovakvog niza izgledae kao na slici 1.10.
Predavanje br. 1
33
Viedimenzionalni nizovi
parking
stack
a1
a2
a3
a4
a5
a6
heap
Predavanje br. 1
34