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

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
м (→‎3. zadatak: za ispis je samo zaboravljena () u ispisu)
 
(Није приказано 20 међуизмена 4 корисника)
Ред 1: Ред 1:
{{tocright}}
{{tocright}}
* Za pitanja sa više odgovora, tačni odgovori su <span class="solution-example">podebljani i uokvireni</span>.
{{rešenja}}
* Za pitanja za koje se odgovori unose, tačni odgovori su podvučeni i sakriveni: <span class="spoiler-example">ovako</span>.
* Pritisnite na sledeće dugme kako biste ih sakrili ili otkrili: <span class="unhide-spoilers unhide-solutions"></span>


== G1 ==
== G1 ==
=== 1. zadatak ===
=== 1. zadatak ===
Označiti tačna tvrđenja na programskom jeziku Java:
Označiti tačna tvrđenja na programskom jeziku Java:
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# <span class="solution">Ako konstruktor nadklase nema konstruktor bez parametara(no-arg) potrebno je eksplicitno pozvati taj konstruktor u prvoj liniji konstruktora posmatrane klase</span>
# <span class="solution">Ako konstruktor natklase nema konstruktor bez parametara (''no-arg'') potrebno je eksplicitno pozvati taj konstruktor u prvoj liniji konstruktora posmatrane klase.</span>
# <span class="solution">Konstruktor nadglase će biti implicitno pozvan ako postoji i bez parametra je</span>
# <span class="solution">Konstruktor natklase će biti implicitno pozvan ako postoji i bez parametara je.</span>
# Konstruktor nadklase se može eksplicitno pozvati imenom te klase.
# Konstruktor natklase se može eksplicitno pozvati imenom te klase.
#  
# ??
#  
# ??
</div>
</div>


=== 2. zadatak ===
=== 2. zadatak ===
Označiti tačna tvrđenja na programskom jeziku Java:
<div class="abc-list" data-solution="multiple">
# Interfejs može da proširuje<ref name="interface">Ovo nije bila navlakuša, već je trebalo da piše "implementira". Nekim studentima koji su ovakvu grešku smatrali namernom su bodovi koje su izgubili nezaokruživanjem tačnih tvrdnji zbog ove greške bili priznati naknadno.</ref> više klasa.
# <span class="solution">Interfejs može da proširuje<ref name="interface" /> više interfejsa.</span>
# Interfejs može da proširi<ref name="interface" /> samo jedan interfejs.
# <span class="solution">Interfejs može biti osnova za proširivanje<ref name="interface" /> više interfejsa.</span>
# Interfejs se implicitno izvodi iz klase ''Object''.
</div>


=== 3. zadatak ===
=== 3. zadatak ===
Označiti tačna tvrđenja na programskom jeziku Java:
<div class="abc-list" data-solution="multiple">
# <span class="solution">Anonimna klasa je lokalna klasa bez imena.</span>
# <span class="solution">Anonimna klasa se definiše u izrazu new, kao deo naredbe.</span>
# <span class="solution">Anonimna klasa proširuje drugu klasu ili interfejs.</span>
# <span class="solution">Natklasa anonimne klase se definiše u imenu te klase.</span>
# Anonimna klasa u svojoj definiciji koristi ključne reči <code>extends</code> i/ili <code>implements</code>.
</div>


=== 4. zadatak ===
=== 4. zadatak ===
Šta upisuje sledeći kod na programskom jeziku Java? (Upisati 0 ako se program ne prevodi
Šta ispisuje sledeći kod na programskom jeziku Java? (Upisati 0 ako se program ne prevodi.)
<syntaxhighlight lang="java">
<syntaxhighlight lang="java">
interface A { default void m() { System.out.print("A.m()"); } }
interface A { default void m() { System.out.print("A.m()"); } }
Ред 27: Ред 41:
     public void m() { System.out.print("C.m()"); A.super.m(); B.super.m(); }
     public void m() { System.out.print("C.m()"); A.super.m(); B.super.m(); }
     public static void main(String[] arguments) {
     public static void main(String[] arguments) {
         C c = C Test();
         C c = new C();
         c.m();
         c.m();
     }
     }
}
}
</syntaxhighlight>
</syntaxhighlight>
Odgovor: <span class="spoiler">C.m()A.m()B.m()</span>
Odgovor: <span class="spoiler" data-solution="text">C.m()A.m()B.m()</span>


