SCJP podejście szóste

Korzystając z długiego urlopu intensywnie (na zmianę z JSF) edukuję się celem zdania SCJP. Dziś przetrawiłem rozdział szósty podręcznika, który dotyczył wielu istotnych zagadnień w życiu każdego programisty – parsowania łańcuchów tekstowych, serializacji, formatowania dat i liczb, IO, wyrażeń regularnych i cholera wie czego jeszcze. Przyznam się do tego, iż z tym rozdziałem miałem najwięcej problemów spośród wszystkich dotychczas przerobionych. No bo jak tu ogarnąć na raz 100 stron wycieczki po API Javy kiedy się w niej nigdy zawodowo nie kodowało? Dla ludzi, którzy zęby na Javie zjedli treść tego rozdziału pewnie była śmieszna, dla mnie z kolei przypomnieniem co to znaczy uczyć się czegoś na pamięć 🙂

Pomimo tego końcowy test nie poszedł mi wcale tak źle. Najwięcej problemów miałem z pytaniami z serializacji, a to z powodu nieuwagi przy czytaniu zależności między klasami/zmiennymi instancji/statykami przy odbywaniu się tego procesu. Oto lista rzeczy, na którą warto zwracać uwagę:

  • nieszczęsna serializacja – jest kilka zasad, których trzeba przestrzegać, aby ustrzec się błędów w pytaniach dotyczących serializowania obiektów. Oto używany kod:class A {}
    class B extends A implements Serializable {
    A zmienna = new A();
    static int zmienna2 = 9;
    int transient zmienna3 = 1;
    }

    • W przypadku deserializacji klasy B nie jest wywoływany jej konstruktor (to wynika z procesu deserializacji), ale za to konstruktor klasy A jest jak najbardziej wywoływany
    • Istniejący zapis uniemożliwia serializację klasy B, gdyż klasa A nie może być serializowana. Jednakże taki kod skompiluje się bez problemu!!!. Dopiero podczas procesów serializacji wyrzuci wyjątek.
    • przy deserializacji i serializacji statyczne składowe klasy w ogóle są wypisywane z tego procesu. Nasza składowa zmienna2 istnieje niezależnie od serializacji/deserializacji.
    • zmienne oznaczone jako transient nie zostaną zainicjalizowane swoimi domyślnymi wartościami (np. zmienna3 po deserializacji obiektu nie otrzyma wartości 1!!!). Dostanie za to śliczne 0, gdyż będzie to jej wartość domyślna (dla tego typu zmiennych).
  • tak pro forma plików i katalogów – istnieje metoda mkdir, ale dla plików stosujemy createNewFile(). Warto też przyjrzeć się konstruktorom File.
  • NumberFormat – ma ciekawą metodę setMaximumFractionDigits, która ustawia ilość cyfr “po kropce”. I byłoby świetnie gdyby autorzy podręcznika podkreślili przy jej omawianiu, że dotyczy ona tylko metody format(). Metody parse już obostrzenia związane z ustawioną wartością zupełnie nie dotyczą. Do tego należy przypomnieć, że metoda format przy dopasowywaniu wartości do wskazanej liczy cyfr “po kropce” nie obcina liczby, ale ją zaokrągla!

To tyle póki co z placu boju. Jutro czeka na mnie smakowity kąsek – rozdział siódmy dotyczący kolekcji. Będzie się działo.

Advertisements

3 thoughts on “SCJP podejście szóste

  1. Jacek Laskowski

    Przy “int zmienna3” brakuje chyba transient, o którym wspominasz w opisie. Wielu z tych rzeczy nie wiedziałem, więc było krótko i treściwie. To już kolejny raz, kiedy to piszę u Ciebie, co?

  2. chlebik Post author

    Pewnie, że po raz kolejny. Po raz kolejny też poprawiasz mi jakiś błąd 😛

    Ps. Ty też tak po nocach siedzisz?

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