Język JAVA - Wprowadzenie

Język Java jest niewątpliwie najbardziej rozwijającym się obecnie środowiskiem tworzenia aplikacji. Czerpie on to co najlepsze z takich języków jak C++ czy Smaltalk przy zdecydowanie prostszej i bardziej czytelnej składni (konstrukcji) programów. Zawiera elementy programowania zarówno strukturalnego jak i obiektowego, zdarzeniowego jak i współbieżnego. Poprzez standardowe jak i rozszerzone biblioteki wkracza w różnorodne rejony zastosowań takie jak np. karty inteligentne i elektronika, systemy zarządzania bazami danych, obsługa multimediów, Internet, grafika 3D, kryptografia, itd.

Java zdecydowanie różni się od innych języków trzeciej generacji tym, że jest językiem interpretowanym a nie kompilowanym. Oznacza to, że powstały w wyniku kompilacji kod wynikowy nie jest programem, jaki można niezależnie uruchomić, lecz stanowi tzw. Beta-kod, który jest interpretowany przez Maszynę Wirtualną (JavaVM) pracującą w określonym środowisku.

Maszyna Wirtualna umożliwia odcięcie się od wszystkich poziomów sprzętowo-programowych będących poniżej Maszyny Wirtualnej. Koncepcja ta jest powszechna również w samym języku JAVA, dzięki czemu poprzez stworzenie abstrakcyjnych klas i metod podstawowe biblioteki Javy nie muszą być nieustannie rozbudowywane.

Historia języka Java.

B-kod i maszyna wirtualna, czyli kompilacja w Javie.

Każdy napisany program przed wykonaniem musi być przetłumaczony na język zrozumiały dla komputera, czyli poddany procesowi kompilacji.

W przypadku języków takich jak C, C++ czy Pascal jest to zazwyczaj kompilacja do kodu natywnego procesora, tzn. kodu, który procesor jest w stanie bezpośrednio wykonać. W przypadku Javy tak jednak być nie może, jako że programy nie były by wtedy przenośne. Każdy procesor ma inny zestaw instrukcji, a zatem program skompilowany dla jednego nie byłby zrozumiały dla drugiego.

Dlatego też w przypadku Javy efektem kompilacji jest kod pośredni, tzw. b-kod (z ang. b-code, byte-code). Zawarty jest on w plikach z rozszerzeniem class

Kompilacja zostaje wykonana przez kompilator - program javac. Kompilator ten pracuje w wierszu poleceń i przyjmuje w postaci argumentu jeden lub więcej plików z kodem źródłowym. Zatem jego schematyczne wywołanie to:

javac nazwa_pliku.java

lub dla kilku plików:

javac nazwa_pliku1.java nazwa_pliku2.java nazwa_pliku3.java

Aby b-kod mógł zostać zrozumiany przez procesor, musi być ponownie przetłumaczony. Dokonuje tego tzw. maszyna wirtualna Javy (JavaVM), czyli interpreter b-kodu dla danego typu procesora (i systemu operacyjnego). Wynika z tego że, wystarczy aby dla każdego systemu powstała dedykowana mu maszyna wirtualna Javy, a będzie można uruchomić na nim każdy program w Javie bez wykonania dodatkowych modyfikacji. Jest to niestety, również jedna z przyczyn powolności Javy. Kod interpretowany jest, bowiem wolniejszy od wykonywanego bezpośrednio na danym procesorze.

Obecnie ma to coraz mniejsze znaczenie -powstają coraz lepsze maszyny wirtualne, zawierające np. kompilatory JIT (z ang. Just In Time), które w locie kompilują część (lub nawet całość) b-kodu do kodu natywnego procesora -niemniej Java wciąż jest jednak wolniejsza niż np. C czy C++.

0x08 graphic

Biblioteki klas, metod, pól, itp., zarówno te zależne sprzętowo jak i te niezależne sprzętowo stworzone już w Javie znajdują się w postaci skompilowanej w Java API. Podsumowując Java VM oraz Java API tworzą platformę Javy zwane często środowiskiem uruchomieniowym aplikacji - Java Runtime Engine (JRE).

Podsumowując, aby napisać aplikacje w Javie należy wykonywać poniższe kroki:

1. Napisanie z pomocą dowolnego edytora tekstu kodu źródłowego programu zawierającego klasę publiczną o nazwie takiej samej (dokładnie takiej samej z uwzględnieniem wielkości znaków) jak docelowa nazwa programu np. Main.

2. Zapisanie kodu źródłowego jako pliku o danej nazwie z rozszerzeniem .java, np. Main.java

3. Kompilacja kodu źródłowego zawartego w pliku z rozszerzeniem .java do pliku docelowego o rozszerzeniu .class zawierającego Beta-kod np.

c:\ javac main.java

gdzie:

javac - nazwa komilatora programów Javy stworzonego przez Sun Microsystems (kompilator napisany w Javie),

Main.java - kod źródłowy programu do kompilacji (WAŻNE: podana nazwa pliku musi zawierać rozszerzenie .java).

