OO2/Probni testovi 2021

Izvor: SI Wiki
< ОО2
Datum izmene: 30. jun 2021. u 14:00; autor: Fedja (razgovor | doprinosi) (+data-solutions i kategorija)
(razl) ← Starija izmena | Trenutna verzija (razl) | Novija izmena → (razl)
Pređi na navigaciju Pređi na pretragu
  • За питања са више одговора, тачни одговори су подебљани и уоквирени
  • За питања за које се одговори уносе, тачни одговори су подвучени и сакривени, тако да се прикажу када изаберете тај текст (пример: овако)
  • Притисните лево дугме испод за сакривање и откривање свих одговора, или десно дугме за укључивање и искључивање интерактивног режима:

Kolokvijum - samotestiranje

Na svakom pitanju je bilo ili moguće izabrati jedno ili više rešenja ili uneti odgovor u polje.

1. zadatak

Koje tvrdnje za jezik Java su tačne?

  1. Interpretiranje bajtkoda je po pravilu efikasnije od izvršenja programa na mašinskom jeziku.
  2. JIT (Just In Time) prevodilac prevodi izvorni kod programa u bajtkod.
  3. Implementacija virtuelne mašine zavisi od konkretne platforme, ali interfejs prema bajtkodu ostaje isti.
  4. Izvorni kod programa se interpretira od strane virtuelne mašine.
  5. Izvorni kod programa se naziva bajtkod.

Objašnjenje: JIT prevodilac prevodi bajtkod u mašinske instrukcije prilikom izvršavanja, virtuelna mašina interpretira bajtkod i on je različit od izvornog koda po tome što prevodilac mora da prevede izvorni kod u bajtkod.

2. zadatak

Šta ispisuje sledeći program?

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

Objašnjenje: Prevodilac će optimizovati[?] str3 prilikom prevođenja pa će str1, str2 i str3 pokazivati na iste niske u string pool dok str4 izričito koristi nisku koja nije u string pool.

3. zadatak

Dat je sledeći program:

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);
  }
}

Odabrati tačan odgovor

  1. Kod je sintaksno neispravan.
  2. Program ispisuje vrednosti 0 0.
  3. Program ispisuje vrednosti 0 1.
  4. Program ispisuje vrednosti 1 0.
  5. Program ispisuje vrednosti 1 1.

Objašnjenje: Prvi poziv f će izmeniti polje klase na 1 preko reference dok drugi poziv neće izmeniti objekat i jer se reference prenose po vrednosti. Bez obzira na ovo drugo, doduše, i bi svakako bio 0.

4. zadatak

Za pakete na jeziku Java važi:

  1. Postoje tipovi koji mogu pripadati većem broju paketa.
  2. Svaka klasa mora biti deo nekog paketa.
  3. Uvoženjem paketa ne uvoze se i svi potpaketi tog paketa.
  4. Sve klase koje se nalaze u istoj datoteci su deo istog paketa.
  5. Paket java.lang se automatski uvozi.
  6. U datoteci može postojati više naredbi: package naziv_paketa;

5. zadatak

Koje tvrdnje su tačne za nestatičke inicijalizacione blokove?

  1. Izvršavaju se nakon izvršavanja konstruktora svoje klase.
  2. Mogu bacati izuzetke.
  3. Može ih biti više u jednoj klasi.
  4. Izvršavaju se nakon punjenja klase u memoriju, a pre stvaranja prvog objekta date klase.
  5. Izvršavaju se nakon izvršavanja konstruktora natklase.

Objašnjenje: Nestatički inicijalizacioni blokovi mogu bacati izuzetke ukoliko su svi konstruktori klase deklarisani kao da te izuzetke bacaju.

6. zadatak

Šta ispisuje sledeći program na programskom jeziku Java? Upisati 0 ukoliko se program ne prevodi, odnosno 1 ukoliko postoji greška u vreme izvršavanja programa.

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();
    }
}

Odgovor: ab

Objašnjenje: Prva završi sa inicijalizacijom klasa A kao natklasa klase B, a zatim se pozove konstruktor klase B. Pošto je metoda natklase označena kao private, ona neće biti polimorfno redefinisana u B i zato se iz konstruktora A poziva metod te klase.

7. zadatak

Modifikator abstract je moguće staviti ispred definicije:

  1. metoda
  2. klase
  3. interfejsa
  4. nabrajanja
  5. polja klase

8. zadatak

Šta važi za throw na programskom jeziku Java?

  1. Može se koristiti u statičkim inicijalizacionim blokovima.
  2. Predstavlja operator jezika Java.
  3. Parametar mu je referenca na objekat klase koja mora biti izvedena iz klase Exception.
  4. Može se koristiti bez parametra.
  5. Predstavlja ključnu reč jezika Java.

Objašnjenje: throw se može koristiti u statičkim inicijalizacionim blokovima, ali samo ako se izuzeci bačeni preko njega u tom istom statičkom inicijalizacionom bloku i uhvate. Za razliku od C++, u Javi throw nije operator već naredba (i ključna reč), i ponovno bacanje izuzetka sa throw; nije dozvoljeno. Parametar mu je referenca na objekat izveden iz klase Throwable, koja je nadklasa Exception.

9. zadatak

Ukoliko su definisani sledeći interfejsi:

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);}

koje od navedenih naredbi su ispravne?

  1. int i=1,j=2; I5 i5=(i+j)->i*j;
  2. I3 i3=k->{double p=1; for (int i=1; i<=k; p*=i++); return p;};
  3. I2 i2=(x,y,z)->x+y-z;
  4. I4 i4=(a,b)->{a*b};
  5. I1 i1=n->n+5;

Objašnjenje: Izraz sa četvrtim interfejsom nije validan jer kada se lambda izraz okruži blokom ({}) više se ne podrazumeva return. Izraz sa petim interfejsom ima sintaksnu grešku, jer (i+j)->... nema smisla.

10. zadatak

Koja tvrđenja su tačna na programskom jeziku Java?

  1. Ako je pre ulaska u wait() pozvan metod notifyAll() za isti objekat, nit koja poziva wait() neće biti blokirana.
  2. Po ulasku u wait(), nit se blokira (suspenduje) i oslobađa se brava objekta.
  3. Metodi wait(), notify() i notifyAll() moraju da se pozivaju iz sinhronizovanih delova koda.
  4. Metod notify() budi samo jednu nit i to uvek onu koja je najduže čekala.
  5. wait() je metod klase Thread.

Objašnjenje: wait() je metod klase Object, dok notify() ne budi nužno nit koja je najduže čekala.