SCJP, podejście drugie

Jestem po lekturze drugiego rozdziału podręcznika do SCJP. Zasadniczo czyta się to to świetnie, czuć, że pisali to Amerykanie 🙂 No ale do rzeczy.

Zasadniczo popełniłem pewien grzech – stwierdziłem bowiem, że o samym egzaminie doczytam sobie przy okazji. Oczywiście wiem ile trwa, wiem ile pytań czy jaki jest próg zdawalności. Dziś jednakże doczytałem co trzeba i bardzo dobrze zrobiłem. Nie wiedziałem bowiem, że w przypadku normalnego egzaminu przy pytaniach ‘zaznaczanych’, jest podana ilość prawidłowych odpowiedzi. W podręczniku (w testach na końcu rozdziału) informacja ta nie jest podawana, a to wszystko w celu zwiększenia skuteczności nauki. Przy wypełnianiu dzisiejszego testu z rozdziału drugiego (konstruktory, podstawy OOP, metody statyczne) wiadomość ta okazała się bardzo miła. Głównie ze względu na fakt, iż często odpowiedzi to informacja, że coś się wykrzaczy (Runtime Exception) w linii X, Y, Z, albo też nie skompiluje się wcale. No i teraz w końcu co zaznaczyć? Linię z błędem, odpowiedź, że się nie skompiluje cały program, czy może obie? Znając ilość prawidłowych odpowiedzi cały proces staje się łatwiejszy.

A cóż dzisiaj z bardziej ciekawych zagadnień i problemów? Ano kilka – głównie pewnych szczegółów, których na co dzień się po prostu nie zauważa. Oto one:

  • znów var-argsy – tutaj się naciąłem. Dotyczy to również metod statycznych. Fragment kodu:

    static void sifter(A[]... a2) { s += "1"; }
    static void sifter(B[]... b1) { s += "2"; }
    static void sifter(B[] b1) { s += "3"; }
    static void sifter(Object o) { s += "4"; }

    I teraz do tego są wywołania metody sifter z różnymi parametrami. Nauka z tego fragmentu jest taka: 1. przy przeciążanych metodach te, które posiadają jako parametr var-args są prawie zawsze brane pod uwagę na samym końcu!!! (tak piszą w podręczniku). Nie miałem o tym pojęcia więc na pytaniu poległem. 2. dodatkowo warto pamiętać, że tablice, mimo iż zawierają jakąś ilość obiektów, również same z siebie są obiektem.

  • polimorfizm dotyczy tylko metod – o co chodzi już wyjaśniam. Przykład z książki:

    public class test {
    public static void main(String[] args) { new test().go(); }
    void go() {
    Mammal m = new Zebra();
    System.out.println(m.name + m.makeNoise());
    }
    }

    class Mammal {
    String name = "siersc ";
    String makeNoise() { return "jakis odglos"; }
    }

    class Zebra extends Mammal {
    String name = "pasy ";
    String makeNoise() { return "meczy"; }
    }

    No i co się pojawi na wyjściu? Ano właśnie – siersc meczy – polimirfizm to domena tylko metod, jak widać własności to nie obejmuje. Drugą kwestią w tym punkcie jest również to, iż w przypadku metod nadpisywanych(overriden) pierwszeństwo ma nie typ referencji do obiektu, ale typ obiektu, na który dana referencja wskazuje. Czyli w przypadku własności widzimy ssaka (Mammal), ale już w przypadku metody mamy zebrę.

To chyba tyle. Przyznaję, że ciekawie się robi, zaś jedyny problem to fakt, iż kolejne rozdziały stają się coraz dłuższe 🙂

Advertisements

5 thoughts on “SCJP, podejście drugie

  1. Mateusz

    Jak już sie w Javie jakiś czas pracuje, to najtrudniejsze jest zebranie się do egzaminu 🙂 Znając panów (z blogów) nie sprawi on Wam problemu 🙂

  2. chlebik Post author

    Jak jeszcze raz zobacze ‘Pan’ u siebie na blogu to dam perm bana na komentarze 🙂 Chyba, ze to ironicznie i przesmiewczo, to przepraszam 🙂

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s