Java

advertisement
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
Download