Mała czarna z Tygrysem

Proponuję zapoznać się z zasadami tworzenia programów w Javie. To język modny, a na dodatek pracodawcy patrzą przychylnie na osoby potrafiące się nim posługiwać. Rozpoczniemy zatem kilkuodcinkowy kurs pisania uniwersalnych aplikacji. Na początku zajmiemy się tymi najprostszymi programami, działającymi w oknie konsoli.

Napisać i odpalić

Aby uruchomić aplikacje napisane w Javie, trzeba zainstalować na komputerze środowisko JRE (Java Runtime Environment). Do samego programowania w tym języku potrzebne jest natomiast coś więcej, a mianowicie zestaw SDK (Software Development Kit), często zwany również JDK (Java Development Kit). Zawiera on także moduł JRE.

Istnieje kilka odmian SDK, wykorzystywanych w różnych sytuacjach i do realizowania odmiennych zadań:

  • J2SE (Java 2 Standard Edition) – standardowe środowisko programistyczne;
  • J2EE (Java 2 Enterprise Edition) – rozszerzone środowisko programistyczne, służące do tworzenia dużych, biznesowych projektów;
  • J2ME (Java 2 Micro Edition) – okrojona wersja środowiska standardowego, przeznaczona do pisania aplikacji dla urządzeń mobilnych (palmtopów, smartfonów itp.).
  • Zarówno JRE, jak i SDK w wydaniach dla różnych systemów operacyjnych (Windows, Linuksa, Solarisa itp.) są dostępne na stronie internetowej firmy Sun Microsystems (www.java.sun). W celu napisania naszych programów będziemy musieli zawrzeć znajomość z Tygrysem. Taką właśnie drapieżną nazwę kodową (Tiger) nadano standardowemu pakietowi J2SE w wersji 5.0. W jego skład wchodzą: maszyna wirtualna, narzędzia programistyczne i dokumentacja bibliotek Javy oraz przykładowe aplikacje. Maszyna wirtualna Javy zawiera standardowe biblioteki (niezbędne do uruchomienia aplikacji) oraz interpreter, odpowiedzialny za działanie skompilowanego kodu źródłowego. Całość udostępniana jest nieodpłatnie, wystarczy więc tylko znaleźć odpowiednią wersję instalatora.

    Najpierw fundamenty

    Pakiet J2SE dla Javy 5.0 pobierzemy ze strony firmy Sun Microsystems. Pod adresem http://java.sun.com/j2se/1.5.0/download.jsp znajdziemy instalatory w wersji online oraz setup przeznaczony do uruchomienia bezpośrednio na naszym komputerze.

    Jeżeli pracujemy z systemem Windows, powinniśmy pobrać i uruchomić plik jdk – 1_5_0 _06-windows-i586-i.exe. Dla zwolenników Linuksa przeznaczone są natomiast archiwa jdk-1_5_0_06-linux-i586-rpm.bin lub jdk-1_5_0_06-linux-i586.bin. Wybór zależy od używanej dystrybucji Pingwina.

    Po zakończeniu instalacji w środowisku Windows na dysku zostanie zapisany katalog \jdk1.5.0. Znajdziemy w nim kolejne foldery:

    \bin, \lib, \include, \demo

    oraz \jre. W pierwszym są wszystkie narzędzia potrzebne do tworzenia, uruchamiania, testowania i dokumentowania naszych aplikacji. W katalogu \jre znajduje się środowisko uruchomieniowe Javy. Składają się na nie maszyna wirtualna i inne pliki potrzebne do działania aplikacji. Folder \lib zawiera dodatkowe biblioteki z klasami i inne pliki wymagane przez narzędzia programistyczne. W katalogu \demo umieszczono przykładowe programy. Wreszcie w folderze \include znajdziemy pliki potrzebne do obsługi standardowego interfejsu programistycznego JNI (Java Native Interface), a w zbiorze

    src.zip

    – źródła składające się na biblioteki Javy.

    W zasadzie mamy już wszystko, co niezbędne do pisania aplikacji, ale zanim się do tego zabierzemy, wprowadźmy drobne poprawki w środowisku programistycznym. Przede wszystkim zmieńmy ścieżkę dostępu do programów narzędziowych składających się na J2SE. Wywołamy je wówczas niezależnie od tego, który folder będzie naszym aktualnym katalogiem roboczym. Jeśli tego nie zrobimy, w celu skompilowania aplikacji niezbędne okaże się przenoszenie plików źródłowych do katalogu z programami narzędziowymi.

    Kiedy korzystamy z systemu operacyjnego Windows XP musimy przyporządkować zmiennej środowiskowej Path ścieżkę dostępu do narzędzi umieszczonych w katalogu \bin. Wydajemy zatem polecenie Start | Ustawienia, wywołujemy aplet Panel sterowania i dwukrotnie klikamy ikonę System .

    W wyświetlonym okienku uaktywniamy zakładkę Zaawansowane, naciskamy przycisk Zmienne środowiskowe i odnajdujemy pozycję Path. Po jej dwukrotnym kliknięciu wpisujemy ścieżkę wskazującą folder z programami narzędziowymi wchodzącymi w skład pakietu Javy (np.

    C:\jdk1.5.0\bin

    ). Powinniśmy zakończyć ją średnikiem.

    Zalety Javy
  • Niezależność od sprzętu – raz napisany program można uruchomić na dowolnej platformie, na której zainstalowano wirtualną maszynę Javy.
  • Sieciowość – z punktu widzenia programisty nie ma żadnej różnicy między danymi pochodzącymi z pliku zapisanego na dysku lokalnym a udostępnianymi za pośrednictwem serwerów FTP/HTTP.
  • Bezpieczeństwo – Java oferuje mechanizmy uniemożliwiające np. włamanie się na serwer, na którym uruchomiono jej aplikację.
  • Pierwsze linie

    Pora zabrać się za przygotowanie jakiejś prostej aplikacji. Zaczniemy od programu, którego zadaniem będzie przekształcanie ciągu znakowego. Kod źródłowy pliku Javy możemy napisać, posługując się dowolnym edytorem tekstu (na przykład windowsowym Notatnikiem). Należy tylko zadbać o to, aby powstającemu plikowi nadać rozszerzenie JAVA. Pracę nad naszym pierwszym programem rozpoczynamy od utworzenia głównej klasy (zawsze publicznej), której nazwa powinna być taka sama jak nazwa pliku źródłowego:


    public class MojProgram1{
    //opis klasy głównej
    }

    Instrukcje składające się na aplikację umieszczamy pomiędzy nawiasami klamrowymi. Całość wygląda zatem trochę jak kod pisany w języku C++.

    Istotna część klasy głównej to metoda main(), koniecznie zaimplementowana z modyfikatorami public static. Zaznaczmy, że musi ona zwracać zmienną typu

    void

    (typ pusty). Uruchamianie programu rozpoczyna się właśnie od wywołania funkcji main(). Jak każda inna może ona pobierać argumenty, ale tylko w postaci tablicy łańcuchów znakowych, w której indeksy rozpoczynają się od zera – tak jak w każdej tablicy. W Javie łańcuch znakowy nie jest traktowany jako typ prosty, ale klasowy String .

    Choć sygnatura metody main() musi zawierać parametr w postaci tablicy String, nie trzeba jej przekazywać żadnych argumentów. Od razu jednak nasuwa się pytanie, w jaki sposób w ogóle to zrobić, skoro metoda jest wywoływana jako pierwsza podczas uruchamiania programu. Do tej kwestii wrócimy w dalszej części artykułu. Teraz zajmiemy się konstruowaniem metody main(), zakładając, że użytkownik jakoś przekaże jej potrzebne argumenty:


    public static void main(String[] args) {
    String lancuch=args[0];
    }

    Na początku tworzymy zmienną typu String o nazwie lancuch, aby przypisać jej wartość pierwszego i jedynego zresztą elementu tablicy. Teraz możemy na naszej zmiennej lancuch wykonywać różne operacje. Wyświetlmy najpierw zawartość przekazanego do metody main() łańcucha znakowego. Wystarczy, że dodamy następującą linię kodu:

    System.out.print(lancuch);

    Klasa System pozwala nam m.in. operować na strumieniu wejściowym/wyjściowym za pomocą zmiennych statycznych. Interesuje nas na razie strumień wyjściowy i dlatego wywołaliśmy zmienną statyczną out. Zwraca ona strumień wyjściowy, a konkretnie obiekt klasy PrintStream. Klasa ta oferuje kilka odmian metody print(), pobierających typy proste danych, łańcuch znakowy lub typ Object, od którego pochodzą wszystkie inne typy klasowe.

    Przyjrzyjmy się bliżej klasie String. Udostępnia ona metodę zliczającą znaki w ciągu tekstowym. Wartością zwracaną przez wspomnianą funkcję jest liczba całkowita (int):

    int iloscZnakow=lancuch.length();

    Nakażemy programowi, aby tę liczbę nam wyświetlił:

    System.out.println(iloscZnakow);

    Metoda println() działa tak samo jak print(), z tą różnicą, że po wyświetleniu tekstu przenosi kursor do nowej linii. Jeśli chcemy, aby początek tekstu był wyświetlany od nowego wiersza, stosujemy wewnątrz łańcucha wyrażenie

    . Gdy nie jest możliwe wyświetlenie tego wyrażenia w łańcuchu znakowym, stosujemy złożenie (konkatenację). W Javie jest to łączenie ze sobą ciągów znakowych lub ciągów i innych obiektów z wykorzystaniem znaku plus:

    System.out.println(” “+iloscZnakow);