=== 5. zadatak ===
=== 5. zadatak ===
Šta se može napisati umesto <code>###</code> kako bi se sledeći kod na programskom jeziku Java prevodio ispravno?
<syntaxhighlight lang="java">
interface Calc {
    int m(int a, int b);
}
public class Test {
    public static void main(String[] arguments) {
        ###
    }
}
</syntaxhighlight>
<div class="abc-list" data-solution="multiple">
# <span class="solution"><syntaxhighlight lang="java" inline>Calc c = (int a, int b) -> a + b;</syntaxhighlight></span>
# <syntaxhighlight lang="java" inline>Calc c = a, b -> a + b ;</syntaxhighlight>
# <syntaxhighlight lang="java" inline>Calc c = a, b -> { a + b };</syntaxhighlight>
# <syntaxhighlight lang="java" inline>Calc c = (int a, b) -> return a + b;</syntaxhighlight>
# <span class="solution"><syntaxhighlight lang="java" inline>Calc c = (int a, int b) -> { return a + b; };</syntaxhighlight></span>
</div>


=== 6. zadatak ===
=== 6. zadatak ===
Ред 55: Ред 87:
}
}
</syntaxhighlight>
</syntaxhighlight>
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# <syntaxhighlight lang="java" inline>this.x</syntaxhighlight>
# <syntaxhighlight lang="java" inline>this.x</syntaxhighlight>
# <span class="solution"><syntaxhighlight lang="java" inline>x</syntaxhighlight></span>
# <span class="solution"><syntaxhighlight lang="java" inline>x</syntaxhighlight></span>
Ред 65: Ред 97:
=== 7. zadatak ===
=== 7. zadatak ===
Označiti tačna tvrđenja na programskom jeziku Java:
Označiti tačna tvrđenja na programskom jeziku Java:
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# ''finally'' blok se izvršava samo ukoliko se u ''try'' bloku baci izuzetak.
# ''finally'' blok se izvršava samo ukoliko se u ''try'' bloku baci izuzetak.
# ''finally'' blok se izvršava samo ukoliko se u ''try'' bloku ne baci izuzetak.
# ''finally'' blok se izvršava samo ukoliko se u ''try'' bloku ne baci izuzetak.
# <span class="solution">''finally'' blok se izvršava bez obzira na to da li je u ''try'' bloku bačen izuzetak.</span>
# <span class="solution">''finally'' blok se izvršava bez obzira na to da li je u ''try'' bloku bačen izuzetak.</span>
# <span class="solution">Može postojati samo jedan ''finally'' blok za posmatrani try blok.</span>
# <span class="solution">Može postojati samo jedan ''finally'' blok za posmatrani ''try'' blok.</span>
# <span class="solution">U ''finally'' bloku može biti bačen izuzetak.</span>
# <span class="solution">U ''finally'' bloku može biti bačen izuzetak.</span>
</div>
</div>


=== 8. zadatak ===
=== 8. zadatak ===
Označiti tačna tvrđenja na programskom jeziku Java:
<div class="abc-list" data-solution="multiple">
# <span class="solution">Telo metode ''run'' klase Thread je prazno.</span>
# Korisnik eksplicitno treba da pozove metodu ''run''.
# <span class="solution">Klasa izvedena iz klase Thread treba<ref>Ovo nije navlakuša već se misli pri konkretnom korišćenju, tako da treba, ali ne mora - samo neće raditi ništa.</ref> da nadjača metodu ''run''.</span>
# <span class="solution">Java virtuelna mašina implicitno zove metodu ''run''.</span>
# <span class="solution">Nit normalno završava izvršenje po povratku iz njenog metoda ''run''.</span>
</div>