W Wyniku kompilacji powstanie plik lub zestaw plików z tym samym trzonem nazwy o rozszerzeniu .class, np. Main.class.

4. Uruchomienie w środowisku interpretatora Beta-kodu, np.

c:\ java Main

gdzie:

java - nazwa interpretatora Javy stworzonego przez Sun Microsystems, inaczej uruchomienie Maszyny Wirtualnej,

Main - nazwa pliku z Beta-kodem programu w Javie kompilacji (WAŻNE: podana nazwa pliku nie może zawierać rozszerzenia .class).

Analiza sposobu działania „Pierwszego programu w Javie”.

Kod programu będzie wyglądał następująco:

public

class Main

{

public static void main (String args[])

{

System.out.println (“Pierwszy program w Javie”);

}

}

Aplikacja w języku Java to zdefiniowana klasa publiczna wraz z jedną ściśle określoną metodą statyczną o formie:

public static void main (String args[])

Tablica „args[]” będąca argumentem metody main() jest zbiorem argumentów wywołania aplikacji w ciele, której znajduje się metoda. Kolejność argumentów jest następująca: argument 1 wywołania umieszczany jest w args[0], argument 2 wywołania umieszczany jest w args[1], itd. Występująca nazwa „args” oznacza dynamicznie tworzony obiekt, który zawiera args.length elementów typu łańcuch znaków. Pole „length” oznacz, więc liczbę elementów tablicy. Łatwo jest, więc określić argumenty oraz ich liczbę korzystając z obiektu „args”. Warto zwrócić uwagę na to, że oznaczenie „length” jest własnością tablicy (ukrytym polem każdej tablicy) a nie metodą obiektu args. Istnieje metoda klasy String o nazwie „length()” (metody zawsze są zakończone nawiasami pustymi lub przechowującymi argumenty), łatwo, więc się pomylić. Dla zapamiętania różnicy posłużmy się prostym przykładem wywołania:

args.length - oznacz ilość elementów tablicy „args”;

args[0].length() -oznacza rozmiar zmiennej tekstowej o indeksie 0 w tablicy „args”.

Prosta aplikacja działająca w Javie wygląda następująco:

public class Main //deklaracja public class Main

{ //Początek public class Main

public static void main (String args[])//Deklaracja public static void main (String args[])

{ //Początek public static void main (String args[])

System.out.println (“Pierwszy program w Javie”);

} //Koniec public static void main (String args[])

} //Koniec public class Main

Zapisując powyższy kod do plik „Main.java”, kompilując poprzez podanie polecenia: „javac Main.java” można wykonać powstały Beta-kod „Main.class” używając interpretatora: „java Main”.

W ustalonej ramie klasy, w metodzie programu uruchomiono polecenie wysłania do strumienia wyjścia (na standardowe urządzenie wyjścia - monitor) łańcuch znaków „Pierwszy program w Javie”. Konstrukcja ta wymaga krótkiego komentarza. Słowo „System” występujące w poleceniu wydruku oznacza statyczne odwołanie się do elementu klasy System. Tym elementem jest pole o nazwie „out”, które stanowi zainicjowany obiekt typu PrintStream (strumień wydruku). Jedną z metod klasy PrintStream jest metoda strumień nazwie „println”, która wyświetla w formie tekstu podaną wartość argumentu oraz powoduje przejście do nowej linii (wysyłany znak końca linii). W podanym przykładzie nie ukazano jawnie tworzenia obiektu. Można, więc powyższy przykład nieco rozwinąć.

//klasa

class PrMain

{

//pola

String nazwa;

//konstruktor

PrMain(String nazwa)

{

this.nazwa=nazwa;

}

//metody

void opis()

{

System.out.println(nazwa+ ” program w Javie”);

}

}// koniec class PrMain

public class Main1

{

public static void main(String args[])

{

PrMain pierwszy = new PrMain(”Pierwszy”);

pierwszy.opis();

}// koniec public static void main(String args[])

}// koniec public class Main1

Uwagę należy zwrucić iż po kompilacji powyszego programu powstaną dwa nowe pliki: PrMain.class oraz Main1.class. Oddzielne klasy zawsze są kompilowane do osobnych plików. PrMain.class jest klasa pomocniczą klasy głównej Main1.class. Uruchomienie przez interpretator klasy pomocniczej wyświetli błąd o niezdefiniowanej klasie.

Jeszcze kilka zdań o Javie.

-Język kompilowany do tzw. b-kodu, wykonywanego następnie za pomocą wirtualnej maszyny Javy na komputerze klienta;

-Język zorientowany obiektowo z obsługą wszystkich mechanizmów obiektowości;

-Kod programu jest niezależny od kodu HTML i znajduje się w oddzielnych plikach;

-Zmienne i ich typ muszą być zadeklarowane przed ich użyciem w programie;

-Wszystkie odwołania do obiektów i funkcji są sprawdzane na etapie kompilacji;

-Ze względów bezpieczeństwa aplety, (w przeciwieństwie do aplikacji) nie mają możliwości zapisu na dysk twardy.