Java Uvod SVE

236
1 1 Uvod u pro gramski jez ik Java 2 Literatura Herb ert Schi ldt : J2SE 5 , Mikro kn jiga 20 06. (d o 255 . strane ) Laslo Kra us : R eni zad ac i iz programskog jezika Java, Drugo dopunjeno izdanje, Akademska misao, Beograd, 2007 The Java Tuto rials na Orac le/Su n s ajtu : http://download.oracle.com/javase/tutorial/index.html Osn ove jez ika Ja va na ist om s ajt u: http://download.oracle.com/javase/tutorial/java/index.htm

Transcript of Java Uvod SVE

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 1/236

1

Uvod u programski jezik Java

2

Literatura

• Herbert Schildt: J2SE 5, Mikro knjiga 2006. (do 255. strane)

• Laslo Kraus: Rešeni zadaciiz programskog jezika Java, Drugo dopunjeno izdanje, Akademskamisao, Beograd, 2007

• The Java Tutorials na Oracle/Sun sajtu:

http://download.oracle.com/javase/tutorial/index.html• Osnove jezika Java na istom sajtu:

http://download.oracle.com/javase/tutorial/java/index.htm

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 2/236

3

Nastanak

• Programski jezik C

• Programski jezik C++

• Programski jezik Java

4

Programski jezik C

• Karakteristike

 – pisanje strukturiranih programa

 – jezik opšte namene – za aplikacije

 – pristup hardveru računara – za sistemski softver

• Razlog nastanka

 – potreba za jezikom sa osobinama viših programskih jezika(FORTRAN, COBOL) koji može da zameni simboličke mašinske

 jezike (asemblere)

• Nastao 1972. godine u Bell-ovim laboratorijama, stvorili gaprogrameri

• Autor: Dennis Ritchie – Brian Kernighan, Dennis Ritchie: The C Programming Language ,Prentice-Hall, 1978

• Standardizovan 1989, ANSI C

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 3/236

5

Programski jezik C++

• Potreba da se u C dodaju nove mogućnosti – Objektno orijentisano programiranje

• Nastao 1980. godine u Bell-ovim laboratorijama

• Autor: Bjarne Stroustrup

• Ime C++ dobio 1983

 – prvobitno ime je bilo “C sa klasama”

• Razvijan duži niz godina

• ANSI standard za C++ usvojen 1997

• Odnos C i C++

 – više od 95% jezika C preneto je u C++ – u C++ su dodate nove mogučnosti (klase, ...)

6

Programski jezik Java

• Razlog nastanka: potreba za programskim jezikom koji je nezavisan od platforme računara

 – C i C++ zavise od platforme računara

• Prvobitni motiv: programiranje kućnih aparata

• Najjači motiv za razvoj: Internet, World Wide Web

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 4/236

7

Programski jezik Java

• Jezik je koncipirao tim firme Sun Microsystems, Inc.1991. godine

• Od 1993. godine razvija se prvenstveno zbog Interneta

 – različite vrste računara, operativih sistema, procesora

• Ime Java dobija 1995 . godine

 – prvobitni naziv je bio Oak

• Većinu osobina Java je nasledila od jezika C i C++

8

Prenosivost na druge platforme

• Prevodilac za Javu pravi “bajt kod” a ne izvršni kod

• Bajt kod (bytecode) je visokooptimizovan skup instrukcija

• Tumači ga Javi izvršni sistem – Javina virtuelna mašina(Java virtual machine, JVM)

 – interpretator koda (bajt koda)

 – za različite platforme prave se različite virtuelne mašine

• C++ se prevodi u izvršni kod, ne interpretira se

 – potrebni različiti prevodioci za različite platforme

• Program koji se interpretira izvršava se sporije odizvršnog programa

• JIT prevodilac (Just In Time) za bajt kod – bržeizvršavanje

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 5/236

9

Java apleti i aplikacije

• Aplikacije su programi – izvršavaju pod operativnim sistemom računara

 – za aplikaciju pisanu na Javi potrebno ja da budeinstalirana i Java virtuelna mašina

• Apleti su programi (uglavnom mali)

 – prenose se preko Interneta, odnosno WWW servisa, kaodelovi HTML stranica

 – pokreću se u okviru WWW čitača (Web browser-a)

 – aplet nije animacija

• Apleti se prave samo u Javi

• Bezbednost apleta

 – ograničeni na okruženje za izvršavanje Java programa

10

Koncepti

• Objektna-orijentisanost – moderan OO jezik: klase, nasleñivanje,polomorfizam, interfejsi

• Jednostavnost – C/C++ sintaksna sličnost, ali harmoničniji i jednostavniji OO model

• Prenosivost – postiže se interpretacijom bajtkoda

• Sigurnost – JVM pruža zaštitu od virusa koji bi se prenosili krozizvršni kod (firewall )

• Robusnost – stroga provera tipova, proveravani izuzeci, automatskosakupljanje ñubreta

• Višenitno – podržava istovremeno izvršavanje više procesa.

• Efikasnost – JIT prevodioci

• Konkurentnost – bibliotečka podrška programiranju kroz višeprogramskih niti

• Distribuiranost – bibliotečka podrška za RMI i servlete

• Komponentizacija –Java Beans i Enterprise Java Beans (Java EE)

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 6/236

11

Verzije

• Java 1.1 kao poboljšanje Jave 1.0

• Java 2 (originalno Java 1.2) – značajne promene,prelomna faza, J2SE

• Java 1.3 i Java 1.4

• Java 1.4 -> Java 1.5 (interni broj verzije) ->Java J2SE 5 – nova značajna promena

12

Alati

• Sun: alati iz komandne linije Java 2 SDK i integrisanookruženje (IDE ) Sun Java Studio Enterprise

• NetBeans – open source okruženje

• Microsoft: Visual Studio 8 J++

• Borland: J-Builder

• Symantec: Visual Cafe

• Tek-Tools: Kawa – samo integrisano okruženje

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 7/236

1

Pregled jezika Java

2

Dva modela

• Procesno orijentisani model

 – u centru pažnje je dinamičko ponašanje programa

 – proceduralni jezici kao C

• Objektno-orijentisani model

 – u prvom planu je struktura podataka

 – objektno orijentisani jezici – C++, Java

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 8/236

3

Tri principa objektno orijentisanog programiranja

• Kapsuliranje (encapsulation) – Osnova kapsuliranja je klasa, koja definiše strukturu i ponašanje

(tj. podatke i naredbe) zajedničke za skup objekata

 –  Članovi klase: članovi promenljive i članovi metode

 – privatni i javni članovi klase

 – objekti su primerci  ili instance klase

• Nasleñivanje

 – podklase nasleñuju članove nadklase (ili superklase) od koje sunastali i imaju sopstvene članove (primer: geometrijske figure,krug, pravougaonik, trougao)

 – bez hijerarhije morali bismo da definišemo ista svojstva zaobjekte više puta

• Polimorfizam – primer sortiranja: za cele brojeve, za realne brojeve i za reči

4

Jednostavan program/*

Ovo je jednostavan Java program.

Datoteka se zove "Primer.java".

*/

class Primer {

// Program pocinje pozivanjem metoda main().

 public static void main(String args[]) {

System.out.println("Ovo je jednostavan Java program.");

}

}

• Prevoñenje programaC:\>javac Primer.java

• Pokretanje programaC:\>java Primer

• Rezultat izvršavanja programaOvo je jednostavan Java program.

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 9/236

5

Drugi jednostavan program

// Datoteka se zove "Primer2.java".class Primer2 {

 public static void main(String args[]) {

int broj; // deklaracija promenljive broj tipa int

broj = 100; // dodela vrednosti promenljivoj

// Sabiranje podataka različitih tipova

System.out.println("Ovo je broj: " + broj);

broj = broj * 2;

System.out.print("Promenljiva broj je sada: ");

System.out.println(broj);

}

}

• Rezultat izvršavanja programaOvo je broj: 100

Promenljiva broj je sada: 200

6

Naredba ifclass PrimerZaIf {

 public static void main(String args[]) {

int x, y; // deklaracija dve promenljive

x = 10;

y = 20;

if (x < y)

System.out.println("x je manje od y");

x = x * 2;

if (x < y)

System.out.println("x je još uvek manje od y");

if (x == y) {

System.out.print("x je sada jednako y");

System.out.println(", x je " + x + ", y je " + y);}

}

}

• Rezultat izvršavanja programax je manje od y

x je sada jednako y, x je 20, y je 20

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 10/236

7

for petlja

for(inicijalizacija; uslov; korak) naredba;

• Primer for petlje sa jednom naredbom

for(i=0; i<10; i=i+1) naredba;

• Primer for petlje sa blokom

for(i=0; i<10; i++) {

naredba1;

naredba2;

...

naredbaN;

}

8

Primer za for petlju i blokRezultatizvršavanjai je: 0

y je: 10

i je: 1

y je: 7

i je: 2

y je: 4

i je: 3y je: 1

i je: 4

y je: -2

class PrimerZaBlok

{

