You are on page 1of 7

1)Штасуиницијализациониблокови, којеврстепостоје и кадасеизвршавају?

-Иницијализациони блокови омогућавају сложенију иницијализацију класа од простог постављања вредности на


основу само једног израза. Постоје статички и нестатички. Статички се користе у току пуњења класе у меморију,
за иницијализацију статичких поља. Нестатички се користе у току стварања нових објеката за иницијализацију
нестатичких поља.

2) Далиименатипова у двапотпакетаистогпакетамогубитиједнака и зашто?

-Формирање хијерархије пакета само омогућава финије, прегледније груписање класа. Не рачунајући то,
потпакет је као посебан пакет, у односу на натпакет, а самим тим и у односу на други потпакете истог пакета.
Самим тим – имена типова могу бити једнака.

3) У којимконтекстимасекористикључнареч super и штаозначава у свакомодслучајева?

-Приликом позивања конструктора наткласе у конструктору поткласе, super( ) или super(arg1,arg2,…argN), или
ради приступања наслеђеном подобјекту наткласе, најчешће уколико је неко поље или метода наткласе
сакривена именом поља/методе поткласе. super.a=5, b = super.m( ), ….

4) Какосеметодамапрослеђујупараметрипримитивних, односнокласних, типова:


повредностиилиреференци?

-Параметри се, суштински, увек преносе по вредности. Код примитивних типова се вредност копира на стек, а
код класних се вредност показивача (адресе) копира на стек, па је то, принципијелно, пренос по референци, јер
се не копира цео објекат. Уколико је потребан пренос по референци примитивних типова (да би се сам
параметар могао променити), могу се користити омотачке класе.

5) ЗаштокласенаЈавинемајудеструкторе? Како и заштосекомпензујењиховнедостатак?

-Деструктори нису потребни, јер се сакупљач ђубрета (garbage collector – GC) бави деалокацијом меморије.
Недостатак се компензује методом public void finalize( ), коју ће GC позвати непосредно пре уништења објекта
(постоји у класи Object, али је потребно преоптеретити да би се прилагодила сопственој употреби). Разлог је
ослобађање заузетих ресурса (али не меморије, него, рецимо, затварање отвореног фајла, или прекид мрежне
конекције, итд).

С обзиром да се не зна када ће метода finalize( ) бити позвана, а уколико је неопходно ослободити неке
необјектне ресурсе у конкретном тренутку, неопходно је написати засебну методу која би могла бити позвана,
било експлицитно, било из методе finalize( ).

6) Далијемогућакомбинацијамодификатора abstract final за (1) класу (2) метод и зашто?

-За класу није могуће (и нема смисла), јер је смисао апстрактне класе да нека изведена класа имплементира њене
методе, што, уколико се стави final, неће бити могуће. Из истог разлога се то не може учинити за методу, јер је
надјачавање апстрактне методе подразумевано, а ако ставимо final, то неће бити могуће.

7) Којајеосновнaразликаизмеђунизова у језицима Java и C++?

-У језику Јаvа се низови сматрају објектима, док то није случај у језику C++.У језику С++ се декларисањем низа
издваја простор за њега (с обзиром да низови могу да буду и статички, на стеку), док се у језику Java тек
алоцирањем простора на хипу (пошто објекти могу бити само динамички) заузима простор за низ, и поред тога,
у недостатку иницијализације, аутоматски се иницијализује нулама (0, `\0`, false, null), док су у С++ почетне
вредности су случајне. У језику Java постоји аутоматска провера граница низа, приликом индексирања, и десиће
се изузетак у случају индекса ван опсега, а притом, могуће је у сваком тренутку открити дужину низа, помоћу
length поља. Ни једну од претходно наведених функционалности, језик С++ не поседује.
8) Акосу у следећимфајловимадефинисанекласе A и B:

Fajl А.java: package p;


public class A {
privateint x1;
int x2;
protectedint x3;
publicint x4;}

Fajl B.java: package p.pp;


public class B{
int m() {
p.A a=new p.A();
return ◊; }
}
далиједозвољенодауместо ◊ стоји: (1) a.x1 (2) a.x2 (3) a.x3 (4) a.x4 ?
-(1)не (2)не (3)не (4)да
*потпакет је као посебан пакет, у односу на натпакет, зато ће само јавно поље бити доступно.

9) Кадакласутребаписатикао final?

