You are on page 1of 24

​ .Da li je delete, next, exit, main ili null kljucna rec u Javi?

9
Nijedna od ovih reci nije kljucna rec u Javi. Delete, exit i next su operacije koje
se izvrsavaju prilikom izvrsenja koda, main je predefinisana metoda, a null je
podrazumevana vrednost za tip String kao i za reference na objekte.

10.Ako se ne proslede nikakvi argumenti na komandnoj liniji onda ce niz


Stringova u mainu biti prazan ili null?
Bice prazan, ali ne i null.

11.Sta ako se napise static public void umesto public static void?
Program se normalno kompajlira i normalno pokrece.

12.Koja je podrazumevana vrednost lokalnih promenljivih?


Lokalne promenljive nemaju podrazumevane vrednosti, ni primitivne
promenljive, ni reference na objekte koje su null. Kompajler detektuje ovo kao
gresku u vreme prevodjenja.

13.Koja je razlika izmedju Object Oriented Programming Languages i


Object Based Programming Languages?
Programski jezici zasnovani na objektima u sustini imaju sve kao i OOP jezici,
ali ne podrzavaju nasledjivanje kao takvo. Takav je na primer JavaScript.

14. Sta ce biti podrazumevana vrednost promenljive koja je deklarisana


kao referenca na objekat u kodu?
Reference na objekat imaju podrazumevanu vrednost null.

15.Sta je konstruktor?
Konstruktor je mehanizam slican metodi, ali se ipak malo razlikuje. Konstruktor
se mora zvati kao i klasa ciji je konstruktor i ne zadaje mu se nikakv tip
povratne vrednosti. Konstruktor inicijalizuje novo kreirani objekat i poziva se u
vreme kreiranja objekta. Mozemo imati vise konstruktora za neku klasu i to je
preklapanje konstruktora. Konstruktor iste klase mozemo pozvati sa
this(argumenti), a konstruktor direktne natklase sa super(argumenti).
Podrazumevani konstruktor kreira Java Compiler samo u slucaju da mi nismo
napisali nijedan konstruktor.

16.Koja je svrha podrazumevanog konstruktora?


Podrazumevani konstruktor inicijalizuje novi kreirani objekat sa podrazumevanim
vrednostima. Java Compiler pravi podrazumevani konstruktor ukoliko nije dat
nikakav drugi konstruktor.

17.Da li konstruktor vraca bilo kakvu vrednost?


Da, vraca objekat tekuce klase koji smo inicijalizovali pomocu tog konstruktora,
ali ne moze se navoditi povratni tip za konstruktor iako on vraca vrednost, jer
povratni tip mora biti tip te klase ciji je konstruktor.
18.Da li konstruktor nasledjen?
Ne, konstruktor nije nasledjen tj dete ne moze da se napravi pomocu
konstruktora roditelja npr Izvedena i=new Osnovna(parametri); tj. izvedena
klasa mora da ima svoj konstruktor. Ako u konstruktoru izvedene klase ne
navedemo pozivanje konstruktora osnovne klase, a on postoji kao takav
napisan, nepodrazumevani javice se greska. Ukoliko je podrazumevani samo
onda je ok.
Ako dete ima podrazumevani konstruktor, a roditelj ima svoj konstruktor opet
greska, jer ce se moraju proslediti parametri za roditeljski i pozvati ga iz deteta.
Ne moramo eksplicitno da zovemo super() jer ce se on sam pozvati za slucaj da
nema argumenata koji se prosledjuju za taj super().

19. Da li konstruktor moze da bude final?


Ne konstruktor ne moze da bude final.

20.Sta je staticko polje klase?


Staticko polje je zajednicko za celu klasu, tj. za sve njene objekte. Nece svaki
objekat te klase imati svoju kopiju tog polja, vec ce svi deliti pristup tom
zajednickokm polju. Inicijalizuje se pre pravljenja bilo kakvog objekta, prilikom
ucitavanja klase i dobija memoriju u class area, pa mu se moze pristupiti sa
ImeKlase.polje i dok ne postoji nijedan objekat i to je jedini nacin da mu se
pristupi, dakle ne moze preko objekata. Moze se menjati ako nije final.

21.Sta je staticka metoda klase?


Staticka metoda je metoda klase, dok kazemo da su obicne nestaticke metode
metode instance. Staticku metodu mozemo pozvati i jos dok nemamo nijedan
objekat te klase sa ImeKlase.metoda(argumenti) i to je jedini nacin da joj se
prustupi, dakle ne moze preko objekata​ . Iz staticke metode moze se direktno
pristupiti samo statickim poljima i statickim metodama te klase, ali ne i
nestatickim i u njima se ne mogu koristiti kljucne reci super i this.

22.Zasto je main metoda static?


Zato sto je time omoguceno pozivanje main metode bez pravljenja objekata
klase. Ukoliko main metoda ne bi bila static onda bi JVM morala prvo da kreira
objekat klase u kojoj je i to sve dalje povecava koriscenje memorije nepotrebno.

23.Sta je staticki blok?


Staticki blok se koristi za inicijalizaciju statickih polja klase. Izvrsava se samo
jednom, pre main metode, prilikom ucitavanja klase.

24.Da li mozemo da izvrsimo program bez main() metode?


Da. Recimo pomocu statickog bloka. Staticki blok se uglavnom koristi za
inicijalizaciju statickih polja klase. Izvrsava se samo jednom, pre main metode
(ukoliko ona postoji), prilikom ucitavanja klase.
25.Sta ako se modifikator static izbaci iz potpisa main() metode?
Kompajlirace se program, ali ce puci u runtime-u. Prijavice gresku za to.

26.Koje su razlike izmedju staticke metode i obicne nestaticke metode?


Staticka metoda se moze pozvati za klasu dok nije napravljen nijedan objekat, a
nestaticka metoda se ne moze pozvati dok nemamo nijedan objekat klase.
Staticka metoda ne moze direktno da pristupa nestatickim poljima i metodama i
ne moze da koristi kljucne reci super i this.

27.Sta je this u javi?


To je kljucna rec koja referise na objekat tekuce klase tj. current object.

28.Sta je nasledjivanje?
Nasledjivanje je pojava kod izvodjenja klasa gde imamo izvedenu klasu koje je
zapravo vrsta osnovne klase sa nekim svojim dodatnim specificnostima.
Izvedena klasa ce naslediti sva polja i metode od osnovne klase nestaticke, a
pored doga moze imati i svoja polja i metode. Nasledjivanje omogucava da se ne
kuca dva puta isti kod i koristi se kod redefinisanja klasa i dalje za polimorfizam.

29.Koja klasa je natklasa svake klase?


Klasa Object je natklasa svake klase.

30.Zasto visestruko nasledjivanje nije podrzano u Javi?


U Javi nije dozvoljeno da jedna klasa bude izvedena iz vise klasa, tj nije
podrzano visestruko nasledjivanje radi smanjanja kompleksnosti koda i
uproscavanja, ali je taj problem delimicno resen time sto je dozvoljeno da jedna
klasa implementira vise interfejsa.

33.Zasto Java ne podrzava pokazivace?


Pokazivac moze da pokazuje na proizvolju memorijsu lokaciju, tj. adresu u
memoriji. Oni se u Javi ne koriste, niti su dozvoljeni jer su nebezbedni za
koriscenje. U opstem slucaju pokazivacu bi se mogla dodeliti neka adresa koja je
van Java izvrsnog okruzenja, pa bi se probila zastitna barijera izmedju Javinog
izvrsnog okruzenja i racunara na kome se izvrsava program, a to moze da
uzrokuje haos, pa zato upotreba pokazivaca nije ni dozvoljena.

34.Sta je super u Javi?


To je kljucna rec koja referise na direktnu natklasu tekuce klase tj. njen objekat.
Moze da se pozove iz izvedene klase u konstruktoru kako bi se pozvao
konstruktor natklase ukoliko nije podrazumevani, tj. ukoliko mu treba dati neke
argumente. Takodje se moze koristiti za pristup poljima i metodama natklase
naravno ukoliko postoje prava pristupa.
35.Da li mozemo da koristimo i this() i super() u konstruktoru?
this() je preklopljeni konstruktor te klase,super() je konstruktor direktne
natklase tekuce klase .Ne mozemo da pozivamo istovremeno i this() i super() u
konstruru, jer kada se ti konstruktori pozivaju oni moraju biti prva naredba u
okviru konstruktora u kome se koriste

