Podstawy j
ęzyka Java 2
1
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
Podstawy j
ęzyka JAVA
Spis tre
ści:
1. Wstęp do programowania w języku Java............................................................. 2
1.1
Historia ......................................................................................................... 2
1.2
Aplety i aplikacje ........................................................................................... 2
1.3
Pakiet JDK (Java Developers Kit)................................................................. 2
1.4
Uruchomienie programu ............................................................................... 5
2. Instrukcje, wyrażenia, zmienne i typy danych ...................................................... 6
2.1
Instrukcje i wyra
żenia ................................................................................... 6
2.2
Tworzenie zmiennych ................................................................................... 6
2.3
Typy zmiennych:........................................................................................... 6
2.4
Litera
ły .......................................................................................................... 7
2.5
Operatory...................................................................................................... 8
2.6
Instrukcje przypisania ................................................................................... 9
2.7
Operacje na
łańcuchach: .............................................................................. 9
3. Obiekty w języku Java ....................................................................................... 10
3.1
Wst
ęp do obiektów ..................................................................................... 10
3.2
Tworzenie klas............................................................................................ 11
3.3
Tworzenie metod ........................................................................................ 12
3.4
Dziedziczenie.............................................................................................. 16
3.5
Tworzenie nowych obiektów, konstruktory ................................................. 18
3.6
Przes
łanianie metod ................................................................................... 21
3.7
Dost
ęp do zmiennych klasy i zmiennych obiektu........................................ 22
3.8
Odwo
łania do obiektów............................................................................... 22
3.9
Rzutowanie i konwersja .............................................................................. 24
3.10 Porównywanie obiektów ............................................................................. 25
4. Tablice ............................................................................................................... 26
4.1
Deklaracja zmiennej tablicowej................................................................... 26
4.2
Tworzenie obiektów tablicowych................................................................. 26
4.3
Odwo
łąnie do elementów tablic .................................................................. 28
4.4
Tablice wielowymiarowe ............................................................................. 29
5. Instrukcje sterujące ............................................................................................ 30
5.1
Polecenia blokowe...................................................................................... 30
5.2
Instrukcja warunkowa if .............................................................................. 30
5.3
Instrukcja warunkowa switch ...................................................................... 31
5.4
P
ętla for ...................................................................................................... 32
5.5
P
ętle while i do............................................................................................ 32
5.6
Przerywanie dzia
łania pętli, instrukcje break i continue.............................. 33
6. Pakiety ............................................................................................................... 36
6.1
Poj
ęcie pakietu ........................................................................................... 36
6.2
Udost
ępnianie pakietów.............................................................................. 36
6.3
Lokalizacja klas........................................................................................... 37
6.4
Modyfikatory dost
ępności ........................................................................... 38
7. Wyjątki ............................................................................................................... 39
7.1
Hierarchia wyj
ątków.................................................................................... 39
7.2
Obs
ługa wyjątków – klauzula catch ............................................................ 40
7.3
Generowanie wyj
ątków............................................................................... 43
8. Literatura............................................................................................................ 46
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
2
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
1. Wst
ęp do programowania w języku Java
1.1 Historia
J
ęzyk powstał około roku 1995 w firmie Sun i był pierwotnie przeznaczony do
programowania systemów wbudowanych. Mia
ł zapewnić przenośność
oprogramowania. Wywodzi si
ę z C++ z którego wyeliminowano konstrukcje
potencjalnie prowadz
ące do błędów. Zyskał popularność dzięki zastosowaniom
sieciowym.
kompilacja
wykonanie
kod bajtowy
kod
źródowy
naszyna wirtualna
Kompilator
prog.java
prog.class
Cechy jezyka Java:
1. Bezpiecze
ństwo – class loader, byte code verifier, security manager.
2. Otwarte standardy i przeno
śność - Java Core API (API - Aplication
Programming Interface).
3. Wieloplatformowo
ść (od urządzeń wbudowanych do serwerów).
4. J
ęzyk zorientowany obiektowo.
5. Wielow
ątkowość.
6. Wsparcie dla aplikacji sieciowych rozproszonych.
1.2 Aplety i aplikacje
Programy w Javie dziel
ą się na dwie grupy:
1. Aplikacje – wykonywane
środowisku systemu operacyjnego
2. Aplety - programy osadzone w dokumencie WWW i wykonywane w
środowisku przeglądarki.
1.3 Pakiet JDK (Java Developers Kit)
Aby tworzy
ć aplikacje w Javie należy dysponować odpowiednim oprogramowaniem
narz
ędziowym. Jest to Pakiet JDK (Java Developers Kit) który można sciągnąć z
witryny firmy Sun (
).
Plik dla wersji 1.4.2 dla Windows: j2sdk-1_4_2_02-windows-i586-p.exe
Instalacja: uruchomienie programu: j2sdk-1_4_2_02-windows-i586-p.exe
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
3
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
Konfiguracja:
1.
Zmienna
środowiska PATH powinna zawierać katalog w którym umieszczone
s
ą programy wykonywalne pakietu:
Path=C:\ProgramFiles\j2sdk\bin;...;
2.
Zmienna
środowiska CLASSPATH powinna być usunięta lub zawierać katalog
...\j2sdk\lib\tools.jar
Program
Opis
javac
Kompilator Javy – przetwarza plik
żródłowy prog.java na kod
bajtowy prog.class
java
Interpreter javy (maszyna wirtualna) – uruchamia i wykonuje kod
bajtowy prog.class
jdb
Program uruchomieniowy (debugger) - wykonuje kod bajtowy
prog.class w trybie sprawdzania
javadoc
Program dokumentacyjny – przetwarza plik
żródłowy prog.java na
plik dokumentacyjny w formacie HTML.
javah
Generuje pliki nag
łówkowe do C, C++
apletviewer
Interpreter Javy – uruchamia aplety Javy z plików HTML
javap
Dissasembler Javy
Tabela 1-1 Podstawowe narz
ędzia pakietu JDK
Edytor
javac
javah
javadoc
prog.java
naszyna
wirtualna
Kompilator
kod
źródowy
kod bajtowy
prog.class
javac
wej
ście
wyj
ście
dokumentacja
w HTML
pliki
naglówkowe
C, C++
jdb
debugger
Rys. 1-1 Tworzenie aplikacji w pakiecie JDK
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
4
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
Edytor
javac
javah
javadoc
prog.java
plik
sieciowy
lub lokalny
Kompilator
kod
źródowy
kod bajtowy
prog.class
dokumentacja
w HTML
pliki
naglówkowe
C, C++
Edytor
dokument
HTML
przegl
ądarka
Ekran
Rys. 1-2 Tworzenie apletów w pakiecie JDK
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
5
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
1.4 Uruchomienie programu
1. Utworzy
ć plik Hello.java dowolnym edytorem tekstu np. programem notepad i
zapisa
ć go w jakimś katalogu np. C:\java\prog
class Hello {
public static void main(String args[]) {
System.out.println("Pierwszy program w Javie!");
}
}
Przyk
ład 1-1 Pierwszy program w Javie – Hello.java
2. Uruchomi
ć okno poleceń MS-DOS poprzez Programy / Uruchom i wpisanie
polecenia:
cmd
3. Zmieni
ć katalog bieżący na:
C:\java\prog
4. Uruchomi
ć kompilator poprzez polecenie:
javac Hello.java
5. Uruchomi
ć interpreter:
java Hello
Przyk
ład 1-2 Uruchomienie programu Hello.java
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
6
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
2. Instrukcje, wyra
żenia, zmienne i typy danych
2.1 Instrukcje i wyra
żenia
Instrukcja – polecenie powoduj
ące wykonanie pewnej czynności. Instrukcja jest
zako
ńczona średnikiem.
System.out.printl(”JAVA”);
Blok – grupa instrukcji zamkni
ęta w nawiasach klamrowych.
{ instr1; instr2; ... ,instrN}
Wyra
żenie – polecenie które zwraca pewną wartość (numeryczną, logiczną)
Komentarz – dodatkowa informacja zamieszczona w kodzie
żródłowym ignorowana
przez kompilator.
Zmienne – obszary w pami
ęci do przechowywania informacji. Zawartość zmiennej
mo
że się w trakcie działania programu zmieniać. Zmienna ma nazwę i wartość
2.2 Tworzenie zmiennych
Przy tworzeniu zmiennych musi by
ć podany typ i ewentualnie wartość początkowa.
int masa = 10;
Nazwa zmiennej w JAVA musi rozpoczyna
ć się od litery, znaku podkreślenia _ lub
dolara $. J
ęzyk JAVA wykorzystuje zestaw znaków Unicode.
Poza nazw
ą zmiennej należy określić jej typ.
2.3 Typy zmiennych:
W j
ęzyku JAVA występują następujące typy zmiennych
1. Typ elementarny (pierwotnie zdefiniowany)
2. Nazwa klasy lub interfejsu
3. Tablica
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
7
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
byte
8
-128
+127
short
16
-2
15
(-32,768)
+2
15
-1 (32,767)
int
32
-2
31
(-2,147,483,648) +2
31
-1 (2,147,483,647)
long
64
-2
63
+2
63
-1
char
16
Unicode 0
Unicode 2
16
-1
boolean 8
false
true
float
32
32-bit IEEE 754 floating-point numbers
double
64
64-bit IEEE 754 floating-point numbers
void
Tabela 2-1 Typy elementarne
Zmienna ustalona – (sta
ła) wartość jej nie ulega zmianie podczas wykonywania
programu. Oznaczana s
łowem kluczowym
final
. Stosowana do polepszenia
czytelno
ści kodu.
final int wymiar = 8;
2.4 Litera
ły
Litera
ł – Liczba, tekst lub inna informacja reprezentująca ustaloną wartość.
123L
long
0777
ósemkowa
0xF2
szesnastkowa
12.4
double
Tabela 2-2 Litera
ły numeryczne
Litera
ły boolean: true i false
Litera
ły znakowe: znak ujęty w apostrofy np. ‘x’
Litera
ły znakowe mogą być znakami specjalnymi.
\n
Nowa linia
\r
Pocz
ątek wiersza
\xd
Liczba HEX
\ud
Znak w unicode
Tabela 2-3 Znaki specjalne
Litera
ły łańcuchowe: ciąg znaków ujetych w cudzysłów np. ”napis w java”
Litera
ły łańcuchowe przechowywane w obiektach typu String.
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
8
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
2.5 Operatory
Operatory – symbole specjalne stosowane do wykonywania dzia
łań arytmetycznych,
niektórych przypisa
ń i porównań logicznych
+
Dodawanie
-
Odejmowanie
*
Mno
żenie
/
Dzielenie
%
Dzielenie modulo
Tabela 2-4 Operatory arytmetyczne
Inkrementacja: z = ++x; z = x++;
Dekrementacja: z = - -x; z = x--;
int x,y,z;
z = (x * y) +2;
==
Równe
!=
Ró
żne
<
Mniejsze
>
Wi
ększe
<=
Mniejsze lub równe
>=
Wi
ększe lub równe
Tabela 2-5 Operatory porównania
Wynik operatora porównania – true albo false
If(x<=j) y = 2; else y = 13;
AND
& lub &&
OR
| lub ||
XOR
^
NOT
!
Tabela 2-6 Operatory logiczne
Priorytety operatorów:
1. Inkrementacja i dekrementacja
2. Operacje arytmetyczne
3. Porównania
4. Operacje logiczne
5. Operacje przypisania
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
9
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
2.6 Instrukcje przypisania
Zmienna = warto
ść;
x = 3;
a = b = c = 33;
x+=y
x = x + y
x-=y
x = x - y
x*=y
x = x * y
x/=y
x = x / y
2.7 Operacje na
łańcuchach:
Operator + ma podwójne znaczenie. Oznacza te
ż konkatenację łańcuchów.
Je
żeli jakikolwiek element konkatenacji jest typu String to pozostałe elementy będą
te
ż traktowane jako łańcuchy.
System.out.println("Sum = " + sum);
public class BasicDemo {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 10; i++) {
sum += i;
System.out.println(" i=" + i + " sum= " + sum);
}
System.out.println("Sum = " + sum);
}
}
Przyk
ład 2-1 Operacje na łańcuchach
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
10
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
3. Obiekty w j
ęzyku Java
W j
ęzyku Java prawie wszystko wykonywane jest prze pomocy obiektów
3.1 Wst
ęp do obiektów
W j
ęzyku C, Pascalu i innych definiowane są struktury
struct Osoba {
int pesel;
int rok_urodzenia;
String nazwisko;
String imie;
}
struct kowalski;
kowalski.pesel = 65112300234;
Struktura jest szablonem wedle którego mo
żna utworzyć nową zmienną. Nie określa
jednak dzia
łań na zmiennych. Obiekt definiuje zarówno zmienne jak i działające na
nich procedury.
Obiekt (ang. object) – element programu grupuj
ący zbiór cech (atrybutów) i
wykonywanych na nich dzia
łań (metod). Konkretny obiekt nazywa się instancją klasy.
Klasa (ang. class) – szablon za pomoc
ą którego tworzy się obiekty.
Atrybuty – informacje opisuj
ące cechy obiektu. Atrybuty są zmiennymi.
Zmienne instancji (zmienne obiektowe) – okre
ślają atrybuty danego obiektu. Dla
ró
żnych obiektów mają różne wartości.
Zmienna klasowa – okre
śla atrybut całej klasy. Dla wszystkich instancji klasy ma ona
jednakow
ą wartość.
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
11
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
Metoda – grupa powi
ązanych ze sobą działań na atrybutach. Odpowiada funkcji w
proceduralnym j
ęzyku programowania.
3.2 Tworzenie klas
Definicja klasy rozpoczyna si
ę od słowa kluczowego class po którym następuje
nazwa klasy i dalej cia
ło klasy.
class nazwa_klasy {
// Cia
ło klasy
}
Cia
ło klasy składa się z:
1. Zmiennych
2. Metod
3.2.1 Tworzenie zmiennych
Zmienne dziel
ą się na:
1. Obiektowe - indywidualne dla obiektu
2. Klasowe
- jedna kopia dla wszystkich obiektów klasy
3. Lokalne
- indywidualne dla bloku
Zmienne obiektowe
Zmienne obiektowe s
ą to zmienne zdefiniowane w danej klasie, nie poprzedzone
s
łowem
static
i zdefiniowane poza metodami.
Wed
ług zwyczajowej konwencji deklarowane na początku klasy.
Zmienne klasowe
Odnosz
ą się do klasy jako całości a nie do utworzonych z niej obiektów. Zmienne
klasowe maj
ą jednakową wartość dla wszystkich obiektów klasy. Wykorzystywane są
do:
1. Komunikacji pomi
ędzy obiektami danej klasy
2. Przechowuj
ą dane wykorzystywane przez wszystkie obiekty.
Aby zadeklarowa
ć zmienną klasową należy ją poprzedzić słowem kluczowym
static
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
12
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
class Osoba {
int pesel;
int rok_urodzenia;
String nazwisko;
String imie;
Osoba(int pes) {
...
}
}
3.3 Tworzenie metod
Metody wykonuj
ą działanie na zmiennych. Definicja metody składa się z:
1. Typu zwracanego przez metod
ę.
2. Nazwy metody
3. Listy parametrów
4. Cia
ła metody
typ_zwracany nazwa_metody(typ1 arg1, typ2 arg2,...) {
// Cia
ło metody
zmienne;
instrukcje;
}
Cia
ło metody może zawierać:
1. Deklaracje zmiennych lokalnych
2. Instrukcje (
for, while, do – while, if, switch, ....
)
3. Wyra
żenia
4. Wywo
łania innych metod
Warto
ść zwracana musi być wymieniona po słowie kluczowym
return
.
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
13
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
class Osoba {
int pesel;
int rok_urodzenia;
String nazwisko;
String imie;
Osoba(int pes) {
pesel = pes;
nazwisko = "?";
imie = "?";
}
int drukuj_dane() {
System.out.println("Pesel: "+pesel);
System.out.println("Nazwisko: "+nazwisko);
System.out.println("Imi
ę: "+imie);
}
}
Przyk
ład 3-1 Klasa Osoba – program osoba.java
3.3.1 S
łowo kluczowe this
Podczas tworzenia metod czasami wyst
ępuje potrzeba odwołania się do zmiennych
lub metod tego samego obiektu. Stosuje si
ę wtedy słowo kluczowe
this
.
S
łowo kluczowe
this
odnosi si
ę zawsze do bieżącego obiektu i można go używać
tam gdzie wyst
ępują odwołania do obiektu.
class Osoba {
int pesel;
String imie;
zmienImie(String imie) {
this.imie = imie;
}
...
}
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
14
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
3.3.2 Przekazywanie parametrów do metod
Parametry metody mog
ą być:
1. Obiektami
2. Typami elementarnymi
Je
żeli do metody przekazywany jest obiekt to w istocie przekazywane jest do niego
odniesienie. Zatem modyfikacja obiektu w metodzie modyfikuje obiekt pierwotny
(tablice s
ą też obiektami).
Je
żeli do metody jako parametr przekazywany jest typ elementarny to przekazywany
jest on przez warto
ść. Modyfikacja parametru w metodzie nie przenosi się na
zewn
ątrz.
3.3.3 Metody klasowe
Metody klasowe tworzy si
ę poprzedzając jej deklaracje słowem kluczowym
static
.
Wykonanie metody klasowej nie wymaga utworzenia instancji klasy (obiektu)
zawieraj
ącej tę metodę.
Metody klasowe s
ą dostępne w innych klasach.
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
15
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
3.3.4 Przeci
ążanie metod
W j
ęzyku Java klasa może zawierać kilka metod o tej samej nazwie ale różniące się
liczb
ą i typem parametrów (polimorfizm). Która z metod będzie wykonana zależy od
sposobu wywo
łania metody – czyli typów i liczby parametrów.
class Osoba {
int pesel;
int rok_urodzenia;
String nazwisko;
String imie;
Osoba(int pes) {
pesel = pes;
nazwisko = "?";
imie = "?";
}
void drukuj(String nazwisko) {
System.out.println("Nazwisko: "+nazwisko);
}
void drukuj(int pesel, String nazwisko) {
System.out.println("Pesel: "+pesel);
System.out.println("Nazwisko: "+nazwisko);
}
}
class osoba4 {
public static void main(String argv[]) {
Osoba klient = new Osoba(123);
klient.drukuj("Kowalski");
klient.drukuj(123,"Kowalski");
}
}
Przyk
ład 3-2 Ilustracja przeciążania metod – program osoba4.java
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
16
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
3.4 Dziedziczenie
Dziedziczenie – tworzenie nowej klasy (podrz
ędnej) na podstawie innej klasy
(bazowej, nadrz
ędnej) w taki sposób że tworzona klasa przejmuje atrybuty i metody
klasy nadrz
ędnej.
Dzi
ęki dziedziczeniu nie trzeba definiować metod i trybutów od nowa gdyż tworzona
klasa przejmuje wszystkie w
łasności klasy nadrzędnej.
W j
ęzyku Java wszystkie klasy są klasami podrzędnymi klasy Object.
Object
Osoba
Dziecko
Uczen
Student
Rysunek 3-1 Hierarchia obiektów
Do tworzenia klasy podrz
ędnej z nadrzędnej używa się słowa kluczowego
extends
.
nowa_klasa extends klasa_nadrz
ędna {
// Cia
ło klasy;
}
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
17
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
class Osoba {
int pesel;
int rok_urodzenia;
String nazwisko;
String imie;
void drukuj_dane() {
System.out.println("Pesel: "+pesel);
System.out.println("Nazwisko: "+nazwisko);
System.out.println("Imie: "+imie);
}
}
class Student extends Osoba {
int indeks;
String wydzia
ł;
void drukuj_dane() {
System.out.println("Pesel: "+pesel);
System.out.println("Nazwisko: "+nazwisko);
System.out.println("Imie: "+imie);
System.out.println("Pesel: "+pesel);
System.out.println("Wydzial "+wydzia
ł);
}
}
class dziedzicz {
public static void main(String arg[]) {
Student stud = new Student();
stud.drukuj_dane();
}
}
Przyk
ład 3-3 Ilustracja dziedziczenia
Przes
łanianie (ang. overriding)
Mo
że się zdarzyć że klasa podrzędna i nadrzędna mają metody o tej samej nazwie.
Wtedy poszukiwanie w
łaściwej metody rozpoczyna się od dołu hierarchii.
Wykonywana jest ta metoda która le
ży najniżej w hierarchii.
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
18
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
Object
Osoba
Dziecko
Uczen
Student
drukuj_dane
drukuj_dane
x.drukuj_dane
3.5 Tworzenie nowych obiektów, konstruktory
Nowe obiekty tworzy si
ę za pomocą operatora
new
.
Po operatorze
new
powinna wyst
ąpić nazwa klasy z której tworzy się obiekt wraz z
par
ą nawiasów. W nawiasach podaje się wartość początkową.
Student stud = new Student();
String nazwa = new String();
Point pt = new Point(0,0);
Liczba i typ argumentów operatora
new
okre
ślona jest przez konstruktor danej klasy.
Podanie nieprawid
łowej liczby lub typów argumentów spowoduje błąd kompilacji.
W momencie wykonywania operatora
new
zachodz
ą następujące działania:
1. Tworzony jest nowy obiekt
2. Przydzielana jest mu pami
ęć
3. Uruchamiany jest konstruktor
Konstruktor – metoda wykorzystywana przy tworzeniu klasy. Pe
łni funkcje:
1. Inicjuj
ą zmienne obiektu
2. Tworz
ą inne obiekty wymagane przez tworzony obiekt
Konstruktor zbudowany jest podobnie jak inne metody. Cechy konstruktora:
1. Zawsze ma tak
ą samą nazwę jak klasa.
2. Nie posiada
żadnego typu
3. Nie zwraca
żadnych argumentów.
4. Konstruktor nie mo
że być wywołany bezpośrednio.
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
19
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
Konstruktor mo
że być wywoływany z różną liczbą argumentów. Stąd należy
zdefiniowa
ć odpowiednią liczbę konstruktorów.
Gdy klasa nie posiada
żadnego zdefiniowanego konstruktora to operator
new
i tak
utworzy obiekt.
class Osoba {
int pesel;
int rok_urodzenia;
String nazwisko;
String imie;
Osoba(int pes) { // Konstruktor
pesel = pes;
nazwisko = "?";
imie = "?";
}
void drukuj_dane() {
System.out.println("Pesel: "+pesel);
System.out.println("Nazwisko: "+nazwisko);
System.out.println("Imie: "+imie);
}
}
class test {
public static void main(String arg[]) {
Osoba kowalski = new Osoba(531221);
kowalski.drukuj_dane();
}
}
Przyk
ład 3-4 Ilustracja konstruktora
Przeci
ążanie konstruktorów
Konstruktory mog
ą się różnić liczbą i typem parametrów.
Przyk
ładowo dla klasy osoba można skonstruować trzy konstruktory:
Osoba(int pes);
Osoba(int pes, String nazwisko);
Osoba(int pes, String nazwisko, String imie);
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
20
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
class Osoba {
int pesel;
int rok_urodzenia;
String nazwisko;
String imie;
Osoba(int pes) { // Konstruktor 1
pesel = pes;
nazwisko = "?";
imie = "?";
}
Osoba(int pes, String nazw) { // Konstruktor 2
pesel = pes;
nazwisko = nazw;
imie = "?";
}
Osoba(int pes, String nazw, String im) {
// Konstruktor 3
pesel = pes;
nazwisko = nazw;
imie = im;
}
void drukuj_dane() {
. . .
}
}
class konstruktor2 {
public static void main(String arg[]) {
Osoba kowalski =
new Osoba(531221,"Kowalski","Zenon");
kowalski.drukuj_dane();
}
}
Przyk
ład 3-5 Przeciążanie konstruktorów – program konstruktor2.java
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
21
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
3.6 Przes
łanianie metod
Gdy wywo
ływana jest metoda dla danego obiektu to interpreter najpierw szuka w
definicji danej klasy, potem w definicji klasy bazowej i tak dalej w gór
ę hierarchii.
Aby wywo
łać przesłoniętą metodę klasy bazowej należy użyć słowa kluczowego
super
.
super.metoda_klasy_bazowej
Przes
łanianie metod pozwala implementować w metodzie przysłaniającej tylko nowe
w
łasności a pozostałe wziąć z metody przesłanianej klasy bazowej.
class Osoba {
int pesel;
int rok_urodzenia;
String nazwisko;
String imie;
void drukuj_dane() {
System.out.println("Pesel: "+pesel);
System.out.println("Nazwisko: "+nazwisko);
System.out.println("Imie: "+imie);
}
}
class Student extends Osoba {
int indeks;
String wydzia
ł;
void drukuj_dane() {
// Odwolanie do klasy bazowej
super.drukuj_dane();
System.out.println("Wydzial "+wydzia
ł);
}
}
class dziedzicz2 {
public static void main(String arg[]) {
Student stud = new Student();
stud.drukuj_dane();
}
}
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
22
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
Przyk
ład 3-6 Wywoływanie metody przesłoniętej program - dziezicz2.java
3.7 Dost
ęp do zmiennych klasy i zmiennych obiektu
Pobieranie warto
ści zmiennej i zmiana wartości:
Notacja z kropk
ą:
Odniesienie_do_obiektu.nazwa_zmiennej
Student stud = new Student();
stud.imie = ”Przemyslaw”;
Zmienne klasy
Gdy zmienna jest zmienn
ą klasy to istnieje jedna jej kopia dla wszystkich
utworzonych z tej klasy obiektów. Warto
ść zmiennej klasowej jest taka sama dla
wszystkich obiektów.
class osoba {
static String ojciec = ”Wladyslaw”;
int wiek;
…
}
Wywo
ływanie metod
Notacja z kropk
ą:
Odniesienie_do_obiektu.nazwa_metody
Student stud = new Student();
stud.drukuj_dane();
Metody klasowe
Metody klasowe (
static
) odnosz
ą się do klasy a nie do poszczególnych obiektów.
3.8 Odwo
łania do obiektów
Obiekty dost
ępne są poprzez odwołania lub odniesienia do obiektów (ang.
references). Podczas operacji przypisywania i przekazywania obiektu jako
argumentu do funkcji nie kopiuje si
ę obiektu ale odniesienie.
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
23
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
import java.awt.Point;
mport java.awt.Point;
class TestOdniesien {
public static void main(String[] arg) {
Point p1,p2;
p1 = new Point(10,10);
p2 = p1;
p1.x = 20;
p1.y = 20;
System.out.println("p1: "+p1.x+" "+p1.y);
System.out.println("p2: "+p2.x+" "+p2.y);
}
}
Program TestOdniesien.java
P1: 20 20
P2: 20 20
Wyniki programu TestOdniesien.Java
p1
p2
x
y
stos
sterta
odniesienie
obiekt
import java.awt.Point;
class TestOdniesien2 {
public static void main(String[] arg) {
Point p1,p2;
p1 = new Point(10,10);
p2 = new Point(20,20);;
System.out.println("p1: "+p1.x+" "+p1.y);
System.out.println("p2: "+p2.x+" "+p2.y);
}
}
Program TestOdniesien2.java
P1: 10 10
P2: 20 20
Wyniki programu TestOdniesien2.Java
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
24
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
p1
p2
x
y
stos
sterta
odniesienie
obiekt
x
y
3.9 Rzutowanie i konwersja
J
ęzyk Java stosuje ścisłą kontrolę typów.
Jedynym wyj
ątkiem jest typ
String
. Gdy stosuje si
ę konkatenację zmiennych i
przynajmniej jedna zmienna jest typu
String
to do tego typu konwertowane s
ą
zmienne pozosta
łe.
System.out.println("p2: "+p2.x+" "+p2.y);
Aby zamieni
ć jeden typ na inny stosuje się rzutowanie (ang. casting).
Rzutowanie – jawna zmiana warto
ści jednego typu na inny.
Rzutowanie typów elementarnych na inne typy elementarne
Dotyczy g
łównie typów numerycznych
Rzutowanie
: (nazwa_typu) warto
ść
Rzutowanie mo
że być:
Bez utraty dok
ładności: byte na int, int na long, int na float, char na int
Z utrat
ą dokładności: int na byte, float na int, itd
float x;
int i;
i = (int) x/3;
Rzutowanie obiektów
Obiekty mog
ą podlegać rzutowaniu gdy pozostają w relacji macierzysty / potomy.
Rzutowanie
: (nazwa_klasy) warto
ść
Gdy rzutujemy klas
ę potomną na macierzystą wynik jest w pełni określony.
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
25
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
3.10 Porównywanie obiektów
Operatory relacji (<, <=, >, >=, ==, !=) maj
ą zastosowanie do typów elementarnych.
Do obiektów mo
żna stosować operatory == i != ale sprawdzają one jedynie czy
odniesienie jest do tych samych obiektów.
Aby porówna
ć wartości dwóch obiektów należy opracować odpowiednie metody.
class porownania {
public static void main(String[] arg) {
String s1,s2;
s1 = "Napis 1";
s2 = s1;
System.out.println("s1: "+s1);
System.out.println("s2: "+s2);
System.out.println("Obiekty: "+(s1==s2));
s2 = new String(s1);
System.out.println("Obiekty : "+(s1==s2));
System.out.println("Wartosci: "+s1.equals(s2));
}
}
Program porownania.java
s1: Napis 1
s2: Napis 1
Obiekty: true
Obiekty : false
Wartosci: true
Wyniki programu porownania.Java
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
26
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
4. Tablice
Tablice grupuj
ą wiele elementów dowolnego ale tego samego typu, który określony
zosta
ł przy tworzeniu tablicy.
Tablice w Java s
ą obiektami.
Dost
ęp do elementu tablicy następuje poprzez podanie jego numeru (indeksu).
Aby utworzy
ć tablicę należy:
1. Zadeklarowa
ć zmienną tablicową.
2. Utworzy
ć nowy obiekt i przypisać go zmiennej tablicowej.
3. Zainicjowa
ć tablicę poprzez nadanie jej wartości początkowych.
4.1 Deklaracja zmiennej tablicowej
Zmienn
ą tablicową deklaruje się poprzez:
1. Podanie typu tablicy , pary nawiasów kwadratowych i nazwy tablicy
typ_tablicy[] nazwa_zmiennej
2. Podanie typu tablicy, nazwy tablicy i pary nawiasów kwadratowych
typ_tablicy nazwa_zmiennej[]
Przyk
łady:
int[] bufor;
int bufor[];
Point[] punkty;
4.2 Tworzenie obiektów tablicowych
Obiekt tablicowy tworzy si
ę na jeden z dwóch sposobów:
1. Zastosowanie operatora: new nazwa_typu[wymiar]
2. Bezpo
średnie zainicjowanie elementów tablicy.
Przyk
łady:
int buf[] = new int[16];
int com[] = {1,2,4,8};
Point[] punkty = new Points[3];
Podczas tworzenia tablicy jej elementy s
ą automatycznie inicjowane:
Numeryczne
0
boolean
false
char
‘\n’
obiekty
null
Gdy tablica tworzona jest poprzez bezpo
średnie zainicjowanie jej wymiar równy jest
liczbie elementów podanych podczas inicjacji.
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
27
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
class Point {
int x;
int y;
Point(int x, int y) { // Konstruktor
this.x = x;
this.y = y;
}
}
class tablice2 {
public static void main(String arg[]) {
int com[] = {1,2,4,8};
int buf[] = new int[16];
int i,sum=0;
String kolor[] = {"Red","Green","Blue"};
Point[] trojkat = {new Point(1,1), new Point(2,2),
new Point(3,1)};
for(i=0;i<buf.length;i++) {
buf[i] = com[i%3];
sum+=buf[i];
System.out.println("buf "+buf[i]);
}
System.out.println("sum= "+kolor[i%2]);
}
}
Przyk
ład 4-1 Deklaracja i dostęp do tablic - program poin2.java
null
stos
sterta
trók
ąt
Rysunek 4-1 Deklaracja zmiennej Point[] trojkat;
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
28
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
stos
sterta
trók
ąt
length
null
null
null
trojkat[0]
trojkat[1]
trojkat[2]
Rysunek 4-2 Utworzenie zmiennej trojkat = new Point[3];
stos
sterta
trók
ąt
length
null
null
trojkat[0]
trojkat[1]
trojkat[2]
1
1
y
x
Point
Rysunek 4-3 Inicjacja zmiennej trojkat[0] = new Point(1,1);
4.3 Odwo
łąnie do elementów tablic
Dost
ęp do elementu tablicy uzyskujemy poprzez podanie nazwy tablicy i indeksu w
nawiasach kwadratowych.
Np.:
trojkat[2];
W j
ęzyku Java dostęp do elementów tablic jest kontrolowany pod względem
przekroczenia dopuszczalnego zakresu indeksu.
Z ka
żdym obiektem tablicowym związany jest atrybut
length
podaj
ący liczbę
elementów tablicy.
for(i=0;i<buf.length;i++) {. . .}
W j
ęzyku Java tablica obiektów zawiera odwołania do tych obiektów. Stąd operacje
przesuwania i kopiowania w ramach tych tablic powoduj
ą tylko zmianę tych odwołań.
W przypadku tablic zawieraj
ących typy elementarne i
String
zachodzi rzeczywiste
kopiowanie.
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
29
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
4.4 Tablice wielowymiarowe
Java nie definiuje tablic wielowymiarowych. Pozwala jednak tworzenie tablic
zawieraj
ących inne tablice.
class tablice3 {
public static void main(String arg[]) {
int tab[][] = new int[3][3];
int i,j,sum=0;
for(i=0;i<3;i++) {
for(j=0;j<3;j++) {
tab[i][j] = i+j;
System.out.print("buf["+i+","+j+"]=
"+tab[i][j]);
}
System.out.println(" ");
}
}
}
Przyk
ład 4-2 Tablice wielowymiarowe program tablice3.java
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
30
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
5. Instrukcje steruj
ące
5.1 Polecenia blokowe
Blok instrukcji zaznacza si
ę nawiasami klamrowymi:
{ // Blok instrukcji
instr1;
instr2;
. . .
instrN
}
Blok instrukcji mo
że być użyty w każdym miejscu programu na miejscu pojedynczej
instrukcji.
Bloki instrukcji mo
żna zagnieżdżać.
Zmienne lokalne zadeklarowane wewn
ątrz bloku są widoczne tylko wewnątrz tego
bloku.
{ // Blok instrukcji
int i;
for(i=0;i<3;i++) { // Blok instrukcji
. . .
}
}
5.2 Instrukcja warunkowa if
Instrukcja warunkowa – instrukcja która zostanie wykonana tylko wtedy gdy
spe
łniony jest pewien warunek.
if(warunek) instrukcja1
else instrukcja2
warunek mo
że przyjmować wartość logiczną
true
lub
false
.
instrukcja1
zostanie wykonana gdy warunek ma warto
ść
true
.
instrukcja2
zostanie wykonana gdy warunek ma warto
ść
false
.
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
31
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
if(x<10)
z = 0;
else
z = 1;
5.3 Instrukcja warunkowa switch
switch (zmienna) {
case wart1: instrukcja1;
break;
case wart2: instrukcja2;
break;
. . .
default: instrukcjaN;
}
Zmienna powinna by
ć typu elementarnego który rzutuje się na typ int (byte, char,
short, int).
Gdy zmienna przyjmuje warto
ść1 to wykonywana jest instrukcja1 i tak dalej. Gdy
zmienna nie przyjmuje
żadnej z wyszczególnionych wartości to wykonywana jest
instrukcja z etykiet
ą default.
Przyk
ład :
switch (stopien) {
case 5: System.out.print("Bardzo dobry");
break;
case 4: System.out.print("Dobry");
break;
. . .
default: System.out.print("B
ład");
}
Gdy po instrukcji brakuje s
łowa kluczowego break to zostana wykonane kolejne
instrukcje a
ż do napotkania break lub dotarcia do końca instrukcji switch.
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
32
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
5.4 P
ętla for
P
ętle for stosuje się gdy pewną instrukcję (lub blok) należy powtórzyć określoną
liczb
ę razy.
for(wart_poczatkowa; war_zako
ńczenia; licznik_pętli)
instrukcja
wart_poczatkowa
Wyra
żenie wykonywane na początku. Jeżeli użyty jest
indeks to wyra
żenie to nadaje mu wartość początkową np.
int x = 0. Zmienne tutaj deklarowane istniej
ą tylko w czasie
wykonania p
ętli a potem będą usunięte.
war_zako
ńczenia
Sprawdzany jest przed ka
żdym wykonaniem pętli. Jeśli jest
true to p
ętla zostanie wykonana.
licznik_p
ętli
Dowolne wyra
żenie wykonane po każdym zakończeniu
wykonania instrukcji p
ętli. Zwykle jest to zwiększenie licznika
p
ętli np. i++.
for(int i=0;i<16;i++) {
buf[i] = i;
}
Dowolna cz
ęść polecenia for może być wyrażeniem pustym. Wtedy trzeba te
wyra
żenia wykonywać w innym miejscu.
5.5 P
ętle while i do
P
ętle while i do while umożliwiają powtarzanie wykonywania pewnego fragmentu
kodu (instrukcja) tak d
ługo gdy warunek przyjmuje wartość true.
P
ętla while
while(warunek)
instrukcja;
P
ętla
while
wykonuje si
ę dopóki warunek ma wartość true. Warunek sprawdzany
jest przed wykonaniem instrukcji tak wi
ęc gdy nie jest spełniony instrukcja może się
w ogóle nie wykona
ć.
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
33
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
Przyk
ład:
int i = 0;
while(i < 10) {
buf[i] = i;
i++;
}
P
ętla wykona się 10 razy.
P
ętla
do ... while
do {
instrukcja
} while(warunek);
W p
ętli
do .. while
instrukcja b
ędzie powtórzona gdy warunek ma wartość
true. W takiej p
ętli instrukcja zostanie wykonana przynajmniej jeden raz.
Przyk
ład:
int i = 0;
do(i < 10) {
buf[i] = i;
i++;
} while(i<10)
P
ętla wykona się 11 razy.
5.6 Przerywanie dzia
łania pętli, instrukcje break i continue
Wykonywanie p
ętli można przerwać w dowolnym momencie.
break
– przerwanie dzia
łania pętli i przejście do następnej instrukcji.
continue
– wznowienie dzia
łanie pętli od początku kolejnej iteracji.
for(...) {
...
break;
...
}
instrukcja
while(...) {
...
break;
...
}
instrukcja
do {
...
break;
...
} while(...)
instrukcja
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
34
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
Przyk
ład działania instrucji break:
int i = 0;
do(i < 10) {
. . . ;
if(buf[i] == 0) break;
i++;
} while(i<10)
Instrukcja
continue
powoduje wznowienie dzia
łania pętli. Dla pętli for następuje
zwi
ększenie licznika a następnie sprawdzenie warunku.
for(...) {
instr
...
continue;
...
}
while(...) {
instr
...
continue;
...
}
do {
instru
...
continue;
...
} while(...)
Przyk
ład działania instrucji continue:
int i = 0;
do(i < 10) {
i++ ;
if(buf[i] == 100) continue;
. . .;
} while(i<10)
Zarówno instrukcja break jak i continue mog
ą posiadać etykietę pętli wskazującą
sk
ąd należy wznowić wykonanie programu.
break etykieta
– skok na zewn
ątrz pętli
continue
etykieta
– skok na wewn
ątrz pętli
Przyk
ład działania instrucji
break
z etykiet
ą:
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
35
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
powtorz:
int i = 0;
do(i < 10) {
. . . ;
if(buf[i] == 0) break powtorz;
i++;
} while(i<10)
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
36
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
6. Pakiety
6.1 Poj
ęcie pakietu
Pakiety s
ą sposobem hierarchicznej organizacji klas w grupy.
Pakiety pozwalaj
ą na:
1. Po
łączenia klas w grupy co ułatwia administrowanie klasami a w
szczególno
ści zgrupowanie klas należących do jednego użytkownika.
2. Rozwi
ązanie konfliktów nazw klas
3. Lepsz
ą ochronę klas
Nazwa pakietu
Klasy zawarte w pakiecie
java.lang
Klasy podstawowe, Object, String, Thread
java.awt
Klasy do tworzenia graficznego interfejsu u
żytkownika
java.io
Pliki i strumienie wej
ścia / wyjścia
java.net
Obs
ługa sieci
java.aplet
Aplety
java.util
Klasy czasu, struktur danych i inne
Tabela 6-1 Niektóre pakiety zawarte w pakiecie java
6.2 Udost
ępnianie pakietów
Pe
łne nazwy klas
Pe
łna nazwa klasy składa się z nazwy pakietu i po kropce nazwy klasy:
adr1 = java.net.InetAddress.getLocalHost();
Aby u
żyć pewnej klasy należącej do innego pakietu należy:
1. Gdy klasa nale
ży do pakietu java.lang - można tej klasy użyć bezpośrednio
2. Gdy klasa nale
ży do innego pakietu - użyć jej pełnej nazwy.
Aby unikn
ąć wypisywania długich nazw do programu można importować pakiety.
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
37
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
Pakiety udost
ępniane są poprzez zastosowanie słowa kluczowego
import
.
import nazwa_pakietu.nazwaklasy
import nazwa_pakietu.*
nazwa_pakietu jest:
1. nazw
ą pojedynczego pakietu
2. hierarchi
ą pakietów których nazwy oddzielone są kropkami.
S
łowo kluczowe import musi wystąpić na początku pliku programu.
import java.net.*;
...
adr1 = InetAddress.getLocalHost();
Gwiazdka * ma inne znaczenie ni
ż w przypadku katalogów. Zaimportowane będą
kasy zadeklarowane jako public zawarte bezpo
średnio w danym pakiecie.
Na przyk
ład gdy zastosujemy wyrażenie:
import java.net.*
udost
ępnimy
klasy bezpo
średnio zawarte w pakiecie net. Podpakiety zostaną pominięte.
6.3 Lokalizacja klas
Aby pewna klasa mog
ła być użyta musi być przez interpreter Javy odnaleziona.
Przeszukiwanie odbywa si
ę według nazwy pakietu i zmiennej środowiska
CLASSPATH.
1. Gdy zdefiniowana jest zmienna CLASSPATH to system przeszukuje foldery
zdefiniowane w zmiennej CLASSPATH.
2. Gdy zmienna CLASSPATH nie jest zdefiniowana system przeszukuje katalog
bie
żący oraz katalog
lib
zainstalowanego pakietu oprogramowania.
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
38
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
6.4 Modyfikatory dost
ępności
Dost
ęp domyślny - brak modyfikatora dostępności
Standardowo zadeklarowane klasy (bez
żadnego modyfikatora) są udostępniane
innym metodom z tego samego pakietu. O ile klasy nie zosta
ły przydzielone do
żadnego pakietu są automatycznie umieszczane w domyślnym pakiecie.
-
Ka
żda zmienna klasy może być odczytywana i modyfikowana przez dowolną
klas
ę tego pakietu.
-
Ka
żda metoda klasy może być wywołana przez dowolną klasę tego pakietu.
Modyfikator
private
Zmienna lub metoda zadeklarowana jako
private
jest dost
ępna tylko w ramach
klasy w której zosta
ła zdefiniowana. Prywatne zmienna i metody nie są dostępne w
klasach podrz
ędnych.
Modyfikator stosowany jest gdy:
1. Nie ma potrzeby aby inne klasy stosowa
ły zmienne i metody.
2. Stosowanie ich by
łoby szkodliwe
Modyfikator
public
Zmienna lub metoda zadeklarowana jako
public
jest dost
ępna dla wszystkich
innych klas. Metody te s
ą dostępne w klasach podrzędnych.
Metoda
main()
musi by
ć zadeklarowana jako
public
.
Modyfikator
protected
Zmienna lub metoda zadeklarowana jako protected jest dost
ępna dla:
1. Klas podrz
ędnych danej klasy
2. Innych klas tego pakietu
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
39
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
7. Wyj
ątki
7.1 Hierarchia wyj
ątków
W Javie wyj
ątki są obiektami – instancje klasy Throwable (java.lang.Object) . Gdy
wyst
ąpi wyjątek to tworzony jest obiekt klasy Throwable.
Wyj
ątek może być generowany przez:
1. System operacyjny
2. U
żywane w aplikacji klasy
Obiekt odpowiadaj
ący wyjątkowi zawiera:
1. Kontekst programu w momencie wyst
ąpienia wyjątku (stos wywołań
klas/metod)
2. Komunikat o b
łędzie.
3. Informacj
ę o przyczynie.
4. Wska
źnik na wyjątek klasy podrzędnej (ang. chained exception).
Wyj
ątki zorganizowane są hierarchicznie są podklasami klasy Throwable. Wyjątki
nadrz
ędne odpowiadają błędom ogólnym, podrzędne bardziej szczegółowym.
Error
Exception
Throwable
RunTimeException
IOException
InterruptedException
EOFException
InterruptedIOException
Rys. 3 Hierarchia wyj
ątków w Javie
Podstawowe klasy wyj
ątków:
1. Error - b
łędy wewnętrzne środowiska wykonawczego Javy (maszyny witualnej
Javy).
2. RunTimeException – b
łędy czasu wykonania (ArrayIndexOutofBounds,
NullPointerException, SecurityException,...)
3. IOException – b
łędy związane z systemem wejścia/wyjścia (EOFException,
SocketException, InterruptedIOException).
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
40
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
7.2 Obs
ługa wyjątków – klauzula catch
7.2.1 Prosta instrukcja try – catch
J
ęzyk Java wymusza konstrukcje programowe do obsługi wyjątków. Kompilator
sprawdza istnienie takich instrukcji podobnie jak typy i liczb
ę parametrów w
procedurach.
try { // Blok gdzie mo
że wystąpić wyjątek
...
} catch (NazwaKlasyWyj
ątku e) {
// Obs
ługa wyjatku
...
}
Podstawowa konstrukcja obs
ługi wyjątku
Zmienna e odpowiada obiektowi reprezentuj
ącemu zaistniały wyjątek. Dzięki takiej
konstrukcji mo
żna się odwołać do metod klasy (np. getMessage, printStackTrace).
GetMessage – Wyprowadzenie komunikatu o b
łędzie
public String getMessage()
...
try {
Thread.Sleep(1000);
} catch (InterruptedException e) {
// Obs
ługa wyjatku
System.out.printl(”B
łąd: ” + e.getMessage());
}
...
Program 1 Przyk
ład obsługi wyjątku
7.2.2 Wielokrotne instrukcje catch
Mo
żna testować wystąpienie wielu klas wyjątków stosując wielokrotną instrukcję
catch.
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
41
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
try {
...
} catch (NazwaWyj
ątku1 e1) { // Obsługa wyjatku 1
...
} catch (NazwaWyj
ątku2 e2) { // Obsługa wyjatku 2
...
}
...
catch (NazwaWyj
ątkuN eN) { // Obsługa wyjatku N
...
}
Testowanie wyst
ąpienia wielu wyjątków
- W wielokrotnej instrukcji catch warunki testowane s
ą po kolei.
- Wykonywany jest blok odpowiadaj
ący pierwszemu znalezionemu wyjątkowi –
dalsze sprawdzanie jest pomijane.
- Wyj
ątki zorganizowane są w sposób hierarchiczny stąd w miejscu wystąpienia
klasy bazowej mo
żna użyć klasy podrzędnej.
Obs
ługując wyjątki z jednej hierarchii należy najpierw testować wystąpienie wyjątków
podrz
ędnych.
...
try {
Thread.Sleep(1000);
} catch (EOFException e1) {
} catch (FileNotFoundException e2) {
} catch (IOException e3) {
}
...
Program 2 Przyk
ład prawidłowej obsługi hierarchii wyjątków
Gdyby IOException obs
ługiwać najpierw nigdy nie doszło by do obsługi wyjątków
klas podrz
ędnych.
7.2.3 Klauzula finally
W przypadku gdy istnieje blok instrukcji który ma by
ć wykonany niezależnie od tego
czy wyst
ąpi wyjątek czy też nie należy użyć klauzuli finally.
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
42
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
try {
...
} catch (NazwaKlasyWyj
ątku e) {
// Obs
ługa wyjatku
...
} finally {
// Blok wykonywany w ka
żdym przypadku
...
}
Konstrukcja obs
ługi wyjątku z klauzulą finally
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
43
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
7.3 Generowanie wyj
ątków
7.3.1 Deklarowanie metod generuj
ących wyjątki
Je
żeli klasa może generować wyjątek musi to być wskazane przy definicji tej klasy.
Wskazanie
że metoda może generować wyjątki odbywa się poprzez umieszczenie w
jej deklaracji s
łowa kluczowego throws. Słowo throws umieścić należy po liście
parametrów ale przed klamr
ą rozpoczynającą blok metody.
public int wstaw( Object item ) throws mojWyjatek {
...
}
Gdy metoda ma generowa
ć wiele wyjątków należy umieścić je kolejno:
public int wstaw( Object item ) throws W1,W2,...,Wn
{
...
}
Klauzula throws oznacza
że metoda może wygenerować wyjątek ale nie musi.
7.3.2 Propagacja wyj
ątku
Zamiast obs
ługiwać wyjątek w tej metodzie w której się objawia można delegować
obs
ługę wyjątku do metody (klasy) nadrzędnej. Wtedy wyjątek musi być obsłużony w
metodzie nadrz
ędnej.
Metoda 3
Metoda 2
Metoda 1
Obsluga
Wyjatek
Rys. 4 Propagacja wyj
ątku
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
44
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
public void czytajPlik(String nazwa) {
...
try {
while(cnt < bufor.length) {
my.read(bufor);
cnt++;
}
} catch(IOException e) {
System.out.println("Blad czytania :" +
e.getMessage());
}
}
Program 3 Obs
ługa wyjątku IOException w metodzie czytajPlik
public void czytajPlik(String nazwa) throws
IOException {
...
while(cnt < bufor.length) {
my.read(bufor);
cnt++;
}
}
Program 4 Przekazanie obs
ługi wyjątku IOException do metody nadrzędnej
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
45
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
7.3.3 Tworzenie i generowanie wyj
ątków
Aby wygenerowa
ć wyjątek należy:
1
Utworzy
ć nową instancję klasy reprezentującą wyjątki. Musi to być podklasa
klasy Throwable.
2
U
żyć polecenia throw.
...
KlasaWyj
ątku iex = new KlasaWyjątku();
throw iex;
...
Tworzenie i generowanie wyj
ątku
Mo
żliwe jest obsłużenie wyjątku przekazanie go metody nadrzednej.
public void czytajPlik(String nazwa) throws
IOException {
...
try {
...
} catch(IOException e) {
System.out.println("Blad czyt:" + e.getMessage());
throw e;
}
Program 5 Obs
ługa wyjątku i przekazanie go do metody wywołującej
Nowy wyj
ątek musi być klasą podrzędną klasy Exception.
Aby wybra
ć odpowiedni wyjątek należy:
1. Z istniej
ących wyjątków należy wybrać taki który wydaje się najbardziej
odpowiedni.
2. Gdy brak takiego nale
ży utworzyć wyjątek jako podrzędny klasy Exception.
Klasy definiuj
ące wyjątki posiadają dwa konstruktory:
1. Konstruktor bez argumentów
2. Konstruktor z jednym argumentem typu String który reprezentuje nazw
ę
wyj
ątku. W takim konstruktorze należy wykonać konstruktor klasy nadrzędnej
podaj
ąc jako argument tę nazwę. Nazwa ta może być uzyskana przy pomocy
metody getMessage().
PDF created with pdfFactory trial version
Podstawy j
ęzyka Java 2
46
J
ędrzej Ułasiewicz – Inst. Informatyki Automatyki i Robotyki PWr
public class MyException extends Exception {
public MyException() { }
public MyException(String s) {
super(s);
}
}
public class ExceptionDemo {
static class MyException extends Exception {}
public static void wyjatek() throws MyException {
System.out.println("Zglaszam wyjatek! ");
throw new MyException();
}
public static void main (String[] args) {
System.out.println("Start");
try {
wyjatek();
} catch (MyException e) {
System.out.println("Przechwycony");
}
}
}
Program 6 Przyk
ład tworzenia i generowania wyjątku
8. Literatura
Witryna firmy Sun
Laura Lemay, Rogers Cadenhead, Java 2 dla ka
żdego, Helion 2001
Laura Lemay, Charles L. Perkins, Java 1.1, Helion 1998.
Tutorial Javy The Java
TM
Tutorial z pakietu SDK 1.4.2 plik tutorial.chm
Witryna The Java Developers Almanac 1.4,
http://javaalmanac.com/index.html
Bruce Eckel, Thinking in Java, wydanie 3, Helion 2003.
PDF created with pdfFactory trial version