ОО2/Пробни тестови 2021 — разлика између измена
м (+{{rešenja}}) |
м (+data-solutions i kategorija) |
||
| Ред 7: | Ред 7: | ||
=== 1. zadatak === | === 1. zadatak === | ||
Koje tvrdnje za jezik Java su tačne? | Koje tvrdnje za jezik Java su tačne? | ||
<div class="abc-list"> | <div class="abc-list" data-solution="multiple"> | ||
# Interpretiranje bajtkoda je po pravilu efikasnije od izvršenja programa na mašinskom jeziku. | # Interpretiranje bajtkoda je po pravilu efikasnije od izvršenja programa na mašinskom jeziku. | ||
# JIT (''Just In Time'') prevodilac prevodi izvorni kod programa u bajtkod. | # JIT (''Just In Time'') prevodilac prevodi izvorni kod programa u bajtkod. | ||
| Ред 15: | Ред 15: | ||
</div> | </div> | ||
'''Objašnjenje:''' <span class="spoiler">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.</span> | '''Objašnjenje:''' <span class="spoiler" data-solution="explanation">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.</span> | ||
=== 2. zadatak === | === 2. zadatak === | ||
| Ред 29: | Ред 29: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<div class="abc-list"> | <div class="abc-list" data-solution="multiple"> | ||
# <code>false<br />false<br />false</code> | # <code>false<br />false<br />false</code> | ||
# <code>false<br />false<br />true</code> | # <code>false<br />false<br />true</code> | ||
| Ред 37: | Ред 37: | ||
</div> | </div> | ||
'''Objašnjenje:''' <span class="spoiler">Prevodilac će optimizovati<sup>[?]</sup> <code>str3</code> prilikom prevođenja pa će <code>str1</code>, <code>str2</code> i <code>str3</code> pokazivati na iste niske u ''string pool'' dok <code>str4</code> izričito koristi nisku koja nije u ''string pool''.</span> | '''Objašnjenje:''' <span class="spoiler" data-solution="explanation">Prevodilac će optimizovati<sup>[?]</sup> <code>str3</code> prilikom prevođenja pa će <code>str1</code>, <code>str2</code> i <code>str3</code> pokazivati na iste niske u ''string pool'' dok <code>str4</code> izričito koristi nisku koja nije u ''string pool''.</span> | ||
=== 3. zadatak === | === 3. zadatak === | ||
| Ред 60: | Ред 60: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Odabrati tačan odgovor | Odabrati tačan odgovor | ||
<div class="abc-list"> | <div class="abc-list" data-solution="multiple"> | ||
# Kod je sintaksno neispravan. | # Kod je sintaksno neispravan. | ||
# Program ispisuje vrednosti <code>0 0</code>. | # Program ispisuje vrednosti <code>0 0</code>. | ||
| Ред 67: | Ред 67: | ||
# Program ispisuje vrednosti <code>1 1</code>. | # Program ispisuje vrednosti <code>1 1</code>. | ||
</div> | </div> | ||
'''Objašnjenje:''' <span class="spoiler">Prvi poziv <code>f</code> će izmeniti polje klase na 1 preko reference dok drugi poziv neće izmeniti objekat <code>i</code> jer se reference prenose po vrednosti. Bez obzira na ovo drugo, doduše, <code>i</code> bi svakako bio 0.</span> | '''Objašnjenje:''' <span class="spoiler" data-solution="explanation">Prvi poziv <code>f</code> će izmeniti polje klase na 1 preko reference dok drugi poziv neće izmeniti objekat <code>i</code> jer se reference prenose po vrednosti. Bez obzira na ovo drugo, doduše, <code>i</code> bi svakako bio 0.</span> | ||
=== 4. zadatak === | === 4. zadatak === | ||
Za pakete na jeziku Java važi: | Za pakete na jeziku Java važi: | ||
<div class="abc-list"> | <div class="abc-list" data-solution="multiple"> | ||
# Postoje tipovi koji mogu pripadati većem broju paketa. | # Postoje tipovi koji mogu pripadati većem broju paketa. | ||
# <span class="solution">Svaka klasa mora biti deo nekog paketa.</span> | # <span class="solution">Svaka klasa mora biti deo nekog paketa.</span> | ||
| Ред 82: | Ред 82: | ||
=== 5. zadatak === | === 5. zadatak === | ||
Koje tvrdnje su tačne za nestatičke inicijalizacione blokove? | Koje tvrdnje su tačne za nestatičke inicijalizacione blokove? | ||
<div class="abc-list"> | <div class="abc-list" data-solution="multiple"> | ||
# Izvršavaju se nakon izvršavanja konstruktora svoje klase. | # Izvršavaju se nakon izvršavanja konstruktora svoje klase. | ||
# <span class="solution">Mogu bacati izuzetke.</span> | # <span class="solution">Mogu bacati izuzetke.</span> | ||
| Ред 89: | Ред 89: | ||
# <span class="solution">Izvršavaju se nakon izvršavanja konstruktora natklase.</span> | # <span class="solution">Izvršavaju se nakon izvršavanja konstruktora natklase.</span> | ||
</div> | </div> | ||
'''Objašnjenje:''' <span class="spoiler">Nestatički inicijalizacioni blokovi mogu bacati izuzetke ukoliko su svi konstruktori klase deklarisani kao da te izuzetke bacaju.</span> | '''Objašnjenje:''' <span class="spoiler" data-solution="explanation">Nestatički inicijalizacioni blokovi mogu bacati izuzetke ukoliko su svi konstruktori klase deklarisani kao da te izuzetke bacaju.</span> | ||
=== 6. zadatak === | === 6. zadatak === | ||
| Ред 118: | Ред 118: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
'''Odgovor:''' <span class="spoiler">ab</span> | '''Odgovor:''' <span class="spoiler" data-solution="text">ab</span> | ||
'''Objašnjenje:''' <span class="spoiler">Prva završi sa inicijalizacijom klasa <code>A</code> kao natklasa klase <code>B</code>, a zatim se pozove konstruktor klase <code>B</code>. Pošto je metoda natklase označena kao <code>private</code>, ona neće biti polimorfno redefinisana u <code>B</code> i zato se iz konstruktora <code>A</code> poziva metod te klase.</span> | '''Objašnjenje:''' <span class="spoiler" data-solution="explanation">Prva završi sa inicijalizacijom klasa <code>A</code> kao natklasa klase <code>B</code>, a zatim se pozove konstruktor klase <code>B</code>. Pošto je metoda natklase označena kao <code>private</code>, ona neće biti polimorfno redefinisana u <code>B</code> i zato se iz konstruktora <code>A</code> poziva metod te klase.</span> | ||
=== 7. zadatak === | === 7. zadatak === | ||
Modifikator abstract je moguće staviti ispred definicije: | Modifikator abstract je moguće staviti ispred definicije: | ||
<div class="abc-list"> | <div class="abc-list" data-solution="multiple"> | ||
# <span class="solution">metoda</span> | # <span class="solution">metoda</span> | ||
# <span class="solution">klase</span> | # <span class="solution">klase</span> | ||
| Ред 134: | Ред 134: | ||
=== 8. zadatak === | === 8. zadatak === | ||
Šta važi za '''throw''' na programskom jeziku Java? | Šta važi za '''throw''' na programskom jeziku Java? | ||
<div class="abc-list"> | <div class="abc-list" data-solution="multiple"> | ||
# <span class="solution">Može se koristiti u statičkim inicijalizacionim blokovima.</span> | # <span class="solution">Može se koristiti u statičkim inicijalizacionim blokovima.</span> | ||
# Predstavlja operator jezika Java. | # Predstavlja operator jezika Java. | ||
| Ред 141: | Ред 141: | ||
# <span class="solution">Predstavlja ključnu reč jezika Java.</span> | # <span class="solution">Predstavlja ključnu reč jezika Java.</span> | ||
</div> | </div> | ||
'''Objašnjenje:''' <span class="spoiler"><code>throw</code> 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 <code>throw</code> nije operator već naredba (i ključna reč), i ponovno bacanje izuzetka sa <code>throw;</code> nije dozvoljeno. Parametar mu je referenca na objekat izveden iz klase <code>Throwable</code>, koja je nadklasa <code>Exception</code>.</span> | '''Objašnjenje:''' <span class="spoiler" data-solution="explanation"><code>throw</code> 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 <code>throw</code> nije operator već naredba (i ključna reč), i ponovno bacanje izuzetka sa <code>throw;</code> nije dozvoljeno. Parametar mu je referenca na objekat izveden iz klase <code>Throwable</code>, koja je nadklasa <code>Exception</code>.</span> | ||
=== 9. zadatak === | === 9. zadatak === | ||
| Ред 153: | Ред 153: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
koje od navedenih naredbi su ispravne? | koje od navedenih naredbi su ispravne? | ||
<div class="abc-list"> | <div class="abc-list" data-solution="multiple"> | ||
# <syntaxhighlight lang="java" inline>int i=1,j=2; I5 i5=(i+j)->i*j;</syntaxhighlight> | # <syntaxhighlight lang="java" inline>int i=1,j=2; I5 i5=(i+j)->i*j;</syntaxhighlight> | ||
# <span class="solution"><syntaxhighlight lang="java" inline>I3 i3=k->{double p=1; for (int i=1; i<=k; p*=i++); return p;};</syntaxhighlight></span> | # <span class="solution"><syntaxhighlight lang="java" inline>I3 i3=k->{double p=1; for (int i=1; i<=k; p*=i++); return p;};</syntaxhighlight></span> | ||
| Ред 160: | Ред 160: | ||
# <span class="solution"><syntaxhighlight lang="java" inline>I1 i1=n->n+5;</syntaxhighlight></span> | # <span class="solution"><syntaxhighlight lang="java" inline>I1 i1=n->n+5;</syntaxhighlight></span> | ||
</div> | </div> | ||
'''Objašnjenje:''' <span class="spoiler">Izraz sa četvrtim interfejsom nije validan jer kada se lambda izraz okruži blokom (<code>{}</code>) više se ne podrazumeva <code>return</code>. Izraz sa petim interfejsom ima sintaksnu grešku, jer <code>(i+j)->...</code> nema smisla.</span> | '''Objašnjenje:''' <span class="spoiler" data-solution="explanation">Izraz sa četvrtim interfejsom nije validan jer kada se lambda izraz okruži blokom (<code>{}</code>) više se ne podrazumeva <code>return</code>. Izraz sa petim interfejsom ima sintaksnu grešku, jer <code>(i+j)->...</code> nema smisla.</span> | ||
=== 10. zadatak === | === 10. zadatak === | ||
Koja tvrđenja su tačna na programskom jeziku Java? | Koja tvrđenja su tačna na programskom jeziku Java? | ||
<div class="abc-list"> | <div class="abc-list" data-solution="multiple"> | ||
# Ako je pre ulaska u <code>wait()</code> pozvan metod <code>notifyAll()</code> za isti objekat, nit koja poziva <code>wait()</code> neće biti blokirana. | # Ako je pre ulaska u <code>wait()</code> pozvan metod <code>notifyAll()</code> za isti objekat, nit koja poziva <code>wait()</code> neće biti blokirana. | ||
# <span class="solution">Po ulasku u <code>wait()</code>, nit se blokira (suspenduje) i oslobađa se brava objekta.</span> | # <span class="solution">Po ulasku u <code>wait()</code>, nit se blokira (suspenduje) i oslobađa se brava objekta.</span> | ||
| Ред 171: | Ред 171: | ||
# <code>wait()</code> je metod klase <code>Thread</code>. | # <code>wait()</code> je metod klase <code>Thread</code>. | ||
</div> | </div> | ||
'''Objašnjenje:''' <span class="spoiler"><code>wait()</code> je metod klase <code>Object</code>, dok <code>notify()</code> ne budi nužno nit koja je najduže čekala.</span> | '''Objašnjenje:''' <span class="spoiler" data-solution="explanation"><code>wait()</code> je metod klase <code>Object</code>, dok <code>notify()</code> ne budi nužno nit koja je najduže čekala.</span> | ||
[[Категорија:ОО2]] | [[Категорија:ОО2]] | ||
[[Категорија:Рокови]] | |||
Тренутна верзија на датум 30. јун 2021. у 15:00
- За питања са више одговора, тачни одговори су подебљани и уоквирени
- За питања за које се одговори уносе, тачни одговори су подвучени и сакривени, тако да се прикажу када изаберете тај текст (пример: овако)
- Притисните лево дугме испод за сакривање и откривање свих одговора, или десно дугме за укључивање и искључивање интерактивног режима:
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?
- Interpretiranje bajtkoda je po pravilu efikasnije od izvršenja programa na mašinskom jeziku.
- JIT (Just In Time) prevodilac prevodi izvorni kod programa u bajtkod.
- Implementacija virtuelne mašine zavisi od konkretne platforme, ali interfejs prema bajtkodu ostaje isti.
- Izvorni kod programa se interpretira od strane virtuelne mašine.
- 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);
}
}
false
false
falsefalse
false
truetrue
false
falsetrue
true
falsetrue
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
- Kod je sintaksno neispravan.
- Program ispisuje vrednosti
0 0. - Program ispisuje vrednosti
0 1. - Program ispisuje vrednosti
1 0. - 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:
- Postoje tipovi koji mogu pripadati većem broju paketa.
- Svaka klasa mora biti deo nekog paketa.
- Uvoženjem paketa ne uvoze se i svi potpaketi tog paketa.
- Sve klase koje se nalaze u istoj datoteci su deo istog paketa.
- Paket
java.langse automatski uvozi. - U datoteci može postojati više naredbi:
packagenaziv_paketa;
5. zadatak
Koje tvrdnje su tačne za nestatičke inicijalizacione blokove?
- Izvršavaju se nakon izvršavanja konstruktora svoje klase.
- Mogu bacati izuzetke.
- Može ih biti više u jednoj klasi.
- Izvršavaju se nakon punjenja klase u memoriju, a pre stvaranja prvog objekta date klase.
- 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:
- metoda
- klase
- interfejsa
- nabrajanja
- polja klase
8. zadatak
Šta važi za throw na programskom jeziku Java?
- Može se koristiti u statičkim inicijalizacionim blokovima.
- Predstavlja operator jezika Java.
- Parametar mu je referenca na objekat klase koja mora biti izvedena iz klase Exception.
- Može se koristiti bez parametra.
- 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?
int i=1,j=2; I5 i5=(i+j)->i*j;I3 i3=k->{double p=1; for (int i=1; i<=k; p*=i++); return p;};I2 i2=(x,y,z)->x+y-z;I4 i4=(a,b)->{a*b};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?
- Ako je pre ulaska u
wait()pozvan metodnotifyAll()za isti objekat, nit koja pozivawait()neće biti blokirana. - Po ulasku u
wait(), nit se blokira (suspenduje) i oslobađa se brava objekta. - Metodi
wait(),notify()inotifyAll()moraju da se pozivaju iz sinhronizovanih delova koda. - Metod
notify()budi samo jednu nit i to uvek onu koja je najduže čekala. wait()je metod klaseThread.
Objašnjenje: wait() je metod klase Object, dok notify() ne budi nužno nit koja je najduže čekala.