=== 9. zadatak ===
=== 9. zadatak ===
Označiti tačna tvrđenja na programskom jeziku Java:
Označiti tačna tvrđenja na programskom jeziku Java:
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# <span class="solution">Poziv ''interrupt'' nad blokiranom niti metodom join() izaziva izuzetak ''InterruptedException''.</span>
# <span class="solution">Poziv ''interrupt'' nad blokiranom niti metodom join() izaziva izuzetak ''InterruptedException''.</span>
# Poziv ''interrupt'' nad blokiranom niti metodom join() izaziva izuzetak ''ThreadDeath''.
# Poziv ''interrupt'' nad blokiranom niti metodom join() izaziva izuzetak ''ThreadDeath''.
# <span class="solution">Poziv ''interrupt'' nad blokiranom metodom join() nit se deblokira.</span>
# <span class="solution">Poziv ''interrupt'' nad blokiranom metodom join() nit se deblokira.</span>
# Poziv ''interrupt'' nad blokiranom niti metodom join() postavlja ''interrupted'' status
# Poziv ''interrupt'' nad blokiranom niti metodom join() ne postavlja ''interrupted'' status.
# <span class="solution">Poziv ''interrupt'' nad blokiranom niti metodom join() ne postavlja ''interrupted'' status</span>.
</div>
</div>
Objašnjenje: <span class="spoiler" data-solution="explanation">Tvrdnja pod d je na kolokvijumu bila označena kao tačna, ali zapravo nije, i studentima su naknadno bili priznavani bodovi. U verziji prezentacije iz niti iz 2021 je ovaj deo na slajdu 11 ispravljen.</span>


=== 10. zadatak ===
=== 10. zadatak ===
Ред 96: Ред 136:
}
}
</syntaxhighlight>
</syntaxhighlight>
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# Referenca ''t1'' pokazuje na demonsku nit.
# Referenca ''t1'' pokazuje na demonsku nit.
# Java virtuelna mašina (JVM) završava svoj rad nakon završetka glavne funkcije.
# 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">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">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>
# <span class="solution">Linija sa ''setDaemon'' u kodu ne menja ništa, odnosno nema efekta.</span>
</div>
</div>


Ред 107: Ред 147:
=== 1. zadatak ===
=== 1. zadatak ===
Označiti tačna tvrđenja na programskom jeziku Java:
Označiti tačna tvrđenja na programskom jeziku Java:
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# Eksplicitni ili implicitni poziv konstruktora nadklase se može izbeći ako se u konstruktoru izvedene klase pozove neki drugi konstruktor te iste klase.
# Eksplicitni ili implicitni poziv konstruktora nadklase se može izbeći ako se u konstruktoru izvedene klase pozove neki drugi konstruktor te iste klase.
# <span class="solution">Ako se koristi, poziv drugog konstruktora iste klase mora biti prva naredba u konstruktoru.</span>
# <span class="solution">Ako se koristi, poziv drugog konstruktora iste klase mora biti prva naredba u konstruktoru.</span>
Ред 117: Ред 157:
=== 2. zadatak ===
=== 2. zadatak ===
Označiti tačna tvrđenja na programskom jeziku Java:
Označiti tačna tvrđenja na programskom jeziku Java:
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# <span class="solution">Referenca na neki interfejs može pokazivati na literal '''null'''.</span>
# <span class="solution">Referenca na neki interfejs može pokazivati na literal '''null'''.</span>
# Svi interfejsi su izvedeni iz klase ''Interface'' u paketu '''java.lang'''.
# Svi interfejsi su izvedeni iz klase ''Interface'' u paketu '''java.lang'''.
# <span class="solution">Referenci na neki interfejs može se dodeliti objekat bilo koje klase koja proširuje<ref>Ovo nije bila navlakuša, već je trebalo da piše "implementira".</ref> taj interfejs.</span>
# <span class="solution">Referenci na neki interfejs može se dodeliti objekat bilo koje klase koja proširuje<ref name="interface" /> taj interfejs.</span>
# Referenci na interfejs se može dodeliti objekat koji se dobije kada se sa druge strane alokatora <code>new</code> nađe naziv tog interfejsa.
# Referenci na interfejs se može dodeliti objekat koji se dobije kada se sa druge strane alokatora <code>new</code> nađe naziv tog interfejsa.
# <span class="solution">Referenca na neki interfejs se može dodeliti referenci tipa ''Object''.</span>
# <span class="solution">Referenca na neki interfejs se može dodeliti referenci tipa ''Object''.</span>
Ред 137: Ред 177:
}
}
</syntaxhighlight>
</syntaxhighlight>
Odgovor: <span class="spoiler">C.m</span>
Odgovor: <span class="spoiler" data-solution="text">C.m()</span>


