Skutečně mi to přišlo těžší než ty dva testy, co jsou tady a na wiki. Proto, dokud si to jakž takž pamatuju, zkusím to nějak sepsat celé, aby tu byl další kompletní test (vypůjčím si, co napsal kolega, snad se nebude moc zlobit). Snad je to správně, když tak připomínkujte. Některé varianty odpovědí jsem si musel vymyslet.
1) Atribut typu
int bez explicitní inicializace:
A. je inicializován hodnotou 0
B. má nedefinovanou hodnotu a při čtení je vráceno předem nestanovitelné číslo
C. má nedefinovanou hodnotu a při čtení je vyvolána výjimka typu UndefinedValueException
D. má nedefinovanou hodnotu a překladač nedovolí použití, dokud není jisté, že se napřed nějaká hodnota nastaví.
E. je inicializován maximální hodnotou, která se do typu int vejde
2) Co platí o rozhraních (
interface):
A. třída může implementovat nejvýše jeden interface
B. třída může implementovat žádný, jeden nebo i více interfaces
C. interface může implementovat nejvýše jedna třída
D. interface může dědit od nejvýše jednoho interface
E. interface může dědit od žádného, jednoho nebo i více interfaces
3) Není-li u prvku třídy (metoda, atribut, ...) uveden žádný modifikátor viditelnosti (public, private, ...), je tento prvek viditelný:
A. pouze z této třídy
B. pouze z této třídy a potomků této třídy
C. pouze ze stejného balíku
D. pouze ze stejného balíku a potomků této třídy
E. odkudkoliv
4) Co vypíše (pokud něco) kód:
Kód: Vybrat vše
class A {
static int x = 1;
}
public class Main {
static A a = null;
public static void main(String[] args) {
System.out.println(a.x);
}
}
A. 0
B. 1
C. pokažé něco jiného (závisí na okolnostech)
D. spadne na NullPointerException
E. nelze přeložit
5) Která slova
nejsou klíčová?
A. scope
B. extends
C. main
D. throw
E. final
6) Které vyjímky je nutné odchytit nebo deklarovat?
A. všechny
B. potomky java.lang.Error
C. potomky java.lang.Exception
D. potomky java.lang.RuntimeException
E. žádné
7) Co vypíše (pokud něco) kód:
Kód: Vybrat vše
class A {
int x = 1;
}
class B extends A {
int x = 2;
public void foo() {
System.out.println(this.x);
System.out.println(super.x);
System.out.println(((A)this).x);
}
public static void main(String[] args) {
B b = new B();
b.foo();
}
}
A. 2 2 2
B. 2 2 1
C. 2 1 2
D. 2 1 1
E. chyba překladu, this nejde přetypovat
F. chyba překladu, super není na proměnné
8) Mějme třídu
Kód: Vybrat vše
class Test {
public synchronized int foo() {...}
public static synchronized void bar() {...}
}
Co platí?
A. foo() a bar() jsou pro přístup více vlákny vyloučeny každá sama se sebou i mezi sebou navzájem
B. foo() a bar() jsou pro přístup více vlákny vyloučeny každá sama se sebou, ale nikoliv mezi sebou navzájem
C. chyba překladu, nedeklaruje se výjimka IllegalMonitorStateException
9) Napište deklaraci proměnné x tak, aby po provedení x = x + 0 neměla původní hodnotu. Pokud to nejde, zdůvodněte.
10) Máme "class Pair { String key; int value; }", napište metodu "Pair[] find(String key, Pair[] items)", která vrátí všechny páry z "items", které mají stejný klíč jako ten daný.
Výsledky a komentáře:
1) A. Pozor, jde o atribut, nikoliv lokální proměnnou, pro kterou by platitlo D.
2) B, E.
3) C.
4) B. Jde totiž o statický atribut a při přístupu k těm se používá jen typ výrazu, nikoliv jeho hodnota (která je null).
5) A, C.
6) C. Trochu mě to mátlo, protože RuntimeException je potomkem Exception, ale vylučovací metodou nic jiného nezbylo.
7) D.
8) B. Pozor na to, jedna metoda je static (používá zámek na třídě jako takové) a druhá není (používá zámek na instanci). Proto nejsou navzájem vyloučené. C je špatně, minimálně proto, že IllegalMonitorStateException dědí od RuntimeException.
9) String x = "";
10) Nějak to napsat (pozor na porovnávání stringů).
Po půl hodině doběhl pan Hnětynka a jal se opravovat. Celková bilance: 1 jednička, cca 7 dvojek, 5 trojek a 3 čtverky.