-Када желимо да спречимо даље извођење из те класе. Њене методе ће аутоматски све бити коначне, па самим
тим нема ни редефинисања метода, и понашање класе се не може даље мењати, без обзира на стварни тип
објекта.

10) Када и којимредоследомсеизвршавају (1) статички (2) нестатичкииницијализациониблокови?

-Статички блокови се извршавају приликом пуњења класе у меморију: заузме се меморија потребне величине за
сва статичка поља класе (нестатичка се занемарују), сви бајтови заузете меморије се попуњавају нулама (0, `\0`,
false, null), и на крају се постављају вредности статичких поља са иницијализаторима на израчунате вредности
наведених израза , и извршавају се статички иницијализациони блокви по редоследу навођења у дефиницији
класе (не једни па други, него редом, како се наилази у дефиницији класе). Нестатичка поља и иницијализатори
се прескачу.

-Нестатички блокови се извршавају у току стварања нових објеката: заузме се меморија потребне величине у
динамичкој зони меморије, сви бајтови заузете меморије се попуњавају нулама (0, `\0`, false, null), затим се
постављају вредности поља са иницијализаторима на израчунате вредности наведених израза и извршавају се
иницијализациони блокови по редоследу навођења у дефиницији класе (не једни па други, него редом, како се
наилази у дефиницији класе), и на крају се извршава тело одговарајућег конструктора.

11) Накојеначинесемогукориститијавнаименаизнекогпакета у другомпакету?


Навестипримерезаприступимену X, којеједефинисно у пакету P, изнекогдругогпакета?

-import Р.* - увозе се сва имена из пакета Р

-import P.X – увози се само Р.Х, и може се користити без ознаке пакета (уколико не постоји друго Х на месту
увожења)

-P.X – сваки пут кад се користи

12) Даликласанајезику Javа можебитиапстрактна, акониједнањенаметоданијеапстрактна и зашто?

-Могуће је, у циљу забране да се праве објекти те класе, али да се обезбеде основне функционалности, које би
изведене класе даље допуњавале и проширивале. Понекад има смисла да се за појам издвоји засебна класа, за
неке функционалности које сам по себи има, али без неких додатних функционалности и особина, које су
специфичне од подврсте до подврсте, нема смисла да постоји као објекат.

13) Штајеосноваплатформскенезависностипрограмаписанихнајезику Java? Какосеонаобезбеђује?

-Основа је – интерпретативан код, односно превођење изворног кода у бајткод (bytecode), који ће
интерпретирати Јавина виртуелна машина (Java Virtual Machine), коју сваки рачунар поседује. Имплементација
JVM зависи од конкретне платформе, али интерфејс према бајткоду остаје исти. Један бајткод ће се идентично
интерпретирати на произвољној JVM , дакле - JVM је стандардизована.
14) Којајеосновнаразликаизмеђуначинакреирањаобјекатанајезицима C++ и Java?

-C++ дозвољава креирање објеката на стеку, док Java то дозвољава искључиво у динамичкој зони меморије.

15) Акосе у изведенојкласидефинишепољесаистимименомкао у основној и


акомусеприступипрекореференцекојајетипаосновнекласе, а указујенаобјекатизведенекласе –
којемпољусеприступа и зашто?

-Приступаће се пољу основне класе, зато што је референца типа основне класе. Да су у питању методе, у време
извршавања би се открило на који тип указује референца, и одговарајућа метода би била позвана
(полиморфизам важи за методе, не и за поља).

16) Навестизадатимредоследомподразумеванепочетневредностипољаследећихтипова: int, float, boolean,


char, класнитип.

int: 0 float: 0.0 boolean: false char: \0 class: null

17) Којeсуразликеизмеђустатичкеугнежденекласе и унутрашње (inner) класе?

-Статички угнежђени типови служе као механизам структурирања типова, док унутрашње класе омогућавају
посебан однос између њихових објеката и објеката спољашње класе. Код статички угнежђених класа се могу
непосредно користити само статички чланови окружујуће класе, док је за нестатичке потребан конкретан
објекат. Могу садржати статичке и нестатичке чланове. Објекат унутрашње класе је увек повезан са једним
објектом окружујуће класе – окружујућим објектом. Унутар унутрашње класе се пољима спољашње класе
(статичким и нестатичким) може приступати непосредно, само именовањем.Унутрашња класа не сме да садржи
статичке чланове, изузев финалних статичких поља иницијализованих константним изразом.

