Zkouška vypadala podobně jako v minulých letech. Znění ani odpovědi asi nejsou úplně přesné, ale logika otázek snad zachována.
Co vypíše následující kód?
public class A { public static void appendToString(String s) { s = s + " world"; }
public static void main(String[] args) { String s = "Hello"; appendToString(s); System.out.println(s); }
}
Odpověď: Hello (stringy jsou immutable)
Co vypíše následující kód?
public class A { public static void main(String[] args) { int[] array = {1, 2, 3, 4, 5, 6}; System.out.println(array[1] + array[3]); } }
Odpověď: 6
Co udělá následující kód, pokud jsou zaplé asserty?
public class A { public static void setInterval(int i) { assert i > 0; //... }
public static void main(String[] args) { setInterval(-1); }
}
Odpověď: vyhodí výjimku AssertionError a ukončí program
Co vypíše následující kód, pokud metoda someMethod vyhodí MyException?
public class A { public static void main(String[] args) { try { someMethod(); } catch (MyException e) { System.out.println("MyException"); } catch (Exception e) { System.out.println("Exception"); } finally { System.out.println("finally"); } } }
Odpověď: MyException finally
Mějme 3 interfaces:
interface Callable<T> {T call(); }
interface Supplier<T> {T get(); }
interface Predicate<T>{boolean test(T t); }
Který z následujících kódů se přeloží?
Supplier<Boolean> su = () -> { return true; }; Callable<Boolean> sa = () -> { return true; }; Predicate<Boolean> pr = () -> { return true; };
Odpověď: A, B (predikát potřebuje parametr)
Doplňte kód tak, aby se přeložil bez chyby. Chyba je na 2. a 3. řádku.
enum Answer { NO, YES;
private boolean isYes; private Answer(boolean isYes) { this.isYes = isYes; }
}
Odpověď: Je třeba změnit na NO(false) a YES(true).
Ke kterému objektu se vztahuje keyword this?
public class A { public void someMethod() { Thread t = new Thread(() -> System.out.println(this)); } }
Odpověď: K objektu t (nejspíš).
Napište čítač (long) s metodami inc() a get(), který bude thread-safe.
Odpověď: Metody musí být synchronized.
public class Counter { private long counter = 0; public synchronized void inc() { counter++; } public synchronized long get() { return counter; } }
Napište metodu, která má dva parametry typu int, hrubou mzdu a daň v procentech, a vrací hodnotu typu double udávající daň k zaplacení. Ověřte, že daň je v rozmezí 0–100 a mzda je nezáporná, pokud parametry nejsou v pořádku vyhoďte výjimku MyException, která je přímým potomkem java.lang.Exception (předpokládá se, že je deklarovaná a importovaná).
Odpověď: Nezapomenout na dělení ve float-point aritmetice.
public class TaxCalculator { public double calculateTax(int gross, int taxPercentage) throws MyException { if(gross < 0 || taxPercentage < 0 || taxPercentage > 100) throw new MyException(); return gross * (taxPercentage / 100.0); } }
Doplňte do kódu implementaci iterátoru, který musí být implementován jako anonymní třída.
interface Iterator<T> { boolean hasNext(); T next(); }
public class A { int[] elements; int numElements;
public static void main(String[] args) { Iterator<Integer> it = // doplňte kód }
}
Odpověď:
public class A { int[] elements; int numElements; public static void main(String[] args) { Iterator<Integer> it = new Iterator<Integer>() { private int i = 0; @Override public boolean hasNext() { return i < numElements; } @Override public Integer next() { if(hasNext) return elements[i++]; else throw new NoSuchElementException(); } }; } }