=== 4. zadatak ===
=== 4. zadatak ===
Anonimna klasa na programskom jeziku Java može sadržati:
Anonimna klasa na programskom jeziku Java može sadržati:
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# konstruktor
# konstruktor
# <span class="solution">nestatičke metode</span>
# <span class="solution">nestatičke metode</span>
Ред 161: Ред 201:
}
}
</syntaxhighlight>
</syntaxhighlight>
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# <span class="solution"><syntaxhighlight lang="java" inline>Calc c = (int a, int b) -> a + b;</syntaxhighlight></span>
# <span class="solution"><syntaxhighlight lang="java" inline>Calc c = (int a, int b) -> a + b;</syntaxhighlight></span>
# <syntaxhighlight lang="java" inline>Calc c = (int a, int b) -> { a + b };</syntaxhighlight>
# <syntaxhighlight lang="java" inline>Calc c = (int a, int b) -> { a + b };</syntaxhighlight>
Ред 188: Ред 228:
}
}
</syntaxhighlight>
</syntaxhighlight>
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# <syntaxhighlight lang="java" inline>x</syntaxhighlight>
# <syntaxhighlight lang="java" inline>x</syntaxhighlight>
# <span class="solution"><syntaxhighlight lang="java" inline>this.x</syntaxhighlight></span>
# <span class="solution"><syntaxhighlight lang="java" inline>this.x</syntaxhighlight></span>
Ред 198: Ред 238:
=== 7. zadatak ===
=== 7. zadatak ===
Označiti tačna tvrđenja na programskom jeziku Java:
Označiti tačna tvrđenja na programskom jeziku Java:
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# <span class="solution">''finally'' blok može da postoji bez ''catch'' bloka.</span>
# <span class="solution">''finally'' blok može da postoji bez ''catch'' bloka.</span>
# ''finally'' blok se izvršava samo ukoliko se u ''catch'' bloku baci izuzetak.
# ''finally'' blok se izvršava samo ukoliko se u ''catch'' bloku baci izuzetak.
Ред 208: Ред 248:
=== 8. zadatak ===
=== 8. zadatak ===
Označiti tačna tvrđenja na programskom jeziku Java:
Označiti tačna tvrđenja na programskom jeziku Java:
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# Metoda ''start'' ponovo pokreće nit ukoliko je završena.
# Metoda ''start'' ponovo pokreće nit ukoliko je završena.
# <span class="solution">Ponovni poziv ''start'' nakon završetka niti je greška.</span>
# <span class="solution">Ponovni poziv ''start'' nakon završetka niti je greška.</span>
Ред 218: Ред 258:
=== 9. zadatak ===
=== 9. zadatak ===
Označiti tačna tvrđenja na programskom jeziku Java:
Označiti tačna tvrđenja na programskom jeziku Java:
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# <span class="solution">Poziv ''interrupt'' nad blokiranom niti izaziva izuzetak ''InterruptedException''.</span>
# <span class="solution">Poziv ''interrupt'' nad blokiranom niti izaziva izuzetak ''InterruptedException''.</span>
# Poziv ''interrupt'' nad blokiranom niti izaziva izuzetak ''ThreadDeath''.
# Poziv ''interrupt'' nad blokiranom niti izaziva izuzetak ''ThreadDeath''.
# <span class="solution">Poziv ''interrupt'' nad blokiranom niti je deblokira.</span>
# <span class="solution">Poziv ''interrupt'' nad blokiranom niti je deblokira.</span>
# Poziv ''interrupt'' nad blokiranom niti ne menja njeno stanje.
# Poziv ''interrupt'' nad blokiranom niti ne menja njeno stanje.
# <span class="solution">Poziv ''interrupt'' nad blokiranom niti ne postavlja ''interrupted'' status.</span>
# Pozivom metoda ''interrupt'' za neku nit koja je suspendovana pozivom metoda ''sleep'' ne vrši se postavljanje statusa prekida te niti.
</div>
</div>
Objašnjenje: <span class="spoiler" data-solution="explanation">Tvrdnja pod e je na kolokvijumu bila označena kao tačna, ali zapravo nije, i studentima su naknadno bili priznavani bodovi. U verziji prezentacije iz niti iz 2021 je ovaj deo na slajdu 11 ispravljen.</span>


