Best of the best z SCJP

Ostatnio sporo w tym temacie się u mnie dzieje (dlatego wpisy trochę przystopowały). Testowy egzamin robię średnio 2h i po przejrzeniu poprawnych odpowiedzi z definicji jestem tak skonany, że nic już mi się nie chce. Jednakże dziś taka mała gratka dla wszystkich programistów Javy – niezależnie czy przygotowują się do egzaminu czy nie – całkiem spora lista rzeczy, które zapisałem sobie podczas przerabiania testowych egzaminów, a które są dość podchwytliwe i mogą łatwo człowieka wywieść na manowce.

Listę będę starał się cały czas aktualizować. Jak już zdam ten nieszczęsny egzamin to pewnie powstanie kolejna strona na blogu poświęcona SCJP i tam pewnikiem umieszczę wszystkie materiały. Gdyby ktoś chciał dodać do tej listy jakiegoś “onelinera” to proszę o mejla lub komentarz.

  • w przypadku klas Boolean otrzymują one wartość TRUE tylko wówczas, jeśli przekazaną wartością do konstruktora jest “true” – niezależnie od wielkości liter. Wszystko inne (łącznie z NULL) daje FALSE.
  • w przypadku przekazywania do metod/klas pracujących nad tokenizacją tekstu jakichkolwiek wzorców należy pamiętać, że w klasie String należy używać 2 slashy by wprowadzić znak specjalny (np. “\\s”)
  • zsynchronizowane mogą być tylko metody oraz bloki kodu
  • uśpienie obecnie działającego wątku (za pomocą Thread.sleep()) z podaniem wartości czasowej (pamiętajmy – milisekundy) powoduje, że upłynie MINIMUM dany okres czasu zanim wątek ten powróci do gry. Może to być więcej, jeśli np. w tym czasie JVM przydzieli czas innym wątkom będącym na tym samym poziomie uprzywilejowania.
  • wątek kończy swe działanie wówczas, gdy kończy wykonywać się jego metoda run(). Tutaj warto zwrócić uwagę na to, że metoda start() klasy Thread wywołuje swą metodę run().
  • method inner-classes nie mogą korzystać ze zmiennych lokalnych, chyba że są one zadeklarowane jako final
  • skompilowanie programu z użyciem asercji to nie do końca to samo co uruchomienie programu z użyciem asercji
  • warto pamiętać o zasadach dotyczących nadpisywania i przeciążania metod. Zwłaszcza o tej, że metoda statyczna nie może być nadpisana przez niestatyczną i vice versa. Przeciążanie zaś polega na zmianie parametrów oraz na opcjonalnej zmianie zwracanego typu.
  • Unreachable statement to nie wyjątek tylko błąd czasu kompilacji!
  • porównywanie typów prostych z klasami opakowującymi za pomocą metody equals jest jak najbardziej OK. Autoboxing da sobie z tym radę.
  • dzielenie modulo działa dość prosto – zawsze zwraca wartość INT, a z kolei znak jest uzależniony od znaku lewego operandu
  • modyfikator abstract private jest możliwy tylko w przypadku klas wewnętrznych
  • poprzez instrukcje statycznego importu (import static) możemy zaimportować tylko stałe i metody
  • zmienne interfejsu są domyślnie stałę (public, static, final), zaś metody interfejsu są domyślnie public i abstract).
  • kiedy metoda nie zwraca wartości (typ void), wówczas można w ciele takiej metody czystej instrukcji return;. Kod taki się skompiluje i wszystko jest OK. Jeśli jednakże metoda deklaruje, że zwróci jakąś wartość, wówczas zwraca tą wartość lub NULL.
  • konstruktor klasy String tworzy nowy obiekt za każdym razem. Używanie do tworzenia łańcuchów przeciążonego operatora równości powoduje pierwej wyszukanie tworzonej wartości w istniejącej puli łańcuchów.
  • pamiętajmy o porówywaniu typów prostych z klasami opakowującymi i tych samych klas opakowujących. Dotyczy ten temat liczb z przedziału -128 do 127, a także wartości Boolean oraz Char (w pewnym przedziale).
  • przy metodach operujących na łańcuchach (StringBuilder też się łapie) pamiętajmy, że w metodach dwuargumentowych drugi parametr jest cyfrą, która licząc znaki od 0 jest pierwszą literą, która zostanie z istniejącego obiektu po dokonaniu danej operacji (np. metody substring czy delete).
  • klasa File posiada mało znane (w kotenkście egzaminu) metody canRead() oraz canWrite()), która wskazuje czy dany plik da się odczytać/zapisać.
  • metoda getInstance() z parametrem typu Locale istnieje tylko dla klas Calendar oraz NumberFormat.
  • zmienne zadeklarowane w blokach inicjalizacyjnych nie są dostępne poza nimi.
  • tablice można też tworzyć w ten sposób:
    int[] a = {1};
  • klasy anonimowe (anonymous inner-classes) nie mogą posiadać deklaracji statycznych
  • w przypadku typów wyliczeniowych należy pamiętać, iż wyszczególnienie elementów zbioru musi być pierwszą rzeczą w kodzie tworzącym typ wyliczeniowy.
  • naturalny porządek sortowania łańcuchów tekstowych to:
    • białe znaki
    • “krzaczki” (np. @)
    • cyfry
    • wielkie litery
    • małe litery
  • tablice mogą mieć rozmiar 0
  • liczby typu float oraz double można dzielić przez zero!!! Spowoduje to zwrócenie wartości “Inifinity”
  • dla przypomnienia – wynikiem działań matematycznych jest domyślnie wartość int
  • wywołanie System.gc() nie daje pewności, że GC w ogóle ruszy
  • wartości prymitywne w kolekcjach są sortowane z użyciem własnych zasad. Nie da się do nich zastosować klas implementujących Comparator.
  • przeszukiwanie tablic oraz kolekcji musi odbywać się za pomocą takiego samego Comparatora, co sortowanie.
    • Advertisements

5 thoughts on “Best of the best z SCJP

  1. Michał Mech

    Z wielu, które mi się nasuwają (i dają zapisać ładnym sloganem) dodałbym jeszcze to, że użycie System.gc() to pobożne życzenie wywołania Garbage Collectora a nie wywołanie Garbage Collectora.

  2. chlebik Post author

    Z tego co pamietam, to pisza o tym wyraznie w podreczniku. Ale dopisac zawsze mozna. W ogole pytania o GC mnie czasem rozbrajaja – zwlaszcza kombinacja slow “must”,”can”,”should” i tak dalej.

  3. Marek

    do dzielenia przez zero sprostowałbym,że
    double a = 20/0; daje ArithmeticException
    double b = 20.0/0; i
    double c = 20f/0; dają infinity

  4. chlebik Post author

    6 punkt od dolu bodajze:

    “liczby typu float oraz double można dzielić przez zero!!! Spowoduje to zwrócenie wartości “Inifinity””

  5. Mariusz

    Witam,

    Dzięki za listę porad. Na pewno się przydadzą.
    Myślę, że możesz usunąć link do blogu Michała Mecha. To, co tam się znajduje, z Javą nic wspólnego nie ma.

    Pozdrawiam!

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