ОО2/К1 2023 — разлика између измена
м (→7. zadatak: Ne pozivaju se redom kojim su klase definisane u kodu) |
м (→7. zadatak: Nije baš na početku izvršavanja) |
||
Ред 103: | Ред 103: | ||
'''Odgovor:''' <span class="spoiler" data-solution="text">sAsBAB1B2</span> | '''Odgovor:''' <span class="spoiler" data-solution="text">sAsBAB1B2</span> | ||
'''Objašnjenje:''' <span class="spoiler" data-solution="explanation">Statički blokovi pozivaju se redom kojim su navedeni u kodu svoje klase, prvo oni u osnovnoj a zatim u izvedenoj klasi, | '''Objašnjenje:''' <span class="spoiler" data-solution="explanation">Statički blokovi pozivaju se redom kojim su navedeni u kodu svoje klase, prvo oni u osnovnoj a zatim u izvedenoj klasi, pred instanciranje prvog objekta te klase. Nestatički blokovi pozivaju se nakon instanciranja klase, i to prvo oni u osnovnoj klasi a onda oni u izvedenoj, redom kojim su navedeni u kodu.</span> | ||
== 8. zadatak == | == 8. zadatak == |
Тренутна верзија на датум 5. јун 2023. у 17:00
Prvi kolokvijum 2023. godine održan je 31. marta i trajao je 20 minuta.
- За питања са више одговора, тачни одговори су подебљани и уоквирени
- За питања за које се одговори уносе, тачни одговори су подвучени и сакривени, тако да се прикажу када изаберете тај текст (пример: овако)
- Притисните лево дугме испод за сакривање и откривање свих одговора, или десно дугме за укључивање и искључивање интерактивног режима:
1. zadatak
Bajtkod (Bytecode) je:
- Binarni izvršni kod koji sadrži naredbe mašinskog jezika računara domaćina.
- Izvorni kod na jeziku Java.
- Mašinska reč dužine jednog bajta.
- Međukod koji interpretira Java virtuelna mašina.
- Rezultat prevođenja programa na jeziku Java.
2. zadatak
Primitivni tipovi u jeziku Java su:
- Unicode karakter
char
. - logički
bool
tip. - tip niske znakova
string
. - označeni (signed)
short
tip (od -32768 do 32767) i neoznačeniushort
tip (od 0 do 65536). - označeni izuzetno dugački celobrojni tip, na dužini reči od 132 bita,
xlong
.
3. zadatak
Neka je dat sledeći segment koda:
String s1 = new String("OOP2");
String s2 = new String("OOP2");
String s3 = s1;
String s4 = new String(s2);
Koji od sledećih izraza će dati rezultat true
?
s1.equals(s4);
s1 == s2;
s1.equals(s3);
s2 == s3;
s1 == s4;
Objašnjenje: equals
proverava jednakost po vrednosti, i zato su ti odgovori tačni - sva četiri stringa imaju iste vrednosti. new String(...)
alocira potpuno novi string u memoriji, tako da u kodu iznad jedino s1
i s3
referenciraju isti string.
4. zadatak
Označiti prava pristupa na jeziku Java koja možemo da dodelimo klasi koja nije ugnežđena.
- paketsko
- javno
- zaštićeno
- privatno
5. zadatak
Koja od sledećih tvrđenja su tačna na jeziku Java?
- Metod
finalize
nasleđuju sve klase, koje onda mogu da ga nadjačaju. - Pre nego što se oslobodi memorija koju je objekat zauzimao, sakupljač đubreta uvek i garantovano poziva metodu
finalize
. - Povećanjem broja objekata u sistemu povećava se vreme sakupljanja đubreta.
- Sakupljač đubreta može da se eksplicitno pozove korišćenjem ključne reči
delete
. - Postavljanjem na vrednost null poslednje reference koja upućuje na objekat momentalno se oslobađa memorija koju je zauzimao dati objekat.
Objašnjenje: Metoda finalize
će biti pozvana samo jednom, tako da ukoliko prethodni poziv finalize
uspe da oživi taj objekat ona neće biti pozvana prilikom njenog oslobađanja iz memorije.
6. zadatak
Koja od sledećih tvrđenja su tačna za programski jezik Java?
- Mogu se uvesti imena samo statičkih članova klase
Klasa
korišćenjem naredbeimport static Klasa.*;
- Članovi paketa mogu imati javno ili paketsko pravo pristupa, pri čemu je podrazumevano pravo pristupa paketsko.
- Metodi jedne neugnežđene klase imaju pravo da pristupaju i privatnim članovima druge neugnežđene klase koja se nalazi u istom paketu, jer su klase u istom paketu prijateljske (trusted, friend).
- Moguće je definisati dva tipa istog naziva u dva različita paketa.
- Tip
A
definisan u neimenovanom (podrazumevanom) paketu je moguće uvesti u neki drugi paket koristeći naredbuimport default.A;
7. zadatak
Šta ispisuje sledeći program napisan na programskom jeziku Java? Obratiti pažnju na ispis bez razmaka. Uneti NP ukoliko smatrate da se program ne prevodi, odnosno GI, ukoliko smatrate da se dešava greška u izvršavanju.
class A {
{
System.out.print("A");
}
static {
System.out.print("sA");
}
}
class B extends A {
{
System.out.print("B1");
}
static {
System.out.print("sB");
}
{
System.out.print("B2");
}
}
public class Test {
public static void main(String args[]) {
new B();
}
}
Odgovor: sAsBAB1B2
Objašnjenje: Statički blokovi pozivaju se redom kojim su navedeni u kodu svoje klase, prvo oni u osnovnoj a zatim u izvedenoj klasi, pred instanciranje prvog objekta te klase. Nestatički blokovi pozivaju se nakon instanciranja klase, i to prvo oni u osnovnoj klasi a onda oni u izvedenoj, redom kojim su navedeni u kodu.
8. zadatak
Koja od sledećih tvrđenja su tačna za programski jezik Java?
- Klasa koja nije eksplicitno izvedena iz druge klase izvedena je iz klase
Object
. - Da bi metod bio polimorfan mora da se označi modifikatorom
virtual
. - Iz konstruktora izvedene klase nije moguće pozvati konstruktor osnovne klase.
- Izvedena klasa može da proširi osnovnu dodavanjem novih polja i novih metoda.
- Klasa može da proširuje jednu ili više klasa.
9. zadatak
Šta ispisuje sledeći program napisan na programskom jeziku Java? Obratiti pažnju na ispis bez razmaka. Uneti NP ukoliko smatrate da se program ne prevodi, odnosno GI, ukoliko smatrate da se dešava greška u izvršavanju.
class Osnovna {
public void f() { this.m(); }
private void m() { System.out.print("O"); }
}
class Izvedena extends Osnovna {
private void m() { System.out.print("I"); }
}
public class Test {
public static void main(String args[]) {
Osnovna obj1 = new Osnovna();
obj1.f();
Osnovna obj2 = new Izvedena();
obj2.f();
Izvedena obj3 = new Izvedena();
obj3.f();
}
}
Odgovor: OOO
Objašnjenje: Na metode označene kao privatne se ne primenjuje polimorfizam. Zbog toga će poziv m()
iz osnovne klase umeti samo da prepozna privatnu metodu iz te klase, a neće pokušavati da tu istu metodu potraži u potklasama.
10. zadatak
Koje tvrdnje su tačne?
- U izrazu
(A instanceof B)
operatorinstanceof
proverava da li je klasaA
potklasa klaseB
. - Doslednim korišćenjem operatora
instanceof
pre konverzije tipa može da se predupredi bacanje izuzetkaClassCastException
. - Provera tipa operatorom
instanceof
je statička. - Operator
instanceof
proverava da li je rezultat izraza levog operanda referenca na objekat klase navedene kao desni operand ili neke njene podklase.[1] - Proveru tipa
instanceof
treba raditi da bi se razvrstala obrada za različite tipove po granama neke razgranate strukture, na primer naredbeswitch
.
Napomene
- ↑ Na kolokvijumu je na ovom mestu pisalo "natklase" umesto "podklase", pa je žalbu na ovo pitanje profesor kasnije priznao.