36.Sta je kloniranje objekata?


Kloniranje objekata se koristi da se napravi identicna kopija nekog objekta.
Za kloniranje se koristi clone() metoda klase Object. Klasa ciji objekat zelimo da
kloniramo mora da implementira interface Cloneable. Ukoliko to ne uradimo
generisace se izuzetak. (Svaka klasa ima metodu clone() ali ne moze da je
koristi ako nije implementirala interfejs Cloneable()).

37.Sta je preklapanje metoda?


Kada u okviru iste klase imamo vise metoda sa istim nazivom koje se razlikuju
po broju i/ili tipovima parametara onda je rec o preklapanju metoda. Tip
povratne vrednosti moze biti isti ili razlicit to je nebitno, ali ne vazi se da se
razlikuju samo po tipu povratne vrednosti jer to nije dozvoljeno i prijavice nam
gresku ukoliko pokusamo da otkucamo tako nesto. Citljivost koda se povecava
sa preklapanjem metoda. Koja metoda ce se pozvati odlucuje se na osnovu
broja i tipova stvarnih argumenata koji se zadaju prilikom poziva takve metode.
Ukoliko nije moguce uparivanje ni sa jednom napisanom metodom pokusace se
automatska konverzija tipova.

38.Zasto preklapanje metoda u Javi nije moguce samo promenom tipa


povratne vrednosti?
Zbog dvosmislenosti. Ukoliko bi imali dve preklopljene metode sa istim brojem i
tipovima parametara, koje se razlikuju samo po tipu povratne vrednosti, pri
pozivu takve metode ne bi znao koju metodu da pozove.

39.Da li mozemo da overloadujemo tj. preklopimo metodu main?


Da, mozemo da overloadujemo tj. preklopimo metodu main, samo je bitno da te
preklopljene metode budu razlicite po broju i/ili tipu parametara tj. argumenata.

40.Sta je redefinisanje metoda u Javi?


Kada u izvedenoj klasi postoji specificna implementacija metode koja vec postoji
u osnovnoj klasi to je poznato kao redefinisanje metode.Metode moraju imati
isto ime kao i broj i tipove parametara i povratne vrednosti.(izuzev kovarijantne)
Kada imamo referencu tipa osnovne klase koja referise na objekat izvedene
klase i pozovemo tu metodu za tu referencu, pozvace se redefinisana verzija te
metode.Koja verzija metode ce se pozvati odredjuje se dinamicki u vreme
izvrsavanja.
41.Da li se moze redefinisati staticka metoda?
Ne, ne moze se redefinistati staticka metoda, jer je to metoda klase, a ne
metoda objekta tj. instance i jer staticka metoda dobija prostor u memoriji u
class area, a metoda instance dobija prostor na heap.u.

42. Zasto ne mozemo da redefinisemo staticku metodu?


Zato sto je staticka metoda deo klase i vezuje se za klasu dok je metoda
instance vezana za objekat.Staticka metoda dobija prostor u memoriju u class
area, a metoda instance dobija prostor na heap.

43.Da li mozemo da redefinisemo preklopljenu metodu?


Da, mozemo da redefinisemo preklopljenu metodu.

44.Koje su razlike izmedju preklapanja metode i redefinisanja metode?


Preklapaju se metode jedne iste klase, a redefinisanje se radi tako sto se metoda
koja je vec definisana u osnovnoj klasi redefinise u njenoj izvedenoj klasi.
Kod preklapanja metode ista su imena, a moraju da se razlikuju po broju i/ili
tipu parametara, dok kod redefinisanja metode ista su imena i broj i tipovi
parametara moraju biti isti. Preklapanje metoda povecava citljivost programa, a
redefinisanje metoda obezbedjuje specificnu implementaciju u potklasi metode
koja je vec definisana u natklasi i stvara uslove za polimorfizam.

45.Da li mozemo imati virtuelne metode u Javi?


Da, metode su vec podrazumevano virtuelne u Javi.

46.Sta je kovarijantni povratni tip?


Kada imamo redefinisanje metode u izvedenoj klasi broj i tipovi parametara
moraju da odgovaraju broju i tipovima parametara u definiciji te metode u
osnovnoj klasi, a i tipovi povratnih vrednosti moraju da budu isti i naravno ime
mora da bude isto. Medjutim u novijim verzijama Jave, dozvoljeno je da ukoliko
je tip povratne vrednosti u osnovnoj klasi tip te klase, da u tip povratne
vrednosti u izvedenoj klasi bude tip izvedene klase. To se naziva kovarijantni
povratni tip.

47.Sta je final promenljiva?


Final promenljiva je clan klase kome nakon sto ga inicijalizujemo (tj. dodelimo
mu pocetnu vrednost) ne mozemo menjati vrednost, tj. bice kao konstanta.Pise
se obicno velikim slovima.

48.Sta je final metoda?


Kada prilikom deklaracije metode nju proglasimo za final metodu, time
zabranjujemo da se ta metoda kasnije redefinise.
49.Sta je final klasa?
Kada klasu deklarisemo kao final, time zabranjunjemo da se iz nje izvode neke
druge klase.

50.Sta je blank final variable?


Blank final variable je final variable tj. konstanta kojoj se ne dodeljuje vrednost
prilikom deklaracije. (To sto je kontstanta znaci da se njena vrednost nakon sto
joj se dodeli nece moci vise nikada promeniti).Kako joj nije dodeljena vrednost
prilikom deklaracije, ona se moze inicijalizovati samo u konstruktoru ukoliko je
nestaticka tj. samo u statickom bloku ukoliko je staticka.

51.Da li mozemo da inicijalizujemo blank final variable?


Ukoliko nije staticka mozemo da je inicijalizujemo u konstruktoru, a ukoliko jeste
staticka mozemo da je inicijalizujemo u statickom bloku. Nakon toga vrednost joj
se nece moci menjati.

52.Da li se main metoda moze deklarisati kao final?


Moze sa public static final void main(String[] args){}

53.Sta je polimorfizam u vreme izvrsavanja?


To je mehanizam koji omogucava da se u vreme izvrsavanja, a ne u vreme
kompajliranja, utvrdi koja ce se redefinisana metoda pozvati. Kada imamo
referencu tipa osnovne klase koja referise na objekat tipa izvedene klase i za tu
referencu pozovemo redefinisanu metodu, onda ce se u vreme izvrsavanja na
osnovu tipa objekta na koji referenca referise pozvati njegova redefinisana
metoda ukoliko postoji.

54.Da li se polimorfizam moze primeniti na polja objekta kao sto se


primenjuje na metode?
Ne, jer pri izvodjenju postoji redefinisanje metoda u izvedenoj klasi, dok
redefinisanje polja ne postoji. Dakle iako u izvedenoj klasi postoji polje sa istim
nazivom i tipom kao u osnovnoj klasi, nikakvo redefinisanje ne vazi kao ni
polimorfizam.

55.Koja je razlika izmedju statickog i dinamickog vezivanja?


Kod statickog vezivanja tipovi svih objekata su odredjen u vreme prevodjenja, a
kod dinamickog vezivanja tipovi objekata se odredjuju u vreme izvrsavanja.

56.Sta je apstrakcija?
Apstrakcija je proces skrivanja implementacionih detalja i izlaganja korisniku
samo funkcionalnosti koje on moze da koristi. Nrp on zna potpis metode tj. sta
radi i kako moze da je pozove, bez da on zna kako ta metoda radi.

57.Koja je razlika izmedju apstrakcije i enkapsulacije?


Apstrakcija skriva implementacione detalje, a enkapsulacija umotava kod i
podatke u jednu celinu kao npr kod klasa i odredjuje prava pristupa delovima te
celine.

58.Sta je apstraktna klasa?


