ОО2/Пробни тестови 2021
- За питања са више одговора, тачни одговори су подебљани и уоквирени
- За питања за које се одговори уносе, тачни одговори су подвучени и сакривени, тако да се прикажу када изаберете тај текст (пример: овако)
- Притисните лево дугме испод за сакривање и откривање свих одговора, или десно дугме за укључивање и искључивање интерактивног режима:
Колоквијум - самотестирање
На сваком питању је било или могуће изабрати једно или више решења или унети одговор у поље.
1. задатак
Које тврдње за језик Јава су тачне?
- Интерпретирање бајткода је по правилу ефикасније од извршења програма на машинском језику.
- ЈИТ (Јуст Ин Тиме) преводилац преводи изворни код програма у бајткод.
- Имплементација виртуелне машине зависи од конкретне платформе, али интерфејс према бајткоду остаје исти.
- Изворни код програма се интерпретира од стране виртуелне машине.
- Изворни код програма се назива бајткод.
Објашњење: ЈИТ преводилац преводи бајткод у машинске инструкције приликом извршавања, виртуелна машина интерпретира бајткод и он је различит од изворног кода по томе што преводилац мора да преведе изворни код у бајткод.
2. задатак
Шта исписује следећи програм?
public class A {
public static void main(String[] args) {
String str1 = "abc", str2 = "abc", str3 = "ab" + "c", str4 = new String("abc");
System.out.println(str1==str2);
System.out.println(str1==str3);
System.out.println(str1==str4);
}
}
false
false
falsefalse
false
truetrue
false
falsetrue
true
falsetrue
true
true
Објашњење: Преводилац ће оптимизовати[?] str3
приликом превођења па ће str1
, str2
и str3
показивати на исте ниске у стринг поол док str4
изричито користи ниску која није у стринг поол.
3. задатак
Дат је следећи програм:
public class Primer{
int polje;
static void f(Object o){
if(o instanceof Primer)
((Primer)o).polje = 1;
else if (o instanceof Integer)
o = 0;
}
public static void main(String[] args){
Primer p = new Primer();
Integer i = 0;
f(p);
f(i);
System.out.println(p.polje + " " + i);
}
}
Одабрати тачан одговор
- Код је синтаксно неисправан.
- Програм исписује вредности
0 0
. - Програм исписује вредности
0 1
. - Програм исписује вредности
1 0
. - Програм исписује вредности
1 1
.
Објашњење: Први позив f
ће изменити поље класе на 1 преко референце док други позив неће изменити објекат i
јер се референце преносе по вредности. Без обзира на ово друго, додуше, i
би свакако био 0.
4. задатак
За пакете на језику Јава важи:
- Постоје типови који могу припадати већем броју пакета.
- Свака класа мора бити део неког пакета.
- Увожењем пакета не увозе се и сви потпакети тог пакета.
- Све класе које се налазе у истој датотеци су део истог пакета.
- Пакет
java.lang
се аутоматски увози. - У датотеци може постојати више наредби:
package
назив_пакета;
5. задатак
Које тврдње су тачне за нестатичке иницијализационе блокове?
- Извршавају се након извршавања конструктора своје класе.
- Могу бацати изузетке.
- Може их бити више у једној класи.
- Извршавају се након пуњења класе у меморију, а пре стварања првог објекта дате класе.
- Извршавају се након извршавања конструктора наткласе.
Објашњење: Нестатички иницијализациони блокови могу бацати изузетке уколико су сви конструктори класе декларисани као да те изузетке бацају.
6. задатак
Шта исписује следећи програм на програмском језику Јава? Уписати 0 уколико се програм не преводи, односно 1 уколико постоји грешка у време извршавања програма.
class A {
private void m() {
System.out.print("a");
}
public A() {
m();
}
}
class B extends A {
public void m() {
System.out.print("b");
}
public B() {
m();
}
}
public class Test {
public static void main(String args[]) {
new B();
}
}
Одговор: аб
Објашњење: Прва заврши са иницијализацијом класа A
као наткласа класе B
, а затим се позове конструктор класе B
. Пошто је метода наткласе означена као private
, она неће бити полиморфно редефинисана у B
и зато се из конструктора A
позива метод те класе.
7. задатак
Модификатор абстрацт је могуће ставити испред дефиниције:
- метода
- класе
- интерфејса
- набрајања
- поља класе
8. задатак
Шта важи за тхроw на програмском језику Јава?
- Може се користити у статичким иницијализационим блоковима.
- Представља оператор језика Јава.
- Параметар му је референца на објекат класе која мора бити изведена из класе Еxцептион.
- Може се користити без параметра.
- Представља кључну реч језика Јава.
Објашњење: throw
се може користити у статичким иницијализационим блоковима, али само ако се изузеци бачени преко њега у том истом статичком иницијализационом блоку и ухвате. За разлику од C++, у Јави throw
није оператор већ наредба (и кључна реч), и поновно бацање изузетка са throw;
није дозвољено. Параметар му је референца на објекат изведен из класе Throwable
, која је надкласа Exception
.
9. задатак
Уколико су дефинисани следећи интерфејси:
interface I1 {int m(int i);}
interface I2 {int m(int i, int k, int j);}
interface I3 {double m(int n);}
interface I4 {double m(double x, double y);}
interface I5 {int m(int i);}
које од наведених наредби су исправне?
инт и=1,ј=2; И5 и5=(и+ј)->и*ј;
И3 и3=к->{доубле п=1; фор (инт и=1; и<=к; п*=и++); ретурн п;};
И2 и2=(x,y,з)->x+y-з;
И4 и4=(а,б)->{а*б};
И1 и1=н->н+5;
Објашњење: Израз са четвртим интерфејсом није валидан јер када се ламбда израз окружи блоком ({}
) више се не подразумева return
. Израз са петим интерфејсом има синтаксну грешку, јер (i+j)->...
нема смисла.
10. задатак
Која тврђења су тачна на програмском језику Јава?
- Ако је пре уласка у
wait()
позван методnotifyAll()
за исти објекат, нит која позиваwait()
неће бити блокирана. - По уласку у
wait()
, нит се блокира (суспендује) и ослобађа се брава објекта. - Методи
wait()
,notify()
иnotifyAll()
морају да се позивају из синхронизованих делова кода. - Метод
notify()
буди само једну нит и то увек ону која је најдуже чекала. wait()
је метод класеThread
.
Објашњење: wait()
је метод класе Object
, док notify()
не буди нужно нит која је најдуже чекала.