JAVA Tomasz Grzywacz [email protected] 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