ОО2/К2 2021 — разлика између измена

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


=== 10. zadatak ===
=== 10. zadatak ===
Šta je tačno za sledeći kod na programskom jeziku Java?
<syntaxhighlight lang="java">
public class Test {
    public static void main(String[] arguments) {
        Thread t1 = new Thread(() -> { while (true); });
        t1.setDaemon(false);
        t1.start();
    }
}
</syntaxhighlight>
<div class="abc-list">
# Referenca ''t1'' pokazuje na demonsku nit.
# Java virtuelna mašina (JVM) završava svoj rad nakon završetka glavne funkcije.
# <span class="solution">Linija sa ''setDaemon'' u kodu ne menja demonski status niti na koju pokazuje ''t1''.</span>
# <span class="solution">Nakon izvršenja glavne funkcije se ne izlazi iz programa jer ima još korisničkih niti za izvršavanje.</span>
# <span class="solution">Linija sa ''setDaemon'' u kodu ne menja ništa, odnosno nema efekta</span>
</div>


== G2 ==
== G2 ==

Верзија на датум 8. мај 2021. у 08:42

  • Za pitanja sa više odgovora, tačni odgovori su podebljani i uokvireni.
  • Za pitanja za koje se odgovori unose, tačni odgovori su podvučeni i sakriveni: ovako.
  • Pritisnite na sledeće dugme kako biste ih sakrili ili otkrili:

G1

1. zadatak

2. zadatak

3. zadatak

4. zadatak

