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.
Język ten pierwotnie znany pod nazwą Oak -Object Application Kernel (z ang. Dąb) miał służyć jako narzędzie do sterowania tzw. urządzeniami elektronicznymi powszechnego użytku (telewizory, pralki, mikrofalówki -urządzeniami które posiadały mikroprocesor).
Historia Oak rozpoczęła się w 1990r. w firmie Sun Microsystems. Język został opracowany w 1991r.
Do 1994r. nie udało się go spopularyzować i prace zostały wstrzymane. Był to jednak czas gwałtownego rozwoju Internetu i okazało się, że Oak doskonale sprawdza się w różnorodnym środowisku, jakim jest niewątpliwie sieć globalna.
W 1995r. zostaje zmieniona nazwa języka na Java ze względu na zastrzeżoną nazwę Oak
W 1996r. Sun Mikrosystems udostępnia darmowe środowisko Java Development Kit 1.0.
W 1999r. pojawia się kolejna wersja Java 1.2 która nosiła na tyle znaczące zmiany i usprawnienia, że nadano jej nzawę Java 2 Platform (Platforma Java 2) a tym samym poprzednie wersje nazwano Platformą Java 1.
W ramach projektu J2P powstały narzędzie JDK oraz wykorzystywane w przeglądarkach umożliwiających udostępnienie Javy za pomocą mechanizmu wtyczek oraz zastosowanie Java Runtime Environment.(JRE)
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++.
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.