=== 10. zadatak ===
=== 10. zadatak ===
Ред 237: Ред 278:
}
}
</syntaxhighlight>
</syntaxhighlight>
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# <span class="solution">Referenca ''t1'' pokazuje na demonsku nit.</span>
# <span class="solution">Referenca ''t1'' pokazuje na demonsku nit.</span>
# <span class="solution">Java virtuelna mašina (JVM) završava svoj rad nakon završetka glavne funkcije.</span>
# <span class="solution">Java virtuelna mašina (JVM) završava svoj rad nakon završetka glavne funkcije.</span>
Ред 259: Ред 300:
}
}
</syntaxhighlight>
</syntaxhighlight>
Odgovor: <span class="spoiler">0</span>
Odgovor: <span class="spoiler" data-solution="text">0</span>


Objašnjenje: <span class="spoiler">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.</span>
Objašnjenje: <span class="spoiler" data-solution="explanation">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.</span>


=== 2. zadatak ===
=== 2. zadatak ===
Koji su iskazi tačni za metod <code>wait</code>:
Koji su iskazi tačni za metod <code>wait</code>:
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# <span class="solution">Ukoliko se pozove ''interrupt'' za nit za koju je prethodno pozvano ''wait'', takva nit će se deblokirati.</span>
# <span class="solution">Ukoliko se pozove ''interrupt'' za nit za koju je prethodno pozvano ''wait'', takva nit će se deblokirati.</span>
# <span class="solution">Ukoliko se pozove ''interrupt'' za nit za koju je prethodno pozvano ''wait'', baciće se izuzetak ''InterruptedException''.
# <span class="solution">Ukoliko se pozove ''interrupt'' za nit za koju je prethodno pozvano ''wait'', baciće se izuzetak ''InterruptedException''.
# Ukoliko se pozove ''interrupt'' za nit za koju je prethodno pozvano ''wait'', baciće se izuzetak ''ThreadDeath''.</span>
# Ukoliko se pozove ''interrupt'' za nit za koju je prethodno pozvano ''wait'', baciće se izuzetak ''ThreadDeath''.</span>
# <span class="solution">Ukoliko se pozove ''interrupt'' za nit za koju je prethodno pozvano ''wait'', neće se promeniti status prekida.</span>
# Ukoliko se pozove ''interrupt'' za nit za koju je prethodno pozvano ''wait'', neće se promeniti status prekida.
</div>
</div>
Objašnjenje: <span class="spoiler" data-solution="explanation">Tvrdnja pod d je na kolokvijumu bila označena kao tačna, ali zapravo nije, i studentima su naknadno bili priznavani bodovi. U verziji prezentacije iz niti iz 2021 je ovaj deo na slajdu 11 ispravljen.</span>


