JAVA · 2016-11-17 · 3 Historia języka Java Język Java został opracowany w laboratoriach firmy...

Post on 20-Feb-2020

7 views 0 download

Transcript of JAVA · 2016-11-17 · 3 Historia języka Java Język Java został opracowany w laboratoriach firmy...

JAVA

Tomasz Grzywaczt.grzywacz@iel.waw.pl

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