# Zkouška 16.1.2017 (Hnětynka)

<{ForumPost(poster="CiTrus", timestamp=2017-01-16 12:42:44)}>
Dnes to bylo trochu obtížnější než obvykle. Házím to sem, dokud si většinu pamatuji.  
  
**Výsledky:** pár jedniček a dvojek, hromada trojek a čtyřek  
  
**Formát:** klasický - 8 testových otázek s 1+ správnou odpovědí, 2 otevřené na doplnění kódu. Za špatně (ne)zvolené odpovědi se akumulují trestné body. 0..2 jednička, 3..5 dvojka, 6..9 trojka, jinak čtyřka.  
  
**1. Co se nepřeloží?**  
a) byte x = 1024;  
b) int x = 08;  
c) long x = null;  
d) char x = "a";  
e) int x = 0x1234;  
  
  
**2. Co se stane při překladu programu?**

    class MyClass {
        public static void main(String[] args) {
            amethod(args);
        }
        public void amethod(String arguments[]) {
            System.out.println(arguments[1]);
            System.out.println(arguments);
        }
    }

a) nelze přeložit - metoda amethod není deklarována před voláním  
b) nelze přeložit - statická metoda main volá instanční metodu amethod  
c) nelze přeložit - špatná deklarace pole v main  
d) nelze přeložit - println nepřijímá jako parametr pole  
  
  
**3. Co se přeloží?**  
a) 

    if (3 == 2) System.out.println("Hi!");

b) 

    if (3 = 2) System.out.println("Hi!");

c) 

    if (true) System.out.println("Hi!");

d) 

    if (3 != 2) System.out.println("Hi!");

**4. Co dělá protected u elementu třídy (atribut, metoda)?**  
a) element je přístupný pouze ze třídy  
b) element je přístupný pouze ze třídy a jejích potomků, pokud jsou ve stejném balíčku  
c) element je přístupný pouze ze třídy a jejích potomků, pokud jsou kdekoliv  
d) element je přístupný pouze ze třídy, jejích potomků (pokud jsou kdekoliv) a z balíčku, do kterého třída patří  
  
  
**5. Vyberte klíčová slova**  
a) throws  
b) object  
c) override  
d) do  
  
  
**6. Co je pravda?**  
a) vnitřní třídy musí implementovat alespoň jeden interface  
b) vnitřní třídy mají přístup ke všem (i private) elementům třídy, která je obsahuje  
c) vnitřní třídy nedědí od třídy Object  
d) *(už si nepamatuju, co tu bylo, ale bylo to správně)*  
  
  
**7. Co se přeloží?**  
a)

    import java.util.*;
    package MyPackage;
    class MyClass {}

b)

    package MyPackage;
    import java.util.*;
    class MyClass {}

c)

    /* komentar */
    package MyPackage;
    import java.util.*;
    class MyClass {}

d) nic se nepřeloží  
  
  
**8. Co je pravda?**  
a) notify(), notifyAll() a wait() je definováno na třídě Object  
b) notify(), notifyAll() a wait() je definováno na třídě Thread  
c) notify(), notifyAll() a wait() lze volat jen ze synchronized sekcí a bloků  
d) třída Thread je abstraktní  
  
  
**9. Funkce forEach má hlavičku:**

    void forEach(Consumer<? super T> action)

Kde funkcionální rozhraní Consumer je definováno:

    interface Consumer<T> {
        void accept(T t);
    }

Doplňte výraz do forEach, aby program vypsal všechny prvky seznamu:

    List<String> list = ...;
    list.stream.forEach(
        // zde byly asi 3 volne radky
    )

**10. Předefinujte korektně equals() ve třídě:**

    class Complex { 
        int re; int im;
    
        // zde bylo asi 5 volnych radku
    }

----

  
  
  
  
**Řešení:**  
1. a (přetečení int literálu v byte proměnné), b (neplatný osmičkový literál), c (nelze narvat null do primitivního typu), d (nelze narvat String literál do charu)  
2. b  
3. a, c, d  
4. d  
5. a, d  
6. b, d  
7. b, c  
8. a, c  
9. například 

    s -> { System.out.println(s); }

 nebo 

    System.out::println

10. například:

    @override 
    public boolean equals(Object other) {
        if (other instanceof Complex) {
            Complex that = (Complex) other;
            return this.re == that.re && this.im == that.im;
        }
        return false;
    }


<{/ForumPost}>

<{ForumPost(poster="ZuzkaD", timestamp=2017-01-16 12:59:05)}>
Pár věcí si pamatuju trochu jinak:  
  
Výsledky: Většina 4 (něco jako 9 ze 13)  
  
1) Nebyla tam možnost e) int x = 0x1234 ale zato tam bylo int x = 0b01;  
  
6) Byla tam, myslím, ještě možnost něco jako Vnitřní třídy dědí od té vnější - není pravda
<{/ForumPost}>

<{ForumPost(poster="Ghort", timestamp=2017-01-16 15:23:49)}>
Dokud si to jakž takž pamatuju:  
  
ve 3) byla navíc možnost
 

     if ("abcd".equals("abcd")) System.out.println("Hi!"); 

v té 6) bylo něco jako "Vnitřní třída může implementovat libovolně mnoho interfaců" a bylo to správně...  
  
jednička nebyla myslím žádná, 3 dvojky, cca 3 trojky a nějakých 7 čtyřek...
<{/ForumPost}>

