ОО2/К2 2021
- 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
G2
1. zadatak
Označiti tačna tvrđenja na programskom jeziku Java:
- Eksplicitni ili implicitni poziv konstruktora nadklase se može izbeći ako se u konstruktoru izvedene klase pozove neki drugi konstruktor te iste klase.
- Ako se koristi, poziv drugog konstruktora iste klase mora biti prva naredba u konstruktoru.
- Konstrukcija objekta se može delegirati pozivom jednog konstruktora iz drugog konstruktora.
- Rekurziju u delegiranju konstruktora detektuje prevodilac.
- 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:
- Referenca na neki interfejs može pokazivati na literal null.
- Svi interfejsi su izvedeni iz klase Interface u paketu java.lang.
- Referenci na neki interfejs može se dodeliti objekat bilo koje klase koja proširuje[1] taj interfejs.
- Referenci na interfejs se može dodeliti objekat koji se dobije kada se sa druge strane alokatora
new
nađe naziv tog interfejsa. - 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:
- konstruktor
- nestatičke metode
- statičke metode
- nestatička polja
- 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) {
###
}
}
Calc c = (int a, int b) -> a + b;
Calc c = (int a, int b) -> { a + b };
Calc c = (int a, int b) -> { int r = a + b; return r; };
Calc c = (int a, int b) -> return a + b;
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);
}
}
x
this.x
super.x
Spoljna.this.x
Spoljna.x
7. zadatak
Označiti tačna tvrđenja na programskom jeziku Java:
- finally blok može da postoji bez catch bloka.
- finally blok se izvršava samo ukoliko se u catch bloku baci izuzetak.
- finally blok se izvršava samo ukoliko se u catch bloku ne baci izuzetak.
- finally blok se izvršava bez obzira na to da li je u catch bloku bačen izuzetak.
- finally blok se izvršava iako ne dođe do greške.
8. zadatak
Označiti tačna tvrđenja na programskom jeziku Java:
- Metoda start ponovo pokreće nit ukoliko je završena.
- Ponovni poziv start nakon završetka niti je greška.
- Poziv metode start stavlja nit nad kojom je pozvana u red spremnih niti.
- Nit koja poziva start se blokira.
- Nit koja poziva start se ne blokira.
9. zadatak
Označiti tačna tvrđenja na programskom jeziku Java:
- Poziv interrupt nad blokiranom niti izaziva izuzetak InterruptedException.
- Poziv interrupt nad blokiranom niti izaziva izuzetak ThreadDeath.
- Poziv interrupt nad blokiranom niti je deblokira.
- Poziv interrupt nad blokiranom niti ne menja njeno stanje.
- 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();
}
}
- Referenca t1 pokazuje na demonsku nit.
- Java virtuelna mašina (JVM) završava svoj rad nakon završetka glavne funkcije.
- Linija sa setDaemon u kodu ne menja demonski status niti na koju pokazuje t1.
- Nakon izvršenja glavne funkcije se ne izlazi iz programa jer ima još korisničkih niti za izvršavanje.
- 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
:
- Ukoliko se pozove interrupt za nit za koju je prethodno pozvano wait, takva nit će se deblokirati.
- 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.
- 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
:
- Pozivom metoda join bez argumenata za neku nit, nit koja poziva metod čeka da nit za koju je metod pozvan završi izvršavanje.
- Metod join se može pozvati bez argumenata.
- 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.
- Metod join ne može da se nadjača u izvedenim klasama.
- Pozivom metoda join podrazumevano se završava nit za koju je pozvan metod.
4. zadatak
Šta važi za anonimne klase:
- Anonimne klase mogu pristupati nestatičkim poljima okružujuće klase.
- Anonimne klase mogu pristupati statičkim poljima okružujuće klase.
- Anonimne klase mogu pristupati nepromenljivim parametrima metoda koji ih okružuje.
- Anonimne klase mogu pristupati lokalnim promenljivama okružujućeg metoda kojima se ne menja vrednost.
- 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:
- Podrazumevano su polja interfejsa javna, statička i konačna.
- Podrazumevano su metodi interfejsa apstraktni i javni.
- Interfejsi mogu definisati podrazumevane metode.
- Interfejsi mogu definisati statičke metode.
- Interfejsi mogu imati modifikator final.
6. zadatak
Navesti šta je tačno za demonske niti:
- Demonstvo se nasleđuje od niti iz koje je kreirana data nit.
- Demonstvo može da se menja nakon pokretanja niti.
- Pokušaj promene demonstva nakon pokretanja baciće IllegalStateException.
- Demonske niti će nastaviti izvršavanje nakon završetka svih ostalih niti.
- 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?
Calc c = (a) -> a * a;
Calc c = a -> a * a;
Calc c = a -> { a*a; }
Calc c = b -> b * b;
Calc c = (int a) -> a * a;
8. zadatak
Koje su tvrdnje tačne za podrazumevani ugrađeni konstruktor:
- Ukoliko nije definisan nijedan drugi konstruktor, prevodilac ga automatski obezbeđuje.
- Podrazumevano će samo pozvati podrazumevani konstruktor natklase.
- Neće pozvati podrazumevani konstruktor natklase samo u slučaju da je klasa direktno izvedena iz klase Object.
- Ukoliko je klasa javna, i on je podrazumevano javan.
- ??? 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?
this.x
x
Spoljna.this.x
Outer.x
super.x
10. zadatak
Navesti tačne tvrdnje za izuzetke:
- Svi izuzeci u Javi moraju biti izvedeni iz klase Exception.
- Svi izuzeci koji se bacaju u metodu moraju se navesti u njegovoj throws klauzuli.
- Prevodilac može da proveri tipove izuzetaka navedenih u throws klauzuli.
- Metod može baciti izuzetak isključivo eksplicitnim navođenjem uz throw.
Napomene
- ↑ Ovo nije bila navlakuša, već je trebalo da piše "implementira".