=== 3. zadatak ===
=== 3. zadatak ===
Koji su iskazi tačni za metod <code>join</code>:
Koji su iskazi tačni za metod <code>join</code>:
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# <span class="solution">Pozivom metoda ''join'' bez argumenata za neku nit, nit koja poziva metod čeka da nit za koju je metod pozvan završi izvršavanje.</span>
# <span class="solution">Pozivom metoda ''join'' bez argumenata za neku nit, nit koja poziva metod čeka da nit za koju je metod pozvan završi izvršavanje.</span>
# <span class="solution">Metod ''join'' se može pozvati bez argumenata.</span>
# <span class="solution">Metod ''join'' se može pozvati bez argumenata.</span>
Ред 284: Ред 326:
=== 4. zadatak ===
=== 4. zadatak ===
Šta važi za anonimne klase:
Šta važi za anonimne klase:
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# <span class="solution">Anonimne klase mogu pristupati nestatičkim poljima okružujuće klase.</span>
# <span class="solution">Anonimne klase mogu pristupati nestatičkim poljima okružujuće klase.</span>
# <span class="solution">Anonimne klase mogu pristupati statičkim poljima okružujuće klase.</span>
# <span class="solution">Anonimne klase mogu pristupati statičkim poljima okružujuće klase.</span>
Ред 294: Ред 336:
=== 5. zadatak ===
=== 5. zadatak ===
Šta važi za interfejse:
Šta važi za interfejse:
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# <span class="solution">Podrazumevano su polja interfejsa javna, statička i konačna.</span>
# <span class="solution">Podrazumevano su polja interfejsa javna, statička i konačna.</span>
# <span class="solution">Podrazumevano su metodi interfejsa apstraktni i javni.</span>
# <span class="solution">Podrazumevano su metodi interfejsa apstraktni i javni.</span>
Ред 304: Ред 346:
=== 6. zadatak ===
=== 6. zadatak ===
Navesti šta je tačno za demonske niti:
Navesti šta je tačno za demonske niti:
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# <span class="solution">Demonstvo se nasleđuje od niti iz koje je kreirana data nit.</span>
# <span class="solution">Demonstvo se nasleđuje od niti iz koje je kreirana data nit.</span>
# Demonstvo može da se menja nakon pokretanja niti.
# Demonstvo može da se menja nakon pokretanja niti.
Ред 326: Ред 368:
</syntaxhighlight>
</syntaxhighlight>
Šta treba da stoji umesto <code>###</code> da bi program korektno završio?
Šta treba da stoji umesto <code>###</code> da bi program korektno završio?
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# <span class="solution"><syntaxhighlight lang="java" inline>Calc c = (a) -> a * a;</syntaxhighlight></span>
# <span class="solution"><syntaxhighlight lang="java" inline>Calc c = (a) -> a * a;</syntaxhighlight></span>
# <span class="solution"><syntaxhighlight lang="java" inline>Calc c = a -> a * a;</syntaxhighlight></span>
# <span class="solution"><syntaxhighlight lang="java" inline>Calc c = a -> a * a;</syntaxhighlight></span>
Ред 336: Ред 378:
=== 8. zadatak ===
=== 8. zadatak ===
Koje su tvrdnje tačne za podrazumevani ugrađeni konstruktor:
Koje su tvrdnje tačne za podrazumevani ugrađeni konstruktor:
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# <span class="solution">Ukoliko nije definisan nijedan drugi konstruktor, prevodilac ga automatski obezbeđuje.</span>
# <span class="solution">Ukoliko nije definisan nijedan drugi konstruktor, prevodilac ga automatski obezbeđuje.</span>
# <span class="solution">Podrazumevano će samo pozvati podrazumevani konstruktor natklase.</span>
# <span class="solution">Podrazumevano će samo pozvati podrazumevani konstruktor natklase.</span>
Ред 360: Ред 402:
</syntaxhighlight>
</syntaxhighlight>
Šta može sve stajati umesto <code>###</code> da bi program korektno završio i ispisao 1?
Šta može sve stajati umesto <code>###</code> da bi program korektno završio i ispisao 1?
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# <syntaxhighlight lang="java" inline>this.x</syntaxhighlight>
# <syntaxhighlight lang="java" inline>this.x</syntaxhighlight>
# <syntaxhighlight lang="java" inline>x</syntaxhighlight>
# <syntaxhighlight lang="java" inline>x</syntaxhighlight>
Ред 370: Ред 412:
=== 10. zadatak ===
=== 10. zadatak ===
Navesti tačne tvrdnje za izuzetke:
Navesti tačne tvrdnje za izuzetke:
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# Svi izuzeci u Javi moraju biti izvedeni iz klase Exception.
# Svi izuzeci u Javi moraju biti izvedeni iz klase Exception.
# <span class="solution">Svi izuzeci koji se bacaju u metodu moraju se navesti u njegovoj throws klauzuli.</span>
# <span class="solution">Svi provereni izuzeci koji se bacaju iz metoda moraju se navesti u njegovoj throws klauzuli.</span>
# <span class="solution">Prevodilac može da proveri tipove izuzetaka navedenih u throws klauzuli.</span>
# <span class="solution">Prevodilac može da proveri tipove izuzetaka navedenih u throws klauzuli.</span>
# Metod može baciti izuzetak isključivo eksplicitnim navođenjem uz throw.
# Metod može baciti izuzetak isključivo eksplicitnim navođenjem uz throw.

