ОО2/К1 2023

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу

Први колоквијум 2023. године одржан је 31. марта и трајао је 20 минута.

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

1. задатак

Бајткод (Бyтецоде) је:

  1. Бинарни извршни код који садржи наредбе машинског језика рачунара домаћина.
  2. Изворни код на језику Јава.
  3. Машинска реч дужине једног бајта.
  4. Међукод који интерпретира Јава виртуелна машина.
  5. Резултат превођења програма на језику Јава.

2. задатак

Примитивни типови у језику Јава су:

  1. Уницоде карактер char.
  2. логички bool тип.
  3. тип ниске знакова string.
  4. означени (сигнед) short тип (од -32768 до 32767) и неозначени ushort тип (од 0 до 65536).
  5. означени изузетно дугачки целобројни тип, на дужини речи од 132 бита, xlong.

3. задатак

Нека је дат следећи сегмент кода:

String s1 = new String("OOP2");
String s2 = new String("OOP2");
String s3 = s1;
String s4 = new String(s2);

Који од следећих израза ће дати резултат true?

  1. с1.еqуалс(с4);
  2. с1 == с2;
  3. с1.еqуалс(с3);
  4. с2 == с3;
  5. с1 == с4;

Објашњење: equals проверава једнакост по вредности, и зато су ти одговори тачни - сва четири стринга имају исте вредности. new String(...) алоцира потпуно нови стринг у меморији, тако да у коду изнад једино s1 и s3 референцирају исти стринг.

4. задатак

Означити права приступа на језику Јава која можемо да доделимо класи која није угнежђена.

  1. пакетско
  2. јавно
  3. заштићено
  4. приватно

5. задатак

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

  1. Метод finalize наслеђују све класе, које онда могу да га надјачају.
  2. Пре него што се ослободи меморија коју је објекат заузимао, сакупљач ђубрета увек и гарантовано позива методу finalize.
  3. Повећањем броја објеката у систему повећава се време сакупљања ђубрета.
  4. Сакупљач ђубрета може да се експлицитно позове коришћењем кључне речи delete.
  5. Постављањем на вредност нулл последње референце која упућује на објекат моментално се ослобађа меморија коју је заузимао дати објекат.

Објашњење: Метода finalize ће бити позвана само једном, тако да уколико претходни позив finalize успе да оживи тај објекат она неће бити позвана приликом њеног ослобађања из меморије.

6. задатак

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

  1. Могу се увести имена само статичких чланова класе Klasa коришћењем наредбе import static Klasa.*;
  2. Чланови пакета могу имати јавно или пакетско право приступа, при чему је подразумевано право приступа пакетско.
  3. Методи једне неугнежђене класе имају право да приступају и приватним члановима друге неугнежђене класе која се налази у истом пакету, јер су класе у истом пакету пријатељске (трустед, фриенд).
  4. Могуће је дефинисати два типа истог назива у два различита пакета.
  5. Тип A дефинисан у неименованом (подразумеваном) пакету је могуће увести у неки други пакет користећи наредбу import default.A;

7. задатак

Шта исписује следећи програм написан на програмском језику Јава? Обратити пажњу на испис без размака. Унети НП уколико сматрате да се програм не преводи, односно ГИ, уколико сматрате да се дешава грешка у извршавању.

class A {
    {
        System.out.print("A");
    }
    static {
        System.out.print("sA");
    }
}

class B extends A {
    {
        System.out.print("B1");
    }
    static {
        System.out.print("sB");
    }
    {
        System.out.print("B2");
    }
}

public class Test {
    public static void main(String args[]) {
        new B();
    }
}

Одговор: сАсБАБ1Б2

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

8. задатак

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

  1. Класа која није експлицитно изведена из друге класе изведена је из класе Object.
  2. Да би метод био полиморфан мора да се означи модификатором virtual.
  3. Из конструктора изведене класе није могуће позвати конструктор основне класе.
  4. Изведена класа може да прошири основну додавањем нових поља и нових метода.
  5. Класа може да проширује једну или више класа.

9. задатак

Шта исписује следећи програм написан на програмском језику Јава? Обратити пажњу на испис без размака. Унети НП уколико сматрате да се програм не преводи, односно ГИ, уколико сматрате да се дешава грешка у извршавању.

class Osnovna {
    public void f() { this.m(); }
    private void m() { System.out.print("O"); }
}

class Izvedena extends Osnovna {
    private void m() { System.out.print("I"); }
}

public class Test {
    public static void main(String args[]) {
        Osnovna obj1 = new Osnovna();
        obj1.f();
        Osnovna obj2 = new Izvedena();
        obj2.f();
        Izvedena obj3 = new Izvedena();
        obj3.f();
    }
}

Одговор: ООО

Објашњење: На методе означене као приватне се не примењује полиморфизам. Због тога ће позив m() из основне класе умети само да препозна приватну методу из те класе, а неће покушавати да ту исту методу потражи у поткласама.

10. задатак

Које тврдње су тачне?

  1. У изразу (A instanceof B) оператор instanceof проверава да ли је класа A поткласа класе B.
  2. Доследним коришћењем оператора instanceof пре конверзије типа може да се предупреди бацање изузетка ClassCastException.
  3. Провера типа оператором instanceof је статичка.
  4. Оператор instanceof проверава да ли је резултат израза левог операнда референца на објекат класе наведене као десни операнд или неке њене подкласе.[1]
  5. Проверу типа instanceof треба радити да би се разврстала обрада за различите типове по гранама неке разгранате структуре, на пример наредбе switch.

Напомене

  1. На колоквијуму је на овом месту писало "наткласе" уместо "подкласе", па је жалбу на ово питање професор касније признао.