Apstraktna klasa je specijalna vrsta klase. Ima modifikator abstract i ne mogu se
kreirati objekti takve klase.Ukoliko ima bar jednu apstraktnu metodu klasa mora
biti apstraktna, a moze postojati apstraktna klasa bez i jedne apstraktne
metode. Ocekuje se da se takva klasa prosiri tj. da se iz nje izvedene neka klasa
koja ce implementirati te apstraktne metode i ciji objekti ce moci da se kreiraju.
Nju koristimo kada zelimo da zabranimo kreiranje objekata neke klase, ali da
istovremeno uvedemo metode koje ce njene izvedene klase morati da
redefenisu. Apstraktna klasa moze da ima konstruktor koji ce se pozivati sa
super iz izvedenih klasa koje nasledjuju tu apstraktnu klasu i moze se napisati
referenca tipa te apstraktne klase ali ona mora da upucuje na konkretne objekte
izvedenih klasa. Pomocu te reference moze pristupati samo poljima i metodama
iz apstraktne klase​(naravno ukoliko im je dozvoljen pristup), a ne i ovima iz
konkretne izvedene klase.

59.Da li moze da bude asptraktna metoda bez apstraktne klase?


Ne, svaka klasa koja ima bar jednu apstraktnu metodu mora i sama biti
deklarisana kao apstraktna klasa.

60.Da li neka metoda klase istovremeno moze da bude i abstract i final?


Ne, nijedna metoda ne moze da bude istovremeno i abstract i final, jer se final
metoda ne moze redefinisati, a za abstract metodu se ocekuje da se ona
redefiniste u izvedenim klasama kako bi se mogla pozivati.

61.Da li je moguce kreirati tj. instancirati objekat apstraktne klase?


Nije moguce kreirati tj. instancirati objekat apstraktne klase.

62.Sta je interface?
Interface je nalik na klasu sa ovim razlikama: Pocinje kljucnom recju interface
umesto class i ranije je mogao da ima samo static final variable tj. staticke
kontstante i apstraktne metode. Medjutim u novijim verzijama kao sto je Java8
dozvoljeno je da interfejs moze da ima i konkretne podrazumevane metode kao i
staticke metode, ali te staticke nisu ove sto su apstraktne. ​Kada napravimo
podrazumevanu metodu u interfejsu nju ne moramo da redefinisemo, ali
mozemo. (Svrha je da se izbegne modifikacija svih postojecih klasa koje
implementiraju taj int​erfejs dodavanjem nove metode u interfejs a ne u svaku
klasu pojedinacno) . Takodje je dozvoljeno je da interfejs ima i static metode ali
ne ove apstrakt nego posebno staticke metode . Te staticke metode se pozivaju
ImeInterfejsa.imeMetode(argumenti) To je kao obicna funkcija, posto Java nema
funkcije samo metode, pa je Static metoda zamena za funkciju. I polja i metode
imaju podrazumevani modifikator pristupa public i ne moze se napisati nijedan
drugi. Koristi se da bi se obezbedila potpuna apstrakcija kao i delimicno resio
problem zabrane visestrukog nasledjivanja za klase u Javi. Objekti tipa Interface
se ne mogu instancirati bas kao ni objekti apstraktnih klasa. Klasa moze da
nasledi samo jednu klasu, ali moze istovremeno i da implementira vise
interfejsa. Klasa koja implementira neki interfejs mora da implementira sve
njegove apstraktne metode, inace je i sama apstraktna klasa. Interfejs ne moze
da ima konstruktor. Moze postojati referenca tipa Interfejsa koja moze da
referise objekte klasa koje implementiraju taj interfejs. Tada mogu da se
pozivaju samo te metode pomocu te reference,kojima je pravo pristupa
obezbedjeno ali posto je to interfejs uvek je public za njegova polja i metode.
Ne moze da se pristupa ostalim poljima i metodama iz te klase.
Interfejs moze biti izveden iz drugog interfejsa, u tom slucaju klasa koja
implementira izvedeni interfejs mora implementirati sve njegove apstraktne
metode, ukljucujuci i one koje je nasledio izvodjenjem. Ukoliko se ne navede
pristup podrazumevano je paketski. Interfejs je jedan od nacina kako da
uvedemo neke konstante u veci broj klasa, tako sto cemo ih staviti u neki
interfejs, a onda ce sve one implementirati taj interfejs.

63.Da li metoda interfejsa moze da se deklarise kao static?


U novim verzijama Jave pocevsi od Jave 8 mogu da postoje static metode unutar
interfejsa, ali ne mogu metode koje su abstract da budu istovremeno i static.

64.Da li interface moze da se deklarise kao final?


Ne, interface ne moze da se deklarise kao final, jer ce neke klase implementirati
taj interface.

65.Sta je marker interface?


Marker interface je specijalna vrsta interfejsa koji je prazan. Marker interfejsi su
Cloneable, Serializable, Remote. Kada napisemo da neka klasa implementira
interface npr Cloneable to znaci da se time omogucava opcija za kloniranje.

66.Koje su razlike izmedju apstraktne klase i interfejsa?


Ranije interfejs nije mogao da ima neapstraktne konkretne ni staticke metode, a
apstraktna klasa moze, medjutim u novim verzijama jave pocevsi od Java8 moze
da ima i interfejs metode koje su konkretne podrazumevane. Apstraktna klasa
moze da ima staticke metode, a ranije interface nije mogao, medjutim u novijim
verzijama jave pocevsi od Java 8 moze i interfejs da ima staticke metode.
Apstraktna klasa moze da ima polja koja nisu static final.
Interfejs ne moze da ima polja koja nisu static final.
Interfejs ima sva polja i metode podrazumevano public.
Apstraktna klasa moze imati i private i protected polja i metode.
Apstraktna klasa moze da ima konstruktor.
Interfejs ne moze da ima konstruktor.
Neka klasa moze da nasledi samo jednu apstraktnu klasu.
Neka klasa moze da implementira jedan ili vise interfejsa.
67.Da li mozemo da definisemo pristup promenljivima/metodama u
interfejsu private ili protected?
Ne u interfejsu je i static final poljima tj. konstantama i metodama
podrazumevan modifikator pristupa public i ne moze se napisati nijedan drugi.
Ovaj public se moze napisati, mada i ako se ne napise bice podrazumevan.

68.Kada mozemo referencu na objekat neke klase da kastujemo u


referencu na interfejs?
Kada ta klasa objekta implementira taj interface.

69.Sta je paket?
Paket predstavlja skup klasa, interferjsa i podpaketa koji se nalaze u okviru tog
paketa. Koriscenjem paketa regulisu prava pristupa odnosno zastita pristupa,
kao i jednistvenost imena. ​Postoje vec napravljeni Javini paketi sa nekim
predefinisanim stvarima i korisnicki paketi koje mi pravimo dok radimo.

70.Da li je potrebno da svaki put importujemo paket java.lang i zasto?


Ne, ne moramo da ga importujemo svaki put.
On se podrazumevano loaduje od strane JVM.

71.Da li mozemo da importujemo isti paket/klasu vise puta?


Da li ce JVM da ga loaduje vise puta u vreme izvrsavanja?
Mozemo da importujemo isti paket/klasu vise puta, nece prijaviti nikavu gresku.
JVM ce da loaduje samo jednom taj paket/klasu u vreme izvrsavanja.

72.Sta je static import?


Sa static importom mozemo da pristupamo direktno statickim poljima klase bez
navodjenja imena te klase.

73.Sta je Exception Handling?


Exception Handling je mehanizam za obradu izuzetaka koji nastaju za vreme
izvrsavanja programa. Koristi se da se obrade unapred predvidjene greske koje
mogu da nastanu.

74.Koja je razlika izmedju Checked & Unchecked Exceptions?


Klase koje prosiruju Runtime Execption su poznate kao Unchecked Execptions.
Njih ne treba navoditi u throws delu nijedne metode. Prevodilac ne proverava da
li metoda te izuzetke obradjuje ili generise. Checked izuzeci su objekti klase koja
nasledjuje Exception, ali van Runtime Exception. Moraju se ukljuciti u listu
odredbe throws.

75.Sta je osnovna klasa za Error i Exception?


Klasa Throwable.Klasa Throwable je osnovna klasa za izuzetke.Iz nje se izvode
Error i Exception.Iz Exception se izvode Runtime Exception i druge nase klase
izuzetaka koji su checked.
76.Da li je neophodno da svaki try block bude pracen sa catch blokom?
Ne, nije neophodno da svaki try block bude pracen sa catch blokom, ali mora biti
pracen sa catch ili finally blokom. Svi checked izuzeci koji mogu da budu baceni
treba da se navedu u throws delu metode.
77.Sta je finally block?
Finally block je block koji se uvek izvrsava, sem ukoliko se nasilno ne izadje iz
programa sa System.exit ili process abort. U njemu se nalaze operacije za
zatvaranje fajla, zatvaranje konekcije itd. On se koristi jer kada se baci izuzetak
u try bloku i ode u catch da se obradi taj izuzetak ili vrati u program koji zove
funkciju da se tamo obradi izuzetak, mogu ostati neodradjene ovakve opcije
ukoliko ne postoji finally block.