18) Акосе у изведенојкласидефинишепољесаистимименомкао у основној, далисе и


какопољуосновнекласеприступаизметодеизведенекласе?

-поље х, метода m је у изведеној класи: void m( ) { super.x = 5; }. Претпоставка је да право приступа у основној
класи није приватно, иначе му се свакако не може приступити. Статичком члану се може приступити: Osnovna.x,
што је и препорука за статичке чланове, иако се и статичком члану може приступити преко super

19) Штасадрже *.class фајлови и којајеосновнаразликаизмеђуњих и


бинарнихизвршнихфајловатипа *.exe?

-*.class фајлови садрже бајткод (bytecode), који се мора интерпретирати помоћу Јавине Виртуелне Машине (Java
Virtual Machine – JVM).Интерпретирање бајткода је ефикасно, и платформски независно, али је ипак мање
ефикасно од *.ехе. Са друге стране, *ехе не мора да буде интерпретиран, јер је већ у машинском коду који рачунар
директно може да чита. Међутим, *.ехе је платформски зависно, и неће се извршавати исто (или уопште) на
платформама за које није специфично писан. У .class фајлове се не могу поткрасти вируси са стране, јер то JVM
може да исконтролише, док *.ехе не може бити исконтролисан од стране рачунара.

20) Дали и заштојезик Java подржававишеструконаслеђивање и то: (а) имплементацијувишеинтерфејса у


једнојкласи; (б) извођењеједнекласеизвишедругихкласа; (в)
извођењеинтерфејсаизвишедругихинтерфејса?

-(а) да (б) не (в) да

21) Штаозначавамодификатор final запоља, односнометоде, односнокласе?

-За поља: вредност се сме доделити само једном, најчешће приликом иницијализације

-За методе: не сме постојати надјачавање те методе у некој изведеној класи

-За класе: не смеју се изводити класе из те класе


22) У чемујеосновнаразликанајезицима Javа и C++ пристварању и уништавањуобјеката?

-Стварање : питање 14)

-Уништавање: у С++ може доћи до цурења меморије и висећих показивача, јер је програмер одговоран за
деалокацију меморије. У језику Java – питање 5)

23) Далијеследећипрограмисправан? Образложити.

class A{ protected int p=10;}


class B{
public static void main(String[] arg)
{
A a=new A();
System.out.println(a.p);
}
}
-уколико се класе налазе у истом пакету, дозвољено је, у супротном није.

24) Засвакуодгрупамодификатора, навестидалисенаодговарајућуметоду у


језику Java примењујединамичковезивање: (а) public final, (б) private, (в) public static?

-Кад год је у питању final, private, static везивање је статичко, јер је немогуће динамички надјачати методу са тим
модификатима. Дакле (а) не (б) не (ц) не

25)Далисеможедогодитидасенекиобјекатнакојипоказујенекареференцауклониодстранесакупљачађубре
та (garbage collector)? Зашто?

-Може, у случају да је дошло до завршетка рада програма, а да је објекат и даље „жив“.

26)Дали protected члановимакласемогудаприступајуметодедругихкласаизистогпакета,


акотедругекласенисуизведенеиздатекласе? Зашто?

-Могу, зато што је заштићено право приступа „више“ од пакетског права приступа, па све методе из датог пакета
имају приступ пољу. (приватно , пакетско, заштићено, јавно – свако следеће је мање ограничавајуће)

27)Чемујенамењеноператор instanceof? Навестипримеркоришћења.

-Намењен је динамичкој провери компатибилности типова (у време извршавања). Резултат је логичког типа.

classOsnovna{ }
classIzvedena extends Osnovna{ }
Osnovna o = new Izvedena();
Osnovna o2 = new Osnovna();
boolean t = o instanceofOsnovna;//true, IzvedenaimasvefunkcionalnostiOsnovne
boolean t2 = o instanceofIzvedena;//true, referenca o pokazujena tip Izvedena
boolean t3 = o2 instanceofOsnovna;//true, jeste tip Osnovna
boolean t4 = o2 instance of Izvedena;//false, Osnovnanemasvefunkcionalnosti
//Izvedene
Бинарни оператор instanceofомогућава проверу безбедности конверзије наниже (downcast).

28) Дали (премаспецификацијијезика) именапроменљивих у Јавимогудабудуписананаћирилици и зашто?

