Na początku będą zagadki, pod nimi znajdziecie odpowiedzi, a na końcu ankietę, w które wstawcie swój wynik (tylko bez oszukiwania i kompilacji kodu! :P ). W przykładach używałem javy 1.5.
No więc zapraszam do kombinowania :)
Zagadki
Odpowiedzi:
- Zmienna "i" będzie równa 0,
- Zmienna "i" będzie równa 69,
- Kod się nie skompiluje,
- Wystąpi błąd podczas działania aplikacji (RuntimeException).
Odpowiedzi:
- 4,
- 127,
- Kod się nie skompiluje,
- Wystąpi błąd podczas działania aplikacji (RuntimeException).
Odpowiedzi:
- here1 here2,
- here1 here2 here3 here4,
- here1 here2 here4,
- here2 here3 here4,
- here2 here4,
- Kod się nie skompiluje,
- Wystąpi błąd podczas działania aplikacji (RuntimeException).
Odpowiedzi:
- pre b1 b2 r3 r2 hawk,
- pre b1 b2 r3 r2 hawk,
- pre b2 b1 r2 r3 hawk r1 r4,
- r1 r4 pre b1 b2 r3 r2 hawk,
- r1 r4 pre b2 b1 r2 r3 hawk,
- pre r1 r4 b1 b2 r3 r2 hawk,
- pre r1 r4 b2 b1 r2 r3 hawk ,
- Kod się nie skompiluje,
- Nie można określić poprawnej kolejności.
Odpowiedzi:
- Jacek,
- Jacek is,
- Jacek is …,
- Jacek is stupid,
- Jacek is great,
- Jacek is stupid and great,
- Jacek is
… stupid and great, - Jacek is and,
- Kod się nie skompiluje,
- Nie można określić poprawnej kolejności.
Odpowiedzi
Schowaj odpowiedzi
1.
Prawidłowa odpowiedź to 3. Klasa dziedziczy stan z klasy powyżej, a w klasie wyżej zmienna "i" ma private. Kod się oczywiście nie kompiluje.
2.
Poprawna odpowiedź to numer 3. Kod się nie kompiluje, ponieważ domyślnym wynikiem z operacji arytmetycznych jest int, a więc otrzymujemy przypisanie "byte c = jakiś wynik typu int". Aby kod się kompilował, niezbędne jest rzutowanie na int -> byte c = (byte) a + b.
3.
Prawidłowa odpowiedź to 2. Java dla niskich wartość (char <0, 127>, Boolean oraz int/double <-127, 128>) trzyma obiekty na stałe. Związane jest to z oszczędnością pamięci, która doprowadza do tego, że takie absurdalne przykłady w kodzie mają miejsce ;) (w Javie 1.6 autoboxing został 'zmodyfikowany' i powyższy kod się nie skompiluje).
4.
Odpowiedź prawidłowa to 4. Statyczne bloki wykonują się w czasie ładowanie klas, bloki inicjalizacyjne po wywołaniu super() w konstruktorze. Przy więcej niż jednym bloku, liczy się kolejność w kodzie.
5.
Tym razem dobrze zrobili Ci, co zaznaczyli odpowiedź numer 6! Typ enumeryczny został rozbudowany do tego stopnia, że używając go w switch-ach nie musimy w każdym case podawać nazwy enum-a. Coś na zasadzie "With" w Visual Basic. (w Javie 1.6 enumy zostały 'ulepszone' i powyższy kod się nie skompiluje).
Ankieta, czyli pochwal się wynikiem
I jak Wam poszło? Ja się przyznam, że zamieszczone w/w przykłady, to takie na których ja się wyłożyłem, a więc moja odpowiedź w ankiecie to 5 :P
Resources
- Większość przykładów pochodzi/wywodzi się z książki "Scjp Sun Certified Programmer For Java 5 Study Guide (Exam 310-055)" - Kathy Sierra i Bert Batesa.
- Konkurs javowy na konferencji Javarsovia 2008.
- Blog Mariusza Lipińskiego, javowego eksperta i pogromcy kodu.
Zapraszam do komentowania i umieszczania swoich wyników. Jeśli macie jeszcze jakieś ciekawe przykłady to podsyłajcie, a na pewno zamieszczę je w kolejnych postach dotyczących javy.
Pozdrawiam,
Jacek Ciereszko






1 komentarz:
O kurcze Jacek. Czytam sobie artykuł, czytam, myśle świetny, a wreszcie na końcu widzę miano pogromcy kodu jakie mi nadałeś - najlepszy art jaki kiedykolwiek widziałem! :)
Prześlij komentarz