78.Da li finally block moze da bude koriscen bez catch bloka?


Da, moze da bude odmah nakon try blocka. U svakom slucaju, mora da se nadje
ili iza try ili iza catch bloka.
79.Da li postoji neki slucaj kada finally block nece biti izvrsen?
Da, finally block nece biti izvrsen, kada se izadje iz programa sa System.exit ili
process abort itd. U svim drugim slucajevima finally block se izvrsava.

80.Koje su razlike izmedju kljucnih reci throw i throws?


Throw se koristi da se eksplicitno baci izuzetak, a throws se koristi da se
deklarise tip izuzetka koji se moze baciti. Iza throw se koristi instanca, a iza
throws se navodi klasa. Throw se koristi u metodi, a throws u deklaraciji metode.
Sa throw se ne moze baciti visestruki izuzetak, a sa throws se moze deklarisati
visestruki izuzetak. Checked izuzeci ne mogu biti baceni samo sa throw ukoliko
nisu navedeni u throws delu.

81.Moze li izuzetak biti retrown?


Da. To znaci da je neki izuzetak bacen sa try i u njegovom catch bloku se
ponovo baci, pa ga neki spoljasnji catch blok obradjuje od pozivajuce metode ili
slicno.

82.Da li moze redefinisana metoda u potklasi da baca izuzetak, ako


definisana metoda u natklasi ne baca izuzetak?
Da ali samo unchecked, ne i checked.

83.Sta je exception propagation?


Prosledjivanje objekta izuzetka onome ko je pozvao metodu je propagacija
izuzetka.

84.Sta znaci nepromenljivo kada je rec o Stringovima?


To znaci kada jednom napravimo neki String mi ga ne mozemo kasnije izmeniti.
Mozemo referenci koja referise na taj String promeniti da referise na neki drugi
String, ali sam objekat Stringa ne mozemo promeniti.

85.Zasto su objekti tipa String nepromenljivi u Javi?


Pretpostavimo da objekti tipa String u Javi nisu nepromenljivi. Kada bi imali
situaciju da pet referenci ukazuje na isti objekat tipa String i pomocu jedne
reference izmenimo taj objekat, onda bi to uticalo i na sve preostale reference
na taj objekat tipa String. Iz tih razloga da bi se ovo ne bi desavalo, objekti tipa
String su nepromenljivi u Javi.

86.Na koliko nacina mozemo da kreiramo objekat tipa String?


Na onoliko nacina koliko ima podrzanih konstruktora za Stringove u Javi.

87.Koliko ce objekata biti kreirano po izvrsavanju ovog koda?


String s1="Welcome";
String s2="Welcome";
String s3="Welcome";
Bice kreiran samo jedan objekat.Zbog osobine da su Stringovi na Javi
nepromenljivi Java ne kreira neki String ponovo ukoliko taj isti String vec
postoji.Bice kreirane tri reference koje ukazuju na taj jedan objekat.

88.Zasto Java koristi koncept nepromenljivih doslovnih Stringova?


Da bi ustedela memoriju. Zbog osobine da su Stringovi nepromenljivi Java nece
ponovo kreirati neki String ukoliko on postoji.

89.Koliko ce objekata biti kreirano ovim kodom?


String s = new String("Welcome");
Dva objekta i jedna referenca. Bice kreiran String objekat u String pool-u
konstanti i bice kreiran jedan objekat tipa String na heapu. Tom objektu na
heapu se prosledjuje ovaj objekat iz pool-a u konstruktoru, a kako su stringovi
nepromenljivi on ce samo ukazivati na taj string u pool-u. Bice kreirana i jedna
referenca koja ce da ukazuje na taj objekat kreiran na heapu.

90.Sta je osnovna razlika izmedju String objekta i StringBuffer objekta?


String je nepromenljiv, a StringBuffer je promenljiv.

91.Sta je osnovna razlika izmedju StringBuffera i StringBuildera?


StringBuffer je sinhronizovan, a StringBuilder nije sinhronizovan.
Znaci da StringBuffer mogu da menjaju vise niti istovremeno tako da je sve pod
kontrolom sto se tice deljenog resursa, a StringBuilder ne mogu.String Buffer je
manje efikasan kao naravno i sve ostalo sto mora da vodi racuna o sinhronizaciji
ali je zato bolji u slucajevima kada treba o njoj voditi racuna, dok ako ne
moramo da vodimo racuna o sinhronizaciji String Builder je efikasniji, brze radi.
Ove dve klase su izvedene iz klase Object i koristi se da se radi sa stringovima
dok se oni seckaju i nalepljuju itd kako ne bi pravili mnogo novih objekata, a na
kraju kada dobijemo konacni string njega ​sa ​metodom toString pretvorimo u
immutable string klase String.

92.​Kako mozemo da napravimo nepromenljivu klasu u Javi?


Sve klase poput String, Integer,Boolean su vec podrazumevano nepromenljive.
Neku nasu klasu mozemo da ucinimo nepromenljivom tako sto joj dodamo
modifikator final za klasu, modifikator final za sva nepromenjiva polja te klase i
ne napisemo nijedan seter pomocu koga bi moglo da se promeni neko polje
klase. Takodje stavimo prava pristupa svim poljima private kako im se ne bi
moglo pristupiti direktno van klase i setovati na drugu vrednost.Ova Final polja
se inicijalizuju samo u konstruktoru i metode getere napravimo tako da kopiraju
polja a ne vracaju reference na objekat, na primer ako je neko polje neka
HashMapa da vrati kopiju te mape na pravu mapu koju mozemo da menjamo.

93.Koja je svrha toString metode u Javi?


To String metoda vraca String reprezentaciju nekog objekta. Kada pozovemo
ispis nekog objekta sa print Java Compiler interno poziva toString metodu za taj
objekat. Redefinisanjem toString metode dobijamo ispis u zeljenom obliku.

94.Sta je ugnezdena klasa?


Klasa koja je deklarisana unutar neke druge klase je ugnezdena klasa.Opseg
vazenja ugnezdene klase je ogranicen opsegom vazenja obuhvatajuce klase.
Ugnezdena klasa ima pristup clanovima obuhvatajuce klase ukljucujuci tu i
privatne clanove. Medjutim obuhvatajuca klasa nema pristup clanovima
ugnjezdene klase. ​Postoji 4 tipa ugnezdene klase: Member inner class, Local
inner class, Annonymous inner class i Static nested class. Inner class je inace
ugnezdena nestaticka klasa tj. zove se unutrasnja klasa. Ugnezdena klasa moze
biti staticka i nestaticka. Member inner class je unutar klase, ali van metode.
Local inner class je unutar klase, unutar metode. Annonymous inner class je
klasa unutar klase koja nema ime i treba da se koristi ukoliko treba da
redefinisiemo metodu neke nasledjene klase ili interfejsa koji implementiramo.
Static nested class je staticka ugnezdena klasa. Staticka ugnezdena klasa moze
da pristupa obuhvatajucoj klasi samo preko objekata, ali ne i direktno.
Nestaticka ugnezdena klasa moze direktno da pristupa poljima i metodama
obuhvatajuce klase.

95.Da li postoji razlika izmedju ugnezdene i unutrasnje klase?


Da postoji. Ugnezdene klase mogu da budu staticke i nestaticke.
Nestaticke ugnezdene klase su unutrasnje klase.

96.Mozemo li da pristupimo non-final local varijabli u local inner class?


Ne, local varijabla mora biti final da bi mogli da joj pristupimo u local inner class.

97.Sta je ugnezdeni interfejs?


Interfejs koji je je napisan unutar neke druge klase ili interfejsa je ugnezdeni
interfejs. Ukoliko je napisan unutar interfejsa podrazumevani modifikator mu je
public, a ukoliko je unutar klase mogu se koristiti i drugi modifikatori pristupa.
Podrazumevano je staticki.

98.Da li moze klasa da ima ugnezdeni interface?