 public static void main(String args[])

{

int i, y=10;

for(i=0; i<5; i++)

{

System.out.println("i je: " + i);

System.out.println("y je: " + y);

System.out.println();

y = y - 3;

}

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 11/236

9

Elementi jezika

• Prazna mesta

• Komentari

• Identifikatori

• Literali (konstante)

• Operatori

• Separatori

• Rezervisane reči

10

Prazna mesta

• Prazna mesta su

 – prazan znak (‘ ‘)

 – tabulator

 – prelazak u novi red

• Obavezna su izmeñu elemenata jezika koji nisu

 – operatori

 – separatori

int i,y=10;

int i, y = 10;

int i

, y =

10 ;

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 12/236

11

Komentari

• Komentar u jednom redu// Proizvoljan tekst do kraja reda

• Komentar u proizvoljnom broju redova

/*

tekst napisan u proizvoljnom broju redova

*/

/* može i unutar jednog reda */

int i/*komentar*/=2;

• Dokumentacioni komentar/** Služi za pravljenje HTML datoteke

za dokumentovanje programa */

12

Identifikatori

• Imena klasa, metoda, promenljivih

• Koriste se

 – velika i mala slova

 – brojevi

 – znakovi: ’_’ i ’$’

• Primeri identifikatora

a4 srednja-vrednost SrednjaVrednost

 _a4 $test srednjaVrednost

4a srednja_vrednost srednja vrednost

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 13/236

13

Literali

• Konstantne vrednosti koje se navode doslovno100 // Celobrojni literal

1.23 // Broj u pokretnom zarezu

’x’ // Znak

”Ovo je test” // Znakovni niz

14

Separatori

( ) Zagrade služe za liste parametara metoda,naglašavanje prioriteta, grupisanje izraza,zadavanje tipa pri konverziji

{ } Vitičaste zagrade služe za definisanje klasa, metoda,blokova naredbi, automatsku inicijalizaciju nizova

[ ] Uglaste zagrade služe za deklarisanje nizovai pristupanje pojedinačnim članovima niza

; Znak tačka zarez označava kraj naredbe

, Zarez služi za razdvajane identifikatora u deklaraciji

promenljivih i za povezivanje naredbi

. Tačka razdvaja ime paketa od potpaketa i klasa,razdvaja promenljive i metode od imena objekata

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 14/236

15

Rezervisane reči

whilesynchronizedprotectedinstanceoffinalclass

volatileswitchprivateimportextendschar

voidsuperpackageimplementselsecatch

trystrictfpnewifdoubecase

transientstaticnativegotodobyte

throwsshortlongfordefaultbreak

throwreturninterfacefloatcontinueboolean

thispublicintfinalyconstabstract

• Ne koriste se rezervisane reči const i goto

• enum dodato u J2SE 5

• Rezervisane reči su i vrednosti: true, false, null

16

Javine biblioteke

• Java sadrži biblioteke klasa

• Klase su grupisane prema funkcijama kojima se bave

 – ulaz i izlaz podataka

 – rad sa tekstom

 – rad sa grafikom

 – rad u mreži

 – komunikcija sa SQL bazama podataka

 – ...

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 15/236

1

Tipovi podataka, promenljive

2

Tipovi podataka• Vrste tipova

 – Prosti tipovi (vrednosti koje nisu objekti) – Klasni tipovi (objekti)

• Java je strogo tipiziran jezik – svaka promenljiva i izraz imaju svoj tip, a svaki tip je strogo

definisan – pri svim dodeljivanjima proverava se saglasnost tipova

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 16/236

3

Prosti tipovi

• Tipovi za cele brojeve byte // 8 bita

short // 16 bita (kratak ceo broj)

int // 32 bita (ceo broj)

long // 64 bita (dugačak ceo broj)

• Tipovi za brojeve u pokretnom zarezufloat // 32 bita

double // 64 bita (broj dvostruke tačnosti)

• Tip za znakove

char // 16 bita - Unicode

• Tip za logičke vrednosti boolean // dve vrednosti, true i false

4

Celi brojevi• Označeni (pozitivni i negativni)• Negativni brojevi se zapisuju u drugom komplementu• Dužina celobrojnog tipa odreñuje ponašanje

 – dužinu ne treba shvatiti kao stvarnu količinu memorije zavrednost datog tipa

 – moguće je da vrednost zauzme više memorije, npr. byte ishort da zauzmu 32 bita (dužina reči računara)

• Opseg brojeva predstavljenih sa n bita

12211−−

−−  n n  do

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 17/236

5

Numerički sistemi

• Decimalni – osnova 10 – cifre: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

• Binarni – osnova 2 – cifre: 0, 1

• Oktalni – osnova 8 – cifre: 0, 1, 2, 3, 4, 5, 6, 7

• Heksadecimalni, osnova 16 – osnova 16 – cifre: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

6

Jedan način konverzije celog brojaiz decimalnog sistema u sistem sa osnovom N

• Broj se uzastopno deli osnovom sistema N sve dokrezultat deljenja ne postane nula

• Zapisuje se ostatak pri svakom deljenju, svaki ostatak je jedna cifra u sistemu sa osnovom N

• Cifre koje predstavljaju ostatke napišu se u obrnutomredosledu u odnosu na redosled kojim su dobijenedeljenjem

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 18/236

7

Konverzija broja iz sistema sa osnovom b

u decimalni numerički sistem

•  n  je broj celih mesta

•  m  je broj razlomljenih mesta

•  b  je osnova sistema iz kojeg se prevodi broj

•  ci su cifre sistema iz kojeg se prevodi broj

• i  je pozicija cifre

•  bi  je težina cifre na poziciji i

( )i

 n

 mi

i  b c broj ⋅= ∑−

−=

1

10

8

Primer konverzije iz decimalnog u binarni sistem• Prevodi se broj 109109 : 2 = 54, ostatak 1

54 : 2 = 27, ostatak 0

27 : 2 = 13, ostatak 1

13 : 2 = 6, ostatak 1

6 : 2 = 3, ostatak 0

3 : 2 = 1, ostatak 1

1 : 2 = 0,

ostatak1

• Zapis broja je

109(10) = 1101101(2)

• Kraći način pisanja109 1

54 0

27 1

13 1

6 0

3 1

1 1

0

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 19/236

9

Primer konverzije iz binarnog u decimalni sistem

• Za decimalni broj 109:1 0 9

2 1 0 - pozicije cifara – težine cifara su

109 = 1×102 + 0×101 + 9×100

• Prevoñenje binarnog broja 1101101 u decimalni1 1 0 1 1 0 1

6 5 4 3 2 1 0 - pozicije cifara1101101(2)

= 1×26 + 1×25 + 0×24 + 1×23 + 1×22 + 0×21 + 1×20

= 64 + 32 + 0 + 8 + 4 + 0 + 1

= 109(10)

10

Primer konverzije broja iz decimalnogu heksadecimalni numerički sistem

• Prevodi se broj 109109 : 16 = 6, ostatak 13

6 : 16 = 0, ostatak 6

• Zapis broja je

109(10) = 6D(16)

• Kraći način pisanja109 13 = D

6 6

0

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 20/236

11

Konverzija iz binarnogu heksadecimalni numerički sistem i obrnuto

• Za osnove sistema važi: 24=16 – četiri binarne cifre odgovaraju jednoj heksadecimalnoj cifri

• Prevoñenje iz binarnog u heksadecimalni sistem: – počevši od cifre najmanje težine grupišu se po četiri

binarne cifre i zamene se jednom heksadecimalnom cifrom – ako poslednja grupa ima manje od četiri cifre dopisuje se

potreban broj nula sa prednje strane• Primer: binarni broj 1101101:

110 1101(2) = 0110 1101(2) = 6 D(16)

• Prevoñenje broja iz heksadecimalnog u binarni sistem – svaka heksadecimalna cifra zameni se kombinacijom četiri

binarne cifre koja odgovara toj heksadecimalnoj cifri

12

Zapis negativnih celih brojeva u binarnom sistemu• Prva cifra za pozitivne brojeve je 0• Negativni brojevi se zapisuju u drugom komplementu• Prvi komplement broja: sve nule se zamene jedinicama,

a sve jedinice nulama – ili: prvi komplement = 2n – 1 – broj, n je broj cifara

• Drugi komplement broja: na prvi komplement se doda 1 – ili: drugi komplement = 2n – broj, n je broj cifara

• Pravilo za prevoñenje u drugi komplement:

 – idući od cifre najmanje težine, sve uzastopne nule seprepišu, a takoñe i prva jedinica na koju se naiñe

 – preostale cifre: sve nule se zamene jedinicama, a jedinicenulama

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 21/236

13

Primeri odreñivanja drugog komplementa

• Za decimalni broj 109:109(10) = 01101101(2)

• Drugi komplement:0 1 1 0 1 1 0 1

1 0 0 1 0 0 1 1

• Negativan broj:-109(10) = 10010011(2)

• Za decimalni broj 16:16(10) = 00010000(2)

• Drugi komplement:0 0 0 1 0 0 0 0

1 1 1 1 0 0 0 0

• Negativan broj:-16(10) = 11110000(2)

14

Primer: drugi komplement broja –1• Zapis pozitivnog broja:1(10) = 0000 0001(2)

• Drugi komplement:0 0 0 0 0 0 0 1

1 1 1 1 1 1 1 1

• Negativan broj:-1(10) = 1111 1111(2)

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 22/236

15

Drugi komplement: primeri sabiranja

• Sabiranje 5 i 3:prenos 0000 111

5(10) 0000 0101(2)

3(10) 0000 0011(2)

8(10) 0000 1000(2)

• Sabiranje -5 i -3:prenos 1 1111 111

-5(10) 1111 1011(2)

-3(10) 1111 1101(2)

-8(10) 1 1111 1000(2)

• Sabiranje 5 i -3:prenos 1 1111 101

5(10) 0000 0101(2)

-3(10) 1111 1101(2)

2(10) 1 0000 0010(2)

• Sabiranje -5 i 3:prenos 0000 011

-5(10) 1111 1011(2)

3(10) 0000 0011(2)

-2(10) 1111 1110(2)

16

Predstavljanje celih brojeva u računaru• Pozitivni brojevi imaju vodeću nulu• Negativni brojevi se zapisuju u drugom komplementu,

imaju vodeću jedinicu• Nula ima jedinstven zapis: 00 ... 000• Negativnih brojeva ima više za 1 nego pozitivnih, tj. ako

se brojevi zapisuju sa N bita: – negativnih brojeva ima 2N–1

 – pozitivnih brojeva ima 2N–1 –1

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 23/236

17

 byte

• Dužina 8 bita• Opseg: –128 do 127

127(10) = 0111 1111(2) = 0x7F(16)-128(10) = 1000 0000(2) = 0x80(16)

• Deklaracija promenljive: byte a;

 byte b, c;

18

short

• Dužina 16 bita• Opseg: –32768 do 32767

32767 = 0x7FFF

-32768 = 0x8000

• Big-Endian format• Deklaracija promenljive:

short s;

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 24/236

19

Little-Endian i Big-Endian formati (primer za int)

Osnovna adresa+0: byte0

Osnovna adresa+1: byte1

Little-Endian

Osnovna adresa+2: byte2

Osnovna adresa+3: byte3

byte0byte1byte2byte3

Osnovna adresa+1: byte2

Osnovna adresa+2: byte1

Osnovna adresa+3: byte0

Osnovna adresa+0: byte3

byte3byte2byte1byte0Big-Endian

• Little-Endian: Intelovi procesori x86 koje se koriste u PC

• Big-Endian: Motorola procesori koji se koriste za Mac

20

int

• Dužina 32 bita• Opseg: –2 147 483 648 do 2 147 483 647

2147483647 = 0x7FFFFFFF

-2147483648 = 0x80000000

• U celobrojnom izrazu koji sadrži podateke tipa byte,short, int i literale, čitav izraz se unapreñuje u int penego što se zračunava

• int je najefikasniji tip

• Deklaracija promenljive:int i, j;

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 25/236

21

long

• Dužina 64 bita• Opseg: –9 223 372 036 854 775 808 do

9 223 372 036 854 775 8079223372036854775807 = 0x7FFFFFFFFFFFFFFF

-9223372036854775808 = 0x8000000000000000

• Deklaracija promenljive:long broj_sekundi;

22

Standard IEEE 754, brojevi u pokretnom zarezu

• Mantisa sadrži zapis o razlomljenom delu• Normalizovana mantisa ima oblik 1.m ,

 – Zapisuje se "m", a "1." se podrazumeva – Tip float ima 24 tačne binarne cifre, a double 53

 – Zapis broja je: (–1)z × 1.m × 2e-b

• Denormalizovana mantisa ima oblik 0.m i – mantisa je denormalizovana ako je m ≠ 0, e = 0

 – Zapis broja je: (–1)z × 0.m × 2-126

102352 bita [51-0]11 bita [62-52]1 bit [63]double

12723 bita [22-0]8 bita [30-23]1 bit [31]float

Bias (b)Mantisa (m)Eksponent (e)Znak (z)

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 26/236

23

Standard IEEE 754, brojevi u pokretnom zarezu

• Znak – 0 za pozitivne brojeve – 1 za negativne brojeve

• Eksponent je za osnovu 2 – Vrednost u memoriji je <stvatna vrednost eksponenta> + Bias – Eksponenti 00...00 i 11...11 imaju specijalno značenje – Primeri za float

• Zapis 200 predstavlja eksponent 73 (200–127=73)• Najmanja vrednost eksponenta je 1–127=–126• Najveća vrednost eksponenta je 254–127=127

102352 bita [51-0]11 bita [62-52]1 bit [63]double

12723 bita [22-0]8 bita [30-23]1 bit [31]floatBiasMantisaEksponentZnak

24

Standard IEEE 754, opsezi brojeva

10 –307.65 ÷ 10308.25(2–2 –52)·210232 –1022double

10 –37.93 ÷ 1038.53(2–2 –23)·21272 –126float

približni opsegmaxmin

Sa normalizovanom mantisom (eksponent ≠ 0)

10 –323.3 ÷ 10 –307.65(1–2 –52)·2 –10222 –1074double

10 –44.85 ÷ 10 –37.93(1–2 –23)·2 –1262 –149floatpribližni opsegmaxmin

Sa denormalizovanom mantisom (eksponent = 0)

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 27/236

25

Standard IEEE 754, opsezi brojeva

2,22·10 –308 ÷ 1,79·10308(2 –2 –52)·210232 –1022double

1,17·10 –38 ÷ 3,40·1038(2 –2 –23)·21272 –126float

približni opsegmaxminSa normalizovanom mantisom (eksponent ≠ 0)

4,94·10 –324 ÷ 2,22·10 –308(1 –2 –52)·2 –10222 –1074double1,40

·

10 –45

÷ 1,75·

10 –38

(1 –2 –23

2 –126

2 –149

float

približni opsegmaxmin

Sa denormalizovanom mantisom (eksponent = 0)

26

Standard IEEE 754, specijalne vrednosti• Nula: eksponent sadrži nule, mantisa sadrži sve nule

 – ne može da se zapiše sa normalizovanom mantisom – postoje +0 i –0 koje su jednake pri poreñenju

• Beskonačno (±∞): eksponent sadrži sve jedinice,mantisa sadrži sve nule

• NaN (Not a Number): eksponent sadrži sve jedinice,mantisa je različita od nule (ne sadrži sve nule) – QNaN (Quiet NaN): MSB mantise je 1, označava rezultat

matematičke operacije koji nije nedefinisan – SNaN (Signalling NaN): MSB mantise je 0, nevažeća

operacija, izuzetak

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 28/236

27

Standard IEEE 754, specijalne operacije

 NaN±beskonačno × 0

 NaN±beskonačno / ±beskonačno

 NaN beskonačno – beskonačno

 NaN±0 / ±0

 beskonačno beskonačno + beskonačno

±beskonačno±<ne_nulta_vrednost> / 0

±beskonačno±beskonačno × ±beskonačno

0n / ±beskonačno

RezultatOperacija

28

Standard IEEE 754, sumarna tabela

SNaN10..01 ÷ 11..1111..111

QNaN00..01 ÷ 01..1111..111

–beskonačno00..0011..111

–1.m × 2e-bXX..XX00..01 ÷ 11..101

–0.m × 2-b+100..01 ÷ 11..1100...001

–000...0000...001

SNaN10..01 ÷ 11..1111..110

QNaN00..01 ÷ 01..1111..110

+beskonačno00..0011..110

1.m × 2e-bXX..XX00..01 ÷ 11..100

0.m × 2-b+100..01 ÷ 11..1100..000

+000..0000..000

VrednostMantisa (m)Eksponent (e)Znak

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 29/236

29

float

• Dužine 32 bita• Opseg za pozitivne brojeve je:

1.18e–38 do 3.4e+38• Negativni brojevi imaju isti opseg po apsolutnoj vrednosti

kao i pozitivni brojevi• Tip float se koristi kad nije potrebna velika tačnost

• Deklaracija promenljive:float temperatura;

30

double

• Dužina 64 bita• Opseg za pozitivne brojeve je:

2.2e–308 do 1.7e+308• Negativni brojevi imaju isti opseg po apsolutnoj vrednosti

kao i pozitivni brojevi• Matematičke funkcije iz klase Math kao rezultat vraćaju

tip double

sin(), cos(), sqrt(), ...

• Izračunavanje je brže nego sa float• Deklaracija promenljive:

double r;

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 30/236

31

Znakovni tip - char

• Dužina 16 bita• Koristi se UNICODE• Opseg: 0 do 65535• ASCII znakovi imaju nepromenjene vrednosti 0-127,

odnosno od 0-255 je ISO-Latin-1• Mogu da se izvode računske operacije sa znakovnim

tipom

• Deklaracija promenljive:char z, znak;

32

Primer za znakovni tipclass PrimerZaChar {

 public static void main(String args[]) {

char znak = ’X’;

System.out.println(znak);

znak++;

System.out.println(znak);

}

}

Rezultat izvršavanja programa:XY

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 31/236

33

Logički tip - boolean

• Vrednosti: true, false• Operatori poreñenja vraćaju rezultat tipa boolean

 boolean b = true;

System.out.println(b); // Prikazuje "true"

34

Celobrojni literali• Decimalni sistem: 7, 123

• Oktalni sistem, prva cifra je 0: 07, 056

• Heksadecimalni sistem, brojevi počinju sa 0x ili 0X

 – cifre od A do F mogu da se pišu malim ili velikim slovima

• Podrazumeva se da je tip int

• Može se dodeliti promenljivoj tipa byte ili short ako je vrednost literala unutar opsega tipa: byte b = 26;

• Literal tipa long označava se slovom L na kraju:0x7FL, 0xac23l

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 32/236

35

Literali u pokretnom zarezu

• Standardna forma: 8.53, 0.021, 375.63

• Naučna forma: 6.022E23, 314259e-05, -5e24

• Podrazumeva se tip double

• Tip float se označava slovom F na kraju (malo iliveliko slovo): 20.3F, -2.3f, 7.1e-4F

• Tip double može da se označi slovom D ili d nakraju, ali je to suvišno

36

Logički literali• Postoje dve vrednosti:true

false

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 33/236

37

Znakovni literali

• Vidljivi znakovi mogu da se pišu unutar polunavodnika:'a', 'A', 'x', '8', '@', '!'

• Specijalni znakovi se označavaju kosom crtom:'\'' (polunavodnik), '\"' (navodnik), '\t' (tabulator),'\n' (prelazak u novi red), '\r' (vraćanje na početakreda), '\f' (prelazak na novu stranicu)

• Znak može da se unese pomoću vrednosti:oktalna vrednost se unosi kao trocifren broj '\ddd':'\044', '\101'heksadecimalna vrednost se unosi kao četvorocifren broj

dodatno označen kosom crtom i slovom u: '\u0065','\ua075'

38

Literali znakovnog niza• Unose se izmeñu navodnika:"Tekst koji se ispisuje u jednom redu."

"Tekst koji\nse ispisuje\nu tri reda."

"\"Tekst koji se ispisuje unutar navodnika.\""

• Naredba System.out.println() bi gornjeznakovne nizove ispisala ovako:Tekst koji se ispisuje u jednom redu.

Tekst koji

se ispisuje

u tri reda.

"Tekst se ispisuje unutar navodnika."

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 34/236 2

39

Deklarisanje promenljive

tip identifikator [=vrednost][,identifikator [=vrednost]];

• Primeri:int i, j;  // deklaracija dve promenljive tipa intint x=3, z, y=-10;  // deklaracija i inicijalizacijachar znak = ’w’;

double a=3, b=4;

double c=Math.sqrt(a*a+b*b);  //dinamička inicijalizacija

• Dinamička inicijalizacija je inicijalizacija izračunavanjem

izraza koji važi u trenutku izvršavanja (svim promenljivim uizrazu je već dodeljena vrednost)

40

Oblast važenja i životni vek promenljive• Oblast važenja

 – unutar klase – unutar metode – unutar bloka

• Životni vek – nastaju kad se uñe u njihovu oblast važenja – uništavaju se kad se izañe iz njihove oblasti važenja

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 35/236 2

41

Oblast važenja promenljive

• Promenljiva se ne može koristiti pre deklaracije{

int p = 3;

{

...

broj = 10; // Ovo je greška

int broj;

int m = p; // p je vidljivo

...

}

int k = m; // Ovo je greškaint r = p;

...

}

42

Ilustrovanje oblasti važenjaclass OblastVazenja {

 public static void main(String args[]) {

int x=10; // vidljiva unutar metode main

if(x==10){ // početak nove oblasti važenja

int y=20; // vidljiva samo u ovom bloku

System.out.println("x i y: " + x + " " + y);

x = y * 2; // u ovom bloku se vide x i y

}

//y = 100; // Greška, y se ovde ne vidi

// x se ovde vidi

System.out.println("x je " + x);

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 36/236 2

43

Životni vek promenljive

• Promenljive deklarisane u bloku koji se ponavlja u petljigube vrednost izmeñu dva prolaska kroz blok

class ZivotniVek {

 public static void main(String args[]) {

int x;

for(x=0; x<3; x++){

int y = -1; // svaki put kad se uñe u blok

System.out.println("y je: " + y); //uvek -1

y = y + 101;

System.out.println("y = " + y); //uvek 100

}

}

}

44

Oblast važenja• Promenljive sa istim imenom ne mogu da se deklarišu u

dva bloka od kojih je jedan spoljašnji, a drugi unutrašnji

// Ovaj program se ne prevodi

class PogresnaOblastVaznja {

 public static void main(String args[]) {

int g = 1;

{ // nova oblast važenja

int g = 2; // greška u prevoñenju

// promenljiva g već postoji

}

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 37/236 2

45

Konverzije

• Automatska konverzija kod dodele vrednosti – tipovi su meñusobno kompatibilni – odredišni tip je veći (složeniji) od polaznog

• Izričita (eksplicitna) konverzija – ako dodeljujemo vrednost celog broja bajtu, rezultat je

 jednak istatku celobrojnog delnjenja int sa opsegom tipabajt (256)

 – ako dodeljujemo vrednost broja u pokretnom zarezu celombroju, doći će do odsecanja razlomljenog dela

• Javin prevodilac uvek proverava usaglašenost tipova

46

Automatsko unapreñivanje tipova u izrazima• byte i short se uvek konvertuju u tip int kad se

pojavljuju kao operandi nekog izraza

• Primer: byte a=5, b=8;

 byte c=a*b; // Izaziva grešku u prevoñenju

 byte d = ( byte)(a*b); // Ispravno

 byte e = ( byte)a*b; // Pogrešno

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 38/236 2

47

Pravila za automatsku konverziju (unapreñivanje)tipova u izrazima

• byte i short se automatski unapreñuju u int

• ako je jedan operand izraza long, ceo izraz seunapreñuje u long

• ako je jedan operand izraza float, ceo izraz seunapreñuje u float

• ako je jedan operand izraza double, ceo izraz seunapreñuje u double

48

Primer za automatsku konverzijuclass Unapredjivanje {

 public static void main(String args[]) {

 byte b = 2;

short s = 300;

char z = 'a';

int i = 10, j = 5;

long k = 0xFFFFFFFFFFL;

float f = 5.1f;

double d = .1;

double r = (f*b) + (i/z) – (j+k) + (d*s);

System.out.println((f*b) + " + " + (i/z) + " – "+ (j+k) + " + " + (d*s));

System.out.println("rezultat = " + r);

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 39/236 2

49

Primer: eksplicitna konverzija int u byte

• Tip int  je dužine 32 bita, tj. 4 bajta• Pri konverziji tipa int u tip byte rezultat je jednak

najnižem bajtu (biti na pozicijama od 0 do 7), a tri gornjabajta se gube (biti na pozicijama od 8 do 31)

• Zavisno od vrednosti bita na poziciji 7, rezultat možepromeniti znak

byte0→byte0byte1byte2byte3

 byte→int

11111111→11111111011011101001101000110100

pozicija 7

50

Primer za eksplicitnu konverziju

class Konverzija {

 public static void main(String args[]) {

int i = 257;  // 0...0 0001 0000 0001double d = 129.142;

 byte b = ( byte)i;  // b=1 0000 0001i = (int)d;  // i=129 0...0 0000 1000 0001b = ( byte)d;  // b=-127 1000 0001

 // 130 = 0...0 0000 1000 0010i = -130;  // -130 = 1...1 1111 0111 1110b = ( byte)i;  // b=126 0111 1110

}

}

• Mogući su i neočekivani rezultati, npr. kad je broj koji sekonvertuje izvan opsega tipa u koji se konvertuje

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 40/236

1

Nizovi

2

Nizovi

• Grupe promenljivih istog tipa

• Jedna ili više dimenzija

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 41/236

3

Jednodimenzionalni nizovi

• Lista (niz) promenljivih istog tipa

• Deklaracija

tip ime_niza[];

tip[] ime_niza;  // alternativna mogućnost deklarisanja

• Primer

int meseci[];

int[] meseci;

• Deklaracija ne rezerviše mesto u memoriji za niz

4

Kreiranje niza

• Deklaracija a zatim kreiranje niza

tip ime_niza[];

ime_niza = new tip[velicina];

• Primer

int meseci[];

meseci = new int[12];

Deklaracija i inicijalizacijatip ime_niza[] = new tip[velicina];

• Primer

int meseci[] = new int[12];

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 42/236

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 43/236

7

Višedimenzionalni nizovi

• Dvodimenzionalni niz je matrica

• Deklaracija dvodimenzionalnog niza

tip ime_niza[][];

• Primer

int matrica[][] = new int[3][4];

• Ovim se rezerviše 3x4=12 lokacija u memoriji za tip int

8

Predstavljanje dvodimenzionalnog niza

[0][3][0][2][0][1][0][0]

[1][3][1][2][1][1][1][0]

int matrica[][] = new int[3][4];

• Prvi indeks odreñuje vrstu a drugi kolonu

[2][3][2][2][2][1][2][0]

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 44/236

9

Primer za pristupanje članovima matriceclass DvodimenzionalniNiz {

 public static void main(String args[]) {

int matrica[][]= new int[3][4];

int i, j, k = 0;

for(i=0; i<3; i++)

for(j=0; j<4; j++) {

matrica[i][j] = k;

k++;

}

for(i=0; i<3; i++) {

for(j=0; j<4; j++)

System.out.print(matrica[i][j] + " ");

System.out.println();

}

}

}

10

Inicijalizacija dvodimenzionalnog nizaclass DvodimenzionalniNizInit {

 public static void main(String args[]) {

int m[][]= { { 0, 1, 2, 3 },

{ 4, 5, 6, 7 },

{ 8, 9, 10, 11 } };

int i, j;

for(i=0; i<3; i++) {

for(j=0; j<4; j++)

System.out.print(m[i][j] + " ");

System.out.println();

}

}

}

0 1 2 3

4 5 6 7

8 9 10 11

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 45/236

11

Drugi način kreiranja višedimenzionalnog nizaclass DvodimenzionalniNizDrugiNacin {

 public static void main(String args[]) {

int m[][]= new int[3][];

m[0] = new int[4];

m[1] = new int[4];

m[2] = new int[4];

// Isto se dobija sa

// int matrica[][]= new int[3][4];

...

}

}

12

Različit broj elemenata u nekoj dimenziji niza

class DvodimenzionalniNizSpec {

 public static void main(String args[]) {

int dd[][]= new int[3][];

dd[0] = new int[1];

dd[1] = new int[2];

dd[2] = new int[3];

int i, j, k=0;

for(i=0; i<3; i++)

for(j=0; j<i+1; j++) {

dd[i][j] = k;

k++;

}

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 46/236

13

Različit broj elemenata u nekoj dimenziji niza

[2][2][2][1][2][0]

[1][1][1][0]

[0][0]

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 47/236

1

Operatori

2

Operatori

• Aritmetički operatori

• Operatori nad bitima

• Operatori poreñenja

• Logički operatori

• Operator dodeljivanja

• Operator ?:

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 48/236

3

Aritmetički operatori

+ Sabiranje

– Oduzimanje i unarni minus

* Množenje

/ Deljenje

% Moduo

++ Uvećavanje za jedan

–– Umanjivanje za jedan

+= Dodeljivanje uz sabiranje

–= Dodeljivanje uz oduzimanje

*= Dodeljivanje uz množenje

/= Dodeljivanje uz deljenje

%= Dodeljivanje uz moduo

4

Primer osnovnih operacija sa tipom int

class OsnovneOperacijeSaIneger {

 public static void main(String args[]) {

int a = 1 + 1;

int b = a * 3;

int c = b / 4;

int d = c - a;

int e = -d;

System.out.println("a = " + a + "\nb = " + b +

"\nc = " + c + "\nd = " + d + "\ne = " + e);

}

}a = 2

b = 6

c = 1

d = -1

e = 1

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 49/236

5

Primer osnovnih operacija sa tipom double

class OsnovneOperacijeSaDouble {

 public static void main(String args[]) {double a = 1 + 1;

double b = a * 3;

double c = b / 4;

double d = c - a;

double e = -d;

System.out.println("a = " + a + "\nb = " + b +

"\nc = " + c + "\nd = " + d + "\ne = " + e);

}

}

a = 2.0

b = 6.0

c = 1.5

d = -0.5

e = 0.5

6

Operator moduo

class Moduo {

 public static void main(String args[]) {

int x = 7;

int y = x % 3;

System.out.println("7 % 3 = " + y);

double d = 5.5;

double d1 = d % 2; // d1=1.5

System.out.println("d1 = " + d1);

double d2 = d % 2.5; // d2=0.5

System.out.println("d2 = " + d2);

}

}

7 % 3 = 1

d1 = 1.5

d2 = 0.5

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 50/236

7

Aritmetički operatori dodeljivanja

 promenljiva =  promenljiva operator izraz;

 promenljiva operator = izraz;

• Primeria = a / 4;

a /= 4;

b = b % c;

b %= c;

d = d + e * f;

d += e * f;

8

Uvećavanje i umanjivanje

x = x + 1;

x++;

x = x – 1;

x--;

• Mogu da budu prefiksi ili sufiksi

• Primer za sufiks

x = 5;

y = x++;  // prvo se radi dodela vrednosti tj. y dobije vrednost 5,

 // zatim se x uveća i dobije vrednost 6

• Primer za prefiks

x = 5;

y = ++x;  // prvo se x uveća i dobije vrednost 6,

 // zatim se radi dodela vrednosti tj. y dobije vrednost 6

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 51/236

9

Operatori nad bitima

~ Negacija bita jednog operanda (NE – NOT)

& Konjunkcija nad bitima (I – AND)

| Disjunkcija nad bitima (ILI – OR)

^ Isključiva disjunkcija nad bitima (EXOR)

>> Pomeranje udesno

>>> Pomeranje udesno sa unošenjem nula

<< Pomeranje ulevo

&= Dodeljivanje uz konjunkciju nad bitima

|= Dodeljivanje uz disjunkciju nad bitima

^= Dodeljivanje uz isključivu disjunkcija nad bitima

>>= Dodeljivanje uz pomeranje udesno

>>>= Dodeljivanje uz pomeranje udesno sa unošenjem nula

<<= Dodeljivanje uz pomeranje ulevo

10

Tabela operatora nad bitima

1

0

0

0

A & B

00111

01101

11110

10000

~AA ^ BA | BBA

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 52/236

11

Operatori nad bitima

37001001011000001010

15^ 0000111115& 00001111

42001010104200101010

4700101111–4311010101

15| 0000111142~ 00101010

4200101010

12

Pomeranje ulevo

vrednost << broj_bita_za_koliko_se_pomera;

• Sa desne strane se dodaju nule

• Biti sa leve strane se gube

• Primer:int i = 1 << 3; // i dobija vrednost 8

int p = 0x7FFFFFFF; // p ima vrednost najvećeg int

p = p << 1; // p je 0xFFFFFFFE tj. -2

p <<= 1; // p je 0xFFFFFFFC tj. -4

• Pomeranje ulevo za N bita odgovara množenju sa 2N, pod uslovomda ne doñe do promene znaka broja

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 53/236

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 54/236

15

Primeri za operacije nad bitima

 byte b = ( byte)0xff;

b = b >>> 4; // Greška, rezultat je tipa int

b >>>= 28; // Ispravno, b je sad 0x0f

b = ( byte)0xff;

b = ( byte)((b & 0xff) >> 4); // b je sad 0x0f, jer:

// b se unapreñuje u int: 0xffffffff

// AND po bitima sa 0xff: 0x000000ff

// pomeranje udesno za 4: 0x0000000f

// posle konverzije int u byte: 0x0f

16

Operatori poreñenja

== Jednako

!= Različito

> Veće

< Manje

>= Veće ili jednako

<= Manje ili jednako

• Rezultat operacija je logički tip ( boolean)

• Operatori == i != rade sa svim tipovima

• Operatori redosleda (>, <, >=, <=) rade sa numeričkimtipovima i char

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 55/236

17

Primeri za operatore poreñenja

int a=1, b=4;

 boolean c = a < b; // c ima vrednost true

if(c) naredba;

if(a<b) naredba;

18

Logički operatori

& Konjunkcija (I – AND)

| Disjunkcija (ILI – OR)

^ Isklučiva (ekskluzivna) disjunkcija (EXILI – EXOR)

&& Kratkospojena konjunkcija

|| Kratkospojena disjunkcija

! Unarna negacija (NE – NOT)

== Jednako

!= Različito

?: Ternarni operator uslovne dodele

&= Dodeljivanje uz konjunkciju

|= Dodeljivanje uz disjunkciju

^= Dodeljivanje uz isklučivu disjunkciju

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 56/236

19

Tabela logičkih operatora

true

false

false

false

A & B

falsefalsetruetruetrue

falsetruetruefalsetrue

truetruetruetruefalse

truefalsefalsefalsefalse

!AA ^ BA | BBA

20

Primer za logičke operatore

class BoolLogic {

 public static void main(String args[]) {

 boolean a = true, b = false;

 boolean c = a | b;

 boolean d = a & b;

 boolean e = a ^ b;

 boolean f = (!a & b) | (a & !b);

 boolean g = !a;

System.out.println("a = " + a + "\nb = " + b +

"\na|b = " + c + "\na&b = " + d + "\na^b = " +

e + "\n!a&b | a&!b = " + f + "\n!a = " + g);}

}

a = true a&b = false !a = false

b = false a^b = true

a|b = true !a&b | a&!b = true

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 57/236

21

Kratkospojeni logički operatori

 boolean c = izraz1 || izraz2;

• Ako je izraz1=true, izraz2 se ne izračunava, pošto je u tom slučajurezultat true bez obzira na vrednost izraza2

 boolean c = izraz1 | izraz2;  // Oba izraza se izračunavaju

if(d!=0 && b/d>100) naredba;  // Ne dolazi do deljenja nulom

if(c==1 & e++<100) naredba;  // e se uvećava i kad je c=1

• Operatori && i || se koriste češće od & i |

22

Ternarni operator ?:

izraz1 ? izraz2 : izraz3;

• Rezultat izraz1 mora biti logičkog tipa

 – ako izraz1 ima vrednost true izvršava se izraz2

 – ako izraz1 ima vrednost false izvršava se izraz3

• Ternarni operator ?: vraća vrednost izračunatog izraza

• Izrazi izraz2 i izraz3 moraju da budu istog tipa i nesmeju da budu tipa void (vraćaju rezultat nekog tipa)

k = i<0 ? –i : i;  // Izračunavanje apsolutne vrednosti i

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 58/236

23

Operator dodeljivanja

 promenljiva = izraz;

• Operator dodeljivanja vraća vrednost izraza sa desne strane

int a, b, c, d;

a = b = c = d = 10;

• Sve četiri promenljive dobijaju vrednost 10

• Izraz d=10 vraća rezultat 10 koji se dodeljujepromenljivoj c i tako redom do a

24

Prioritet operatora

(*=, /=, %=, +=, <<= ...)operator==

?:

||

&&

|

^

&

!===

<=<>=>

<<>>>>>

-+

%/*

!~--++

.[]()

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 59/236

25

Korišćenje zagrada

• Zagrade služe za definisanje redosleda izračunavanja(prioriteta) i za pisanje jasnijih izraza

a >> b + 3; // prvo se b uvećava za 3,

// zatim se sadržaj a pomera udesno

// ("+" ima veći prioritet od ">>")

a >> (b + 3); // ekvivalentno gornjem

(a >> b) + 3; // prvo se sadržaj a pomera udesno,

// zatim se uvećava za 3

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 60/236

1

Upravljačke naredbe

2

Upravljačke naredbe

• Naredbe uslovljavanja (selection statements)

 – upravljanje izvršavanjem programa na osnovu uslova kojisu poznati u trenutku izvršavanja

• Naredbe ciklusa (iteration statements)

 – izvršavanje (ponavljanje) jedne naredbe ili bloka naredbipotreban broj puta, zavisno od uslova

• Naredbe skoka (jump statements)

 – prekidanje izvršavanja redosleda naredbi i nastavljanje na

definisanom mestu, tj. preskakanje naredbi

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 61/236

3

Upravljačke naredbe

• Naredbe uslovljavanja

– if

– switch

• Naredbe ciklusa

– while

– do while

– for

• Naredbe skoka

– break

– continue

– return

4

Naredba if

• Uslovno grananje na dva različita puta

• Opšti oblik

if(uslov ) naredba1;

else naredba2;

• uslov  je izraz koji vraća vrednost tipa boolean,ili jedna promenljiva tipa tipa boolean

• naredba  je jedna naredba ili blok naredbi

• deo else nije obavezan

• Izvršavanje

 – ako uslov vrati vrednost true izvršava se naredba1

 – inače se izvršava naredba2 (ako else deo postoji)

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 62/236

5

Primeri za if

int a, b;

// a i b dobijaju neke vrednosti ...

if(a < b) a = 0;

else b = 0;

int brojPodataka, n;

// ...

if(brojPodataka > 0) {

ObradiPodatke();  // Blok od dve naredbe u if delu

brojPodataka -= n;

}

else

PrikupiPodatke();  // Jedna naredba u else delu

int i = n;  // Naredba koja ne pripada if-else delu

6

Ugnježdeni uslovi

if(i == 10) {

if(j < 20) a = b;

if(k > 100) c = d;

else a = c;  // ovaj else se odnosi na uslov if(k > 100)

}

else a = d;  // ovaj else se odnosi na uslov if(i == 10)

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 63/236

7

Ugnježdeni uslovi

if(i == 10) {if(j < 20) {

a = b;

if(k > 100) c = d;

}

else a = c;  // ovaj else se odnosi na uslov if(j < 20)

}

else a = d;  // ovaj else se odnosi na uslov if(i == 10)

8

if else if

if(uslov1)

naredba1;

else if(uslov2)

naredba2;

else if(uslov3)

naredba3;

else if(uslov4)

naredba4;

else

naredba5;

if(uslov1)

naredba1;

else

if(uslov2)

naredba2;

else

if(uslov3)

naredba3;

else

if(uslov4)

naredba4;

else

naredba5;

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 64/236

9

Primer za if else if

class GodisnjaDobaSaIfElseIf {

 public static void main(String args[]) {

int mesec = 4; // AprilString godisnjeDoba;

if(mesec==12 || mesec==1 || mesec==2)

godisnjeDoba = "zima";

else if(mesec==3 || mesec==4 || mesec==5)

godisnjeDoba = "proleće";

else if(mesec==6 || mesec==7 || mesec==8)

godisnjeDoba= "leto";

else if(mesec==9 || mesec==10 || mesec==11)

godisnjeDoba = "jesen";

else

godisnjeDoba = "nepostojeći mesec";

System.out.println("Kada je mesec april, godišnje doba

je " + godisnjeDoba + ".");

}

}

Kada je mesec april, godišnje doba je proleće.

10

Naredba switch

• Grananje u više putanja zavisno od vrednosti izraza

• Opšti oblikswitch(izraz) {

case vrednost1:

niz_naredbi1;

[ break;]

case vrednost2:

niz_naredbi2;

[ break;]

...

default:

niz_naredbiN ;

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 65/236

11

Naredba switch

• izraz  je jedan od tipova: byte, short, int ili char

• Svaka od vrednosti  je jedinstven literal (konstanta)• Ne sme se ponoviti ista vrednost u istom switch

• Sa break se završava switch

• Ako ne postoji break nastavlja se izvršavanje sledećegcase

• Deo default  je opcioni

12

Primer za switch

class PrimerZaSwitch { public static void main(String args[]) {

for(int i=0; i<6; i++)

switch(i) {

case 0: System.out.println("i je nula."); break;

case 1: System.out.println("i je jedan."); break;

case 2: System.out.println("i je dva.");  break;

case 3: System.out.println("i je tri."); break;

default: System.out.println("i je veće od tri.");

}

}

}

i je nula.i je jedan.

i je dva.

i je tri.

i je veće od tri.

i je veće od tri.

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 66/236

13

Primer za switch bez breakclass PrimerBezBreak {

 public static void main(String args[]) {

for(int i=0; i<9; i++)

switch(i) {

case 0: System.out.println("i = 0");

case 1:

case 2: System.out.println("i < 3"); break;

case 3:

case 4: System.out.println("i < 5"); break;

default: System.out.println("i >= 5");

}

}

}

i = 0 i < 5i < 3 i >= 5

i < 3 i >= 5

i < 5 i >= 5

i >= 5

14

Godišnja doba sa switch

class GodisnjaDobaSaSwitch { public static void main(String args[]) {

int mesec = 4;

String godisnjeDoba;

switch (mesec) {

case 12:

case 1:

case 2: godisnjeDoba = "zima";  break;

case 3:

case 4:

case 5: godisnjeDoba = "proleće"; break;

case 6:

case 7:

case 8: godisnjeDoba = "leto"; break;

case 9:

case 10:

case 11: godisnjeDoba = "jesen"; break;

default: godisnjeDoba = "nepostojeći mesec";

}

System.out.println("Kada je mesec april, godišnje deoba je " +

godisnjeDoba + ".");

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 67/236

15

Ugnježdena naredba switch

switch (izraz_spoljasnjeg_switch) {

case 1:

switch (izraz_unutrasnjeg_switch) {

case 0:

System.out.println("unutra je 0");

 break;

case 1:  // ne smeta spoljašnjem switch

System.out.println("unutra je 1");

 break;

}

 break;

case 2:

...

}

16

Poreñenje if i switch

• switch proverava samo jednakost, a if proizvoljan

logički izraz

• switch  je efikasniji od ugnježdenih if else if

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 68/236

17

Naredbe ciklusa

• Izvršavanje (ponavljanje) jedne naredbe ili bloka naredbipotreban broj puta, zavisno od uslova

• Naredbe ciklusa (petlje)

– while

– do while

– for

18

Petlja while

• Opšti oblik while petlje

while(uslov )

telo_petlje

• uslov  je proizvoljan logički izraz

• telo_petlje  je jedna naredba (može biti i prazna

naredba) ili blok naredbi

• telo_petlje se ponavlja sve dok uslov ima

vrednost true

• while petlja je sa proverom na vrhu, tj. ako uslov 

ima vrednost false pri prvoj proveri, ne ulazi se upetlju, tj. telo_petlje se ne izvršava nijednom

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 69/236

19

Primer za while petlju

class PrimerZaWhile {

 public static void main(String args[]) {

int n = 5;  // Za n=0 petlja se ne bi izvršila nijednom

while(n > 0) {

System.out.println("Vrednost n je " + n);

n--;

}

}

}

Vrednost n je 5Vrednost n je 4

Vrednost n je 3Vrednost n je 2Vrednost n je 1

20

Primer za while bez tela petlje

class WhileBezTelaPetlje {

 public static void main(String args[]) {

int i = 100, j = 200;

 // U petlji se nalazi sredina izmeñu i i j

while(++i < --j) ;  // Petlja bez tela ima samo znak ";"

System.out.println("Sredina je " + i);

}

}

Sredina je 150

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 70/236

21

Petlja do while

• Opšti oblik do while petljedo

telo_petlje

while(uslov );

• uslov  je proizvoljan logički izraz

• telo_petlje  je jedna naredba ili blok naredbi

• do while petlja je sa proverom na dnu:

– telo_petlje se izvršava jednom a posle toga seproverava uslov 

 – ako uslov ima vrednost true, telo_petlje seizvršava ponovo, a ako je vrednost false izlazi se iz

petlje

22

Primer za do while

class PrimerZaDoWhile {

 public static void main(String args[]) {

int n = 5;  // Za n=0 petlja bi se izvršila jednom

do {

System.out.println("Vrednost n je " + n);

n--;

} while(n > 0);

}

}

Vrednost n je 5Vrednost n je 4Vrednost n je 3Vrednost n je 2Vrednost n je 1

Za n=0 rezultat bi bioVrednost n je 0

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 71/236

23

Kraće napisan primer za do while

class PromenjenPrimerZaDoWhile {

 public static void main(String args[]) {

int n = 5;

do

System.out.println("Vrednost n je " + n);

while(--n > 0);

}

}

Vrednost n je 5Vrednost n je 4

Vrednost n je 3Vrednost n je 2Vrednost n je 1

24

Petlja for

• Opšti oblik for petlje

for(inicijalizacija; uslov ; iteracija)

telo_petlje

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 72/236

25

Petlja for

• inicijalizacija  je izraz

 – izvršava se samo jednom na početku pri ulasku u petlju – obično inicijalizuje upravljačku promenljivu petlje

• uslov  je logički izraz, proverava se pre izvršavanja tela

petlje

 – ako je vrednost true izvršava se telo petlje

 – ako je false ne izvršava se telo petlje i izlazi se iz petlje

 – obično zavisi od upravljačke promenljive petlje

• telo_petlje  je jedna naredba ili blok naredbi

• iteracija  je izraz

 – izvršava se posle tela petlje

 – obično menja upravljačku promenljivu petlje

• petlja se nastavlja proverom uslova i izvršavanjem telapetlje i iteracije sve dok je uslov tačan

26

Primer zafor

class PrimerZaFor {

 public static void main(String args[]) {

int n;

for(n=5; n>0; n--)

System.out.println("Vrednost n je " + n);

}

}

Vrednost n je 5Vrednost n je 4Vrednost n je 3Vrednost n je 2Vrednost n je 1

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 73/236

27

Deklaracija promenljive unutar for petlje

class DeklaracijaUnutarFor {

 public static void main(String args[]) {

for(int n=5; n>0; n--)

System.out.println("Vrednost n je " + n);

}

}

• Upravljačka promenljiva petlje se

često deklariše unutarpetlje u delu inicijalizacija

• Takva promenljiva postoji samo unutar petlje

28

Primer: provera da li je broj prost

class ProstBroj {

 public static void main(String args[]) {

int broj = 14;

 boolean prost_broj = true;

for(int i=2; i < broj/2; i++) {

if((broj % i) == 0) {

prost_broj = false;

 break;

}

}

if(prost_broj) System.out.println("Prost");

else System.out.println("Nije prost");

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 74/236

29

Više upravljačkih promenljivih for petlje

class VisePromenljivihForPetlje {

 public static void main(String args[]) {

for(int a=1, b=4; a<b; a++, b--) {

System.out.println("a = " + a);

System.out.println("b = " + b);

}

}

}

• U inicijalizaciji se može deklarisati i inicijalizovati više

upravljačkih promenljivih petlje• U iteraciji se može menjati više promenljivih

• Izrazi u inicijalizaciji i iteraciji se razdvajaju zarezima

a = 1b = 4a = 2b = 3

30

Uslov ne zavisiod upravljačke promenljive for petlje

class ForSaProizvoljnimUslovom {

 public static void main(String args[]) {

 boolean kraj = false;

for(int i=0; !kraj; i++) {

System.out.println("i je " + i);

if(zavrsio()) kraj = true;

}

}

}

i je 0i je 1i je 2i je 3i je 4i je 5

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 75/236

31

for petlja bez inicijalizacije i iteracije

class ForBezInicijalizacijeIIteracije {

 public static void main(String args[]) {

 boolean kraj = false;

int i = 0;

for( ; !kraj; ) {

System.out.println("i je " + i);

if(i == 5) kraj = true;

i++;

}

}

}

• Delovi for petlje inicijalizacija ili iteracija, ili oba dela, mogu

da se izostave

32

Beskonačna for petlja

for( ; ; ) {

// ...

if(uslov )

 break;

// ...

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 76/236

33

Ugneždene for petlje

class UgnjezdeneForPetlje {

 public static void main(String args[]) {

for(int i=0; i<5; i++) {

for(int j=i; j<5; j++)

System.out.print(i);

System.out.println();

}

}

}

000001111

222334

34

Naredbe skoka

• Prekidanje izvršavanja redosleda naredbi i nastavljanjena definisanom mestu, tj. preskakanje naredbi

– break

– continue

– return

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 77/236

35

Naredba break

• Završavanje niza naredbi u naredbi switch, tj. izlazakiz naredbe switch

• Izlazak iz petlje u specijalnim slučajevima (uobičajeno jeda se iz petlje izlazi na osnovu uslova)

• Vaijanta naredbe goto

36

Završavanje niza naredbi u naredbi switchclass PrimerBezBreak {

 public static void main(String args[]) {

for(int i=0; i<9; i++)

switch(i) {

case 0: System.out.println("i = 0");

case 1:

case 2: System.out.println("i < 3"); break;

case 3:

case 4: System.out.println("i < 5"); break;

default: System.out.println("i >= 5");}

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 78/236

37

Izlazak iz for petlje sa break

class BreakPrekidaForPetlju {

 public static void main(String args[]) {

for(int i=0; i<100; i++) {

if(i == 5) break;  // prekidanje petlje kad je i=5

System.out.println("i: " + i);

}

System.out.println("Petlja je završena.");

}

}

i: 0i: 1

i: 2i: 3i: 4Petlja je završena.

38

Izlazak iz while petlje sa break

class BreakPrekidaWhilePetlju {

 public static void main(String args[]) {

int i=0;

while(i<100) {

if(i == 5) break;  // prekidanje petlje kad je i=5

System.out.println("i: " + i);

i++;

}

System.out.println("Petlja je završena.");

}

}i: 0i: 1i: 2i: 3i: 4Petlja je završena.

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 79/2362

39

 break u ugnježdenim petljama

class BreakUUgnjezdenimPetljama { public static void main(String args[]) {

for(int i=0; i<3; i++) {

System.out.print("i = " + i + "; j: ");

for(int j=0; j<100; j++) {

if(j == 10) break;  // prekida unutrašnju petlju za j=10

System.out.print(j + " ");

}

System.out.println();

}

System.out.println("Petlja je završena.");

}

}

• break prekida samo najdublje ugnježdenu petlju u kojoj se nalazi

i = 0; j: 0 1 2 3 4 5 6 7 8 9i = 1; j: 0 1 2 3 4 5 6 7 8 9i = 2; j: 0 1 2 3 4 5 6 7 8 9Petlja je završena.

40

Naredba break sa oznakom• Opšti oblik

oznaka:{

...

if(uslov ) break oznaka;

...

}

• oznaka označava blok naredbi iza kojeg se nastavljaprogram posle izvršavanja označene naredbe break koja

mora biti obuhvaćena blokom

• Može se izaći iz više ugnježdenih blokova

• Ne može se preskočiti blok koji ne obuhvata označenunaredbu break

• Naredba if  je obavezna, inače se naredbe iza naredbe break nikad ne bi izvršavale, što je greška u prevoñenju

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 80/2362

41

Primer za označeni break

class BreakSaOznakom {

 public static void main(String args[]) {

 boolean t = true;prvi: {

drugi: {

treci: {

System.out.println("Pre naredbe break.");

if(t) break drugi;

System.out.println("Posle naredbe break.");

}

System.out.println("U drugom bloku.");

}

System.out.println("U prvom bloku.");

}

}

}

Pre naredbe break.U prvom bloku.

42

Primer za for i označeni break

class ForIBreakSaOznakom {

 public static void main(String args[]) {

spoljna: for(int i=0; i<3; i++) {

System.out.print("i = " + i + ": j:");

for(int j=0; j<100; j++) {

if(j == 10) break spoljna;

System.out.print(j + " ");

}

System.out.println("Ovo se preskače.");

}

System.out.println("Petlja završena.");

}

}

i = 0: j: 0 1 2 3 4 5 6 7 8 9 Petlja završena.

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 81/2362

43

Primer sa greškom

class PogresanBreak { public static void main(String args[]) {

prvi: for(int i=0; i<3; i++) {

System.out.print("i = " + i + ": j:");

}

for(int j=0; j<100; j++) {

if(j == 10) break prvi; // Pogrešno

System.out.print(j + " ");

}

}

}

44

Naredba continue

• Opšti oblik

 petlja {

...

if(uslov ) continue;

...

}

• Služi za preskakanje naredbi tela petlje od naredbecontinue do kraja tela petlje, ali se ne napušta petlja

 – u while i do while petljama posle continue se

prelazi na proveru uslova

 – u for petlji posle continue se prelazi na iteraciju

• Naredba if  je obavezna, inače se naredbe iza naredbecontinue nikad ne bi izvršavale, što je greška u prevoñenju

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 82/2362

45

Primer za continue

class PrimerZaContinue {

 public static void main(String args[]) {

for(int i=0; i<10; i++) {

System.out.print(i + " ");

if(i%2 == 0) continue;

System.out.println("");

}

}

}

0 1

2 3

4 5

6 7

8 9

46

Naredba continue sa oznakom

• Opšti oblik

oznaka: petlja1 {

 petlja2 {

...

if(uslov ) continue oznaka;

...

}

}

• oznaka označava petlju koja će se nastaviti posleizvršavanja označene naredbe continue

• Naredba if  je obavezna, inače se naredbe iza naredbecontinue nikad ne bi izvršavale, što je greška u prevoñenju

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 83/2362

47

Primer za označeni continueclass ContinueSaOznakom {

 public static void main(String args[]) {

spoljna: for(int i=0; i<5; i++) {

for(int j=0; j<5; j++) {

if(j > i) {

System.out.println();

continue spoljna;

}

System.out.print(i + " ");

}

}

System.out.println();

}

}

0

1 1

2 2 2

3 3 3 3

4 4 4 4 4

48

Naredba return

• Opšti oblik

tip ime_metode(lista_parametara) {

...

if(uslov ) return [vrednost];

...

}

• Služi za izlazak iz metode

• Posle naredbe return kontrola se vrać

a pozivaocu metode• Naredba if  je obavezna ako naredba return nije

poslednja naredba u metodi, inače se naredbe iza naredbereturn nikad ne bi izvršavale, što je greška u prevoñenju

• vrednost ne postoji ako je tip metode void, inače postoji

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 84/2362

49

Primer za return

class PrimerZaReturn {

 public static void main(String args[]) {

 boolean t = true;

System.out.println("Pre naredbe return.");

if(t) return; // povratak pozivaocu

System.out.println("Ovo se ne izvršava.");

}

}

Pre naredbe return.

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 85/236

1

Uvod u klase

2

Klasa

• Klasa je novi tip podataka• Klasa je šablon za objekte - definiše oblik i ponašanje

objekta• Objekat je primerak (instanca) klase• Klase koje se izvršavaju imaju metod main

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 86/236

3

Klase i datoteke

• Klasa se piše u jednoj datoteci – i deklaracija i realizacija• Imena datoteke i klase moraju da budu jednaka• Ekstenzija datoteke je *.java

4

Opšti oblik klase (nije kompletan)class imeKlase {

tip promenljiva1;

tip promenljiva2;

...

tip promenljivaN;

tip imeMetode1(lista_parametara) {

telo_metode

}

...

tip imeMetodeM (lista_parametara) {

telo_metode

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 87/236

5

Termini

• Objekat se naziva i instanca klase• Podaci (promenljive) definisane u klasi nazivaju se polja

(takoñe se koriste i termini: promenljive instance, atributiili članovi podaci)

• Kod se piše u metodima• Metodi i promenljive deklarisane u klasi nazivaju se

članovi klase

6

Primer jednostavne klase• Klasa za opisivanje kutije za koju su bitne samo

dimenzije

class Kutija {

double sirina;

double visina;

double duzina;

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 88/236

7

Pravljenje objekta – operator new

• Objekat se pravi operatorom new

• Pravljenjem objekta se u memoriji rezerviše prostor zasmeštanje tog objekta

• Primer:Kutija k1 = new Kutija();

– k1  je referenca koja ukazuje na objekat u memoriji

sirina

visina

duzina

k1

8

Operator tačka "."• Operator tačka služi za pristupanje članu objekta• Primer za pristupanje poljima:

k1.sirina = 1;

k1.visina = 2;

k1.duzina = 3;

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 89/236

9

Primer 1. sa klasom Kutija

//klasa Kutija i PrimerSaKutijom1 mogu, ali ne moraju

//biti u istoj datoteci. Uvek se kreiraju dve .class

//datoteke.

class PrimerSaKutijom1 {

 public static void main(String args[]) {

Kutija k = new Kutija();

// dodela vrednosti poljima

k.sirina = 1;

k.visina = 2;

k.duzina = 3;

// Računanje zapremine kutije

double zapremina = k.sirina * k.visina * k.duzina;

System.out.println("Zapremina je " + zapremina);

}

}

Zapremina je 6.0

10

Primer 2. sa dva objekta klase Kutija

class PrimerSaDveKutije1 { public static void main(String args[]) {

Kutija k1 = new Kutija();

Kutija k2 = new Kutija();

// dodela vrednosti clanovima objekta k1

k1.sirina = 1; k1.visina = 2; k1.duzina = 3;

// dodela vrednosti clanovima objekta k2

k2.sirina = 2; k2.visina = 4; k2.duzina = 5;

// Izračunavanje i ispisivanje zapremina

double z = k1.sirina * k1.visina * k1.duzina;

System.out.println("Zapremina k1 je " + z);

z = k2.sirina * k2.visina * k2.duzina;

System.out.println("Zapremina k2 je " + z);

}

}

Zapremina k1 je 6.0Zapremina k2 je 40.0

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 90/236

11

Reference i objekti

• Deklaracija promenljiveKutija k1;

• Postoji samo referenca k1,a objekat još nije napravljen

• Stvaranje objektak1 = new Kutija();

• Operator new kreira objekat, tj.rezerviše prostor u memoriji začuvanje objekta

• Referenca k1 ukazuje na objekat• Preko refernce se pristupa objektu

 

k1 je null 

sirina

visina

duzina

k1

12

Reference i objektiKutija k1 = new Kutija();

Kutija k2;

• Referenca k2 ne ukazuje naobjekat

k2 = k1;

• Reference k1 i k2 sad imaju istevrednosti, tj. ukazuju na isti objekat• Kopiranje reference ne kopira

objekat

 

sirina

visina

duzina

k1

k2 je null 

sirina

visinaduzina

k1

k2

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 91/236

13

Reference i objekti - nastavak

k1 = new Kutija();

• Kreiran je još jedan objekat na kojisad ukazuje referenca k1

k2 = new Kutija();

• Kreiran je treći objekat na koji sadukazuje referenca k2

• Na prvi objekat više ne ukazuje

nijedna referenca i njemu ne možeda se pristupi

 

sirinavisina

duzina

k1

k2

sirina

visina

duzina

sirina

visina

duzina

k1

k2

sirinavisina

duzina

sirinavisina

duzina

14

Opšti oblik primene operatora new

ImeKlase promenljiva = new ImeKlase();

• ImeKlase označava tip promenljive• ImeKlase() označava konstruktor

• Operator new dodeljuje memoriju dinamički

• Količina memorije je ograničena• Ako nema dovoljno memorije da se kreira objekat javlja

se izuzetak• Operator new se ne koristi za proste tipove ( byte,short, int, long, float, double, char,

 boolean).Promenljive ovih tipova nisu objekti.

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 92/236

15

Osnovno o konstruktorima

• Konstruktor definiše šta se radi pri stvaranju objekta

• Ako u klasi nije napisan konstruktor Java obezbeñujepodrazumevani konstruktor

• Klasa može da ima više konstruktora

16

Metodi• Opšti oblik metodatip imeMetoda(lista_parametara) {

telo_metoda

}

• tip  je tip podatka koji vraća metod; ako metod ne vraća vrednosttip metoda je void

• imeMetoda  je identifikator• lista_parametara  je niz parova tip identifikator 

razdvojenih zarezima, a može biti prazna

• Parametri su promenljive koje prihvataju vrednosti argumenataprosleñenih metodu u trenutku pozivanja• Metod vraća vrednost pomoću naredbe return

return vrednost;

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 93/236

17

Šta je loše u klasi Kutija?

• U klasi Kutija nije ugrañeno "znanje" kako se izračunava zapremina,pa bi to znanje moralo da se ugradi u svaku klasu koja radi saklasom Kutija, ako je potrebna zapremina objekta tipa Kutija

• Ne postoji dobar način da se postave početne vrednosti polja, ili dase promene vrednosti (pristupa se poljima direktno)

class Kutija {

double sirina;

double visina;

double duzina;

}

18

Metod za izračunavanje zapremine u klasi Kutija

• U metodu zapremina direktno se pristupa poljima pošto je imetod zapremina član klase Kutija

• Tip vrednosti koji vraća metod mora da bude kompatibilan sa tipommetoda

• Tip promenljive koja prihvata vrednost koju vraća metod mora bitikompatibilan sa tipom metoda

class Kutija {

double sirina;

double visina;

double duzina;

double zapremina() {

return sirina * visina * duzina;

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 94/236

19

Primer: klasa Kutija ima metod zapremina

class PrimerSaDveKutije2 {

 public static void main(String args[]) {Kutija k1 = new Kutija();

Kutija k2 = new Kutija();

// dodela vrednosti clanovima objekta k1

k1.sirina = 1; k1.visina = 2; k1.duzina = 3;

// dodela vrednosti clanovima objekta k2

k2.sirina = 2; k2.visina = 4; k2.duzina = 5;

// Izračunavanje i ispisivanje zapremina

double z = k1.zapremina();

System.out.println("Zapremina k1 je " + z);

z = k2.zapremina();

System.out.println("Zapremina k2 je " + z);

}

}

20

Kraći način pisanja u prethodnom primeru• Zapremina se izračunavala samo da bi se ispisala na

ekranu, i korišćene su dve naredbedouble z = k1.zapremina();

System.out.println("Zapremina je " + z);

• Prethodne dve naredbe se mogu zameniti jednomSystem.out.println("Zapremina je " + k1.zapremina());

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 95/236

21

Metod za postavljanje vrednosti polja u klasi Kutija

class Kutija {

double sirina;

double visina;

double duzina;

double zapremina() {

return sirina * visina * duzina;

}

void postaviDimenzije(double s, double v, double d){

sirina = s;

visina = v;

duzina = d;

}

}

22

Primer: klasa Kutija ima metod postaviDimenzije

class PrimerSaDveKutije3 {

 public static void main(String args[]) {

Kutija k1 = new Kutija();

Kutija k2 = new Kutija();

// dodela vrednosti clanovima objekta k1

k1.postaviDimenzije(1, 2, 3);

// dodela vrednosti clanovima objekta k2

k2.postaviDimenzije(2, 4, 5);

// Izračunavanje i ispisivanje zapremina

System.out.println("Zapremina k1 je " +

k1.zapremina());System.out.println("Zapremina k2 je " +

k2.zapremina());

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 96/236

23

Parametri i argumenti

• Parametar je promenljiva deklarisana u listi parametarametoda i kao promenljiva postoji samo unutar metoda

• Argument je vrednost koja se prosleñuje metodu pripozivanju metoda

• Parametar dobija (prihvata) vrednost argumenta

24

Konstruktori• Konstruktor može da inicijalizuje objekat odmah posle

stvaranja objekta, i u tom slučaju ne mora se pozivatimetod za postavljanje vrednosti poljima

• Konstruktor ima isto ime kao i klasa• Za konstruktore se ne piše tip jer se podrazumeva da

konstruktor vraća tip klase• Ako se ne napiše konstruktor, automatski postoji

podrazumevani konstruktor koji svim poljima dodeljuje

vrednost nula• Ako se napiše konstruktor ne može se više koristiti

podrazumevani konstruktor

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 97/236

25

Konstruktor sa parametrima u klasi Kutijaclass Kutija {

double sirina;double visina;

double duzina;

// Konstruktor sa listom parametara

Kutija(double s, double v, double d) {

sirina = s;

visina = v;

duzina = d;

}

double zapremina() {

return sirina * visina * duzina;

}

}

26

Konstruktor sa parametrima u klasi Kutija• U klasi Kutija koja ima konstruktor sa parametrima ne

mora postojati metod za postavljanje dimenzija, ako sepretpostavi da objektu Kutija ne treba menjati dimenzije

• Korišćenje podrazumevanog konstruktora u ovoj klasiizaziva grešku u prevoñenju programa

• Može se napisati više konstruktora u jednoj klasi(sledeće poglavlje)

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 98/236

27

Primer: korišćenje konstruktora sa parametrima

class PrimerSaDveKutije4 {

 public static void main(String args[]) {

Kutija k1 = new Kutija(1, 2, 3);

Kutija k2 = new Kutija(2, 4, 5);

// Izračunavanje i ispisivanje zapremina

System.out.println("Zapremina k1 je " +

k1.zapremina());

System.out.println("Zapremina k2 je " +

k2.zapremina());

}

}

28

Rezervisana reč this

• Koristi se unutar metoda da ukaže na objekat za koji je metod pozvan• Primer za konstruktor klase Kutija:

Kutija(double s, double v, double d) {

sirina = s;

visina = v;

duzina = d;

}

 // Gornji konstruktor promenjen tako da se (nepotrebno) koristi this

Kutija(double s, double v, double d) {this.sirina = s;

this.visina = v;

this.duzina = d;

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 99/236

29

Skrivanje polja

• Ne mogu postojati dve lokalne promenljive sa istimimenom

• Lokalna promenljiva ili parametar metoda mogu imatiisto ime kao i polje – lokalna promenljiva (ili parametar) skriva polje – polju se može pristupiti pomoću rezervisane reči this

• Primer u kojem je korišćenje this obaveznoKutija(double sirina, double visina, double duzina){

this.sirina = sirina;

this.visina = visina;

this.duzina = duzina;

}

30

Sakupljanje smeća (Garbage collection)• Operator new rezerviše (dodeljuje) memoriju objektu

• Programer ne mora da vodi računa o oslobañanjumemorije

• Oslobañanje memorije – ako više nijedna referenca ne ukazuje na objekat, taj

objekat više nije potreban i može se osloboditi memorijakoju on zauzima

 – oslobañanje memorije radi sakupljač smeća koji se

povremeno uključuje

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 100/236

31

Metod finalize

• Koristi se za oslobañanje resursa koji ne potiču iz Jave,npr. pokazivač na datoteku, Windows font, ... kad seuništava objekat koji je rezervisao te resurse

• Metod finalize se poziva neposredno pre nego štosakupljač smeća uništi objekat

• Metod finalize se ne poziva kad neki objekat izañe

iz opsega važenja• Opšti oblik metoda finalize

 protected void finalize() {

kod_za_finalizaciju

}

32

Stek• Stek je memorija koja privremeno čuva podatke• Podatak koji se poslednji stavi na stek prvi se uzme sa

steka, i obrnuto podatak koji je prvi stavljen na stekposlednji će se uzeti

• Stek ima operacije za stavljanje na stek (push) iuzimanje sa steka (pop)

• Postoji pokazivač koji pokazuje na tekuću vrednost nasteku (vrh steka)

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 101/236

33

Jednostavna klasa – ilustracija stekaclass Stack {

int stck[] = new int[10];int vrh;

Stack() {

vrh = -1; // Inicijalizacija vrha steka

}

// Dodavanje jedne vrednosti na stek

void push(int broj) {

if(vrh == 9)

System.out.println("Stek je popunjen.");

else

stck[++vrh] = broj;

}

34

Jednostavna klasa, ilustracija steka – nastavak

// Uzimanje jedne vrednosti sa steka

int pop() {

if(vrh < 0) {

System.out.println("Stek je prazan.");

return 0;

}

else

return stck[vrh--];

}

}

• U realnom slučaju umesto naredbe za štampanje koristiobi se izuzetak

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 102/236

35

Primer rada jednostavne klase za stek

class PrimerRadaSteka {

 public static void main(String args[]) {

Stack stack1 = new Stack();

Stack stack2 = new Stack();

// Stavljanje na stek

for(int i=0; i<10; i++) stack1.push(i);

for(int i=10; i<20; i++) stack2.push(i);

// Uzimanje sa steka

System.out.println("Stek stack1:");

for(int i=0; i<10; i++)

System.out.println(stack1.pop());

System.out.println("Stek stack2:");

for(int i=0; i<10; i++)

System.out.println(stack2.pop());

}

}

36

RezultatStek stck1:98765432

10

Stek stck2:1918171615141312

1110

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 103/236

1

Klase

2

Preklapanje metoda

• Dva ili više metoda u klasi mogu da imaju isto ime i to sezove preklapanje metoda (method overloading)

• Preklopljeni metodi moraju da se razlikuju po tipuparametara ili po broju parametara (ili po oba)

• Tip preklopljene metode nije bitan tj. ne pravi se razlikaizmeñu preklopjenih metoda na osnovu tipa koji metodavraća kao rezultat

• Polimorfizam

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 104/236

3

Primer klase sa preklopljenim metodom

 public class Preklapanje {

void test(){

System.out.println("Bez parametara");

}

void test(int a){

System.out.println("Parametar int, a: " + a);

}

void test(int a, int b){

System.out.println("Parametri int, int: a, b: "+a+" "+b);

}

double test(double a){

System.out.println("Parametar double, a = " + a);

return a;

}

void test(double a){ //?

System.out.println("Parametar double, a = " + a);

}

}

4

Ilustracija rada klase sa preklopljenim metodom

 public class PreklapanjeMain {

 public static void main(String[] args){

Preklapanje obj = new Preklapanje();

obj.test();

int i = 5;

obj.test(i);

// Greška, metod sa par. int ne vraća rezultat

//double d = obj.test(i);

double d = obj.test((double)i);

 byte b = 4;

obj.test(b);

obj.test(1,2);float f = 3.0f;

obj.test(f);

}

}

Rezultat izvršavanja

programa je:

Bez parametara

Parametar int, a: 5

Parametar double, a = 5.0

Parametar int, a: 4

Parametri int, int, a, b: 1 2Parametar double, a = 3.0

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 105/236

5

Pozivanje preklopljenih metoda

• Koji se metod poziva odreñuje se na osnovu broja i / ilitipova argumenata

• Automatska konverzija

• Odreñivanje koji od preklopljenih metoda se poziva radise u vreme prevo ñ enja programa

6

Preklapanje konstruktora

• Konstruktori se mogu preklopiti, slično kao i metodi

 – Preklopljeni konstruktori moraju da se razlikuju po tipuparametara ili po broju parametara (ili po oba)

 – Može se napisati i kostruktor bez parametara

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 106/236

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 107/236

9

Upotreba metoda za postavljanje vrednosti polja

• Metod postaviDimenzije u klasi Kutija treba dapostoji u sledećim slučajevima:

 – ako postoji konstruktor bez parametara, zato što npr. utrenutku kad se pravi objekat nisu poznate dimenzijeobjekta, pa ih treba naknadno postaviti

 – ako ima smisla da se objektu kutije menjaju dimenzije

10

Primer za Kutiju sa preklopljenim konstruktorima

class PrimerPreklapanjeKonstruktora1 { public static void main(String args[]) {

Kutija k1 = new Kutija(1, 2, 3);

Kutija k2 = new Kutija();

Kutija k3 = new Kutija(2);

// Izračunavanje i ispisivanje zapremina

System.out.println("Zapremina k1 je " +

k1.zapremina());

System.out.println("Zapremina k2 je " +

k2.zapremina());

System.out.println("Zapremina k3 je " +

k3.zapremina());

}

}

Zapremina k1 je 6.0

Zapremina k2 je 0.0

Zapremina k3 je 8.0

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 108/236

11

Pozivanje preklopljenih konstruktora

• Važi isto pravilo kao i kod metoda – koji se konstruktor poziva odreñuje se na osnovu broja i / 

ili tipova argumenata

 – odreñivanje koji od preklopljenih konstruktora se pozivaradi se u vreme prevoñenja programa

12

Korišćenje objekta kao parametra

• Objekat se može koristiti kao parametar metode

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 109/236

13

Klasa sa metodom čiji je parametar objekat

class Test {

int a, b;

Test(int i, int j) {

a = i;

b = j;

}

 // Metod equals proverava da li su objekti jednaki

 boolean equals(Test obj) {

if(a == obj.a && b == obj.b) return true;

else return false;

}

}

14

Primer kad je objekat parametar

class PrimerProsledjivanjaObjekta {

 public static void main(String args[]) {

Test obj1 = new Test(10, 2);

Test obj2 = new Test(10, 2);

Test obj3 = new Test(10, 5);

System.out.println("obj1 == obj2: " +

obj1.equals(obj2));

System.out.println("obj1 == obj3: " +

obj1.equals(obj3));

}

}

obj1 == obj2: trueobj1 == obj3: false

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 110/236

15

Konstruktor čiji je parametar objekat

• Konstruktor čiji je parametar objekat može da se iskoristida se napravi kopija postojećeg objekta

16

Klasa Kutija - parametar konstruktora je objekat

class Kutija {

double sirina, visina, duzina;

 // Konstruktor čiji je parametar objekat, ovde služi za kopiranje objekta

Kutija(Kutija obj) {

sirina = obj.sirina;

visina = obj.visina;

duzina = obj.duzina;

}

 // Konstruktor bez parametara

Kutija() {

} // Konstruktor sa parametrima za sve tri dimenzije

Kutija(double s, double v, double d) {

sirina = s; visina = v; duzina = d;

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 111/236

17

Preklapanje konstruktora u klasi Kutija – nastavak

// Konstruktor sa jednim parametrom (kutija je kocka)

Kutija(double stranica) {sirina = visina = duzina = stranica;

}

// Metod za postavljanje vrednosti polja (dimenzija kutije)

void postaviDimenzije(double s, double v, double d){

sirina = s;

visina = v;

duzina = d;

}

// Metod za izračunavanje zapremune kutije

double zapremina() {

return sirina * visina * duzina;

}

}

18

Primer za Kutiju sa preklopljenim konstruktorima

class PrimerPreklapanjeKonstruktora2 {

 public static void main(String args[]) {

Kutija k1 = new Kutija(1, 2, 3);

Kutija k2 = new Kutija();

Kutija k3 = new Kutija(2);

Kutija k4 = new Kutija(k1); // k4 je kopija objekta k1

// Izračunavanje i ispisivanje zapremina

System.out.println("Zapremina k1 je " + k1.zapremina());

System.out.println("Zapremina k2 je " + k2.zapremina());

System.out.println("Zapremina k3 je " + k3.zapremina());

System.out.println("Zapremina k4 je " + k4.zapremina());

}

}

Zapremina k1 je 6.0

Zapremina k2 je 0.0

Zapremina k3 je 8.0

Zapremina k4 je 6.0

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 112/236

19

Prosleñivanje argumenata u metode

• Argumenti izmeñu metoda koji poziva (pozivajući) imetoda koji se poziva (pozvani) prosleñuju se prekosteka

• Pozivajući metod stavlja argumente na stek

• Pozvani metod uzima argumente sa steka

• Tek kad se pozvani metod završi pomera se pokazivačvrha steka

20

Prosleñivanje argumenata u metode

• Prema tome da li se prosleñuju argumenti prostih tipovaili klasnih tipova, može se govoriti o dva načinaprosleñivanja (pozivanja) argumenata:

 – po vrednosti

 – po referenci

• Po vrednosti se prosleñuju prosti tipovi (na stek sestavlja vrednost argumenta)

• Po referenci se prosleñuju klasni tipovi tj. objekti (na stekse stavlja referenca na objekat)

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 113/236

21

Prosleñivanje (pozivanje) po vrednosti

class Test {

int izracunaj(int i, int j) {

i *= 3;

j /= 2;

return i * j;

}

}

• Tip argumenta je neki od prostih tipova

• Po završetku metoda vrednost prosleñenog argumenta

ostaje nepromenjena

22

Prosleñivanje (pozivanje) po vrednosti

class PozivanjePoVrednosti {

 public static void main(String args[]) {

Test obj = new Test();

int x = 2, y = 10;

System.out.println("Pre pozivanja x, y: " +

x + " " + y);

int c = obj.izracunaj(x, y);

System.out.println("Posle pozivanja x, y : " +

x + " " + y);

System.out.println("c: " + c);

}

}

Pre pozivanja x, y : 2 10Posle pozivanja x, y : 2 10c: 30

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 114/236

23

Objašnjenje prosleñivanja (pozivanja) po vrednosti

• Argument je prost tip čija se vrednost prilikom pozivanjametoda stavlja na stek

• Pozvani metod uzima vrednost sa steka, dodeljuje jeparametru

• Parametru se može menjati vrednost u metodu, ali tapromena nema uticaja na promenljivu čija je vrednostprosleñena parametru

24

Prosleñivanje (pozivanje) po referenci

• Tip argumenta je klasni tip

• Metod koji poziva stavlja argument – referencu(tj. vrednost reference) na stek

• Pozvani metod uzima vrednost reference sa steka idodeljuje je parametru

• Parametar ukazuje na isti objekat na koji ukazuje iargument

• Unutar metoda može se promeniti objekat kojem se

pristupa preko parametra• Sama referenca se prosleñuje po vrednosti

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 115/236

25

Prosleñivanje po referenci

• Vrednost argumenta (promenljive koja postoji u metodukoji poziva) je kopirana u parametar (promenljivu kojapostoji u pozvanom metodu), tako da ukazuju na istiobjekat koji je negde u memoriji

• Objekat se može promeniti unutar metoda

 

polje 0

polje 1

. . .

argument

parametar polje N

26

Prosleñivanje (pozivanje) po referenciclass Test {

int a, b;

Test(int i, int j) {

a = i;

b = j;

}

int izracunaj(Test o) {

o.a *= 3;

o.b /= 2;

return o.a * o.b;

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 116/236

27

Prosleñivanje (pozivanje) po referenci

class PozivanjePoReferenci { public static void main(String args[]) {

Test obj = new Test(2, 10);

System.out.println("Pre pozivanja obj.a, obj.b: "

+ obj.a + " " + obj.b);

int c = obj.izracunaj(obj);

System.out.println("Posle pozivanja obj.a, obj.b: "

+ obj.a + " " + obj.b);

System.out.println("c: " + c);

}

}

Pre pozivanja obj.a, obj.b: 2 10Posle pozivanja obj.a, obj.b: 6 5c: 30

28

Objekat kao rezultat metoda

• Unutar metoda može da se napravi objekat i da se

referenca na taj novi objekat vrati kao rezultat metoda

class Test {

int a;

Test(int i) {

a = i;

}

Test uvecajZaTri() {

Test privremeniObj = new Test(a + 3);

return privremeniObj;

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 117/236

29

Primer za objekat koji je rezultat metoda

class VracanjeObjekta {

 public static void main(String args[]) {Test obj1 = new Test(2);

Test obj2;

obj2 = obj1.uvecajZaTri();

System.out.println("obj1.a: " + obj1.a);

System.out.println("obj2.a: " + obj2.a);

obj2 = obj2.uvecajZaTri();

System.out.println("Drugo uvećanje obj2.a: "

+ obj2.a);

}

}

obj1.a: 2obj2.a: 5Drugo uvećanje obj2.a: 8

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 118/236

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 119/236

3

Rekurzivan metod

class Faktorijel {

// faktorijel je rekurzivan metod

int faktorijel(int n) {

int rezultat;

if(n==1)  // uslov za završavanje rekurzivnog pozivanja

return 1;

rezultat = faktorijel(n-1) * n;

return rezultat;

}

}

• U rekurzivnom metodu mora postojati uslov zazavršavanje rekurzivnog pozivanja

4

Primer za rekurzivan metod

class PrimerRekurzije {

 public static void main(String args[]) {

Faktorijel f = new Faktorijel();

for(int i=1; i<=5; i++)

System.out.println(i + "! = " +

f.faktorijel(i));

}

}

1! = 12! = 2

3! = 6

4! = 24

5! = 120

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 120/236

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 121/236

7

Rekurzivni metodi

• Neki problemi su takvi da se lakše (prirodnije) rešavajurekurzivnim metodima, odnosno jednostavniji je kod zarekurzivno nego za iterativno rešenje

• Problemi koji po prirodi nisu rekurzivni se takoñe mogurešiti rekurzivno, npr. ispisivanje elemenata niza

8

Rekurzivno ispisivanje niza

class RekIspisNiza {

int vrednosti[];

RekIspisNiza(int i) {

vrednosti = new int[i];

}

// rekurzivan metod za ispisivanje niza

void ispisivanjeNiza(int i) {

if(i==0) return;

else ispisivanjeNiza(i-1);

System.out.println("[" + (i-1) + "] = " +

vrednosti[i-1]);

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 122/236

9

Ilustracija rekurzivnog ispisivanja niza

class IlustracijaRekurzivnogIspisivanja {

 public static void main(String args[]) {

RekIspisNiza obj = new RekIspisNiza(5);

for(int i=0; i<5; i++) obj.vrednosti[i] = i;

obj.ispisivanjeNiza(5);

}

}

[0] = 0

[1] = 1

[2] = 2

[3] = 3

[4] = 4

10

Kapsuliranje

• Povezivanje podataka i koda koji sa njima radi

• Upravljanje pristupom – koji delovi programa mogu dapristupaju članovima klase

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 123/236

11

Upravljanje pristupom

• Način pristupanja članu klase odreñuje se specifikatorompristupa

• Specifikator pristupa piše se u deklaraciji člana klaseispred specifikatora tipa

• Specifikatori pristupa su

 –  public za javni način pristupanja

 –  protected za zaštićeni način pristupanja

 –  private za privatni način pristupanja

 – bez specifikatora za standardni način pristupanja

12

Specifikatori pristupa

• public  – član klase je dostupan svim drugim klasama

koje je koriste

• protected  – biće objašnjen kasnije

• private  – član klase se može koristiti samo unutar

svoje klase

• standardni način pristupanja – unutar paketa kojempripada klasa pristup je javan, izvan paketa pristup jeonemogućen

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 124/236

13

Specifikator pristupa se piše ispred specifikatora tipa

 public int i;

 private double j;

 private int nazivMetoda(int a, char b) {

telo_metoda

}

14

Ilustracija javnog i privatnog pristupanja

class Test {

int a; // podrazumevani pristup

 public int b; // javni pristup

 private int c; // privatni pristup

// postavljanje vrednosti polja c

void setC(int i) {

c = i;

}

// dohvatanje vrednosti polja c

int getC() {

return c;

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 125/236

15

Ilustracija javnog i privatnog pristupanja

class ProbaPristupa {

 public static void main(String args[]) {

Test ob = new Test();

// Poljima a i b se može pristupati direktno

ob.a = 10;

ob.b = 20;

// Polju c se ne može pristupati direktno

// Ovo bi bila greška u prevoñenju

//ob.c = 100;

ob.setC(100);

System.out.println("a, b, and c: " + ob.a +

" " + ob.b + " " + ob.getC());}

}

16

Popravljena klasa za stek

class Stack {

 private int stck[] = new int[10];

 private int vrh;

 public Stack() {

vrh = -1; // Inicijalizacija vrha steka

}

// Dodavanje jedne vrednosti na stek

 public void push(int broj) {

if(vrh == 9)System.out.println("Stek je popunjen.");

else

stck[++vrh] = broj;

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 126/236

17

Popravljena klasa za stek – nastavak

// Uzimanje jedne vrednosti sa steka

 public int pop() {

if(vrh < 0) {

System.out.println("Stek je prazan.");

return 0;

}

else

return stck[vrh--];

}

}

• Klasa je popravljena tako da se mogu koristiti samometodi push i pop, tj. ne mogu se direktno menjativrh i stck

18

Primer rada jednostavne klase za stek

class PrimerRadaSteka { public static void main(String args[]) {

Stack stack1 = new Stack();

Stack stack2 = new Stack();

// Stavljanje na stek

for(int i=0; i<10; i++) stack1.push(i);

for(int i=10; i<20; i++) stack2.push(i);

// Uzimanje sa steka

System.out.println("Stek stack1:");

for(int i=0; i<10; i++)

System.out.println(stack1.pop());

System.out.println("Stek stack2:");

for(int i=0; i<10; i++)

System.out.println(stack2.pop());

//stack1.vrh = -2; //ove dve naredbe su neispravne,

//stack2.stck[3] = 10; //pristupaju privatnim članovima

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 127/236

19

Rezervisana reč static

• Klasa može imati član koji se može koristiti samostalno,odnosno nezavisan je od objekata

• Deklaracija takvih članova sadrži rezervisanu rečstatic, a članovi se nazivaju statički

• Statički članovi mogu biti i podaci i metodi

• Statički članovi se mogu koristiti i kad nije napravljennijedan objekat klase

20

Statički članovi podaci (polja)

• Statička polja se ponašaju kao globalne promenljive

• Objekat ne sadrži statička polja, tj. pri pravljenju objektane rezerviše se prostor za statička polja, već samo zaona koja nisu statička

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 128/236

21

Statički metodi

• Statički metodi mogu da pristupaju samo statičkimpoljima

• Statički metodi mogu da pozivaju samo statičke metode

• U statičkim metodima ne mogu da se koriste rezervisanereči this i super

22

Primer za statičke članove: objekti imaju redni broj

class RedniBroj {

 private static int broj_objekata = 0;

 private int id;

 public RedniBroj() { id = broj_objekata++; } public int id() { return id; }

 public static int brojObjekata() {

return broj_objekata;

}

}

• Potrebno je da se izbroje objekti koji su napravljeni, i dasvaki napravljeni objekat ima redni broj:

 – broj napravljenih objekata je statički član

 – u konstruktoru se dodeljuje redni broj novom objektu iinkrementira se ukupan broj napravljenih objekata

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 129/236

23

Primer: korišćenje objekata koji imaju redni broj

class PrimerZaObjekatSaRednimBrojem {

 public static void main(String[] args) {

RedniBroj objA = new RedniBroj();

RedniBroj objB = new RedniBroj();

RedniBroj objC = new RedniBroj();

System.out.println("Ukupan broj objekata: " +

RedniBroj.brojObjekata());

System.out.println("objA, RB: " + objA.id());

System.out.println("objB, RB: " + objB.id());

System.out.println("objC, RB: " + objC.id());

}

}Ukupan broj objekata: 3

objA, RB: 0

objB, RB: 1

objC, RB: 2

24

Inicijalizacija statičkih promenljivih

• Statičko polje se može inicijalizovati prilikom deklaracije

• Ako se ne uradi inicijalizacija, statičko polje će imativrednost 0

• U klasi može postojati statički blok u kojem se moguinicijalizovati statičke promenljive

• Statički blok se izvršava samo jednom, kad se klasaučita prvi put

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 130/236

25

Primer za statičke promenljive, blokove i metodeclass StatickiClanoviM {

static int a = 3;

static int b;

static void statickiMetod(int x) {

System.out.println("x = " + x);

System.out.println("a = " + a);

System.out.println("b = " + b);

}

static {

System.out.println("Statički blok je izvršen.");

b = a * 2;

}

 public static void main(String args[]) {statickiMetod(10);

}

}

26

Rezultat izvršavanja klase StatickiClanoviM

Statički blok je izvršen.

x = 10

a = 3

b = 6

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 131/236

27

Drugi primer za statičke članove

 public class StatickiClanovi {

StatickiClanovi() {

System.out.println("Konstruktor izvršen.");

}

int i;

static int a = 3;

static int b;

static void statickiMetod(int x) {

System.out.println("x = " + x);

System.out.println("a = " + a);

System.out.println("b = " + b);

}

static {

System.out.println("Statički blok izvršen.");

}

}

28

Ilustracija rada drugog primera za statičke članove

 public class IlustracijaStatic {

 public static void main(String[] args) {

StatickiClanovi sc1;

System.out.println("Prvo ispisivanje.");

sc1 = new StatickiClanovi(); //Ovde se prvo izvrši statički blok

System.out.println("sc1.i = " + sc1.i);

StatickiClanovi sc2 = new StatickiClanovi();

sc2.i = 8;

System.out.println("sc2.i = " + sc2.i);

}

}

Prvo ispisivanje.Statički blok izvršen.

Konstruktor izvršen.

sc1.i = 0

Konstruktor izvršen.

sc2.i = 8

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 132/236

29

Pristupanje statičkim članovima

• Statičkim članovima se može pristupati pre nego što jenapravljen objekat klase

• Javnim statičkim članovima se pristupa preko imenaklase i operatora tačka<ime_klase>.<statički_član>

• Statičkim članovima se može pristupati i preko referencena objekat, ali to treba izbegavati

 – kada se članu pristupa preko imena klase jasno je da sepristupa statičkom članu

 – kada se statičkom članu pristupa preko reference nije

odmah uočljivo da li je član statički ili ne

30

Pristupanje statičkom metodu preko imena klase

 public class PristupanjePrekoImenaKlase {

 public static void main(String[] args) {

StatickiClanovi.statickiMetod(5);

StatickiClanovi.statickiMetod(10);

}

}

Statički blok izvršen.

x = 5

a = 3

b = 0

x = 10

a = 3

b = 0

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 133/236

31

Rezervisana reč final

• Može se specificirati da se vrednost promenljive nemože promeniti, tj. promenljiva je u stvari konstanta

• Za ovo se koristi rezervisana reč final

• Vrednost konstante se mora zadati pri deklaraciji

• Imena konstanti se obično pišu velikim slovima

final int OVO_JE_KONSTANTA = 5;

final double MINIMUM = 1.7;

• Rezervisana reč final može da se primeni i na

metode i na klase, a značenje će biti objašnjeno kasnije

32

Dužina niza

• Nizovi se realizuju kao objekti

• Svi nizovi imaju polje length čija vrednost pokazuje

koliko elemenata ima niz

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 134/236

33

Ilustracija dužine niza

class DuzinaNiza {

 public static void main(String args[]) {

int a1[] = new int[10];

int a2[] = {3, 5, 7, 1, 8, 99, 44, -10};

int a3[] = {4, 3, 2, 1};

System.out.println("Dužina niza a1 je " + a1.length);

System.out.println("Dužina niza a2 je " + a2.length);

System.out.println("Dužina niza a3 je " + a3.length);

}

}

Dužina niza a1 je 10

Dužina niza a2 je 8

Dužina niza a3 je 4

34

Popravljanje klase Stek

• Primer za klasu stek koja je ranije korišćena može da sepopravi tako što se omogući pravljenje steka zadateveličine

• Veličina steka treba da bude parametar konstruktora

• Koristi se polje length koje sadrži dužinu niza

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 135/236

35

Popravljena klasa za stek – stek različite dužine

class Stack {

 private int stck[]; private int vrh;

 public Stack(int velicina) {

stck = new int[velicina];

vrh = -1;

}

// Dodavanje jedne vrednosti na stek

 public void push(int broj) {

if(vrh == stck.length-1)

System.out.println("Stek je popunjen.");

else

stck[++vrh] = broj;

}

36

Popravljena klasa za stek – nastavak

// Uzimanje jedne vrednosti sa steka

 public int pop() {

if(vrh < 0) {

System.out.println("Stek je prazan.");

return 0;

}

else

return stck[vrh--];

}

}

• U odnosu na prethodu verziju, klasa je popravljena takoda se može napraviti stek proizvoljnog kapaciteta

• Kapacitet je parametar konstruktora, a u prethodnojverziji kapacitet je bio 10)

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 136/236

37

Primer rada jednostavne klase za stekclass PrimerRadaSteka {

 public static void main(String args[]) {

Stack stack1 = new Stack(5);

Stack stack2 = new Stack(8);

// Stavljanje na stek

for(int i=0; i<5; i++) stack1.push(i);

for(int i=0; i<8; i++) stack2.push(i);

// Uzimanje sa steka

System.out.println("Stek stack1:");

for(int i=0; i<5; i++)

System.out.println(stack1.pop());

System.out.println("Stek stack2:");

for(int i=0; i<8; i++)System.out.println(stack2.pop());

}

}

38

Ugnježdene klase

• Unutar jedne klase (klasa A) može da se definiše drugaklasa (klasa B), i tada je klasa B ugnježdena u klasu A, aklasa A je obuhvatajuća klasa

• Za ugnježdenu klasu zna samo obuhvatajuća klasa

 – ugnježdena klasa se ne može koristiti izvan obuhvatajućeklase

• Ugnježdena klasa može da pristupa svim članovimaobuhvatajuće klase, čak i privatnim članovima

• Obuhvatajuća klasa ne može da pristupa poljima(članovima podacima) unutrašnje klase, ali može dapristupa metodima unutrašnje klase, bez obzira naspecifikatore pristupa

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 137/2362

39

Vrste ugnježdenih klasa

• Ugnježdena klasa može biti statička – Statička ugnježdena klasa se retko koristi

 – Ne može direktno da pristupa poljima obuhvatajuće klase,već samo preko reference (objekta)

• Ugnježdena klasa koja nije statička naziva se unutrašnjaklasa

 – Unutrašnja klasa može da pristupa poljima i metodimaobuhvatajuće klase direktno preko imena polja i metodakao što se radi i u obuhvaćenoj klasi

40

Primer unutrašnje klaseclass Spoljasnja {

int sp_x = 100;

void prikaziUnutrasnju() {

Unutrasnja un = new Unutrasnja();

un.prikazi();

}

// Unutrašnja klasa

class Unutrasnja {

int un_y = 10;

void prikazi() {

System.out.println("sp_x = " + sp_x);

}

} // kraj unutrašnje klase

void prikaziY() {

Unutrasnja un = new Unutrasnja();

System.out.println("un_y = "+un.un_y);  //Greška u prevoñenju

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 138/2362

41

Ilustracija korišćenja klase Spoljasnja

class PrimerSpoljasnja {

 public static void main(String args[]) {

Spoljasnja spoljasnja = new Spoljasnja();

spoljasnja.prikaziUnutrasnju();

}

}

sp_x = 100

42

Unutrašnje klase u bloku

• Unutrašnja klasa može da se definiše i unutar bilo kojegmetoda ili bloka spoljašnje klase

• Oblast važenja unutrašnje klase je blok u kojem jedefinisana

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 139/2362

43

Korišćenje ugnježdenih klasa

• Ugnježdene klase nisu postojale u verziji Java 1.0,uvedene su u verziji 1.1

• Ugnježdene klase se koriste u apletima

44

Osnovno o klasi String

• Klasa String  je ugrañena u Javu

• Služi za rad sa znakovnim nizovima

• Svi znakovni nizovi su objekti klase String

• Objekti tipa String su nepromenljivi

 – Postojećem objektu tipa String ne može da se promeni

znak na nekoj poziciji

 – Pravi se novi znakovni niz sa potrebnim sadržajem

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 140/2362

45

Znakovni niz i niz znakova

• Znakovni niz je objekat klase String

• Niz znakova je niz elemenata tipa char

• Primer za niz znakova

char niz_znakova1[] = new char[5];

• Primer inicijalizacije niza znakova

char niz_znakova2[] = {'a', 'b', 'c', '3'};

• Primer inicijalizacije znakovnog niza

String znakovni_niz1 = "abc3";

46

Operator + za znakovne nizove

• Služi za nadovezivanje (konkatenaciju) znakovnihnizova, tj. objekata tipa String

• Rezultat je novi objekat tipa String čiji je sadržajdobija spajanjem sadržaja dva objekta tipa String

• Primeri:

String str1 = "prvi " + "drugi";

String str2 = "prvi drugi";

String str3 = "prvi ";

String str4 = "drugi";

String str5 = str3 + str4;

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 141/2362

47

Primer nadovezivanja znakovnih nizova

class PrimerZaString1 {

 public static void main(String args[]) {

String strObj1 = "Prvi znakovni niz";

String strObj2 = "Drugi znakovni niz";

String strObj3 = strObj1 + " i " + strObj2;

System.out.println(strObj1);

System.out.println(strObj2);

System.out.println(strObj3);

}

}

Prvi znakovni niz

Drugi znakovni niz

Prvi znakovni niz i Drugi znakovni niz

48

Neki metodi klase String

• Metod za proveru da li dva znakovna niza imaju istisadržaj

 boolean equals(String objekat)

• Metod koji vraća dužinu znakovnog niza

int length()

 – Napomena: nizovi imaju polje length

• Metod koji vraća znak sa zadate pozicije

char charAt(int indeks)

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 142/2362

49

Primer za metode znakovnog niza

class PrimerZaString4 {

 public static void main(String args[]) {

String obj = "Prvi znakovni niz";

System.out.println("Dužina obj je " + obj.length());

System.out.println("Znak na poziciji 0 u obj je: " +

obj.charAt(0));

System.out.println("Znak na poziciji 2 u obj je: " +

obj.charAt(2));

System.out.println("Znak na poslednjoj poziciji " +

(obj.length()-1) + " u obj je: " +

obj.charAt(obj.length()-1));

}

}

Znak na poziciji 0 u obj je: ?

Znak na poziciji 2 u obj je: ?

Znak na poslednjoj poziciji 16 u obj je: ?

50

Primer za metode znakovnog niza

class PrimerZaString2 {

 public static void main(String args[]) {

String obj1 = "Prvi znakovni niz";

String obj2 = "Drugi znakovni niz";

String obj3 = obj1; // obj1 i obj3 ukazuju na isti objekat

if(obj1.equals(obj2))

System.out.println("obj1 i obj2 su jednaki");

else

System.out.println("obj1 i obj2 su različiti");

if(obj1.equals(obj3))

System.out.println("obj1 i obj3 su jednaki");

else

System.out.println("obj1 i obj3 su različiti");

}

}

obj1 i obj2 su različiti

obj1 i obj3 su jednaki

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 143/2362

51

Neki konstruktori klase String

• Klasa String ima više konstruktora meñu kojima su isledeći:

 – Podrazumevani konstuktor

String()

 – Konstruktor čiji je parametar objekat tipa String

String(String objekat)

 – Konstruktor čiji je parametar niz znakova

String(char niz_znakova[])

52

Primer: poreñenje objekata i referenciclass PrimerZaString3 {

 public static void main(String args[]) {

String obj1 = "Prvi znakovni niz";

String obj2 = obj1; // obj1 i obj2 ukazuju na isti objekat

String obj3 = new String(obj1);

System.out.println("Reference obj1 i obj2 ukazuju na

isti objekat: " + (obj1 == obj2));

System.out.println("Reference obj1 i obj3 ukazuju na

isti objekat: " + (obj1 == obj3));

System.out.println("Objekti na koje ukazuju reference

obj1 i obj3 su jednaki: " + obj1.equals(obj3));

}

}

Reference obj1 i obj2 ukazuju na isti objekat: true

Reference obj1 i obj3 ukazuju na isti objekat: false

Objekti na koje ukazuju reference obj1 i obj3 su jednaki: true

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 144/2362

53

Argumenti u komandnoj liniji

class KomandnaLinija {

 public static void main(String args[]) {

for(int i=0; i<args.length; i++)

System.out.println("args[" + i + "]: " +

args[i]);

}

}

java KomandnaLinija 5 proba komandne linije -1 10

args[0]: 5

args[1]: proba

args[2]: komandne

args[3]: linije

args[4]: -1

args[5]: 10

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 145/236

1

Nasleñivanje

2

Nasleñivanje

• Za grupu srodnih pojava može da se napravi klasa ukojoj su sve zajedničke karakteristike srodnih pojava

• Primer: vozila

• Specifičnije klase, za svaku od srodnih pojava, mogu dase izvedu iz opštije kase i da naslede sve njenekarakteristike

• Opštija klasa se naziva natklasa (superclass)

• Klasa koja se izvodi iz natklase naziva se potklasa

(subclass)• Potklasa ima samo jednu natklasu

• Za izvoñenje se koristi rezervisana reč extends

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 146/236

3

Primer izvoñenja (nasleñivanja)class A {

int i, j;

void prikaziIJ() {

System.out.println("i, j: " + i + " " + j);

}

}

// potklasa B se izvodi iz klase A

class B extends A {

int k;

void prikaziK() {

System.out.println("k: " + k);

}

void PrikaziZbir() {

System.out.println("i+j+k: " + (i+j+k));

}

}

4

Pravljenje objekata klasa A i BA objA = new A();

Klasa A (objekat klase A)

ima dva polja: i, j

B objB = new B();

Klasa B (objekat klase B)

ima tri polja: i, j, k

(i, j su nasleñena iz

klase A)

i

 j

objA

i j

k

objB

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 147/236

5

Primer za nasleñivanjeclass PrimerNasledjivanja {

 public static void main(String args[]) {

A objA = new A();

B objB = new B();

objA.i = 10; objA.j = 20;

objB.i = 7; objB.j = 8; objB.k = 9;

System.out.println("Sadržaj objA: ");

objA.prikaziIJ();

System.out.println();

System.out.println("Sadržaj objB: ");

objB.prikaziIJ();

objB.prikaziK();

System.out.println();

System.out.println("Zbir i, j, k iz objB:");

objB.prikaziZbir();

}

}

6

Rezultat izvršavanja PrimerNasledjivanja

Sadržaj objA:

i, j: 10 20

Sadržaj objB:

i, j: 7 8

k: 9

Zbir i, j, k iz objB:i+j+k: 24

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 148/236

7

Kontrola pristupa i nasleñivanje

• Potklasa ne može pristupati privatnim članovimanatklase

8

Primer

class A {

int i;

 private int j;

void postaviIJ(int x, int y) {

i = x;

j = y;

}

}

class B extends A {

int zbir() {

return i + j; // Greška, ovo se ne prevodi}

}

• Klasa B  je nasledila polje j, ali se tom polju ne može pristupitidirektno u klasi B, pošto je polje privatno u klasi A

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 149/236

9

Primer nasleñivanja sa klasom Kutija

• Klasa Kutija će biti osnovna klasa (natklasa)• Iz klase Kuija će biti izvedene dve klase,KutijaSaTezinom i ObojenaKutija

 – Klasa KutijaSaTezinom će naslediti klasu Kutija, iimaće dodatno polje tezina

 – Klasa ObojenaKutija će naslediti klasu Kutija, iimaće dodatno polje boja

10

Klasa Kutija

class Kutija {

double sirina, visina, duzina;

 // Konstruktor čiji je parametar objekat, ovde služi za kopiranje objekta

Kutija(Kutija obj) {

sirina = obj.sirina;

visina = obj.visina;

duzina = obj.duzina;

}

 // Konstruktor bez parametara

Kutija() {

} // Konstruktor sa parametrima za sve tri dimenzije

Kutija(double s, double v, double d) {

sirina = s; visina = v; duzina = d;

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 150/236

11

Klasa Kutija – nastavak

// Konstruktor sa jednim parametrom (kutija je kocka)

Kutija(double stranica) {sirina = visina = duzina = stranica;

}

// Metod za postavljanje vrednosti polja (dimenzija kutije)

void postaviDimenzije(double s, double v, double d){

sirina = s;

visina = v;

duzina = d;

}

// Metod za izračunavanje zapremune kutije

double zapremina() {

return sirina * visina * duzina;

}

}

12

Kutija sa težinom – potklasa klase Kutija

class KutijaSaTezinom extends Kutija {

double tezina;

KutijaSaTezinom(double s, double v, double d,

double t) {

sirina = s;

visina = v;

duzina = d;

tezina = t;

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 151/236

13

Primer za kutiju sa težinomclass PrimerZaKutijuSaTezinom1 {

 public static void main(String args[]) {

KutijaSaTezinom kt1 = new KutijaSaTezinom(1,2,5,3.3);

KutijaSaTezinom kt2 = new KutijaSaTezinom(2,3,4,0.01);

System.out.println("Zapremina kt1: " + kt1.zapremina());

System.out.println("Težina kt1: " + kt1.tezina);

System.out.println();

System.out.println("Zapremina kt2: " + kt2.zapremina());

System.out.println("Težina kt2: " + kt2.tezina);

}

}

Zapremina kt1: ?Težina kt1: ?

Zapremina kt2: ?

Težina kt2: ?

14

Konstruktor klase KutijaSaTezinom je loše napisan

• Konstruktor potklase KutijaSaTezinom  je

KutijaSaTezinom(double s, double v, double d, double t){

sirina = s;

visina = v;

duzina = d;

tezina = t;

}

• Konstruktor natklase Kutija  je

Kutija(double s, double v, double d) {

sirina = s;

visina = v;

duzina = d;

}

• Bolje je da konstruktor podklase KutijaSaTezinom pozovekonstruktor klase Kutija nego da ponavlja sve naredbe koje većpostoje u konstruktor klase Kutija.

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 152/236

15

Rezervisana reč super

• Konstruktor natklase se poziva pomoću rezervisane rečisuper

• Pomoću rezervisane reči super može se pristupiti

članu natklase koji je sakriven članom potklase

16

Popravljena klasa KutijaSaTezinom

class KutijaSaTezinom extends Kutija {

double tezina;

KutijaSaTezinom(double s, double v, double d,

double t) {

super(s, v, d);

tezina = t;

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 153/236

17

Pozivanje konstruktora natklase

• Opšti oblik jesuper(lista_argumenata);

• Ako se u konstruktoru potklase poziva konstruktor natklase, taj pozivmora biti prva naredba u konstruktoru potklase

 – Primer kad nijedan konstruktor nema parametre

ImePotklase() {  // konstruktor potklase

super();  // pozivanje konstruktora natklase

...

}

• Pošto se konstruktori mogu preklapati, metoda super() se može

pozvati na bilo koji način koji je definisan natklasom.

18

Referenciranje objekta potklase

• Promenljivoj natklase može se dodeliti referenca naobjekat bilo koje potklase izvedene iz te natklase

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 154/236

19

Primer referenciranja objekta potklase

class A {int i, j;

}

class B extends A {

int k;

}

20

Primer referenciranja objekta potklase

A refA = new A();

B refB = new B();

refA = refB;

• Referenca natklase A (refA) možeukazivati na objekat potklase B

• Preko refA može se pristupiti samopoljima i, j pošto refA zna samo začlanove koji su definisani u klasi A

• Polju k se ne može pristupiti prekorefA zato što je to polje definisano uklasi B

i

 j

k

refB

i

 j

refA

i

 j

k

refB

i

 j

refA

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 155/236

21

Referenca potklase ne može ukazivati na objekat natklase

A refA = new A();

B refB = new B();

refB = refA; // Greška

• Referenca potklase B zna za polje k(može da pristupi polju k), a to poljene postoji u objektu klase A, pa zatoreferenca potklase B ne možeukazivati na objekat natklase A

i

 j

k

refB

i

 j

refA

i

 j

k

refB

i

 j

refA

22

Primer za referenciranje objekta potklase

class PrimerReferenciranja { public static void main(String args[]) {

Kutija refK = new Kutija(2, 4, 5);

KutijaSaTezinom refKST = new KutijaSaTezinom(2,3,4,0.1);

System.out.println("Zapremina kutije: " +

refK.zapremina());

System.out.println();

System.out.println("Zapremina kutije sa težinom: " +

refKST.zapremina());

System.out.println("Težina kutije sa težinom: " +

refKST.tezina);

System.out.println();

refK = refKST;  //referenca natklase refK ukazuje na objekat potklaseSystem.out.println("Zapremina: " + refK.zapremina());

 // Greška: referenca natklase ne zna za članove definisane u potklasi

//System.out.println("Težina: " + refK.tezina);

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 156/236

23

Rezultat izvršavanja primera za referenciranje

Zapremina kutije: 40.0

Zapremina kutije sa težinom: 24.0

Težina kutije sa težinom: 0.1

Zapremina: 24.0

24

Klasa KutijaSaTezinom sa više konstruktora

class KutijaSaTezinom extends Kutija {

double tezina;

 // Konstruktor čiji je parametar objekat

KutijaSaTezinom(KutijaSaTezinom obj) {

 // Objekat klase KutijaSaTezinom može da se prosledi

 // konstruktoru klase Kutija čiji je parametar tipa Kutija

super(obj);

tezina = obj.tezina;

}

 // Konstruktor bez parametara

KutijaSaTezinom() {

 // Ako se ne navede, poziva se konstruktor bez parametara

//super();

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 157/236

25

Klasa KutijaSaTezinom – nastavak

 // Konstruktor sa parametrima za sva polja natklase i potklase

KutijaSaTezinom(double s, double v, double d,

double t) {

super(s, v, d);

tezina = t;

}

 // Konstruktor za kutiju u obliku kocke

KutijaSaTezinom(double stranica, double t) {

super(stranica);

tezina = t;

}}

26

Primer za kutiju sa težinom

class PrimerZaKutijuSaTezinom2 {

 public static void main(String args[]) {

KutijaSaTezinom kt1 = new KutijaSaTezinom(1,2,5,3.3);

KutijaSaTezinom kt2 = new KutijaSaTezinom();

KutijaSaTezinom kt3 = new KutijaSaTezinom(2, 3);

KutijaSaTezinom kt4 = new KutijaSaTezinom(kt1);

System.out.println("Zapremina kt1: " + kt1.zapremina());

System.out.println("Težina kt1: " + kt1.tezina + "\n");

System.out.println("Zapremina kt2: " + kt2.zapremina());

System.out.println("Težina kt2: " + kt2.tezina+ "\n");

System.out.println("Zapremina kt3: " + kt3.zapremina());

System.out.println("Težina kt3: " + kt3.tezina+ "\n");System.out.println("Zapremina kt4: " + kt4.zapremina());

System.out.println("Težina kt4: " + kt4.tezina+ "\n");

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 158/236

27

Rezultat izvršavanja primera za kutiju sa težinom

Zapremina kt1: 10.0

Težina kt1: 3.3

Zapremina kt2: 0.0

Težina kt2: 0.0

Zapremina kt3: 8.0

Težina kt1: 3.0

Zapremina kt4: 10.0

Težina kt4: 3.3

28

Primer pristupanja članu natklase

class A {int i;

}

class B extends A {

int i;  // novo polje, ima isto ime kao i nasleñeno polje iz klase A

B(int a, int b) {

super.i = a; // polje i iz klase A

i = b; // polje i iz klase B

}

void prikazi() {

System.out.println("i iz natklase: " + super.i);

System.out.println("i iz potklase: " + i);

}

}

• Polje i u klasi B sakriva nasleñeno polje i iz klase A

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 159/236

29

Primer pristupanja članu natklase – nastavak

class PrimerPristupanja {

 public static void main(String args[]) {

B obj = new B(1, 2);

obj.prikazi();

}

}

i iz natklase: 1

i iz potklase: 2

30

Pristupanje članu natklase

• Rezervisana reč super se koristiti za pristupanječlanu, slično kao i rezervisana reč this, ali je razlika utome što rezervisana reč super ukazuje na natklasu

• Primer:super.član;  // član je polje ili metod natklase

• Članovima natklase se pristupa pomoću rezervisane rečisuper kad su članovi natklase sakriveni članovima

potklase, tj. kad članovi natklase i potklase imaju ista

imena

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 160/236

31

Višestepena hijerarhija

class A {

...

}

class B extends A {

...

}

class C extends B {

...

}

• Klasa C je nasledila sve članove iz klase B, što znači da je nasledilai članove klase A

• Referenca klase A može da ukazuje na objekte klasa A, B i C

32

Primer: klasa Isporuka

• Iz klase KutijaSaTezinom možese dalje izvesti klasa Isporuka

koja ima polje troskovi

• Na dijagramu su prikazane klasa zaovaj primer sa svojim poljima

Kutija

sirinavisinaduzina

KutijaSaTezinom

tezina

Isporuka

troskovi

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 161/236

33

Klasa Kutija public class Kutija {

 private double sirina, visina, duzina;

 public Kutija() {}

 public Kutija(Kutija obj) {

sirina = obj.sirina;

visina = obj.visina;

duzina = obj.duzina;

}

 public Kutija(double s, double v, double d) {

sirina = s;

visina = v;

duzina = d;

}

 public Kutija(double stranica) {

sirina = visina = duzina = stranica;

}

34

Klasa Kutija – nastavak

 public void postaviDimenzije(double s, double v,double d) {

sirina = s;

visina = v;

duzina = d;

}

 public double sirina() { return sirina; }

 public double visina() { return visina; }

 public double duzina() { return duzina; }

 public double zapremina() {

return sirina * visina * duzina;

}

 public String toString() {

return "sirina " + sirina + ", visina " + visina +

", duzina " + duzina;

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 162/236

35

Klasa KutijaSaTezinom public class KutijaSaTezinom extends Kutija {

 private double tezina;

 public KutijaSaTezinom() { }

 public KutijaSaTezinom(KutijaSaTezinom obj) {

super(obj); //samo sirina, visina, duzina iz nadklase

tezina = obj.tezina;

}

 public KutijaSaTezinom(double s, double v, double d,

double t) {

super(s, v, d);

tezina = t;

}

 public KutijaSaTezinom(double stranica, double t) {

super(stranica);

tezina = t;

}

36

Klasa KutijaSaTezinom – nastavak

 public double tezina() { return tezina; }

 public void postaviTezinu(double t) { tezina = t; }

 public String toString() {

return super.toString() + ", tezina " + tezina;

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 163/236

37

Klasa Isporuka public class Isporuka extends KutijaSaTezinom {

 private double troskovi;

 public Isporuka() { }

 public Isporuka(Isporuka obj) {

super(obj);

troskovi = obj.troskovi;

}

 public Isporuka(double s, double v, double d,

double t, double tr) {

super(s, v, d, t);

troskovi = tr;

}

 public Isporuka(double stranica, double t, double tr) {

super(stranica, t);

troskovi = tr;

}

38

Klasa Isporuka – nastavak

 public double troskovi() { return troskovi; }

 public void postaviTroskove(double tr) {

troskovi = tr;

}

 public String toString() {

return super.toString() + ", troskovi " + troskovi;

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 164/2362

39

Primer za klasu Isporukaclass PrimerZaIsporuku {

 public static void main(String args[]) {

Isporuka is1 = new Isporuka(1, 2, 5, 3.3, 81.2);

Isporuka is2 = new Isporuka(2, 1.1, 2.2);

Isporuka is3 = new Isporuka(is1);

System.out.println("Zapremina is1: " + is1.zapremina());

System.out.println("Težina is1: " + is1.tezina());

System.out.println("Troškovi is1: " + is1.troskovi());

System.out.println();

System.out.println("Zapremina is2: " + is2.zapremina());

System.out.println("Težina is2: " + is2.tezina());

System.out.println("Troškovi is2: " + is2.troskovi());

System.out.println();

System.out.println("Zapremina is3: " + is3.zapremina());

System.out.println("Težina is3: " + is3.tezina());

System.out.println("Troškovi is3: " + is3.troskovi());

}

}

40

Rezultat izvršavanja primera za isporuku

Zapremina is1: 10.0

Težina is1: 3.3

Troškovi is1: 81.2

Zapremina is2: 8.0

Težina is2: 1.1

Troškovi is2: 2.2

Zapremina is3: 10.0

Težina is3: 3.3Troškovi is3: 81.2

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 165/2362

41

Redosled pozivanja konstruktora

• Konstruktor natklase se izvršava pre konstruktorapotklase

• Ako se poziva konstruktor natklase, pozivanje metodasuper mora biti prva naredba u konstruktoru potklase

• Ako se u konstruktoru potklase ne poziva metod super

tada će biti pozvan podrazumevani konstruktor natklase,ili odgovarajući konstruktor bez argumenata koji će seizvršiti prvi

42

Ilustracija redosleda pozivanja konstruktora

class A {A() { System.out.println("Izvršen konstruktor klase A"); }

}

class B extends A {

B() { System.out.println("Izvršen konstruktor klase B"); }

}

class C extends B {

C() { System.out.println("Izvršen konstruktor klase C"); }

}

class RedosledIzvrsavanjaKonstruktora {

 public static void main(String args[]) {

C c = new C();

}

}

Izvršen konstruktor klase A

Izvršen konstruktor klase B

Izvršen konstruktor klase C

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 166/2362

43

Redefinisanje metoda

• U potklasi može da se napiše metod koji ima isto ime iistu listu parametara (broj i tip parametara) kao i metodnatklase, i to se naziva redefinisanje metoda natklase(overriding)

• Kad se u potklasi pozove redefinisani metod izvršava semetod potklase tj. metod definisan u potklasi

• Ako metod potklase ima isto ime kao i metod natklase, arazlikuje se lista parametara, to je preklapanje(overloading) metoda a ne redefinisanje

44

Primer redefinisanja metoda

class A {

int i, j;

A(int x, int y) { i = x; j = y; }

void prikazi() {

System.out.println("i, j: " + i + " " + j);

}

}

class B extends A {

int k;

B(int x, int y, int z) { super(x, y); k=z; }

void prikazi() {

System.out.println("k: " + k);

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 167/2362

45

Primer redefinisanja metoda

class PrimerRedefinisanja { public static void main(String args[]) {

B obj = new B(1, 2, 3);

obj.prikazi();  // poziva se metod prikazi iz klase B

A objA = new A(5, 6);

objA.prikazi();  // poziva se metod prikazi iz klase A

}

}

k: 3

i, j: 5 6

46

Pristupanje redefinisanom metodu natklase

• Redefinisani metod natklase je sakriven u potklasi, tj. nemože mu se pristupiti direktno preko imena

• Redefinisanom metodu natklase se može pristupitipomoću rezervisane reči super

• Primer pozivanja redefinisanog metoda natklase:

super.imeRedefinisanogMetoda(lista_argumenata)

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 168/2362

47

Popravljena potklasa B iz primera za redefinisanje

class A {

int i, j;

A(int x, int y) { i = x; j = y; }

void prikazi() {

System.out.println("i, j: " + i + " " + j);

}

}

class B extends A {

int k;

B(int x, int y, int z) { super(x, y); k = z; }

void prikazi() {

super.prikazi();

System.out.println("k: " + k);

}

}

48

Primer redefinisanja sa popravljenom klasom B

class PrimerRedefinisanja {

 public static void main(String args[]) {

B obj = new B(1, 2, 3);

obj.prikazi();  // poziva se metod prikazi iz klase B

A objA = new A(5, 6);

objA.prikazi();  // poziva se metod prikazi iz klase A

}

}

i, j: 1 2

k: 3

i, j: 5 6

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 169/2362

49

Primer za preklapanje metoda

class A {

int i, j;

A(int x, int y) { i = x; j = y; }

void prikazi() {

System.out.println("i, j: " + i + " " + j);

}

}

class B extends A {

int k;

B(int x, int y, int z) { super(x, y); k = z; }

void prikazi(String tekst) {

if(tekst.length() == 0) tekst = "k: ";

System.out.println(tekst + k);

}

}

50

Primer preklapanja

class PrimerPreklapanja {

 public static void main(String args[]) {

B obj = new B(1, 2, 3);

// Pozivanje metoda definisanog u klasi A

obj.prikazi();

// Pozivanje preklopljenog metoda u klasi B

obj.prikazi("Vrednost k je: ");

obj.prikazi("");

}

}

i, j: 1 2

Vrednost k je: 3

k: 3

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 170/2362

51

Dinamičko razrešavanje metoda pri izvršavanju

• Referenca natklase može da ukazuje na objekatpotklase

• Ako se redefinisani metod poziva referenciranjem iznatklase, u trenutku pozivanja se odreñuje koji se metodpoziva na osnovu tipa objekta na koji referenca trenutnoukazuje

• Drugačije, tip referenciranog objekta odreñuje koji ćemetod biti pozvan, a ne tip reference koja ukazuje naobjekat

• Ovo ponašanje se naziva polimorfizam

 – postoji jedan način pristupa, a može se pozvati višerazličitih metoda

52

Ilustracija dinamičkog razrešavanja

class A {

void prikazi() {

System.out.println("Izvršen metod klase A");

}

}

class B extends A {

void prikazi() {

System.out.println("Izvršen metod klase B");

}

}

class C extends B {

void prikazi() {

System.out.println("Izvršen metod klase C");

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 171/2362

53

Ilustracija dinamičkog razrešavanjaclass DinamickoRazresaanje {

 public static void main(String args[]) {

A a = new A(); // objekat klase A

B b = new B(); // objekat klase B

C c = new C(); // objekat klase C

A ref; // referenca na objekat klase A;

// ovde je definisan tip reference!

ref = a; // ref ukazuje na objekat klase A

ref.prikazi(); // poziva se metod prikazi iz klase A

ref = b; // ref ukazuje na objekat klase B

ref.prikazi(); // poziva se metod prikazi iz klase B

ref = c; // ref ukazuje na objekat klase C

ref.prikazi(); // poziva se metod prikazi iz klase C}

}Izvršen metod klase A

Izvršen metod klase B

Izvršen metod klase C

54

Redefinisanje metoda

• Omogućava polimorfizam u trenutku izvršavanja(preklapanje metoda to čini u vreme kompajliranja!)

• Omogućava da se u opštoj klasi definišu svi metodi kojetreba da imaju objekti izvedenih klasa od kojih će nekibiti redefinisani u izvedenim klasama

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 172/2362

55

Primer sa redefinisanjem metoda

 public class GeometrijskaSlika {

 public double obim() { return 0; }  // Loše napisan metod public double povrsina() { return 0; }  // Takoñe i ovaj

}

 public class Trougao extends GeometrijskaSlika {

 private double a, b, c;

 public Trougao(double a_, double b_, double c_) {

a = a_; b = b_; c = c_;

}

 public double obim() { return a + b + c; }

 public double povrsina() {

double s = (a + b + c)/2;return Math.sqrt(s*(s-a)*(s-b)*(s-c));

}

}

56

Primer sa redefinisanjem metoda - nastavak

 public class Kvadrat extends GeometrijskaSlika {

 private double a;

 public Kvadrat(double a_) { a = a_; }

 public double obim() { return 4 * a; }

 public double povrsina() { return a * a; }

}

 public class Krug extends GeometrijskaSlika {

 private double r;

 public Krug(double r_) { r = r_; }

 public double obim() { return 2 * Math.PI * r; }

 public double povrsina() { return Math.PI * r*r; }

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 173/2362

57

Primer sa redefinisanjem metoda - nastavak

 public class PrimerGeometrijskeSlike {

 public static void main(String[] args) {Trougao tr = new Trougao(3, 4, 5);

Krug kr = new Krug(1);

Kvadrat kv = new Kvadrat(10);

GeometrijskaSlika slike[] = new GeometrijskaSlika[3];

slike[0] = tr;

slike[1] = kr;

slike[2] = kv;

for(int i=0; i<3; i++) {

System.out.println("i: " + i + ", obim: " +

slike[i].obim());

System.out.println("i: " + i + ", površina: " +

slike[i].povrsina());

}

}

}

58

Primer sa redefinisanjem metoda – rezultat

i: 0, obim: 12.0

i: 0, površina: 6.0

i: 1, obim: 6.283185307179586

i: 1, površina: 3.141592653589793

i: 2, obim: 40.0

i: 2, površina: 100.0

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 174/2363

59

Lepše napisan poslednji primer

 public class PrimerGeometrijskeSlike {

 public static void main(String[] args) {

GeometrijskaSlika slike[] = new GeometrijskaSlika[3];

slike[0] = new Trougao(3, 4, 5);

slike[1] = new Krug(1);

slike[2] = new Kvadrat(10);

for(int i=0; i<3; i++) {

System.out.println("i: " + i + ", obim: " +

slike[i].obim());

System.out.println("i: " + i + ", površina: " +

slike[i].povrsina());

}

}

}

60

Apstraktne klase

• Često natklasa ne može da definiše metod, ali mora dadefiniše njegov potpis (deklariše metod) da bi potklasemogle da redefinišu metod

• Takoñe treba obezbediti da potklase moraju daredefinišu metod

• Ovo se obezbeñuje pomoću apstraktnog metoda, tj.korišćenjem modifikatora abstract

• Apstraktni metod nema telo

• Opšti oblik deklaracije apstraktnog metoda jeabstract tip imeMetoda(listaParametara);

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 175/2363

61

Apstraktne klase

• Klasa koja ima bar jedan apstraktan metod je apstraktnaklasa

• Deklaracija apstraktne klase mora imati modifikatorabstract

• Apstraktna klasa može imati metode koji nisu apstraktni

• Apstraktna klasa može imati članove podatke

• Ne može se napraviti objekat apstraktne klase

• U potklasi apstraktne klase za koju treba instanciratiobjekte moraju biti redefinisani svi apstraktni metodi

• Može se koristiti referenca apstraktne klase i ona možereferencirati objekte svih potklasa

62

Popravljanje primera sa geometrijskim slikama

• U prethodnom primeru nije dobro napisana klasaGeometrijskaSlika, jer:

 – u njoj su definisani metodi za izračunavanje obima ipovršine iako ta klasa ne zna ništa o tome kako će seizračunavati obim i površina u potklasama

 – potklase ne moraju da redefinišu metode za izračunavanjeobima i površine, a greška je ako se to ne uradi

 – može se napraviti objekat tipa GeometrijskaSlika

iako nema smisla da postoji takav objekat

• Rešenje je da klasa GeometrijskaSlika budeapstraktna, i da oba metoda (obim i povrsina) budu

apstraktni

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 176/2363

63

Popravljanje primera sa geometrijskim slikama

 public abstract class GeometrijskaSlika {

 public abstract double obim();

 public abstract double povrsina();

}

• Ostale klase iz prethodnog primera (Trougao, Kvadrati Krug) ostaju nepromenjene

64

Popravljanje primera sa geometrijskim slikama

 public class PrimerGeometrijskeSlike {

 public static void main(String[] args) {

 // Može se deklarisati referenca apstraktne klase,

 // i može se napraviti niz referenci apstraktne klase

GeometrijskaSlika slike[] = new GeometrijskaSlika[3];

slike[0] = new Trougao(3, 4, 5);

slike[1] = new Krug(1);

slike[2] = new Kvadrat(10);

for(int i=0; i<3; i++) {

System.out.println("i: " + i + ", obim: " +

slike[i].obim());

System.out.println("i: " + i + ", površina: " +slike[i].povrsina());

}

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 177/2363

65

Rezervisana reč final

• Ima tri namene: – služi za deklarisanje konstanti

 – sprečava redefinisanje metoda

 – sprečava izvoñenje iz klase

66

Sprečavanje redefinisanja metodaclass A {

final void prikazi() {

System.out.println("Ne može se redefinisati.");

}

}

class B extends A {

void prikazi() {  // Greška, metod se ne može redefinisati

System.out.println("Pogrešno!");

}}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 178/2363

67

Sprečavanje redefinisanja metoda

• Pošto se metodi označeni modifikatorom final nemogu redefinisati prevodilac može umesto pozivametoda da doda ceo bajt kod metoda

• Prevodilac ovo radi samo za kratke metode

• Ovaj postupak se naziva inlining 

68

Sprečavanje izvoñenjafinal class A {  // Klasa A ne može imati podklase

// ...

}

class B extends A {  // Greška! Ne može se izvoditi iz klase A

// ...

}

• Ako je klasa označena modifikatorom final, i svi njeni

metodi postaju final

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 179/2363

69

Primer sa redefinisanjem metoda

 public abstract class GeometrijskaSlika {

 public abstract double obim(); public abstract double povrsina();

}

 public class Krug extends GeometrijskaSlika {

 private double r;

 public Krug(double r_) { r = r_; }

 public double r() { return r; }

 public double obim() { return 2 * Math.PI * r; }

 public double povrsina() { return Math.PI * r*r; }

 public String toString() {

return "Krug: poluprečnik=" + r + ", obim=" +

obim() + ", površina=" + povrsina();

}

}

70

Primer sa redefinisanjem metoda

 public class Trougao extends GeometrijskaSlika {

 private double a, b, c;

 public Trougao(double a_, double b_, double c_) {

a = a_; b = b_; c = c_;

}

 public double a() { return a; }

 public double b() { return b; }

 public double c() { return c; }

 public double obim() { return a + b + c; }

 public double povrsina() {

double s = (a + b + c)/2;

return Math.sqrt(s*(s-a)*(s-b)*(s-c));

}

 public String toString() {

return "Trougao: stranice a=" + a + ", b=" + b + ", c="

+ c + ", obim=" + obim() + ", površina=" + povrsina();

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 180/2363

71

Primer sa redefinisanjem metoda - nastavak

 public class Kvadrat extends GeometrijskaSlika { private double a;

 public Kvadrat(double a_) { a = a_; }

 public double a() { return a; }

 public double obim() { return 4 * a; }

 public double povrsina() { return a * a; }

 public String toString() {

return "Kvadrat: stranica a=" + a + ", obim=" +

obim() + ", površina=" + povrsina();

}

}

72

Primer sa geometrijskim slikama public class PrimerGeometrijskeSlike {

 public static void main(String[] args) {

GeometrijskaSlika slike[] =

new GeometrijskaSlika[3];

slike[0] = new Trougao(3, 4, 5);

slike[1] = new Krug(1);

slike[2] = new Kvadrat(10);

for(int i=0; i<3; i++)

System.out.println(slike[i]);

}}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 181/2363

73

Primer sa redefinisanjem metoda – rezultat

Trougao: stranice a=3.0, b=4.0, c=5.0, obim=12.0, površina=6.0Krug: poluprečnik=1.0, obim=6.283185307179586, površina= 3.141592653589793

Kvadrat: stranica a=10.0, obim=40.0, površina=100.0

74

Klasa Object

• Klasa Object  je natklasa svih klasa u Javi

• Referenca tipa Object može da referencira objekte

svih ostalih klasa

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 182/2363

75

Metodi klase Object

 protected native Object clone()

 public boolean equals(Object obj)

 protected void finalize()

 public final native Class getClass()

 protected native int hashCode()

 public final native void notify()

 public final native void notifyAll()

 public String toString()

 public final void wait()

 public final native void wait(long timeout)

 public final void wait(long timeout, int nanos)

• Metod toString se najčešće redefiniše pošto se

pomoću njega objekat prevodi u String

76

Primer korišćenja metoda toString

class PrimerZaMetodToString { public static void main(String args[]) {

Kutija kutija = new Kutija(1, 2, 5);

KutijaSaTezinom kutija_sa_tezinom =

new KutijaSaTezinom(2, 3, 4, 1.1);

Isporuka isporuka = new Isporuka(2, 2, 3, 10.1, 5.2);

Isporuka kopija = new Isporuka(isporuka);

System.out.println("Kutija: " + kutija.toString());

System.out.println("Kutija sa težinom: " +

kutija_sa_tezinom.toString());

System.out.println("Isporuka: " + isporuka.toString());

System.out.println("Kopija: " + kopija.toString());

}

}

Kutija: sirina 1.0, visina 2.0, duzina 5.0

Kutija sa težinom: sirina 2.0, visina 3.0, duzina 4.0, tezina 1.1

Isporuka: sirina 2.0, visina 2.0, duzina 3.0, tezina 10.1, troskovi 1.1

Kopija: sirina 2.0, visina 2.0, duzina 3.0, tezina 10.1, troskovi 1.1

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 183/236

1

Paketi

2

Funkcije paketa

• Paket deli imenski prostor (u dva paketa mogu postojatiklase sa istim imenom)

• Paket služi za upravljanje vidljivošću

 – može postojati klasa koja se može koristiti samo unutarpaketa, izvan je nevidljiva

 – u klasi mogu postojati članovi koji se vide samo unutarpaketa

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 184/236

3

Sadržaj datoteke *.java

• Datoteka *.java može da sadrži sledeća četiri dela – jedan iskaz za obrazovanje paketa (neobavezno)

 – proizvoljan broj naredbi za uvoz (neobavezno)

 – jednu definiciju javne klase, ime klase je jednako imenudatoteke (obavezno)

 – proizvoljan broj klasa bez specifikatora pristupa(neobavezno)

4

Definisanje paketa

• Paket se definiše naredbom package koja treba dabude prva naredba u fajlu Javine izvorne datoteke

 package imePaketa;

• Klase iz fajla u kojem je ova naredba pripadaju paketuimePaketa

• Fajlovi koji pripadaju jednom paketu moraju biti u istomdirektorijumu čije je ime isto kao i ime paketa (rasporedmalih i velikih slova u imenu paketa i direktorijuma mora

biti isti)• U svim fajlovima koji pripadaju paketu mora da postoji

naredba package koja odreñuje kojem paketu pripada

fajl

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 185/236

5

Hijerarhija paketa

• Paketi mogu da obrazuju hijerarhiju, i tada se piše npr. package paket1.paket2.paket3;

• a direktorijum je: paket1\paket2\paket3

6

Sistemska promenljiva CLASSPATH

• Program mora biti pokrenut iz direktorijuma neposrednoiznad direktorijuma u kojem se nalazi, ili

• Sistemska promenljiva CLASSPATH mora sadržatiputanju dod direktorijuma MojPaket

• Odreñuje osnovni direktorijum hijerarhije paketa

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 186/236

7

Starovanje programa iz komandne linije

• Program se nalazi u nekom paketu

• Radni direktorijum treba da bude onaj koji je odreñensistemskom promenljivom CLASSPATH

• Navodi se cela hijerarhija paketa (direktorijuma) počevšiod direktorijuma odreñenog sa CLASSPATH,razdvojenih tačkom i na kraju je ime klase koja se staruje

• Primer:

C:\java imePaketa1.imePaketa2.imeKlase

8

Specifikatori pristupa za članove klase

• public za javni način pristupanja

 – javnim članovima mogu da pristupaju sve klase

• protected za zaštićeni način pristupanja

 – zaštićenim članovima mogu da pristupaju sve klase izistog paketa i podklase iz drugih paketa

• private za privatni način pristupanja

 – privatnim članovima može da pristupa samo klasa u kojojsu definisani

• bez specifikatora za podrazumevani način pristupanja –  članovima bez specifikatora pristupa mogu da pristupaju

sve klase iz istog paketa

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 187/236

9

Pristup članovima klase

DaNeNeNeKlase iz drugih

paketa koje nisupotklase

DaDaNeNePotklasa iz drugogpaketa

DaDaDaNeKlase istog paketakoje nisu potklase

DaDaDaNePotklasa istogpaketa

DaDaDaDaIsta klasa

PublicProtectedBezspecifikatora

Private

10

Pristupanje klasi iz drugog paketa

• Klasi koja se nalazi u nekom drugom paketu može sepristupiti navoñenjem hijerarhije paketa razdvojenihtačkom i klase

• Lakši način je da se klasa iz drugog paketa, ili ceo paket,importuje i tada se klasi pristupa preko imena

• Za importovanje paketa služi naredba import

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 188/236

11

Importovanje

• Za importovanje klase ili paketa služi naredba import

koja se piše iza naredbe package a ispred definicije

klase

• Opšti oblik naredbe je

import paket1[.paket2].(imeKlase | *)

• Primeri:

import java.util.Date;

import java.util.*;

import java.io.*;

• Paket java.lang.* se uvozi po difoltu u sve programe

12

Primer: natklasa je u drugom paketu

• Natklasa iz drugog paketa mora da bude javna

• Primer sa importovanjem paketa:

import java.util.*;

class MojDatum extends Date {

}

• Primer bez importovanja paketa:class MojDatum extends java.util.Date {

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 189/236

13

Klasa sa istim imenom postoji u dva paketa

• Da bi se koristila jedna od dve klase treba importovatipaket u kojem se nalazi

• Ako se importuju oba paketa i upotrebi se ime klase kojese nalazi u oba paketa javlja se greška

14

Interfejsi

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 190/236

15

Interfejsi

• Interfejs sadrži potpise metoda, tj. definicija interfejsa jeslična apstraktnoj klasi čiji su svi metodi apstraktni

• Interfejs nema polja

• Klasa može da implementira interfejs

• Klasa koja implementira interfejs mora da sadrži svemetode iz interfejsa tj. da definiše tela svih metoda izinterfejsa

• Klasa može da implementira više interfejsa

• Potpuno različite klase mogu da implementiraju isti

interfejs

16

Definisanje interfejsa

• Opšti oblik je:

 pristup interface imeInterfejsa {

tip metod1 ( listaParametara );

tip metod2 ( listaParametara );

// ...

tip metodN ( listaParametara );

final tip promenljiva1 = vrednost;

final tip promenljiva2 = vrednost;// ...

final tip promenljivaN = vrednost;

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 191/236

17

Specifikator pristupa za interfejs

• Kao i klasa, i interfejs može imati samo javni ipodrazumevani način pristupa

• Značenje je isto kao i kod klase

18

Realizovanje interfejsa

• Rezervisana reč implements služi za označavanjeinterfejsa koje implementira klasa

• Opšti oblik definicije klase koja implementira interfejs je: pristup class imeKlase [extends imeNatklase]

[implements interfejs1 [,interfejs2 ...]] {

// telo klase

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 192/236

19

Primer

interface InterfejsTest {

void test(int par);

}

class Klasa1 implements InterfejsTest {

void test(int p) {

// telo metoda iz interfejsa

}

double d;

int metod() {

// telo metoda koji nije iz interfejsa

}

}

20

Primer: geometrijska slika je natklasa

 public abstract class GeometrijskaSlika {

 public abstract double obim();

 public abstract double povrsina();

}

 public class Trougao extends GeometrijskaSlika {

 private double a, b, c;

 public Trougao(double a, double b_, double c_) {

a = a_; b = b_; c = c_;

}

 public double obim() { return a + b + c; }

 public double povrsina() {

double s = (a + b + c)/2;

return Math.sqrt(s*(s-a)*(s-b)*(s-c));

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 193/236

21

Primer: geometrijska slika je natklasa

 public class Kvadrat extends GeometrijskaSlika {

 private double a;

 public Kvadrat(double a_) { a = a_; }

 public double obim() { return 4 * a; }

 public double povrsina() { return a * a; }

}

 public class Krug extends GeometrijskaSlika {

 private double r;

 public Krug(double r_) { r = r_; }

 public double obim() { return 2 * Math.PI * r; }

 public double povrsina() { return Math.PI * r*r; }}

22

Primer: geometrijska slika je natklasa public class PrimerGeometrijskeSlike1 {

 public static void main(String[] args) {

Trougao tr = new Trougao(3, 4, 5);

Krug kr = new Krug(1);

Kvadrat kv = new Kvadrat(10);

GeometrijskaSlika rn;

rn = tr; // referenca natklase ukazuje na objekat trougla

double o = rn.obim(); // obim trougla

rn = kr; // referenca natklase ukazuje na objekat kruga

double p = rn.povrsina(); // površina krugarn = kv; // referenca natklase ukazuje na objekat kvadrata

o = rn.obim(); // obim kvadrata

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 194/236

23

Primer: geometrijska slika je interfejs

 public interface GSInterface {

 public double obim();

 public double povrsina();

}

 public class Trougao implements GSInterface {

 private double a, b, c;

 public Trougao(double a, double b_, double c_) {

a = a_; b = b_; c = c_;

}

 public double obim() { return a + b + c; }

 public double povrsina() {

double s = (a + b + c)/2;return Math.sqrt(s*(s-a)*(s-b)*(s-c));

}

}

24

Primer: geometrijska slika je interfejs

 public class Kvadrat implements GSInterface {

 private double a;

 public Kvadrat(double a_) { a = a_; }

 public double obim() { return 4 * a; }

 public double povrsina() { return a * a; }

}

 public class Krug implements GSInterface {

 private double r;

 public Krug(double r_) { r = r_; }

 public double obim() { return 2 * Math.PI * r; }

 public double povrsina() { return Math.PI * r*r; }

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 195/236

25

Primer: geometrijska slika je interfejs

 public class PrimerGeometrijskeSlike2 {

 public static void main(String[] args) {

Trougao tr = new Trougao(3, 4, 5);

Krug kr = new Krug(1);

Kvadrat kv = new Kvadrat(10);

GSInterface ri;

ri = tr; // referenca tipa interfejsa ukazuje na objekat trougla

double o = ri.obim(); // obim trougla

ri = kr; // referenca tipa interfejsa ukazuje na objekat kruga

double p = ri.povrsina(); // površina kruga

ri = kv; // referenca tipa interfejsa ukazuje na objekat kvadrata

o = ri.obim(); // obim kvadrata

}

}

26

Izvoñenje iz natklase ili implementiranje interfejsa?

• Ako su klase srodne, kao što je slučaj sa geometrijskimslikama (trougao, krug, kvadrat, ...) treba definisatinatklasu i iz nje izvesti potklase

• Ako su klase potpuno različite i nije logično da imajuzajedničku natklasu, a imaju neke slične (zajedničke)metode, tada treba koristiti interfejse

 – u interfejs se stave zajednički metodi raznorodnih klasakoje sve klase treba da implementiraju

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 196/236

27

Referenciranje preko interfejsa

• Može se definisati referenca tipa interfejsa

• Referenca tipa interfejsa može ukazivati na objekte svihklasa koje implementiraju interfejs

• Preko reference tipa interfejsa može se pristupiti samometodima koje postoje u interfejsu

• Razrešavanje je dinamičko, tj. koji se metod pozivaodreñuje se u trenutku izvršavanja na osnovu tipaobjekta na koji ukazuje referenca tipa interfejsa

28

Dva interfejsa imaju isti metod

• Klasa koja implementira dva interfejsa koji imaju istimetod realizuje taj metod samo jednom, tj. isti je metodza oba interfejsa

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 197/236

29

Delimična realizacija interfejsa

• Klasa koja implementira interfejs, a ne definiše tela zasve metode iz interfejsa je apstraktna

30

Promenljive u interfejsu

• Interfejs ne može imati promenljivem, može imati samokonstante

• Primer:

interface ZajednickeKonstante {

int NE = 0;

int DA = 1;

int MOZDA = 2;

}

• Ovaj interfejs sadrži samo konstante (nema metode)

• Sve klase koje implementiraju ovaj interfejs imajukonstante definisane u njemu

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 198/236

31

Izvoñenje interfejsa

• Jedan interfejs može da se izvede iz drugog i tadanasleñuje sve njegove metode

32

Nasleñivanje interfejsa

interface A {

void metod_A();

}

interface B extends A {

void metod_B();

}

class Test implements B {

 public void metod_A() {

// telo metoda iz interfejsa A

}

 public void metod_B() {

// telo metoda iz interfejsa B

}

 public void metod_T() {

// telo metoda koji ne postoji u interfejsu

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 199/236

33

Nasleñivanje interfejsa

 public class PrimerNasledjivanja {

 public static void main(String[] args) {

Test test = new Test();

test.metod_A();

test.metod_B();

test.metod_T();

B rib = test;

rib.metod_A();

rib.metod_B();

rib.metod_T(); // greška, nije iz interfejsa B

A ria = test;

rib.metod_A();

rib.metod_B(); // greška, nije iz interfejsa A

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 200/236

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 201/236

3

Rezervisane reči za obradu izuzetaka

• try

• catch

• throw

• throws

• finally

4

Obrada izuzetka

• Unutar try bloka su naredbe koje mogu da izazovu

izuzetak

• Izuzetak se hvata pomoću rezervisane reči catch

• Rezervisana reč throw služi za bacanje izuzetka

• Ako unutar metoda A može da nastane izuzetak koji seprosleñuje pozivajućem metodu B, tada u metodu A tajtip izuzetka mora da se označi pomoću rezervisane rečithrows

• Naredbe koje moraju da se izvrše i kad se pojaviizuzetak treba staviti u blok finally

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 202/236

5

Neuhvaćeni izuzeci

• Ako se u kodu ne obradi izuzetak, obrañuje ga Javinizvršni sistem koji ispisuje tekst sa opisom izuzetka,stanje steka za metode od trenutka nastanka izuzetka izavršava program

• Primer:

 – Pri deljenju nulom Javin izvršni sistem pravi izuzetak tipaArithmeticException i baca ga

6

Primer za izuzetak koji se ne obrañuje u kodu

class Izuzetak0 {

 public static void main (String args[]) {

int d = 0;

int a = 7 / d;

System.out.println(a);

}

}

java.lang.ArithmeticException: / by zero

at Izuzetak0.main(Izuzetak0.java:4)

Exception in thread "main"

• Vidi se da je izuzetak nastao u klasi Izuzetak0, metod main,

u naredbi koja je u četvrtoj liniji fajla

• Izuzetak je tipa ArithmeticException

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 203/236

7

Novi primer neobrañenog izuzetka

class Izuzetak1 {

static void izracunaj() {

int d = 0;

int a = 7 / d;

System.out.println(a);

}

 public static void main (String args[]) {

Izuzetak1.izracunaj();

}

}

Ista greška, ali ne u metodi main:

java.lang.ArithmeticException: / by zeroat Izuzetak1.izracunaj(Izuzetak1.java:4)

at Izuzetak1.main(Izuzetak1.java:8)

Exception in thread "main"

8

Opšti oblik bloka za obradu izuzetakatry {

// blok u kojem može da se pojavi izuzetak

}

catch (TipIzuzetka1 excObj) {

// kod za obradu izuzetka tipa TipIzuzetka1

}

catch (TipIzuzetka2 excObj) {

// kod za obradu izuzetka tipa TipIzuzetka2

}

...

finally {

// blok koda koji mora da se izvrši

// pre kraja bloka try

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 204/236

9

Primer obrañenog izuzetka

class Izuzetak2 {

 public static void main(String args[]) {

int d, a;

try {

d = 0;

a = 7 / d;

System.out.println("Ovo se ne prikazuje.");

}

catch (ArithmeticException e) {

System.out.println("Deljenje nulom.");

}

System.out.println("Posle naredbe catch.");

}}

Deljenje nulom.

Posle naredbe catch.

10

Korišćenje try i catch

• try i catch su jedinstvena celina

• catch se odnosi samo na prethodni try

• Iza naredbi try uvek dolazi blok unutar vitičastihzagrada (vitičaste zagrade su obavezne), a isto važi i zacatch

• catch služi da uhvati izuzetak koji se obrañuje unutartog catch bloka, posle čega se program nastavljaprvom naredbom ispod svih catch blokova jedne

naredbe try

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 205/236

11

Tipovi izuzetaka

• Throwable je nadklasa svihklasa za izuzetke

• Error je klasa za izuzetke

Javinog izvršnog sistema, npr.prekoračenje steka, i programiobično ne obrañuju ove izuzetke

• Exception je nadklasa za

izuzetke koje obrañuju programi

• RuntimeException je

nadklasa za neproveravaneizuzetke npr. aritmetičke greške(ArithmeticException),

indeksiranje niza izvan opsega(ArrayIndexOutOfBoundsException)

 

Throwable

Exception Error

RuntimeException

12

Prikazivanje opisa izuzetka

• U klasi Throwable redefinisan je metod toString

tako da vraća opis izuzetka

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 206/236

13

Primer prikazivanja opisa izuzetka

class OpisIzuzetka {

static void izracunaj() {int d = 0;

int a = 7 / d;

System.out.println(a);

}

 public static void main (String args[]) {

try {

OpisIzuzetka.izracunaj();

}

catch (ArithmeticException e) {

System.out.println(e);

}

}

}

java.lang.ArithmeticException: / by zero

14

Višestruki catch

• Ako se unutar bloka try može pojaviti više različitihizuzetaka treba staviti više odredbi catch, po jedna za

svaki tip izuzetka koji se obrañuje

• Posle pojave izuzetka izvršava se prvi catch blok čijitip izuzetka odgovara nastalom izuzetku, a svi ostalicatch blokovi se preskaču

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 207/236

15

Primer višestrukog catchclass DvaTipaIzuzetka {

 public static void main(String args[]) {

try {

int a = args.length;

System.out.println("Broj argumenata = " + a);

int b = 7 / a;

int c[] = { 1 };

c[2] = 9;

}

catch(ArithmeticException e) {

System.out.println("Deljenje nulom: " + e);

}

catch(ArrayIndexOutOfBoundsException e) {

System.out.println("Nevažeći indeks niza: " + e);

}

System.out.println("Iza try/catch blokova.");

}

}

16

Rezultat izvršavanja programa

• Prvo izvršavanje programa, ne zadaju se argumentiC:\java DvaTipaIzuzetka

Broj argumenata = 0

Deljenje nulom: java.lang.ArithmeticException: / by zero

Iza try/catch blokova.

• Drugo izvršavanje programa, zadaju se dva argumentaC:\java DvaTipaIzuzetka dve reci

Broj argumenata = 2

Nevažeći indeks niza: java.lang.ArrayIndexOutOfBoundsException

Iza try/catch blokova.

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 208/236

17

Višestruki catch

• Ako iza bloka try ima više blokova catch, potklaseizuzetaka moraju da se pojave pre svojih natklasa jercatch sa tipom natklase hvata i izuzetke svih svojih

potklasa

18

Primer višestrukog catch sa greškom

class IzuzetakPotklasePreNatklase {

 public static void main(String args[]) {

try {

int a = 0;

int b = 7 / a;

}

catch(Exception e) {

System.out.println("catch tipa Exception.");

}

catch(ArithmeticException e) {

 // ArithmeticException je potklasa klase Exception i mora se // pojaviti u catch pre klase Exception (greška u prevoñenju)

System.out.println("Nedostupan kod.");

}

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 209/236

19

Ugnježdene naredbe try

• Naredba try može da bude unutar druge naredbetry

• Ako se izuzetak ne uhvati u catch delovima untrašnjenaredbe try, preuzima ga spoljašnja naredba try

• Nastavlja se sve dok nek catch blok ne uhvati

izuzetak, ili dok izuzetak ne doñe do Javinog izvr šnogsistema

20

Primer ugnježdenog try

class UgnjezdeniTry { public static void main(String args[]) {

try {  // Spoljašnji try blokint a = args.length;

System.out.println("Broj argumenata = " + a);

int b = 42 / a;  // Deljenje nulom za a=0try {  // Unutrašnji try blok

if(a==1) a = a/(a-a);  // Deljenje nulom za a=1if(a==2) {

int c[] = { 1 };

c[42] = 99;  // Greška u indeksiranju za a=2}

}

catch(ArrayIndexOutOfBoundsException e) {

System.out.println("Unutrašnji try: " + e);}

}

catch(ArithmeticException e) {

System.out.println("Spoljašnji try: " + e);

}

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 210/236

21

Rezultat izvršavanja programa

• Prvo izvršavanje programa, ne zadaju se argumentiC:\java UgnjezdeniTry

Broj argumenata = 0

Spoljašnji try: java.lang.ArithmeticException: / by zero

• Drugo izvršavanje programa, zadaje se jedan argumentC:\java UgnjezdeniTry x

Broj argumenata = 1

Spoljašnji try: java.lang.ArithmeticException: / by zero

• Treće izvršavanje programa, zadaju se dva argumentaC:\java UgnjezdeniTry dve reci

Broj argumenata = 2

Unutrašnji try: java.lang.ArrayIndexOutOfBoundsException

22

Ugnježdeni try u metodima

• try naredbe su ugnježdene i u sledećem slučaju:

 – metod A ima try blok

 – metod B ima try blok

 – metod A se poziva unutar try bloka metoda B

• U ovom primeru try blok metoda A je ugnježdenunutar try bloka metoda B

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 211/236

23

Primer ugnježdenog tryclass UgnjezdeniTry1 {

static void unutrasnjiTry(int a) {

try {

if(a==1) a = a/(a-a);  // Deljenje nulom za a=1if(a==2) {  // Greška u indeksiranju za a=2int c[] = { 1 }; c[2] = 99;

}

}

catch(ArrayIndexOutOfBoundsException e) {

System.out.println("Unutrašnji try: " + e);

}

}

 public static void main(String args[]) {

try {

int a = args.length;

System.out.println("Broj argumenata = " + a);

int b = 42 / a;  // Deljenje nulom za a=0UgnjezdeniTry1.unutrasnjiTry(a);

}catch(ArithmeticException e) {

System.out.println("Spoljašnji try: " + e);

}

}

}

24

Rezervisana reč throw

• Izuzetak se baca pomoću naredbe throw

• Opšti oblik naredbe je

throw objekatIzuzetka;

• objekatIzuzetka  je objekat klase Throwable ili neke

potklase ove klase

• objekatIzuzetka se može napraviti operatorom new

ili može biti objekat uhvaćen u naredbi catch

• Posle bacanja izuzetka prelazi se na hvatanje izuzetka u

naredbi try bloka koji obuhvata naredbu throw

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 212/236

25

Primer za throwclass PrimerZaThrow {

static void bacanjeIzuzetka() {

try {

throw new NullPointerException("proba");

}

catch(NullPointerException e) {

System.out.println("Hvatanje unutar metoda.");

throw e; // novo bacanje izuzetka

}

}

 public static void main(String args[]) {

try {

PrimerZaThrow.bacanjeIzuzetka();

}

catch(NullPointerException e) {System.out.println("Ponovo uhvaćen: " + e);

}

}

}

26

Rezultat izvršavanja programaC:\java PrimerZaThrow

Hvatanje unutar metoda.

Ponovo uhvaćen: java.lang.NullPointerException: proba

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 213/236

27

Konstruktori izuzetaka

• Javini ugrañeni izuzeci imaju dva konstruktora, jedanbez parametara i jedan čiji je parametar znakovni niz koji

 je opis izuzetka

• Opis izuzetka se može dohvatiti metodomgetMessage() koji je definisan u klasi Throwable

28

Proveravani i neproveravani izuzeci

• Metodi i konstruktori ne moraju ekspicitno da izjave damogu da bace neproveravani izuzetak. Podrazumeva seda bilo koji metod može da ih baci.

• Oni ne moraju eksplicitno da budu uhvaćeni (nijepotreban catch). Kada se desi neproveravani izuzetak(NullPointerException, ClassCastException,OutOfMemoryError etc), Java će automatski “obraditi"izuzetak.

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 214/236

29

Proveravani i neproveravani izuzeci

• Error je klasa za izuzetkeJavinog izvršnog sistema, npr.prekoračenje steka, memorije itd. iprogrami obično ne obrañuju oveizuzetke

• RuntimeException je nadklasaza neproveravane izuzetke npr.aritmetičke greške(ArithmeticException),indeksiranje niza izvan opsega(ArrayIndexOutOfBoundsException), pokušaj da se dohvatiobjekat preko reference koja jenull.

• Runtime exceptionspredstavljau probleme nastalepgreškom u programiranju i nije

realno očekivati da bi programmogao da ih obradi na uspešannačin.

 

Throwable

Exception Error

RuntimeException

30

Rezervisana reč throws

• Za metod koji baca izuzetke mora da se označi kojeizuzetke baca

• Moraju se navesti svi izuzeci koje baca metod izuzevizuzetaka tipa Error i RuntimeException ili njihovih

potklasa

• Izuzeci koji ne moraju da se navode nazivaju seneproveravani izuzeci, a oni koji moraju da se navodenazivaju se proveravani izuzeci

• Ako se ne navedu izuzeci koje metod baca javlja segreška u prevoñenju

• Opšti oblik deklaracije metoda jetip imeMetoda(listaParametara) throws listaIzuzetaka

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 215/236

31

Primer za throws sa greškom

class PrimerZaThrows {

static void bacanjeIzuzetka() {

System.out.println("Unutar metoda.");

throw new IllegalAccessException("proba");

}

 public static void main(String args[]) {

PrimerZaThrows.bacanjeIzuzetka();

}

}

• Izuzetak tipa IllegalAccessException  je

proveravani izuzetak i ako se ne pojavi u deklaracijimetoda koji ga baca javlja se greška u prevoñenju

32

Ispravan primer za throws

class PrimerZaThrows {static void bacanjeIzuzetka() throws

IllegalAccessException {

System.out.println("Unutar metoda.");

throw new IllegalAccessException("proba");

}

 public static void main(String args[]) {

try {

PrimerZaThrows.bacanjeIzuzetka();

}

catch(IllegalAccessException e) {

System.out.println("Uhvaćen: " + e);

}

}

}

Unutar metoda.

Uhvaćen: java.lang.IllegalAccessException: proba

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 216/236

33

Rezervisana reč finally

• Prilikom pojavljivanja i obrade izuzetka dolazi dopreskakanja pojedinih naredbi

• Naredbe koje se ne smeju peskočiti, npr. zatvaranjefajla, stavljaju se u blok finally

• Blok finally se izvršava uvek bez obzira da li se

pojavljuje izuzetak ili ne

• Ako se metod prekida iz bloka try/catch zbogpojave izuzetka ili zbog naredbe return, blokfinally se izvršava neposredno pre izlaska iz metoda

• Blok finally nije obavezan

• Naredba try mora imati bar jednu od naredbi catch

ili finally

34

Primer za finally

class PrimerZaFinally {static void metodA() {

try {  // Izuzetak unutar try bloka

System.out.println("Unutar metoda A");

throw new RuntimeException("proba");

}

finally {

System.out.println("Metod A: finally blok");

}

}

static void metodB() {

try {

System.out.println("Unutar metoda B");return;  // return unutar try bloka

}

finally {

System.out.println("Metod B: finally blok");

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 217/236

35

Primer za finallystatic void metodC() {

try {  // try bloka koji se ne prekida

System.out.println("Unutar metoda C");

}

finally {

System.out.println("Metod C: finally blok");

}

}

 public static void main(String args[]) {

try {

metodA();

}

catch (Exception e) {

System.out.println("Uhvaćen izuzetak");

}

metodB();

metodC();

}

}

36

Rezultat izvršavanja programaC:\java PrimerZaFinally

Unutar metoda A

Metod A: finally blok

Uhvaćen izuzetak

Unutar metoda B

Metod B: finally blok

Unutar metoda C

Metod C: finally blok

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 218/236

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 219/2362

39

Metode definisane u klasi Throwable

• Throwable getCause() – Vraća razlog koji je prouzrokovao

tekući izuzetak

• Throwable initCause(Throwable uzrokIzu ) – Pridružuje

uzrokIzu pozivajućem izuzetku kao uzrok

• String getMessage() – vraća opis izuzetka.

• void printStackTrace() – Prikazuje stanje steka na standardnom

izlazu.

• String toString() – Opis izuzetka, koji koristi metoda println().

40

Primer za pravljenje izuzetka

class Izuzetak extends Exception {

 private int podatak;

Izuzetak(int a) {

podatak = a;

}

 public String toString() {

return "Izuzetak[" + podatak + "]";

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 220/2362

41

Primer za pravljenje izuzetka

class PrimerZaIzuzetak {

static void racunaj(int a) throws Izuzetak {System.out.println("racunaj(" + a + ")");

if(a > 10)

throw new Izuzetak(a);

System.out.println("Normalan izlaz");

}

 public static void main(String args[]) {

try {

PrimerZaIzuzetak.racunaj(1);

PrimerZaIzuzetak.racunaj(20);

}

catch (Izuzetak e) {

System.out.println("Uhvaćen " + e);

}

}

}

42

Rezultat izvršavanja programaC:\java PrimerZaIzuzetak

racunaj(1)

Normalan izlaz

racunaj(20)

Uhvaćen Izuzetak[20]

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 221/2362

43

Korišćenje izuzetaka

• Za obradu grešaka i vanrednih situacija programa uvektreba koristiti izuzetke

• Uvek kad metod ne može da obavi posao treba da baciizuzetak

• Nikad ne treba koristiti vraćanje šifre greške kao načinna koji metod prijavljuje da se pojavila greška

• Ne smatrati izuzetke opštim mehanizmom nelokalnoggrananja (tj. kao oblik naredbe go to).

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 222/236

1

Fuzija nizova

Zadatak 3.6 (str. 33):

Sastaviti program na jeziku Java za nalaženje fuzije dva niza celih brojeva koji su uređeni po

neopadajućem redosledu u treći, na isti način uređeni niz. Program treba da obrađujeproizvoljan broj kompleta ulaznih podataka.

Rešenje:

// Fuzija.java - Fuzija dva uredjena niza celih brojeva.

public class Fuzija {public static void main (String[] vpar) {

while (true) {

System.out.print ("na? "); int na = Citaj.Int ();

if (na < 0) break;

int[] a = new int [na];

System.out.print ("A ? "); for (int i=0; i<na;

a[i++]=Citaj.Int());

if (na == 0) System.out.println ();

System.out.print ("nb? "); int nb = Citaj.Int ();

if (nb < 0) break;

int[] b = new int [nb];

System.out.print ("B ? "); for (int i=0; i<nb;

b[i++]=Citaj.Int());

if (nb == 0) System.out.println ();

int nc = na + nb; int[] c = new int [nc];

int ia = 0, ib = 0, ic = 0;

while (ia<na && ib<nb)

c[ic++] = (a[ia] < b[ib]) ? a[ia++] : b[ib++];

while (ia < na) c[ic++] = a[ia++]; //ostatak niza a

2 4 5 7

 7 8

 

1 3 5 9 

9 1 2 3 4 

5 5 

7 7 8 9 

9

ia:

ib: ic:

Samo 1 indeks

se

inkrementira 

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 223/236

2

while (ib < nb) c[ic++] = b[ib++]; //ostatak niza b

System.out.print ("C = ");

for (int i=0; i<nc; System.out.print(c[i++]+" "));

System.out.print ("\n\n");

}

}

}

Rezultat izvršavanja:

% java Fuzija

na? 6

A ? 1 2 3 4 5 6

nb? 5

B ? 4 5 6 7 8

C = ...

na? 4

A ? 1 2 3 4

nb? 0

B ?

C = 1 2 3 4

na? 0

A ?

nb? 6

B ? 1 2 3 4 5 6

C = 1 2 3 4 5 6

na? -1

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 224/236

1

Kompleksni brojevi

Zadatak 4.2 (str. 41):

Projektovati na jeziku Java klasu kompleksnih brojeva.

Sastaviti glavni program za prikazivanje mogućnosti te klase.

,

,

,

// Kompl1.java - Klasa kompleksnih brojeva.

public class Kompl1 {

private double re, im; // Realni i imaginarni deo.

public Kompl1 () {} // Stvaranje kompleksnog broja.

public Kompl1 (double r) { re = r; }

public Kompl1 (double r, double i) { re = r; im = i; }

public double re () { return re; } // Realni deo.

public double im () { return im; } // Imaginarni deo.

public double abs () // Apsolutna vrednost.

{ return Math.sqrt (re*re + im*im); }

public double arg () // Argument.

Kom l1

- re, im

+ Kompl1()

+ re(), im(), abs(), arg()

+ postaviRe(), postaviIm(), postavi()

+ konjg()

+ zbir(), razlika(), proizvod(), kolicnik()+ citaj()

+ toString()+ main()

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 225/236

2

{ return (re!=0 || im!=0) ? Math.atan2(im,re) : 0; }

public Kompl1 postavi (double r, double i) // Postavljanje delova.

{ re = r; im = i; return this; }

public Kompl1 postaviRe (double r)

{ re = r; return this; }

public Kompl1 postaviIm (double i)

{ im = i; return this; }

public Kompl1 postavi (Kompl1 z)

{ re = z.re; im = z.im; return this; }

public Kompl1 konjg () // Konjugovan broj.

{ return new Kompl1 (re, -im); }

public Kompl1 zbir (Kompl1 b) // a += b

{ return new Kompl1 (re+b.re, im+b.im); }

public Kompl1 razlika (Kompl1 b) // a -= b{ return new Kompl1 (re-b.re, im-b.im); }

public Kompl1 proizvod (Kompl1 b) // a *= b

{ return new Kompl1 (re*b.re-im*b.im, im*b.re+re*b.im); }

public Kompl1 kolicnik (Kompl1 b) { // a /= b

double c = b.re*b.re + b.im*b.im;

return new Kompl1 ((re*b.re+im*b.im)/c, (im*b.re-re*b.im)/c);

}

public static Kompl1 citaj () // Citanje.

{ return new Kompl1 (Citaj.Double(), Citaj.Double()); }

public String toString () // Tekstualni oblik.

{ return "("+ re + "," + im +")"; }

// Glavna funkcija za ispitivanje klase Kompl1. =========================

public static void main (String[] vpar) {

System.out.print ("Prvi broj (re,im)? ");

Kompl1 x = new Kompl1 (Citaj.Double(), Citaj.Double());

System.out.print ("Drugi broj (re,im)? "); Kompl1 y = Kompl1.citaj ();

System.out.println ("x = (" + x.re() + ',' + x.im() + ')');

System.out.println ("y = " + y);

System.out.println ("x+y = " + x.zbir (y) );

System.out.println ("x-y = " + x.razlika (y) );

System.out.println ("x*y = " + x.proizvod (y) );

System.out.println ("x/y = " + x.kolicnik (y) );

}

}

Rezultat izvršavanja:

% javac Kompl1.java

% java Kompl1

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 226/236

3

Prvi broj (re,im)? 1 2

Drugi broj (re,im)? 3 4

x = (1.0,2.0)

y = (3.0,4.0)

x+y = (4.0,6.0)

x-y = (-2.0,-2.0)

x*y = (-5.0,10.0)

x/y = (0.44,0.08)

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 227/236

1

Skup uređenih realnih brojeva - klasa

Zadatak 4.6 (str. 50):

Projektovati na jeziku Java klasu uređenih skupova realnih brojeva. Predvideti:

- stvaranje praznog skupa i skupa koji sadrži jedan broj,

- stvaranje kopije skupa,- nalaženje unije, preseka i razlike dva skupa,

- sastavljanje tekstualnog prikaza skupa,

- čitanje skupa sa glavnog ulaza,- dohvatanje broja elemenata skupa

Sastaviti glavni program za prikazivanje mogućnosti te klase.

// Skup.java - Klasa uredjenih skupova.

class Skup {

private double[] niz; // Elementi skupa.

// Stvaranje skupa:

public Skup () { niz = new double [0]; } // praznog,

public Skup (double b) // od jednog broja.

{ niz = new double [1]; niz[0] = b; }

private void kopiraj (double[] a, int n) { // Kopiranje niza u

skup.

niz = new double [n];

for (int i=0; i<n; niz[i]=a[i++]);}

public Skup kopija() {

skup S = new Skup();

s.kopiraj(niz, niz.length);

return s;

}

Skup

- niz

+ Skup()

+ kopiraj()

+ kopija()

+ unija(), presek(), razlika()

+ citaj()

+ toString(), citaj()+ velicina()

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 228/236

2

public void unija (Skup s1, Skup s2) { // Unija dva skupa.

double[] a = new double [s1.niz.length+s2.niz.length]; int n = 0;

for (int i=0, j=0; i<s1.niz.length || j<s2.niz.length; ) {

a[n++] = i==s1.niz.length ? s2.niz[j++] ://prepisati ostatak//skupa s2

j==s2.niz.length ? s1.niz[i++] ://prepisati ostatak

//skupa s1

s1.niz[i]<s2.niz[j] ? s1.niz[i++] : //skup je ureñ en-//manji broj ide prvi!

s1.niz[i]>s2.niz[j] ? s2.niz[j++] :

s1.niz[i++] ; //elementi su//jednaki

if (j<s2.niz.length && s2.niz[j]==a[n-1]) j++; //ako su//elementi jednaki, preskočiti sledeće j

}

kopiraj (a, n);

}

public void presek (Skup s1, Skup s2) { // Presek dva skupa.

double[] a = new double [s1.niz.length<s2.niz.length ?

s1.niz.length : s2.niz.length];

int n = 0;

for (int i=0, j=0; i<s1.niz.length && j<s2.niz.length; )

if (s1.niz[i] < s2.niz[j]) i++;

else if (s1.niz[i] > s2.niz[j]) j++;

else { a[n++] = s1.niz[i++]; j++; } //elementi su jednaki 

kopiraj (a, n);

}

// Razlika dva skupa

// Primer: A=1,2,3,4, B = 3,4,5,6,7public void razlika (Skup s1, Skup s2) { // Razlika dva skupa.

double[] a = new double [s1.niz.length]; int n = 0;

for (int i=0, j=0; i<s1.niz.length; )

if (j == s2.niz.length) a[n++] = s1.niz[i++]; // ako s1//ima vise elemenata od s2 i//dosli smo do kraja drugog niza

else if (s1.niz[i] < s2.niz[j]) a[n++] = s1.niz[i++]; // OK,//ulazi u razliku, jer drugi niz sigurno nema taj element

else if (s1.niz[i] > s2.niz[j]) j++; // idi na sledeći j, i //ostaje isto

else { i++; j++; } //elementi su jedn. 

kopiraj (a, n);}

public String toString () { // Tekstualni oblik

skupa.

String s = "{";

for (int i=0; i<niz.length; i++)

{ s += niz[i]; if (i < niz.length-1) s += ","; }

return s + "}";

Dok još nismo izašli iz opsega

nijednog skupa.

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 229/236

3

}

public static Skup citaj () { // Citanje skupa.

Skup s = new Skup (); int n = Citaj.Int ();

for (int i=0; i<n; i++) s.unija (s, new Skup (Citaj.Double()));

return s;

}

public int velicina () { return niz.length; } // Velicina skupa.

}

// SkupT.java - Ispitivanje klase uredjenih skupova.

public class SkupT {

public static void main (String[] vpar) {char jos;

do {

System.out.print ("niz1? "); Skup s1 = Skup.citaj ();

System.out.print ("niz2? "); Skup s2 = Skup.citaj ();

System.out.println ("s1 =" + s1);

System.out.println ("s2 =" + s2);

Skup s = new Skup ();

s.unija (s1, s2); System.out.println ("s1+s2=" + s );

s.presek (s1, s2); System.out.println ("s1*s2=" + s );

s.razlika(s1, s2); System.out.println ("s1-s2=" + s );

System.out.print ("\nJos? "); jos = Citaj.Char ();

} while (jos=='d' || jos=='D');

}

}

Rezultat izvršavanja:

% javac SkupT.java

% java SkupT

niz1? 4 1 2 3 4 

niz2? 5 3 4 5 6 7s1 ={1.0,2.0,3.0,4.0}

s2 ={3.0,4.0,5.0,6.0,7.0}

s1+s2={1.0,2.0,3.0,4.0,5.0,6.0,7.0}

s1*s2={3.0,4.0}

s1-s2={1.0,2.0}

Jos? d

niz1? 6 9 3 5 1 7 3

niz2? 4 6 2 8 8 

s1 ={1.0,3.0,5.0,7.0,9.0}

s2 ={2.0,6.0,8.0}

s1+s2={1.0,2.0,3.0,5.0,6.0,7.0,8.0,9.0}

s1*s2={}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 230/236

4

s1-s2={1.0,3.0,5.0,7.0,9.0}

Jos? n

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 231/236

1

Transponovanje matrice

Zadatak 3.10 (str. 38):

Sastaviti program na jeziku Java za transponovanje pravougaone matrice celih brojeva.

Program treba da obrađuje proizvoljan broj kompleta podataka.

Rešenje:

// Transpon.java - Transponovanje matrice.

public class Transpon {

public static void main (String[] vpar) {

while (true) {

// Citanje dimenzija matrice:

System.out.print ("\nBroj vrsta i kolona? ");int m = Citaj.Int (), n = Citaj.Int();

if (m<=0 || n<=0) break;

// Citanje elemenata matrice:

int[][] a = new int [m][n];

for (int i=0; i<m; i++) {

System.out.print (i+1 +". vrsta? ");

for (int j=0; j<n;j++)

a[i][j]=Citaj.Int());

}

// Obrazovanje transponovane matrice:

int[][] b = new int [n][m];

for (int i=0; i<n; i++)

for (int j=0; j<m; j++) b[i][j] = a[j][i];

// Zamena stare matrice novom matricom:

a = b; b = null; int p = m; m = n; n = p; // dodela reference i

// promena vrednosti indeksa

// Ispisivanje rezultata:

System.out.print ("\nTransponovana matrica:\n");

for (int i=0; i<m; i++) {

for (int j=0; j<n; j++) System.out.print(a[i][j]+" ");

System.out.println ();}

}

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 232/236

2

Rezultat izvršavanja:

% java Transpon

Broj vrsta i kolona? 3 4

1. vrsta? 1 2 3 4

2. vrsta? 5 6 7 8

3. vrsta? 9 0 1 2

Transponovana matrica:

1 5 9

2 6 0

3 7 1

4 8 2

Broj vrsta i kolona? 0 0

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 233/236

1

Umetanje niza u niz

Zadatak 3.8 (str. 36):

Sastaviti program na jeziku Java za umetanje niza brojeva u drugi niz počev od zadate pozicije

(ispred prvog elementa ako je pozicija manja od nule, odnosno iza poslednjeg elementa ako jepozicija veća od dužine odredišnog niza). Program treba da obrađuje proizvoljan broj kompleta

podataka.

Rešenje:

Napomena za a=c: kopija reference (pokazivača) na niz c. Problem: ako dodelimo vrednost

promenljivoj a[i], menja se i c[i]. Kako dodeliti vrednosti drugom nizu? - U petlji,

prethodno new.

// Umetni.java - Umetanje elemenata niza u drugi niz.

public class Umetni {

public static void main (String[] vpar) {

while (true) {

System.out.print ("m? "); int m = Citaj.Int ();

if (m < 0) break;

int[] a = new int [m];

System.out.print ("A? "); for (int i=0; i<m;

a[i++]=Citaj.Int());

if (m == 0) System.out.println ();

System.out.print ("n? "); int n = Citaj.Int ();

if (n < 0) break;

int[] b = new int [n];System.out.print ("B? "); for (int j=0; j<n;

b[j++]=Citaj.Int());

if (n == 0) System.out.println ();

System.out.print ("p? "); int p = Citaj.Int ();

if (p < 0) p = 0;

if (p > m) p = m;

int[] c = new int [m+n];

int i = 0, j = 0, k = 0;

while (j < p) c[k++] = a[j++];

while (i < n) c[k++] = b[i++];

while (j < m) c[k++] = a[j++];a = c; c = null; m += n;

System.out.print ("A= ");

for (i=0; i<m; System.out.print(a[i++]+" "));

System.out.print ("\n\n");

}

}

}

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 234/236

2

 

Rezultat izvršavanja:

% java Umetni

m? 5

A? 0 1 2 3 4

n? 3

B? 11 22 33

p? 2

A= 0 1 11 22 33 2 3 4

m? 5

A? 0 1 2 3 4

n? 3

B? 11 22 33

p? -2

A= 11 22 33 0 1 2 3 4

m? 5

A? 0 1 2 3 4

n? 3

B? 11 22 33

p? 8

A= 0 1 2 3 4 11 22 33

m? -1

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 235/236

1

Uređivanje niza metodom izbora

Zadatak 3.7 (str. 34):

Sastaviti program na jeziku Java za uređivanje niza brojeva po neopadajućem redosledu

metodom izbora.

Program treba da obrađuje pročita dužinu niza, popuni niz slučajnim jednocifrenimdecimalnim celim brojevima, ispiše dobijeni niz, uredi nit, ispiše dobijeni rezultat i ponavlja

prethodne korake sve dok za dužinu niza ne pročita nedozvoljenu vrednost.

Rešenje:

// Fuzija.java - Fuzija dva uredjena niza celih brojeva.

public class Fuzija {

public static void main (String[] vpar) {

while (true) {

System.out.print ("na? "); int na = Citaj.Int ();

if (na < 0) break;

int[] a = new int [na];

System.out.print ("A ? "); for (int i=0; i<na;

a[i++]=Citaj.Int());

if (na == 0) System.out.println ();

System.out.print ("nb? "); int nb = Citaj.Int ();

if (nb < 0) break;

int[] b = new int [nb];

System.out.print ("B ? "); for (int i=0; i<nb;

b[i++]=Citaj.Int());

if (nb == 0) System.out.println ();

int nc = na + nb; int[] c = new int [nc];

int ia = 0, ib = 0, ic = 0;

2 4 5 7  7 8 

1 3 5 9 

9 1 2 3 4 

5 5 

7 7 8 9 

9

ia:

ib: ic:

Samo 1 indeks

se

inkrementira 

8/3/2019 Java Uvod SVE

http://slidepdf.com/reader/full/java-uvod-sve 236/236

while (ia<na && ib<nb)

c[ic++] = (a[ia] < b[ib]) ? a[ia++] : b[ib++];

while (ia < na) c[ic++] = a[ia++]; //ostatak niza b

while (ib < nb) c[ic++] = b[ib++]; //ostatak niza b

System.out.print ("C = ");

for (int i=0; i<nc; System.out.print(c[i++]+" "));

System.out.print ("\n\n");

}

}

}