Тренутна верзија на датум 6. јун 2022. у 17:40

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

G1

1. zadatak

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

  1. Ako konstruktor natklase nema konstruktor bez parametara (no-arg) potrebno je eksplicitno pozvati taj konstruktor u prvoj liniji konstruktora posmatrane klase.
  2. Konstruktor natklase će biti implicitno pozvan ako postoji i bez parametara je.
  3. Konstruktor natklase se može eksplicitno pozvati imenom te klase.
  4. ??
  5. ??

2. zadatak

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

  1. Interfejs može da proširuje[1] više klasa.
  2. Interfejs može da proširuje[1] više interfejsa.
  3. Interfejs može da proširi[1] samo jedan interfejs.
  4. Interfejs može biti osnova za proširivanje[1] više interfejsa.
  5. Interfejs se implicitno izvodi iz klase Object.

3. zadatak

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

  1. Anonimna klasa je lokalna klasa bez imena.
  2. Anonimna klasa se definiše u izrazu new, kao deo naredbe.
  3. Anonimna klasa proširuje drugu klasu ili interfejs.
  4. Natklasa anonimne klase se definiše u imenu te klase.
  5. Anonimna klasa u svojoj definiciji koristi ključne reči extends i/ili implements.

4. zadatak

Šta ispisuje 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 = new C();
        c.m();
    }
}

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

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 = a, b -> a + b ;
  3. Calc c = a, b -> { a + b };
  4. Calc c = (int a, 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 3?

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. this.x
  2. 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 se izvršava samo ukoliko se u try bloku baci izuzetak.
  2. finally blok se izvršava samo ukoliko se u try bloku ne baci izuzetak.
  3. finally blok se izvršava bez obzira na to da li je u try bloku bačen izuzetak.
  4. Može postojati samo jedan finally blok za posmatrani try blok.
  5. U finally bloku može biti bačen izuzetak.

8. zadatak

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

  1. Telo metode run klase Thread je prazno.
  2. Korisnik eksplicitno treba da pozove metodu run.
  3. Klasa izvedena iz klase Thread treba[2] da nadjača metodu run.
  4. Java virtuelna mašina implicitno zove metodu run.
  5. Nit normalno završava izvršenje po povratku iz njenog metoda run.

9. zadatak

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

  1. Poziv interrupt nad blokiranom niti metodom join() izaziva izuzetak InterruptedException.
  2. Poziv interrupt nad blokiranom niti metodom join() izaziva izuzetak ThreadDeath.
  3. Poziv interrupt nad blokiranom metodom join() nit se deblokira.
  4. Poziv interrupt nad blokiranom niti metodom join() ne postavlja interrupted status.

Objašnjenje: Tvrdnja pod d je na kolokvijumu bila označena kao tačna, ali zapravo nije, i studentima su naknadno bili priznavani bodovi. U verziji prezentacije iz niti iz 2021 je ovaj deo na slajdu 11 ispravljen.

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. Pozivom metoda interrupt za neku nit koja je suspendovana pozivom metoda sleep ne vrši se postavljanje statusa prekida te niti.

Objašnjenje: Tvrdnja pod e je na kolokvijumu bila označena kao tačna, ali zapravo nije, i studentima su naknadno bili priznavani bodovi. U verziji prezentacije iz niti iz 2021 je ovaj deo na slajdu 11 ispravljen.

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.

Objašnjenje: Tvrdnja pod d je na kolokvijumu bila označena kao tačna, ali zapravo nije, i studentima su naknadno bili priznavani bodovi. U verziji prezentacije iz niti iz 2021 je ovaj deo na slajdu 11 ispravljen.

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 provereni izuzeci koji se bacaju iz metoda 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. 1,0 1,1 1,2 1,3 1,4 Ovo nije bila navlakuša, već je trebalo da piše "implementira". Nekim studentima koji su ovakvu grešku smatrali namernom su bodovi koje su izgubili nezaokruživanjem tačnih tvrdnji zbog ove greške bili priznati naknadno.
  2. Ovo nije navlakuša već se misli pri konkretnom korišćenju, tako da treba, ali ne mora - samo neće raditi ništa.