Šta upisuje sledeći kod na programskom jeziku Java? (Upisati 0 ako se program ne prevodi

interface A { default void m() { System.out.print("A.m()"); } }
interface B { default void m() { System.out.print("B.m()"); } }
public class C implements A,B {
    public void m() { System.out.print("C.m()"); A.super.m(); B.super.m(); }
    public static void main(String[] arguments) {
        C c = C Test();
        c.m();
    }
}

Odgovor: C.m()A.m()B.m()

5. zadatak

6. zadatak

7. zadatak

8. zadatak

9. zadatak

10. zadatak

Šta je tačno za sledeći kod na programskom jeziku Java?

public class Test {
    public static void main(String[] arguments) {
        Thread t1 = new Thread(() -> { while (true); });
        t1.setDaemon(false);
        t1.start();
    }
}
  1. Referenca t1 pokazuje na demonsku nit.
  2. Java virtuelna mašina (JVM) završava svoj rad nakon završetka glavne funkcije.
  3. Linija sa setDaemon u kodu ne menja demonski status niti na koju pokazuje t1.
  4. Nakon izvršenja glavne funkcije se ne izlazi iz programa jer ima još korisničkih niti za izvršavanje.
  5. Linija sa setDaemon u kodu ne menja ništa, odnosno nema efekta

G2

1. zadatak

Označiti tačna tvrđenja na programskom jeziku Java:

  1. Eksplicitni ili implicitni poziv konstruktora nadklase se može izbeći ako se u konstruktoru izvedene klase pozove neki drugi konstruktor te iste klase.
  2. Ako se koristi, poziv drugog konstruktora iste klase mora biti prva naredba u konstruktoru.
  3. Konstrukcija objekta se može delegirati pozivom jednog konstruktora iz drugog konstruktora.
  4. Rekurziju u delegiranju konstruktora detektuje prevodilac.
  5. Dozvoljeno je u konstruktoru prvo pozvati konstruktor nadklase a zatim delegirati konstrukciju nekom drugom konstruktoru.

2. zadatak

Označiti tačna tvrđenja na programskom jeziku Java:

  1. Referenca na neki interfejs može pokazivati na literal null.
  2. Svi interfejsi su izvedeni iz klase Interface u paketu java.lang.
  3. Referenci na neki interfejs može se dodeliti objekat bilo koje klase koja proširuje[1] taj interfejs.
  4. Referenci na interfejs se može dodeliti objekat koji se dobije kada se sa druge strane alokatora new nađe naziv tog interfejsa.
  5. Referenca na neki interfejs se može dodeliti referenci tipa Object.

3. zadatak

Šta ispisuje sledeći kod na programskom jeziku Java? Ukoliko se program ne kompajlira, upisati 0.

interface A { default void m() { System.out.println("A.m()"); } }
class C { public void m() { System.out.println("C.m()"); } }
public class Test extends C implements A {
    public static void main(String[] arguments) {
        Test t = new Test();
        t.m();
    }
}

Odgovor: C.m

4. zadatak

Anonimna klasa na programskom jeziku Java može sadržati:

  1. konstruktor
  2. nestatičke metode
  3. statičke metode
  4. nestatička polja
  5. statička polja

5. zadatak

Šta se može napisati umesto ### kako bi se sledeći kod na programskom jeziku Java prevodio ispravno?

interface Calc {
    int m(int a, int b);
}
public class Test {
    public static void main(String[] arguments) {
        ###
    }
}
  1. Calc c = (int a, int b) -> a + b;
  2. Calc c = (int a, int b) -> { a + b };
  3. Calc c = (int a, int b) -> { int r = a + b; return r; };
  4. Calc c = (int a, int b) -> return a + b;
  5. Calc c = (int a, int b) -> { return a + b; };

6. zadatak

Šta se može napisati umesto $$$ kako bi se sledeći kod na programskom jeziku Java ispravno izvršavao i ispisivao 2?

class Spoljna {
    int x = 1;
    class Unutrasnja {
        int x = 2;
        public void m(int x) {
            System.out.println($$$);
        }
    }
}

public class Main {
    public static void main(String[] arguments) {
        new Spoljna().new Unutrasnja().m(3);
    }
}
  1. x
  2. this.x
  3. super.x
  4. Spoljna.this.x
  5. Spoljna.x

7. zadatak

Označiti tačna tvrđenja na programskom jeziku Java:

  1. finally blok može da postoji bez catch bloka.
  2. finally blok se izvršava samo ukoliko se u catch bloku baci izuzetak.
  3. finally blok se izvršava samo ukoliko se u catch bloku ne baci izuzetak.
  4. finally blok se izvršava bez obzira na to da li je u catch bloku bačen izuzetak.
  5. finally blok se izvršava iako ne dođe do greške.

8. zadatak

Označiti tačna tvrđenja na programskom jeziku Java:

  1. Metoda start ponovo pokreće nit ukoliko je završena.
  2. Ponovni poziv start nakon završetka niti je greška.
  3. Poziv metode start stavlja nit nad kojom je pozvana u red spremnih niti.
  4. Nit koja poziva start se blokira.
  5. Nit koja poziva start se ne blokira.

9. zadatak

Označiti tačna tvrđenja na programskom jeziku Java:

  1. Poziv interrupt nad blokiranom niti izaziva izuzetak InterruptedException.
  2. Poziv interrupt nad blokiranom niti izaziva izuzetak ThreadDeath.
  3. Poziv interrupt nad blokiranom niti je deblokira.
  4. Poziv interrupt nad blokiranom niti ne menja njeno stanje.
  5. Poziv interrupt nad blokiranom niti ne postavlja interrupted status.

10. zadatak

Šta je tačno za sledeći kod na programskom jeziku Java?

public class Test {
    public static void main(String[] arguments) {
        Thread t1 = new Thread(() -> { while (true); });
        t1.setDaemon(true);
        t1.start();
    }
}
  1. Referenca t1 pokazuje na demonsku nit.
  2. Java virtuelna mašina (JVM) završava svoj rad nakon završetka glavne funkcije.
  3. Linija sa setDaemon u kodu ne menja demonski status niti na koju pokazuje t1.
  4. Nakon izvršenja glavne funkcije se ne izlazi iz programa jer ima još korisničkih niti za izvršavanje.
  5. Referenca t1 ne pokazuje na demonsku nit.

G3

1. zadatak

Šta će sledeći program ispisati? Napisati 0 ukoliko se program ne prevodi.

interface A { default void m() { System.out.print("A.m()"); } }
interface B { default void m() { System.out.print("B.m()"); } }
public class X implements A, B {
    public void f() { System.out.print("X.f()"); A.super.m(); B.super.m(); }
    public static void main (String[] args) {
        X x = new X();
        x.f();
    }
}

Odgovor: 0

Objašnjenje: Klasa X implementira interfejse koji imaju podrazumevanu metodu istog naziva, a pritom je ne redefiniše kao svoj metod, što je u Javi greška i takav program se neće prevoditi.

2. zadatak

Koji su iskazi tačni za metod wait:

  1. Ukoliko se pozove interrupt za nit za koju je prethodno pozvano wait, takva nit će se deblokirati.
  2. Ukoliko se pozove interrupt za nit za koju je prethodno pozvano wait, baciće se izuzetak InterruptedException.
  3. Ukoliko se pozove interrupt za nit za koju je prethodno pozvano wait, baciće se izuzetak ThreadDeath.
  4. Ukoliko se pozove interrupt za nit za koju je prethodno pozvano wait, neće se promeniti status prekida.

3. zadatak

Koji su iskazi tačni za metod join:

  1. Pozivom metoda join bez argumenata za neku nit, nit koja poziva metod čeka da nit za koju je metod pozvan završi izvršavanje.
  2. Metod join se može pozvati bez argumenata.
  3. Pozivom metoda join za neku nit sa zadatim vremenom u milisekundama čekaće se bar toliko vremena, bez obzira na to da li je nit završila izvršavanje pre isteka vremena.
  4. Metod join ne može da se nadjača u izvedenim klasama.
  5. Pozivom metoda join podrazumevano se završava nit za koju je pozvan metod.

4. zadatak

Šta važi za anonimne klase:

  1. Anonimne klase mogu pristupati nestatičkim poljima okružujuće klase.
  2. Anonimne klase mogu pristupati statičkim poljima okružujuće klase.
  3. Anonimne klase mogu pristupati nepromenljivim parametrima metoda koji ih okružuje.
  4. Anonimne klase mogu pristupati lokalnim promenljivama okružujućeg metoda kojima se ne menja vrednost.
  5. Anonimne klase mogu pristupati svim lokalnim promenljivama okružujućeg metoda, kao i njegovim parametrima, bez obzira na to da li im se menja vrednost.

5. zadatak

Šta važi za interfejse:

  1. Podrazumevano su polja interfejsa javna, statička i konačna.
  2. Podrazumevano su metodi interfejsa apstraktni i javni.
  3. Interfejsi mogu definisati podrazumevane metode.
  4. Interfejsi mogu definisati statičke metode.
  5. Interfejsi mogu imati modifikator final.

6. zadatak

Navesti šta je tačno za demonske niti:

  1. Demonstvo se nasleđuje od niti iz koje je kreirana data nit.
  2. Demonstvo može da se menja nakon pokretanja niti.
  3. Pokušaj promene demonstva nakon pokretanja baciće IllegalStateException.
  4. Demonske niti će nastaviti izvršavanje nakon završetka svih ostalih niti.
  5. Demonstvo se može menjati samo pre pokretanja niti.

7. zadatak

interface Calc {
    int f(int x);
}

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

Šta treba da stoji umesto ### da bi program korektno završio?

  1. Calc c = (a) -> a * a;
  2. Calc c = a -> a * a;
  3. Calc c = a -> { a*a; }
  4. Calc c = b -> b * b;
  5. Calc c = (int a) -> a * a;

8. zadatak

Koje su tvrdnje tačne za podrazumevani ugrađeni konstruktor:

  1. Ukoliko nije definisan nijedan drugi konstruktor, prevodilac ga automatski obezbeđuje.
  2. Podrazumevano će samo pozvati podrazumevani konstruktor natklase.
  3. Neće pozvati podrazumevani konstruktor natklase samo u slučaju da je klasa direktno izvedena iz klase Object.
  4. Ukoliko je klasa javna, i on je podrazumevano javan.
  5. ??? svakako nešto netačno

9. zadatak

public class Spoljna {
    int x = 1;
    class Unutrasnja {
        int x = 2;
        void m(int x) {
            System.out.print(###);
        }
    }
    public static void main(String[] args) {
        new Spoljna().new Unutrasnja().m(3);
    }
}

Šta može sve stajati umesto ### da bi program korektno završio i ispisao 1?

  1. this.x
  2. x
  3. Spoljna.this.x
  4. Outer.x
  5. super.x

10. zadatak

Navesti tačne tvrdnje za izuzetke:

  1. Svi izuzeci u Javi moraju biti izvedeni iz klase Exception.
  2. Svi izuzeci koji se bacaju u metodu moraju se navesti u njegovoj throws klauzuli.
  3. Prevodilac može da proveri tipove izuzetaka navedenih u throws klauzuli.
  4. Metod može baciti izuzetak isključivo eksplicitnim navođenjem uz throw.

Napomene

  1. Ovo nije bila navlakuša, već je trebalo da piše "implementira".