- Могу. Језик Javaкористи Unicode(UTF-16) скуп, где се карактери представљају са 16 бита (за разлику од ASCII
скупа знакова у традиционалним језицима), па омогућава представљање имена и на, између осталих, ћирилици

29) Какосеодређујеправоприступагенерисаном (уграђеном) подразумеваномконструктору?

-Право приступа зависи од модификатора који је наведен уз декларацију класе.


30) Далисеизметодакласе I изведенеиз O можеприступитизаштићенимнестатичкимчлановимакласе O пр
екореференцетипа: (1) класе O, (2) класе I, (3) класе A изведенеизкласе O, (4) класе II изведенеизкласе I?
Свечетирикласесу у различитимпакетима

-(1) не (2) да (3) не (4) да

31) Којајепрактичнапрепоруказаименовањепакета? Зашто?

-Име пакета мора бити јединствено, стога: ако се пакети користе унутар организације, треба именовати пакете
користећи интерни арбитар имена. Ако се користе широм света, сугестија је користити Интернет домене
инверзним редом, нпр package rs.ac.bg.etf.X. Препорука за развојна окружења је да целокупан код пакета буде у
истом фолдеру, а да се име фолдера користи за име пакета

32) Далидозвољeнеследећеконструкције и акојесу, штаонеозначавају:


(1) super.super.m() (2) BaznaKlasa b=super; (3) super(super.m());

-(1)није дозвољена (2) није дозвољена (3) није дозвољена

33) Штасудобре, а шталошестранепроверенихизузетака?

-Добре стране су да компајлер наглашава ако не постоји руковалац за тај изузетак, и приморава програмера да
обради тај изузетак, док код непроверених то није случај, и постоји вероватноћа да програмер заборави да
обради неки изузетак. Лоше стране су да се евентуални нови изузеци морају додавати на више места, мора се
пазити и на све потенцијалне изузетке које могу бацити све методе које се позивају унутар те методе, обавезни
су try-catch-finally блокови и на местима где не би били потребни, мора се унапред размишљати о свим
потенцијалним изузецима.

34) У чемујеразликаизмеђутипoваподатака int и Integer најезикуЈава?

-intје примитиван тип, док је Integerкласни тип – омотачка класа за примитиван тип int, и омогућава употребу
вредности примитивног типа тамо где се очекује објекат.

35) Заштосе "мртав" објекатможе "оживети" (реанимирати) самоједном и


штајебољерешењеодоживљавањамртвогобјектаакојењеговостањепотребносачувати?

-метода finalize( ) може направити референцу на мртав објекат, и самим тим га „оживети“. С обзиром да се она
позива само једном, то се само једном може и десити. Да се не би створио проблем висећих показивача, објекат
не буде деалоциран, и тиме се „оживи“. Међутим, много боље је – уколико је сам објекат потребан, клонирати га,
и клон преузима стање објекта, а објекат може да буде адекватно деалоциран, као што је иницијално и требало
да се деси.

36) Далисе у дваимплементиранаинтерфејсамогуналазитиметодесаистимименима и:

1. различитимлистамааргумената и бацанихизузетака и различитимповратнимтиповима;


2. истимлистамааргумената и бацанихизузетака, а различитимповратнимтиповима;
3. истимлистамааргумената и бацанихизузетака и истимповратнимтиповима.

-(1)да (2) да (3) да

37) Акоје I интерфејс, далиједозвољено

1. дефинисатиреференцутипаинтерфејса I i;,
2. проследитиреференцунаинтерфејс I каопараметарнекојметоди,
3. створитиобјекаттипаинтерфејсапомоћу new I()?

-(1)да (2) да (3) не


38) Далисеграна finally извршава у случајевима:

1. нијеседесиоизузетак у try блоку,


2. десиосеизузетак и обрадајенастављена у грани catch којазавршаванаредбом return,
3. десиосеизузетак и обрадајенастављена у грани catch којазавршаванаредбом throw,
4. десиосеизузетак, алинепостојиодговарајућаграна catch?

-(1)да (2) да (3) да (4) да.

*Једино када се finally не извршава је када се позове System.exit( ), или JVM пукне.

39) Навестиначинестварањанити у језику Java.

-Први начин: имплементација интерфејса Runnable, тачније, њене методе void run( )

-Други начин: стварање објекта типа Thread, који представља имплементацију интерфејса Runnable , и који има
имплементацију методе void run( ),мада она не ради ништа, док се не каже другачије.

