SCJP, podejście dziesiąte

Jak zwykle po powrocie z urlopu nic się nie chce. Czas w pracy dłuży się niemiłosiernie, do tego ta zwariowana od kilku tygodni pogoda nie polepsza nastroju. Zbierałem się trzy dni zanim postanowiłem znów zawalczyć z tematyką SCJP. Choć to i dobrze, gdyż oto podejście dziesiąte i jak na razie koniec. Ostatni rozdział w podręczniku poświęcony kompilatorowi miałem okazję przerobić już wcześniej. Popełniłem wówczas kilka błędów i temat zostawiłem do późniejszy. Jednakże teraz po powrocie z urlopu ponownie zapoznałem się z zawartością tych kilkunastu stron i tym razem test poszedł o niebo lepiej.

Mimo to należy do pytań dotyczących kompilacji podchodzić ostrożnie, podobnie jak do pytań dotyczących operatorów. Pozornie łatwe potrafią tak naprawdę bardzo łatwo wywieść na manowce. Zwłaszcza dlatego, iż obecnie raczej całą sprawę z kompilacją, classpathem i innymi tego typu rzeczami załatwia nam IDE, zatem raczej nikt nie jest za pan brat z dyrektywami kompilatora czy zabawą z szukaniem klas (choć może się mylę?). Oto lista kilku rzeczy, na które warto zwrócić uwagę:

  • importy statyczne – oczywiście koniecznym jest ich użycie za pomocą słów kluczowych static import (w takiej kolejności). Jednakże mniej oczywistym zapisem jest to, iż możemy importować w ten sposób nawet pojedyncze stałe i metody.
  • asercje – było o nich w rozdziale piątym, ale nie zaznaczyłem tam rzeczy najistotniejszej. Otóż nalezy pamiętać, że asercje zostały wprowadzone już w wersji 1.4! I dlatego też wywoływanie kompilatora i wirtualnej maszyny w ten sposób:
    javac -source 1.4 plik.java
    java -ea plik
    

    Spowoduje, że kod, w którym występują niespełnione asercje (zwracające wartość false) spowoduje wygenerowanie błędu podczas wykonania programu (czyli po prostu asercje będą działały). Wykonania, nie kompilacji! Powtórzmy – błędy wykonania (run), to co innego niż błędy kompilacji (compile).

  • classpath – czego tak naprawdę dotyczy ta dyrektywa dla kompilatora/JVM? Otóż jej zadaniem jest głównie znalezienie wszystkich klas, których kompilowana/uruchamiana klasa będzie potrzebowała. To jest główne zadanie dla classpath. Pamiętać należy również o tym, iż w przypadku kompilacji (polecenie javac) podanej nazwy pliku do kompilacji poszukuje się domyślnie w bieżącym katalogu. W przypadku uruchamiania pliku tak nie jest! No i rzecz ostatnia – podanie wartości dla classpath powoduje nadpisanie zmiennej systemowej (o ile rzecz jasna istnieje)
  • pliki JAR – archiwa są dość proste do zrozumienia, co więcej, na egzaminie nie ma pytań dotyczących ich tworzenia i zarządzania. Natomiast na pewno trzeba wiedzieć, że po utworzeniu pliku JAR z konkretnego katalogu, nawet po dodaniu go do classpath do klas zawartych w archiwum należy odwoływać się w kodzie poprzez podanie pełnej nazwy klasy (łącznie z nazwą pliku JAR). Oto przykład:
    test |
    plik.uzywajacy.klasy.z.jara
    tutaj.utworzymy.plik.jar
    katalog.do.zjarowania |
    podkatalog1
    podkatalog2 |
    plik.java

    Odwołując się do pliku w archiwum JAR, które utworzyliśmy w katalogu test należy podawać pełną ścieżkę. A zatem nasz plik w katalogu test, w którym chcielibyśmy wykorzystać klasę z archiwum musi odwoływać się do niej poprzez zapis PLIK_JAR/katalog.do.zjarowania/podkatalog2/plik – pomimo dodania pliku JAR do classpath.

Advertisements

One thought on “SCJP, podejście dziesiąte

  1. Polak Marcin

    Hej,
    Małe sprostowanie do “…static import (w takiej kolejności).” Powinno być w odwrotnej kolejności :), czyli import static.

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