Zkouška 16.1.2017 (Hnětynka)

CiTrus at 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
  1. 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; }

ZuzkaD at 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;

  2. Byla tam, myslím, ještě možnost něco jako Vnitřní třídy dědí od té vnější - není pravda

Ghort at 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...