40) Штајебајткод (bytecode) и накојиначинсеубрзавањеговаинтерпретација?

-Бајткод је резултат превођења кода на језику Java. Он није конкретан машински код, већ неки међукод, и не
може га директно рачунар читати, већ је неопходна Јавина Виртуелна Машина (Јаva Virtual Machine – JVM) да га
интерпретира. Пошто је, обично, интерпретација бајткода спорија од покретања .ехе фајла, који је већ
интерпретиран у машински код, убрзавање се постиже са JIT – just-in-time compilation (dynamic translation). Део
по део кода се преводи у току интерпретирања, уместо да се преведе цео код, па тек онда покрене.

41) Штајенеопходноурадити у некојкласидабибилеомогућенедубокекопијењенихобјеката?

-имплементирати (празан) интерфејc Cloneable, и надјачавање методе clone( ), која постоји у класи Object.

42) Далиинтерфејсможеиматиконструктор и зашто?

-Не, зато што се не може инстанцијализовати, тј направити објекат интерфејса, и он не може садржати
нестатичка поља која би требало иницијализовати, евентуално, у конструктору. Интерфејс је питање уговора, а
не имплементације, и не брине се око тога како ће се објекат створити, и сл, него само шта може да ради.

43) Штаозначава: (1) this.a, (2) this(a), (3) super.a и (4) super(a)?

-(1)приступ пољу текућег објекта, са идентификатором а

-(2) експлицитан позив конструктора (текућег објекта), са параметром а

-(3) приступ пољу родитељског подобјекта (подобјекта наткласе), са идентификатором а

-(4) експлицитан позив конструктора наткласе(родитељског подобјекта), са параметром а

44) Којесуразликеизмеђуинтерфејса и апстрактнекласе?

-Апстрактна класа сме да има и нестатичка поља и имплементације појединих (чак и свих метода), док интерфејс
сме да садржи само static final поља, и чисте декларације (не сме да има имплементације – дефиниције метода). У
пракси – свака класа која имплементира интерфејс мора да имплементира сваку методу, док класе наслеђене из
апстрактне морају да дефинишу само одређене (то би била предност апстрактних класа).

45) Штајелокалнакласа и далианонимнакласаморадабуделокалнакласа?

-Локална класа је унутрашња класа која је дефинисана у блоку неке методе окружујуће класе. Најчешће је
дефинисана у самом телу, мада може да буде и у неком угнежђеном блоку. Једина разлика анонимне и локалне
класе је у непостојању имена код прве, дакле, анонимна класа мора бити локална класа.
46) Накојојидејисезаснивадобрапреносивостпрограмаписанихнајезику Java?

-На идеји превођења кода у платформски независтан бајткод(bytecode), који није машински код, и рачунар не
може директно да га чита.Уместо тога, сходно платформи, интерпретира га Јавина Виртуелна Машина (Java
Virtual Machine – JVM).

47) Какотребапројектоватикласукојанеомогућаваклонирањењенихобјеката, а
подржаваклонирањеобјекатаизведенихкласа?

-Класа не имплементира интерфејс Cloneable, али обезбеђује заштићен clone ( ) метод, који клонира њена поља
коректно. (уколико Оbject.clone( ) не задовољава).

48) Далисеизанонимнекласеможеприступатиформалнимаргументима и
локалнимпроменљивамаокружујућефункције?

-Може им се приступити само ако се декларишу као final, и то ако су декларисани пре класе.

49) Далиинтерфејсможедасадржиатрибут и зашто?

-Интерфејс може да садржи само static final атрибуте, јер у супротном би било захтевано складиштење у
меморију, што се коси са дефиницијом интерфејса.

50) Какосвеможеизгледатидекларацијаметода m() класекојаимплементирадваинтерфејса у


којимасудекларисанеметоде void m() throws E1,E2 и void m() throws E2,E3?

- void m( ) throws E2; све друго ће се косити са једном или другом декларацијом из интерфејса

51) Накојиначинсеизметодаунутрашњекласе (inner class) можеприступатичлановимаспољашњекласе и


зашто?

-clanза несакривене чланове окружујуће класе, Spolja.clanза сакривене статичке чланове спољашње класе,
Spolja.this.clan за сакривене нестатичке чланове спољашње класе (мада може и за статичке, али није
препоручено. Може и за несакривене, али нема потребе).

You might also like