Upload
others
View
5
Download
0
Embed Size (px)
Citation preview
JAVA
Tomasz [email protected]
2
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
3
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)
4
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
5
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
6
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
7
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
8
Cechy języka Java
wsparcie dla programowania współbieżnego, wielowątkowość
wsparcie dla programowania sieciowego i aplikacji rozproszonych
wsparcie dla zastosowań multimedialnych
9
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
10
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
11
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;
12
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ć
13
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)
14
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)
15
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
16
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
17
Maszyna wirtualna Javy
18
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,
19
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
20
Programy w języku Java
serwlet - program wykonywany po stronie serwera
midlet - program wykonywany w urządzeniu przenośnym
21
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 B-kodu (polecenie javac) powstają pliki .class (dla każdej klasy osobny plik)
22
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
23
Aplikacja
class Aplikacja1 {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
24
Aplikacja
Przy założeniu, że kod aplikacji zapisany został w pliku
Aplikacja1.java
kompilujemy go kompilatorem javac wydając polecenie:
javac Aplikacja1.java
25
Aplikacja
W wyniku kompilacji otrzymamy plik z kodem pośrednim
Aplikacja1.class
który możemy uruchomić wykorzystując interpreter java
java Aplikacja1
26
Aplet
import java.applet.*;
import java.awt.*;
public class Aplet1 extends Applet {
public void init() {
add(new Label(„Hello world”));
}
}
27
Aplet
Jeżeli kod źródłowy zapisany został w pliku
Aplet1.java
to kompilujemy go kompilatorem javac poleceniem:
javac Aplet1.java
28
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>
29
Aplet
<html> <head> <title>Aplet1</title></head> <body> <applet code="Aplet1.class" width="400"
height="200"> </applet> </body> </html>
30
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
31
AppletViewer
32
Widok w przeglądarce
33
Maszyna wirtualna Javy
Wyszukiwaniem i ładowaniem plików zawierających kod pośredni zajmuje się moduł ładujący (byte-code loader, class-loader)
klasy, o ile to możliwe, ładowane są w pierwszej kolejności z lokalnego systemu plików a następnie z sieci
34
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
35
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
36
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.
37
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
38
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
39
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
40
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
41
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
42
Struktura pakietu Java 2 SDK
instalator umieszcza pliki pakietu w podkatalogach katalogu instalacyjnego
standardowo jest to podkatalog o nazwie jdk-numer-wersji tworzony we wskazanym katalogu
43
Struktura pakietu Java 2 SDK
44
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).
45
Podstawowe narzędzia pakietu
Interpreter apletów Javy; uruchamia aplety Javy zawarte w dokumentach HTML.
appletviewer
interpreter aplikacji Javy; uruchamia kod bajtowy aplikacji Javy bezpośrednio z plików klasowych class
java
kompilator Javy; przetwarza kod źródłowy programu w Javie na kod pośredni
javac
OpisNazwa
46
Podstawowe narzędzia pakietu
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ę
javadoc
OpisNazwa
47
Podstawowe narzędzia pakietu
weryfikator rozszerzeń; sprawdza poprawność zainstalowanych rozszerzeń pod kątem konfliktów wersji i nazw
extcheck
debuger Javy; pozwala na wykonywanie programu krok po kroku po jednej linii na raz, przy jednoczesnym śledzeniu stanu zmiennych.
jdb
archiwizator Javy; pozwala tworzyć i zarządzać archiwami w formacie jar
jar
OpisNazwa
48
Podstawowe narzędzia pakietu
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
javah
Disasembler Javy; odtwarza kod źródłowy na podstawie kodu pośredniego z pliku klasowego class
javap
OpisNazwa
49
Podstawowe narzędzia pakietu
Ścieżka (bezwględna) do katalogu jdk/bin powinna być umieszczona w zmiennej systemowej PATH
50
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 @
51
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
52
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).
53
javac - kompilator
54
javac - kompilator
55
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
56
Ważniejsze opcje kompilatora javac
sourcepath 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 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
57
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ą
58
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.).
59
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
60
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
61
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
62
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
63
Pakiet
64
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
65
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.*
66
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