Moze.

99.Da li moze interface da ima ugnezdenu klasu?


Moze i podrazumevano je static.

117.Sta je garbage collection?


Garbage collection je proces u kome se oslobadja memorija koja je zazuzeta u
nekom trenutku, ali je sada nepotrebno zauzeta i spremna za oslobadjanje. To je
kada imamo neki objekat u memoriji na koji vise ne postoji nijedna referenca, e
onda je on kandidat za garbage collection. Mi ne znamo tacno kada se i da li se
proces prikupljanja smeca pokrenuti, jer ga poziva sistem, a ne mi eksplicitno.
Postupak se ne zapocinje samo zato sto postoji jedan ili vise nepotrebnih
objekata.

118.Sta je gc()?
To je metoda u Sistemskoj klasi koja se sa System.gc() koristi da se posalje JVM
predlog da odradi Garbage Collection, ali ni to nije garancija da ce se to i odraditi

119.Sta je svrha finalize metode?


Finalize ​metoda se poziva neposredno pre nego sto se objekat pokupi od strane
garbage collectiona. Koristi se da se odrade neke radnje ukoliko nam je to
potrebno u tom trenutku. U stvarnosti mi necemo znati ni kada se pozvala ni da
li se pozvala ova metoda, jer ne znamo ni kada se ni da li se pozvao garbage
collection, ali kada se on pokrene neposredno pre njega se odradi i metoda
finalize.

120.Da li se mogu nereferisani objekti ponovo referisati?


Da, na primer pomocu finalize metode gde cemo staviti neku referencu da
pokazuje na tekuci objekat za koji je pozvana finalize metoda i koji je bio
nereferisan i spreman za oslobadjanje memorije koju je zauzimao.Samo ona ne
treba da bude lokalna vec globalna neka tj. da joj je opseg vazenja veci od tog
bloka.

121.Kakva vrsta niti je Garbage collector nit?


Demonska nit

122.Koje su razlike izmedju final, finally and finalize?


Final je kljucna rec i moze se koristiti uz variajblu, metodu ili klasu.
Final varijabli se ne moze menjati vrednost nakon sto joj se prvi put dodeli.
Final metoda se ne moze redefinisati, a Final klasa se ne moze prosirivati, tj iz
nje se ne mogu izvoditi klase.
Finally blok se koristi kod obrade izuzetaka.Izvrsava se i kada je generisan
izuzetak i kada nije, a ne izvrsava se samo kada se nasilno prekine program.
Finalize je metoda koja se izvrsava prilikom garbage collectiona. Finalize metoda
se poziva za neki objekat neposredno pre nego sto je on pokupljen od collectora.
Moze se koristiti za izvrsavanje nekih dodatnih akcija pre nego sto se objekat
pokupi, a memorija oslobodi. Kao i za garbage collection ne znamo ni kada ce se
ni da li ce se zaista izvrsiti, ali kada se garbage collection izvrsava i finalize se
izvrsava neposredno pre toga.
123.Koja je svrha Runtime klase?
Svrha Runtime klase je da obezbedi pristipu Javinom izvrsnom sistemu.
148.Sta su Wrapper klase?
Wrapper klase dozvoljavaju da se primitivnim tipovima pristupa kao objektima.
Drugim recima mi mozemo da zapakujemo primitivnu vrednost u objekat
wrapper klase. Autoboxing je konverzija nekog primitivnog tipa u objekat
odgovarajuce wrapper klase, a obrnut proces je unboxing.
149.Sta je native metoda?
Native metoda je metoda koja implementirana u jeziku koji nije Java.
150.Sta je svrha System class?
Svrha sistemske klase je da obezbedi pristup sistemskim resursima.
151.Na sta se misli kada se kaze plitko kopiranje u Javi?
Object cloning.
152.Sta je Singleton klasa?
Singleton klasa znaci da moze postojati samo jedan objekat te klase u trenutku
u JVM.

Koja je razlika izmedju HashTable i HashMap u Javi? Koju je od njih


bolje koristiti za nesihronizovane aplikacije.
HashTable je sinhronizovana dok HashMapa nije sinhronizovana. Za
nesinhronizovane aplikacije je bolje koristit HashMape jer one nisu sihronizovane
pa obicno daju bolje performanse. HashTabela ne dozvoljava null kljuceve ili
vrednosti. HashMap dozvoljava jedan null key i bilo koliko null vrednosti.

1.Sta je multithreading?
Visenitnost je mehanizam kada u okviru jednog procesa imamo vise niti koje se
istovremeno izvrsavaju. Ukoliko imamo procesor sa jednim jezgrom to zapravo
znaci da ce vise tih niti da dele procesorsko vreme, a ukoliko imamo procesor sa
vise jezgara onda ce se dve ili vise niti zaista istovremeno izvrsavati u
paraleli.Prednosti visenitnog programiranja su visestruke:
Efikasnije je od viseprocesnog programiranja jer nema gubljenja vremena.
Promena konteksta izmedju niti je laksa od promene konteksta izmedju procesa.
Niti se izvrsavaju u okviru istog procesa i nad istim adresnim prostorom.
Niti su lakse za rad od procesa, jer je nit zapravo deo procesa.

2.Sta je nit?
Nit je deo procesa koji ima svoj tok izvrsavanja i svoj stack frame.

3.Koja je razlika izmedju preemptive scheduling i time slicing dodele


procesorskog vremena?
Preemptive scheduling podrazumeva da se u svakom trenutku izvrsava nit
najveceg prioriteta od svih onih koje su spremne za izvrsavnje u tom trenutku.
Ta nit ce se izvrsavati dok se ne izvrsi, ne blokira ili dok se ne pojavi neka druga
nit viseg prioriteta spremna da preuzme procesor.
Time slicing podrazumeva da se nekom procesu dodeli procesor na odredjeno
vreme i nakon isteka tog vremena se procesor dodeljuje drugom procesu na
osnovu najviseg prioriteta i ostalih kriterijuma, a proces koji se izvrsavao se
ukoliko nije zavrsen ili blokiran vrati u red spremnih procesa koji cekaju na
procesor.

4.Sta je join() metoda?


Join metoda zaustavlja dalje izvrsavanje tekuce niti dok se ne zavrsi nit za koju
je pozvan join. Ako se pozovu join metode za vise niti onda se ceka da se sve
izvrse pa se tek onda nastavlja sa daljim tokom tekuce niti. Ne oslobadja se
brava nad tekucim objektom za tu tekucu nit prvu.

5.Koje su razlike izmedju wait() i sleep() metode?


Wait metoda je definisana u klasi Object i kada se uradi wait oslobadja bravu
nad objektom i on ide u red blokiranih sve dok ga neka druga nit ne otkljuca sa
notify ili notifyAll. Sleep metoda je definisana u klasi Thread i objekat sam sebe
uspava na odredjeno vreme i ne oslobađa se brava nad objektom. Tada niko
drugo ne moze da mu pristupi.

*Dve niti a mogu da udju u istu sinhronizovanu metodu razlicitih


objekata.

6.Da li je moguce startovati istu nit dva puta?


Nije moguce, ako tako napisemo bacice se izuzetak.

7.Da li je moguce da pozovemo run metodu za neku nit umesto start?


Moguce je, ali ce se onda to izvrsavati kao obicna metoda nekog objekta i nece
se desavati promena konteksta sa drugim nitima.

8.Sta su demonske niti?


Demonske niti su niti niskog prioriteta koje predstavljaju pozadinsku podrsku
korisnickim nitima i pruzaju im neke usluge.

9.Da li mozemo da ucinimo korisnicku nit demonskom niti ako je


zapoceto njeno izvrsavanje?
Ne, ukoliko pokusamo generisace se izuzetak IllegalThreadStateException

10.Sta je shutdown hook?


Bazicna nit, implicitno se poziva pre gasenja JVM i radi oslobadjanje resursa npr.

11.Kada treba da prekinemo izvrsavanje niti sa Interrupt metodom?


Kada zelimo da izadjemo iz sleep ili wait stanja neke niti. Kada neka niti spava ili
je blokirana sa wait pozivanjem interrupta za tu niti ona izlazi iz tog stanja i baca
se InterruptedException. Ako nit nije u sleeping ili waiting stanju, a pozove se
interrupt metoda za tu nit, ona nastavlja da se izvrsava normalno bez prekida,
ali se interrupt fleg setuje na true.

