ОО2/Пробни тестови 2021

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
  • За питања са више одговора, тачни одговори су подебљани и уоквирени
  • За питања за које се одговори уносе, тачни одговори су подвучени и сакривени, тако да се прикажу када изаберете тај текст (пример: овако)
  • Притисните лево дугме испод за сакривање и откривање свих одговора, или десно дугме за укључивање и искључивање интерактивног режима:

Колоквијум - самотестирање

На сваком питању је било или могуће изабрати једно или више решења или унети одговор у поље.

1. задатак

Које тврдње за језик Јава су тачне?

  1. Интерпретирање бајткода је по правилу ефикасније од извршења програма на машинском језику.
  2. ЈИТ (Јуст Ин Тиме) преводилац преводи изворни код програма у бајткод.
  3. Имплементација виртуелне машине зависи од конкретне платформе, али интерфејс према бајткоду остаје исти.
  4. Изворни код програма се интерпретира од стране виртуелне машине.
  5. Изворни код програма се назива бајткод.

Објашњење: ЈИТ преводилац преводи бајткод у машинске инструкције приликом извршавања, виртуелна машина интерпретира бајткод и он је различит од изворног кода по томе што преводилац мора да преведе изворни код у бајткод.

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);
     }
}
  1. false
    false
    false
  2. false
    false
    true
  3. true
    false
    false
  4. true
    true
    false
  5. true
    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);
  }
}

Одабрати тачан одговор

  1. Код је синтаксно неисправан.
  2. Програм исписује вредности 0 0.
  3. Програм исписује вредности 0 1.
  4. Програм исписује вредности 1 0.
  5. Програм исписује вредности 1 1.

Објашњење: Први позив f ће изменити поље класе на 1 преко референце док други позив неће изменити објекат i јер се референце преносе по вредности. Без обзира на ово друго, додуше, i би свакако био 0.

4. задатак

За пакете на језику Јава важи:

  1. Постоје типови који могу припадати већем броју пакета.
  2. Свака класа мора бити део неког пакета.
  3. Увожењем пакета не увозе се и сви потпакети тог пакета.
  4. Све класе које се налазе у истој датотеци су део истог пакета.
  5. Пакет java.lang се аутоматски увози.
  6. У датотеци може постојати више наредби: package назив_пакета;

5. задатак

Које тврдње су тачне за нестатичке иницијализационе блокове?

  1. Извршавају се након извршавања конструктора своје класе.
  2. Могу бацати изузетке.
  3. Може их бити више у једној класи.
  4. Извршавају се након пуњења класе у меморију, а пре стварања првог објекта дате класе.
  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. задатак

Модификатор абстрацт је могуће ставити испред дефиниције:

  1. метода
  2. класе
  3. интерфејса
  4. набрајања
  5. поља класе

8. задатак

Шта важи за тхроw на програмском језику Јава?

  1. Може се користити у статичким иницијализационим блоковима.
  2. Представља оператор језика Јава.
  3. Параметар му је референца на објекат класе која мора бити изведена из класе Еxцептион.
  4. Може се користити без параметра.
  5. Представља кључну реч језика Јава.

Објашњење: 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. инт и=1,ј=2; И5 и5=(и+ј)->и*ј;
  2. И3 и3=к->{доубле п=1; фор (инт и=1; и<=к; п*=и++); ретурн п;};
  3. И2 и2=(x,y,з)->x+y-з;
  4. И4 и4=(а,б)->{а*б};
  5. И1 и1=н->н+5;

Објашњење: Израз са четвртим интерфејсом није валидан јер када се ламбда израз окружи блоком ({}) више се не подразумева return. Израз са петим интерфејсом има синтаксну грешку, јер (i+j)->... нема смисла.

10. задатак

Која тврђења су тачна на програмском језику Јава?

  1. Ако је пре уласка у wait() позван метод notifyAll() за исти објекат, нит која позива wait() неће бити блокирана.
  2. По уласку у wait(), нит се блокира (суспендује) и ослобађа се брава објекта.
  3. Методи wait(), notify() и notifyAll() морају да се позивају из синхронизованих делова кода.
  4. Метод notify() буди само једну нит и то увек ону која је најдуже чекала.
  5. wait() је метод класе Thread.

Објашњење: wait() је метод класе Object, док notify() не буди нужно нит која је најдуже чекала.