JAVA Tomasz Grzywacz t.grzywacz@iel.waw.pl
Literatura B. Eckel "Thinking in Java", Helion, 2001 Laurence Vanhelsuwe [i in.], Programujemy w Java, t.1-2, EXIT, Warszawa 1997 Kris Jamsa, Java, MIKOM, Warszawa 1998 B.Boone "Java dla programistów C i C++", WNT, 1998 Ken Arnold, James Gosling, Java, WNT, Warszawa 1999 Krzysztof Barteczko, Java. Wykłady i ćwiczenia, MIKOM, Warszawa 2000 Wiesław Porębski, Język Java, HELP, Michałowice 2000 Michael Morgan, Poznaj język Java 1.2, MIKOM, Warszawa 2001 2
Historia języka Java Język Java został opracowany w laboratoriach firmy Sun Microsystems pod kierunkiem Jamesa Goslinga 1990 - początek prac na projektem Green mającym na celu stworzenie oprogramowania dla sprzętu elektronicznego 1991 - opracowanie w ramach projektu Green kompilatora języka Oak (Object Application Kernel) 3
Historia języka Java 1994 - zakończenie prac nad przeglądarką WWW o nazwie WebRunner napisaną w języku Oak; nazwę WebRunner zmieniono później na HotJava 1995 - zmiana nazwy Oak na Java i oficjalna prezentacja języka na pokazie Sun World 95 4
Cechy języka Java język kompilowany do postaci kodu pośredniego (bajtowego) kod pośredni wykonywany przez maszynę wirtualną przenośność, niezależność od architektury i systemu operacyjnego zorientowanie obiektowe 5
Cechy języka Java jednokrotne dziedziczenie silna kontrola typów brak samodzielnych funkcji zewnętrznych tj. definiowanych poza klasami obsługa błędów poprzez wyjątki wymuszana przez kompilator 6
Cechy języka Java brak jawnych operacji na wskaźnikach pamięci bezpieczne konwersje w fazie wykonywania programu zarządzanie pamięcią, odzyskiwanie nieużytków wielopoziomowe mechanizmy bezpieczeństwa 7
Cechy języka Java wsparcie dla programowania współbieżnego, wielowątkowość wsparcie dla programowania sieciowego i aplikacji rozproszonych wsparcie dla zastosowań multimedialnych 8
Cechy języka Java liczne biblioteki (pakiety) standardowe i zewnętrzne możliwość ładowania klas i pakietów poprzez sieć modularyzacja poprzez mechanizm klas i pakietów 9
Infrastruktura języka Java obiektowy język programowania; pliki źródłowe z programami w języku Java mają po kropce rozszerzenie java biblioteki standardowe języka Java dostarczane razem z implementacją maszyny wirtualnej 10
Infrastruktura języka Java kompilator tłumaczący kod źródłowy programu w języku Java na kod pośredni nazywany kodem bajtowym (byte-code, B-code); pliki wynikowe mają po kropce rozszerzenie class i zawierają po jednej skompilowanej klasie lub interfejsie, pliki wynikowe grupowane są w logicznie powiązane całości tworzące program lub bibliotekę dzięki mechanizmowi pakietów; 11
Infrastruktura języka Java maszyna wirtualna Javy (JVM, Java Virtual Machine), wirtualny (programowy) procesor, który wykonuje kod pośredni ładowany z plików class lub archiwów z lokalnego systemu plików lub poprzez sieć 12
Infrastruktura języka Java maszyna wirtualna implementowana jest jako samodzielnie uruchamiany program lub wbudowywana np. w przeglądarkę WWW albo w system operacyjny (statycznie jako moduł lub biblioteka łączona dynamicznie) 13
Infrastruktura języka Java Podstawowa wersja środowiska Javy dostarczana jest przez firmę Sun Microsystems w postaci pakietu narzędzi Java 2 Software Developers Kit Standard Edition (Java 2 SDK SE) Zestaw przygotowywany jest dla różnych systemów operacyjnych Dawniej nazywany był Java Developers Kit (JDK) 14
Infrastruktura języka Java istnieje rozbudowana wersja pakietu - Enterprise Edition - zawierająca dodatkowe narzędzia oraz biblioteki środowisko zawierające tylko implementację maszyny wirtualnej dla określonego systemu operacyjnego i biblioteki standardowe Javy, bez narzędzi programistycznych, nazywane jest Java Runtime Environment i służy tylko do uruchamiania programów utworzonych w Javie 15
Maszyna wirtualna Javy w zestawie J2SDK kompilatorem jest program o nazwie javac (Java Compiler) pliki wynikowe mogą być pogrupowane logicznie w pakiet, który fizycznie może być zlokalizowany w pewnej drzewiastej strukturze katalogowej pakiet może być zarchiwizowany do formatu zip lub jar np. za pomocą programu narzędziowego jar dostarczanego w zestawie J2SDK 16
Maszyna wirtualna Javy 17
Programy w języku Java aplety - małe programy z interfejsem graficznym uruchamiane przez przeglądarkę WWW z wbudowaną obsługą Javy lub specjalną przeglądarkę apletów o nazwie appletviewer dostarczaną w pakiecie J2SDK; informacja o tym skąd i jaki plik class lub jar załadować wbudowywana jest w stronę WWW w postaci specjanego znacznika HTML, który dodatkowo może zawierać parametry uruchomieniowe apletu, 18
Programy w języku Java aplikacje - graficzne lub tekstowe programy uruchamiane przez maszynę wirtualną pracującą z poziomu systemu operacyjnego; implementacją maszyny wirtualnej w pakiecie J2SDK jest program java uruchamiany z linii komend wraz z parametrem określającym plik class lub jar w lokalnym systemie plików, od którego zaczyna się wykonywanie aplikacji 19
Programy w języku Java serwlet - program wykonywany po stronie serwera midlet - program wykonywany w urządzeniu przenośnym 20
Aplikacja jedna z klas musi zawierać metodę public static void main(string[ ] args) jeśli jest to klasa publiczna, nazwa tej klasy musi być taka sama jak nazwa pliku, w której jest zdefiniowana po kompilacji pliku źródłowego.java do Bkodu (polecenie javac) powstają pliki.class (dla każdej klasy osobny plik) 21
Aplikacja poleceniem java klasa.class zostaje załadowana przez JVM (Java Virtual Machine) i sterowanie zostaje przekazane do metody main( ), gdzie zaczyna się życie : tworzenie obiektów, odwołania do innych klas aplikacji 22
Aplikacja class Aplikacja1 { public static void main(string[] args) { System.out.println("Hello World!"); } } 23
Aplikacja Przy założeniu, że kod aplikacji zapisany został w pliku Aplikacja1.java kompilujemy go kompilatorem javac wydając polecenie: javac Aplikacja1.java 24
Aplikacja W wyniku kompilacji otrzymamy plik z kodem pośrednim Aplikacja1.class który możemy uruchomić wykorzystując interpreter java java Aplikacja1 25
Aplet import java.applet.*; import java.awt.*; public class Aplet1 extends Applet { public void init() { add(new Label( Hello world )); } } 26
Aplet Jeżeli kod źródłowy zapisany został w pliku Aplet1.java to kompilujemy go kompilatorem javac poleceniem: javac Aplet1.java 27
Aplet Po poprawnej kompilacji utworzony zostanie plik z kodem pośrednim Aplet1.class odwołanie do tego pliku umieszczamy w kodzie HTML przykładowej strony WWW za pomocą znacznika <applet> 28
Aplet <html> <head> <title>aplet1</title></head> <body> <applet code="aplet1.class" width="400" height="200"> </applet> </body> </html> 29
Aplet Jeżeli kod HTML strony WWW został zapisany w pliku Aplet1.html to działanie apletu możemy sprawdzić ładując stronę do przeglądarki lub korzystając z interpretera appletviewer poprzez podanie komendy: appletviewer Aplet1.html 30
AppletViewer 31
Widok w przeglądarce 32
Maszyna wirtualna Javy Wyszukiwaniem i ładowaniem plików zawierających kod pośredni zajmuje się moduł ładujący (byte-code loader, classloader) klasy, o ile to możliwe, ładowane są w pierwszej kolejności z lokalnego systemu plików a następnie z sieci 33
Maszyna wirtualna Javy Przed rozpoczęciem wykonywania załadowanego kodu bajtowego jest on sprawdzany przez weryfikator w czterech etapach weryfikacja pliku klasy: weryfikacja sygnatury pliku i jego struktury weryfikacja tworzenia podklas, stałych, wskaźników do obszarów pamięci 34
Maszyna wirtualna Javy weryfikacja kodu bajtowego: analiza metod, kontrola argumentów, inicjalizacji zmiennych, analiza stosu argumentów, badanie możliwości wystąpienia nadmiaru i niedomiaru podczas operacji arytmetycznych sprawdzenie podczas wykonania typu danych oraz dostępu: analiza poziomów dostępu do składowych prywatnych i chronionych 35
Maszyna wirtualna Javy Maszyna wirtualna może zawierać zintegrowany kompilator JIT, który "w locie" (Just-In-Time) generuje kod wykonywalny specyficzny dla danego komputera na podstawie kodu pośredniego. Przy pierwszym uruchomieniu kod pośredni trafia wprost do interpetera, ale jest kompilowany i zapamiętywany w postaci kodu wynikowego. Kolejne odwołanie do tego kodu powoduje, że wykorzystywany jest kod wynikowy, co przyśpiesza działanie programu nawet 20-krotnie. 36
Maszyna wirtualna Javy menedżer bezpieczeństwa jest klasą implementującą powłokę ochronną w układzie maszyna wirtualna/przeglądarka określa i nadzoruje politykę dostępu przeglądarki do zasobów lokalnych i sieciowych 37
Maszyna wirtualna Javy menedżer bezpieczeństwa musi wyrazić zgodę na uzyskanie przez aplet dostępu do następujących zasobów: komunikacji sieciowej, danych w lokalnym systemie plików, procesów systemu operacyjnego, modułu ładowania, bibliotek Javy 38
Maszyna wirtualna Javy przy standardowych ustawieniach aplety załadowane przez sieć nie mają np. dostępu do lokalnego systemu plików i mogą nawiązywać połączenia sieciowe tylko z serwerem, z którego zostały załadowane. aplikacje nie podlegają tym ograniczeniom i mogą uzyskiwać dostęp do dowolnych zasobów lokalnych i sieciowych 39
Maszyna wirtualna Javy Obiekty, do których nie istnieją w programie żadne odwołania (referencje), są usuwane przez moduł czyszczenia pamięci (garbage collector) implementowany jako osobny wątek sterowania o niskim priotytecie. Może być on uaktywniony: synchronicznie - gdy brakuje pamięci lub na żądanie programu, asynchronicznie - gdy system nie wykonuje żadnych działań na rzecz programu 40
Pakiet Java 2 SDK wersję pakietu Java 2 Software Developers Kit Standard Edition można pobrać ze stron WWW firmy Sun Microsystems pod adresem http://java.sun.com 41
Struktura pakietu Java 2 SDK instalator umieszcza pliki pakietu w podkatalogach katalogu instalacyjnego standardowo jest to podkatalog o nazwie jdknumer-wersji tworzony we wskazanym katalogu 42
Struktura pakietu Java 2 SDK 43
W momencie uruchamiania programów Javy, maszyna wirtualna poszukuje klas do załadowania kolejno w następujących miejscach wśród klas rozruchowych (bootstrap classes) w archiwach rt.jar i i18n.jar z katalogu jdk/jre/lib, wśród zainstalowanych rozszerzeń (installed extensions) tj. klas zawartych w plikach jar lub zip z katalogu jdk/jre/lib/ext, wśród klas użytkownika z katalogów i plików jar lub zip wskazanych przez zmienną środowiskową CLASSPATH lub opcję -classpath interpretera (katalog aktualny zawsze dołączany jest do listy katalogów z klasami użytkownika). 44
Podstawowe narzędzia pakietu Nazwa Opis javac kompilator Javy; przetwarza kod źródłowy programu w Javie na kod pośredni java interpreter aplikacji Javy; uruchamia kod bajtowy aplikacji Javy bezpośrednio z plików klasowych class appletviewer Interpreter apletów Javy; uruchamia aplety Javy zawarte w dokumentach HTML. 45
Podstawowe narzędzia pakietu Nazwa Opis javadoc generator dokumentacji; tworzy dokumentację w języku HTML na podstawie plików źródłowych i specjalnych komentarzy dokumentacyjnych, plików z kodem pośrednim wykorzystywanych klas i dodatkowych plików z informacjami dostarczonymi przez programistę 46
Podstawowe narzędzia pakietu Nazwa Opis jar archiwizator Javy; pozwala tworzyć i zarządzać archiwami w formacie jar jdb debuger Javy; pozwala na wykonywanie programu krok po kroku po jednej linii na raz, przy jednoczesnym śledzeniu stanu zmiennych. extcheck weryfikator rozszerzeń; sprawdza poprawność zainstalowanych rozszerzeń pod kątem konfliktów wersji i nazw 47
Podstawowe narzędzia pakietu Nazwa Opis javap Disasembler Javy; odtwarza kod źródłowy na podstawie kodu pośredniego z pliku klasowego class javah Generator plików w języku C; tworzy pliki nagłówkowe.h i źródłowe.c, które mogą być wykorzystane w programach w języku C wywołujących procedury w Javie lub do pisania procedur w C wykorzystywanych przez programy w Javie 48
Podstawowe narzędzia pakietu Ścieżka (bezwględna) do katalogu jdk/bin powinna być umieszczona w zmiennej systemowej PATH 49
javac - kompilator Składnia wywołania: javac [opcje] [pliki-źródłowe] [@plik-z-listąplików-źródłowych] pliki źródłowe z rozszerzeniem java mogą być wymienione w linii komend lub zebrane w listę rozdzieloną odstępami i/lub znakami nowego wiersza zapisaną w pliku, którego nazwa podawana jest po znaku @ 50
javac - kompilator w wyniku kompilacji powstają pliki z kodem pośrednim o rozszerzeniu class. każdy plik class zawiera jedną skompilowaną klasę lub interfejs program w języku Java jest zbiorem definicji klas i interfejsów 51
javac - kompilator Program w języku Java może być zapisany w jednym pliku lub w wielu plikach przy czym: w jednym pliku źródłowym może znajdować się co najwyżej jedna klasa publiczna jeżeli plik źródłowy zawiera definicję klasy publicznej, to jego nazwa musi być identyczna z nazwą tej klasy (wielkość liter jest istotna). 52
javac - kompilator 53
javac - kompilator 54
Ważniejsze opcje kompilatora javac classpath lista-ścieżek-do-katalogów-i- archiwów opcja wskazuje położenia plików jar, zip i katalogów z klasami i interfejsami użytkownika, potrzebnymi do przeprowadzenia kompilacji separatorem listy jest separator ścieżek systemu operacyjnego opcja zastępuje ustawienia zmiennej CLASSPATH jeżeli nie jest ustawiona zmienna CLASSPATH i nie podano opcji -classpath to domyślnie przyjmowany jest katalog aktualny 55
Ważniejsze opcje kompilatora javac sourcepath archiwów lista-ścieżek-do-katalogów-i- opcja wskazuje położenia plików jar, zip i katalogów z klasami i interfejsami użytkownika w wersji źródłowej, potrzebnymi do przeprowadzenia kompilacji separatorem listy jest separator ścieżek systemu operacyjnego jeżeli opcja -sourcepath nie została podana, to wykorzystywane są ścieżki ustawione w zmiennej CLASSPATH lub za pomocą opcji -classpath 56
java - interpreter aplikacji Składnia wywołania: java [opcje] nazwa-klasy [argumenty] jako parametr podawana jest nazwa klasy (bez rozszerzenia class), od której zaczyna się wykonanie aplikacji. Klasa taka nazywana jest klasą startową 57
java - interpreter aplikacji java [opcje] -jar plik.jar [argumenty] wskazywany jest plik archiwum z rozszerzeniem jar, który zawiera klasę startową, inne klasy aplikacji oraz pliki zasobów (grafiki, dźwięki i.t.p.). 58
appletviewer - interpreter apletów Składnia wywołania: appletviewer [opcje] url interpreter apletów pozwala uruchamiać aplety bez korzystania z przeglądarki WWW jako parametr podawany jest url strony WWW jeśli w stronę WWW wbudowanych jest kilka apletów, to dla każdego z nich otwierane jest osobne okno interpretera 59
Pakiet pakiet jest mechanizmem łączenia w pewną całość logicznie powiązanych klas i interfejsów zapewniania kontrolę dostępu do klas i interfejsów oraz ich składowych pozwala unikać kolizji nazw biblioteki Javy zorganizowane są w pakiety 60
Pakiet Przynależność klas i interfejsów zdefiniowanych w danym pliku do konkretnego pakietu możemy określić podając jako pierwszy wpis w pliku źródłowym deklarację pakietu package nazwa-pakietu; dalsza-część-plikuźródłowego 61
Pakiet pakiety mogą zawierać podpakiety i tworzyć hierarchie zorganizowaną w strukturę drzewa struktura ta jest mapowana na strukturę katalogów katalogi zawierają skompilowane pliki klas i interfejsów 62
Pakiet 63
Pakiet programy mogą wykorzystywać klasy i interfejsy z istniejących pakietów deklarując ich import można importować wszystkie klasy i interfejsy danego pakietu podając w deklaracji importu symbol * na końcu nazwy pakietu 64
Pakiet deklaracja z symbolem* oznacza, że wykorzystane zostaną z danego pakietu tylko te definicje klas i interfejsów, które są niezbędne do skompilowania i uruchamiania programu jeśli nie podano żadnej deklaracji importu, to i tak domyślnie zawsze importowany jest pakiet java.lang.* 65
Przykładowe pakiety platformy Java 2 Nazwa Opis java.lang podstawowe klasy jezyka np. Object, String java.applet tworzenie apletów java.awt składniki GUI java.io strumienie we/wy i pliki java.net obsługa sieci java.util klasy użytkowe, specjalne struktury danych 66