12.Sta je sinhronizacija?
Sinhronizacija je mehanizam za kontrolu pristupa deljenom resursu od strane
vise niti istovremeno. Ona se koristi se da bi se sprecilo utrkivanje niti i
nekonzistentnost rezultata.

13.Sta je svrha Synchronized bloka?


Omogucava stavljanje brave na neki objekat tj. njegovo zakljucavanje.
Ima manji scopre od scopea sinhronizovane metode.

14.Da li Java objekat moze da bude zakljucan za ekskluzivnu upotrebu


od strane date niti?
Da, to se postize stavljanjem tog objekta u syncronized blok. Time se taj objekat
zakljucava za sve druge niti, dok ga koristi tekuca nit sa ekskluzivan pristupom

15.Sta znaci staticka sinhronizacija?


Ukoliko neku staticku metodu ucinimo sinhronizovanom, tada ce sihronizacija da
vazi za sve staticke metode te klase.

16.Koja je razlika izmedju notify() i notifyAll()?


Sa notify se budi jedna nit koja je bila blokirana i cekala na tom uslovu, a sa
notifyAll() se bude sve niti koje su bile blokirane na tom uslovu.

17.Sta je deadlock?
Deadlock je situacija kada su dve niti zaglavljene i svaka ceka na resurse koje
treba da joj omoguci ona druga nit.Prva nit je zaglavljena i ne moze da nastavi
dok joj druga nit ne obezbedi resurse, a druga nit je zaglavljena i ne moze da
nastavi dok joj prva nit ne obezbedi resurse.

Interfejsi
Postoji tri vrste interfejsa:Funkcionalni, Klasicni i Marker interfejsi.
Marker interfejsi su npr Cloneable i Serializable itd. Oni imaju neke posebne
namene i prazni su unutra. Klasicni interfejsi imaju vise metoda, to su interfejsi
koje mi pravimo. Funkcionalni interfejsi su samo sa jednom metodom i oni su
zamenjeni lambda izrazima.

Vrste programiranja
Postoje tri vrste programiranja: proceduralno, objektno i funkcionalno.
Proceduralno programiranje je ono sto pisemo npr u Cu i Pascalu.
Objektno programiranje je ono sto pisemo u C++,Javi itd.
Funkcionalno programiranje je na primer u Scali.

Funkcije i globalne promenljive u Javi


Zamena za funkcije su staticke metode klase ili interfejsa, a zamena za globalne
promenljive su staticka polje klase ili interfejsa.Ovo je uvedeno posto funkcije i
globalne promenljive ne postoje kao takve na Javi. Inace metode pripadaju klasi,
a funkcije nikome, pa je zato bilo potrebno da se ovo nekako obezbedi.

Prosti tipovi podataka u Javi


Imamo 8 prostih tipova podataka u Javi
Numericki su byte, short, integer, long, float i double.
Byte predstavlja se na 8bita tj. 1B
Short predstavlja se na 16bita tj. 2B
Integer predstavlja se na 32bita tj. 4B
Long predstavlja se na 64bita tj. 8B
Float predstavlja se na 32bita tj. 4B i to je decimalni zapis sa jednostrukom
tacnoscu, a double je decimalni zapis sa dvostrukom tacnoscu.
Double predstavlja se na 64bita tj. 8B
Char znakovni tip koji se predstavlja na 16bita tj. 2B
Boolean logicki tip koji moze imati samo dve vrednosti true ili false.
Boolean moze ucestvovati u if izrazima i moze se ispisivati.

Prosledjivanje parametara po vrednosti i po referenci


Kada prosledjujemo nekoj metodi stvarne parametre za formalne argumente
razlikujemo slucajeve da li prosledjujemo prost tip podatka ili referencu na
objekat. Ukoliko prosledjujemo prost tip podatka napravice se kopija tog
podatka za metodu i kada pomocu promenljive u metodi menjamo taj podatak
zapravo cemo menjati tu kopiju, a argument koji smo prosledili metodi ostaje
ne promenjen. Medjutim kada prosledjujemo referencu na objekat kao
parametar, u metodi ce se napraviti nova referenca, ali ce ona ukazivati na taj
isti objekat, pa kada budemo menjali pomocu reference na objekat u metodi, mi
cemo zapravo menjati originalni objekat tj. onaj na koji pokazuje refernca koju
smo prosledili pri pozivu metode.
Nizovi
Nizovi se implementiraju kao objekti. Velicina niza se dohvata se polje length.
Svi nizovi imaju tu promenljivu i ona uvek sadrzi velicinu niza bez obzira na
popunjenost niza. Podrazumevane vrednosti na za elemente niza su 0 za int,
false za boolean i null ukoliko su elementi niza reference na objekte neke klase.
Deklaracija niza je tip ime[]; tip ime[][];
ime=new tip[velicina]; ili ime=new tip[velicina1][velicina2];
int duzina=ime.length;
Prava pristupa
Prava pristupa poljima i metodama objekta neke klase deklarisu se pomocu
modifikatora. Postoje cetiri razlicita modifikatora za prava pristupa u Javi i to su
private, public, protected i podrazumevano paketsko pravo pristupa.
Private clanovima tj. poljima i metodama nekog objekta moze se pristupiti samo
iz unutrasnjosti te klase, dakle iz metoda te klase. Public clanovima tj poljima i
metodama objekta se moze pristupiti bilo odakle. Podrazumevano pravo pristupa
ukoliko se ne navede je paketsko pravo pristupa. Paketsko pravo pristupa
ponasa se kao public unutar istog paketa, a private izvan tog paketa. Protected
pravo pristupa omogucava pristup iz unutrasnjosti te klase i iz izvedenih klasa iz
te klase.Protected je jace od paketskog.

private bez(paketsko) protected public

ista klasa da da da da

potklasa u ne da da da
istom paketu

klasa iz istog ne da da da
paketa koja
nije potklasa

potklasa iz ne ne da da
drugog paketa

klasa iz drugog ne ne ne da
paketa koja
nije potklasa

Kreiranje objekta
Kutija k1;
ovo ne pravi objekat vec referencu na objekat koja ima vrednost null
k1=new Kutija(10,20,30);
ovo pravi objekat rezervise prostor i poziva konstruktor te klase

Kutija k2=k1;
ne pravi novi objekat vec samo jos jednu referencu koja ce da ukazuje na isti
objekat koji je kreiran.
k1=null;
sad referenca k1 ne ukazuje ni na sta tj ima vrednost null, a k2 i dalje na kutiju
Podrazumevani konstruktor se pravi i poziva samo u slucaju da nije nijedan
drugi napravljen.
Deklarisanje promenljive
Deklarisanje promenljive u Javi podrazumeva navodjenje tipa promenljive i
imena promenljive i opciono joj se moze dodeliti vrednost prilikom deklaracije.
Naravno vrednost koja joj se dodeljuje mora biti odgovarajuceg tipa koji je
naveden inace ce se prijaviti greska. Deklarisanje promenljive je dozvoljeno
unutar bilo kog bloka ili metode ​i to se ne mora uraditi na pocetku vec na bilo
kom mestu unutar bloka, ali onda je promenljiva vidljiva ne od pocetka bloka
vec tek od mesta gde je deklarisana i ako probamo da je prvo upotrebimo pa
onda da je deklarisemo prijavice gresku. Opseg vazenja je do kraja tog bloka, tj.
metode. Promenljive ne cuvaju svoje vrednosti izmedju dva poziva neke metode
vec im je zivotni vek samo jedan poziv metode. Takodje ukoliko u for petlji na
primer napisemo deklaraciju i inicijalizaciju neke lokalne promenljive, ona ce se
deklarisati i inicijalizovati posebno u svakoj iteraciji te for petlje. Ukoliko imamo
dva bloka gde je drugi ugnezden u prvi nije dozvoljeno da u ugnezdenom imamo
deklaraciju promenljive koja se isto zove kao neka iz spoljasnjeg bloka.

Pristup poljima klase


