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