Iz unutrasnjosti klase pristup poljima i metodama nekog tekuceg objekta moze
se ostvariti samo navodjenjem imena polja ili pozivanjem metode kao na primer
za klasu Kutija koja ima polje sirina i metodu zapremina() moze se napisati
sirina=20; ili zapremina(); ili navodjenjem this.sirina=20; ili this.zapremina().
Izvan same klase pristup se realizuje sa navodjenjem imena objekta pa tacka
zatim ime polja ili metode, naravno ukoliko su omogucena prava pristupa tome.
Kao na primer mojaKutija.sirina=20; ili mojaKutija.zapremina();
This je referenca na tekuci objekat za koji je metoda pozvana. To je kljucna rec.
Dobra praksa je pokazala da pristup poljima ne treba da bude javan, vec da se
poljima pristupa posredno preko metoda koje imaju public pristup. Metode mogu
da budu neke privatne, neke javne u zavisnosti da li zelimo da omogucimo
njihovo pozivanje i izvan klase ili da to sprecimo.

Nasledjivanje u Javi
● Iz jedne klase se moze izvesti vise klasa, ali jedna klasa ne moze biti
izvedena iz vise klasa. Klasa iz koje je izvedena neka druga klasa moze se
koristiti potpuno samostalno, a ta izvedena klasa moze postati natklasa za
neku drugu iz nje izvedenu klasu.
● Objekat izvedene klase ce sadrzati svoju kopiju svih nestatickih polja iz
osnovne klase i nasledice sve njene nestaticke metode, ali ce moci
direktno da pristupi samo onima koji nisu private.
● Referencu tipa osnovne klase mozemo staviti da ukazuje na objekat tipa
izvedene klase, ali ce pomocu nje moci da se pristupi samo onim poljima i
metodama koje postoje u osnovnoj klasi, naravno ako im je dozvoljen
pristup. Pomocu te reference nece moci da se pristupi poljima i metodama
izvedene klase, tj. videce samo svoja polja i metode iz osnovne klase.
● Rezervisana rec super se koristi iz izvedene klase za pristup poljima i
metodama u osnovnoj klasi, naravno samo kada je taj pristup dozvoljen,
a takodje se koristi i za poziv konstruktora natklase iz konstruktora
izvedene klase.
● Kada imamo hijerarhiju izvodjenja A->B->C i pozovemo konstruktor za C
pri kreiranju objekta tipa C, pozvace konstruktor za B, pa ce on pozvati
konstruktor od A.Ukoliko bilo kod od njih nema podrazumevani
konstruktor vec neki konkretan konstruktor, ocekivace se da prosledimo
potrebne parametre. Ako ih ne prosledimo prijavice nam gresku za to.

SINGLETON
Prektni uzorak singleton je objektni uzorak kreiranja koji obezbedjuje da klasa
ima samo jedan objekat i daje globalni pristup tom objektu. Za neke klase je
vazno obezbediti da imaju samo jedan objekat.Obicna globalna promenljiva
obezbedjuje globalan pristup ali ne brani vise objekata. U ovom resenju klasa je
sama odgovorna za jedinstvenost objekta.
Uzorak treba koristiti kada :
-mora postojati tacno jedan objekat klase
-on mora biti pristupacan klijentima preko svima poznate tacke pristupa
-klasa treba da bude prosiriva izvodjenjem
-da klijenti mogu da koriste objekat izvedene klase bez potrebe da modifikuju
svoj kod
Singleton nije Thread safe odnosno podrazumevano nije obezbedjen kontrolisani
pristup od strane vise niti istovremeno istom deljenom resursu koji je u ovom
slucaju ovaj single_instance koji se i dohvata. Moze se desiti da vise niti udju u
metodu i vise njih prodju ovaj deo gde je ispitivanje na null i svima bude
null==true i onda vise njih naprave vise instanci i time sruse koncept singletona.
To se moze obezbediti da se ne desava tako sto metoda getInstance stavimo da
bude synchronized ali time se dosta usporava rad.
Moze se staviti umesto toga synchronized blok nakon if-a u metodi ali se onda
moze desiti da vise njih prodju kroz null==true i onda pregaze stari kreirani
objekat novim tako da bi se onda i
unutar synchronized bloka moralo staviti takodje provera uslova sa if
null==true.
Takodje se mora dodati volatile modifikator uz sigle_instance jer kreiranje novog
objekta nije atomicna operacija sastoji se iz nekoliko koraka i moze se desiti da
je objekat polu kreiran tada vec nije null nego nesto drugo a druga niti pita da li
je null vidi nije null i pokusa da dohvati to polu kreirano pa da se to spreci.

class Singleton {
private static volatile Singleton single_instance = null;
protected Singleton(){
…..
}
public static Singleton getInstance(){
if (single_instance == null){
synchronized (this){
if (single_instance == null)
single_instance = new Singleton();
return single_instance;
}
}
}

*Konstruktor moze da bude private ili protected

​Niti

Niti koje rade nad razlicitim skupovima podataka su retke, jer su obicno niti koje
se izvrsavaju u paraleli tj. bore za procesorsko vreme u slucaju jednog procesora
niti koje pripadaju istom procesu pa se izvrsavaju nad istim adresnim prostorom
tj. nad istim skupovima podataka.

Ako dve niti mogu da citaju i modifikuju isti skup podataka dolazi do utrkivanja
takozvani race hazard i moze doci do nekonzistentnosti. Zbog toga moramo
obezbediti sinhronizaciju odnosno da samo jedna nit istovremeno moze da
pristupa jednom deljenom resursu ukoliko je rec o sihnronizovanoj metodi.
Klasa niti mora da nasledi klasu Thread ili da implementira interface Runnable.
U oba slucaja treba da se redefinise run metoda. Nit se pokrece sa pozivom
metode start() koja ce pokrenuti izvrsavanje metode run(). Ukoliko se direktno
pozove run() ta metoda ce se izvrsiti kao obicna metoda i nece doci do promene
konteksta izmedju niti.Kada se metoda run() izvrsi time se i nit zavrsila i ne
mozemo dva puta pokrenuti istu nit. Metod run() ne moze da baca izuzetke.
Bolje je implementirati interface Runnable jer ukoliko se nasledjuje klasa Thread
onda se ne moze naslediti nijedna druga klasa istovremeno.Kada se kreira
objekat te klase koja implementira Runnable onda se on prosledi konstruktoru
klase Thread kao npr new Thread(nit1).start(); gde je nit1 objekat klase koja
implementira interface Runnable.
Metodom isAlive() vraca podatak da li je nit za koju je pozvana ova metoda
zavrsila izvrsavanje ili ne.
?Objekat tekuce niti moze se dohvatiti statickom metodom currentThread();
Nit moze sama sebe da uspava na odredjeno vreme pomocu metoda sleep(ms);
Metodom interrupt() se izaziva izlazak iz stanja sleep ili wait i baca se izuzetak
InterruptedException, a ukoliko je niti normalno radila ona i nastavlja normalno
da radi samo postavlja Interrupt fleg na true.
Nit moze da se zaustavi i da ceka da nastavi izvrsavanje tek kada se neka druga
niti izvrsi. To postizemo pozivajuci metodu join() za tu neku nit koja treba da se
izvrsi, pre nego sto tekuca nit nastavi sa izvrsavanjem.

RACE HAZARD - SYNCHRONIZED METODS


Race hazard situacija je kada imamo racun u banci. Mi ne smemo da dozvolimo
da se opeacije uplate i isplate kao i provere stanja obavljaju istovremeno jer bi
to dovelo do ne konzistentnosti. Dakle svaka od ovih metoda mora biti
sinhronizovana tj. mora biti obezbedjeno da najvise jedna nit pristupa najvise
jednoj sinhronizovanoj metodi istog objekta u jednom trenutku. U ovom slucaju
to omogucava da se citanje stanja odradi atomicno dok ga niko ne prekida i niko
ne menja stanje, medjutim kod uplate isplate imamo situaciju da ne mozemo da
podignemo sa racuna na kome nema nista na primer, pa moramo da blokiramo
tu nit sve dok neko ne uplati nesto na racun i time oslobodimo objekat racuna, a
onda kada neka druga nit pokrene uplacivanje na racun da sa notify/notifyAll
posaljemo signal da je sada moguce nastaviti isplacivanje sa racuna.Kada se
uplacivanje zavrsi tj da druga niti napusti sinhronizovanu metodu uplata onda ce
biti moguce da ova prva nit ponovo zauzme monitor odnosno nastavi izvrsavanje
sinhronizovane metode isplata tamo gde je stala. Metode wait() i notify()
definisane su klasi Object i ne mogu se menjati jer su final.
Metod wait() oslobadja bravu nad objektom dok se ne ispuni neki uslov, dakle
staje se sa izvrsavanjem sinhronizovane metode, nit napusta monitor, da bi
dopustio nekoj drugoj niti da udje u monitor tj. da pozove neku sinhronizovanu
metodu tog objekta koja ce promeniti stanje, obezbediti taj uslov i onda sa
notify() poslati signal prvoj niti da je uslov ispunjen i da ona moze da nastavi sa
izvrsavanjem tamo gde je stala, kada dobije procesor sledeci put, osim ukoliko
naravno neko treci opet ne promeni uslov u medjuvremenu i zato se stavlja
while(!uslov) wait(); da bi se proverilo najnovije stanje svaki put.Wait() i notify()
i notifyAll() se pozivaju samo iz sinhronizovanih metoda. Metod notify() budi
samo jednu nit iz grupe onih koje su cekale na tom uslovu, dok notifyAll() budi
sve niti koje su cekale na tom uslovu, ​ali one time ne dobijaju procesor, samo
se vracaju u red spremnih. Ne treba raditi sleep dok se nalazimo u
sinhronizovanoj metodi, to ne valja, jer niko drugi nece moci da pristupi tom
objektu, jer je ta nit u njegovom monitoru, a ona ce da se uspava, nece da radi.
Takodje moguce je da stavimo objekat pod kljuc izvrsavanjem synchronized
bloka u runu kada pozivamo tu metodu koja bi trebalo da je sinhronizovana.
umesto da koristimo synchronized metode, ali vise se preporucuju metode.
Synchronized blok ima manji scope od sinhronizovane metode.
Kada imamo klasu cije metode nisu sinhronizovane a treba da se izvrsavaju kao
da jesu onda to mozemo postici stavljanjem objekta u synchronized blok ili
pravljenjem izvedene klase koja ce redefinisati sve metode koje treba da budu
sinhronizovane i one ce biti synchronized, a iz kojih ce se pozivati metode iz
osnovne klase sa super.
Kada imamo izvedenu klasu i njene redefinisane metode, one nisu automatski
synchronized ukoliko su to definisane metode u osnovnoj klasi. One mogu biti
synchronized ukoliko napisemo, a ukoliko ne napisemo nisu. Ukoliko se iz takve
redefinisane nesinhronizovane metode pozove metoda iz osnovne klase sa super
tada ce vaziti sinhronizacija tokom obavljanja metode iz natklase. Takodje
ukoliko metod definisan u osnovnoj klasi nije sihronizovan, redefinisani metod u
izvedenoj klasi moze biti sinhronizovan. Konstruktor ne treba da se sinhronizuje.
Sinhronizacija statickih metoda
Mogu i staticke i nestaticke metode neke klase da budu sinhronizovane.
Obicne nestaticke sinhronizovane metode obezbedjuju da ne mogu dve ili vise
niti istovremeno da pozovu dve ili vise sinhronizovanih metoda istog objekta tj.
da moze najvise jedna nit da pozove najvise jednu sinhronizovanu metodu
nekog objekta u jednom trenutku. Staticke sinhronizovane metode nisu metode
objekta instance vec klase, pa ne rade sinhronizaciju nad objektom vec nad
klasom. To znaci da ne mogu dve niti da izvrsavaju dve ili vise sihronizovanih
statickih metoda iste klase u jednom trenutku, odnosno da najvise jedna niti
moze da izvrsava najvise jednu staticku sinhronizovanu metodu jedne klase u
isto vreme.
Brava klase nema nikakve veze sa objektima te klase, odnosno:
Jedna nit moze da izvrsava nestaticki sihnronizovani metod nekog objekta, a
druga nit moze da izvrsava staticki sinhronizovani metod te klase u isto vreme.
DEADLOCK
nit A nit B
x.m1(); y.m1();

y.m2(); x.m2();
Uzajamno blokiranje se desava na primer kada imamo dve niti A i B koje se
konkuretno izvrsavaju. Ako prvo krene da se izvrsavava niti A i ne blokira se
nigde jer su svi uslovi ok u napisanim sinhronizovanim metodama ok , pa se
onda izvrsi niti B i ne blokira se nigde jer su svi uslovi u napisanim
sinhronizovanim metodama ok onda nema deadlocka, ali mi nismo sigurni da li
ce se tako izvrsiti, jer to je samo jedna od mogucih opcija. Medjutim moguce je
da nit A krene da se izvrsava i onda se blokira na nekom uslovu u okviru
sinhronizovane metode m1 objekta x. Ona ce cekati na notify koji treba da se
posalje iz x.m2() iz niti B. Medjutim nakon napustanja procesora od strane niti
A, procesor dobije nit B i ona krene da izvrsava sinhronizovanu metodu m1 za
objekat y i blokira se na nekom uslovu. Sada Nit B napusti monitor i ceka na
notify signal koji treba da se posalje iz y.m2() iz Niti A. Dakle i niti A i nit B ne
mogu da nastave sa radom, jer obe cekaju na uslove koje treba da oslobodi ona
druga nit. Ovo se naziva deadlock i odgovornost je programera da se ovo ne
desi.Java nece sama uociti da moze da dodje do deadlocka niti nam prijaviti to.

Razlike izmedju ArrayList i LinkedList


I ArrayList i LinkedList implementiraju List Interface i sve njihove metode i
njihovi i rezultati su skoro isti, medjutim ima par razlika izmedju njih koje daju
prednost jednoj odnosno drugoj u zavisnosti od zahteva.
Pri dohvatanju elementa sa neke pozicije ArrayList ima slozenost O(1), a
LinkedList ima slozenost O(n) jer se krece do tog elementa kroz listu.
Pri brisanju LinkedList ima slozenost O(1) ako je dat pokazivac na cvor koji se
brise jer se vrsi prosto prevezivanje, a O(n) ako je dat samo informacioni deo jer
se onda prvo dohvata pa se ide redom dok svakako ArrayList ima slozenost O(n)
u najgorem slucaju, zbog pomeranja elemenata za jedno mesto.
Pri umetanju na kraj LinkedList ima slozenost O(1) jer se vrsi prosto
prevezivanje, dok je umetanje na odredjenu poziciju gde se zada broj pozicije
O(n) dok ArrayList ima slozenost O(n) u opstem slucaju zbog pomeranja
elemenata.
Sto se memorije tice ArrayLista cuva indekse i podatke, dok LinkedLista cuva
podatke i po dva pokazivaca za svaki pa je to vece zauzece memorije.
Razlika izmedju Array i ArrayList
Array su obicni nizovi a ArrayList je nesto izmedju liste i nizova. Najveca razlika
je u tome sto se kod obicnih nizova mora unapred navesti koliko memorije se
alocira tj. koji je kapacitet tog niza, dok se kod ArrayList ne mora navesti
inicijalno vec kao i kod svih listi mozemo dodavati element kad nam je on
potreban. Sto se tice dohvatanja direktno se dohvata bilo koji element po
indeksu i u Array i u ArrayList. Sto se umetanja tice, ako umecemo na neko
odredjeno mesto svi oni od tog mesta do kraja se pomeraju za jedno mesto
udesno kod ArrayList i ArrayList se prosiruje za jedno mesto ali to se desava u
pozadini pa korisnik to ne primeti. Array podrzava primitivne tipove i objekte,
dok ArrayList podrzava Objekte i Generike. Sto se tice ovoga da ArrayList ne
podrzava primitivne tipove njih mozemo procesom autoboxinga da pretvorimo u
objekte jer Java daje tu opciju da se int primitivni tip pretvori u objekat Integer.

Primer obrada izuzetka


public Class MyExceptionHandling{
`public static void main(String args[]){
try{
for (i=5;i>=0;i--){
System.out.println(10/i);
}
}
catch (Exception ex) {
System.out.println(“ExceptionMessage:”+ex.getMessage());
}
finally {
​​System.out.println("Inside finally block");
}
System.out.println(“text”);
}
}

Ispisace prvo redom rezultate deljenja sa 5,4,3,2,1 pa kad dodje do nule onda
ce generisati izuzetak i ispisace message, a zatim ce se izvrsiti finally blok pa ce
se ispisati poruka iz finally bloka, a onda ce se ispisati text.

You might also like