JAVA wydanie III

background image

Program w Javie składa się ze zbioru klas. Każda klasa publiczna musi być zapisana w oddzielnym pliku o takiej samej nazwie,
jak nazwa tej klasy (zasada ta nie dotyczy klas wewnętrznych i pakietowych), oraz rozszerzeniu

java. Wykonywanie programu

rozpoczyna się od metody o nazwie

PDLQ

, która musi być zadeklarowana jako publiczna i statyczna. Jeżeli program składa się

z wielu klas publicznych i więcej niż jedna z nich zawiera taką metodę

PDLQ

, to aplikacja ma wiele punktów wejścia (startowych),

może być więc uruchamiana na kilka sposobów. Schematyczna konstrukcja programu:

SXEOLFFODVV0DLQ

^

SXEOLFVWDWLFYRLGPDLQ 6WULQJDUJV>@

^

NRGPHWRG\PDLQ

`

`

Deklaracja pojedynczej zmiennej

Deklaracja zmiennej polega na podaniu jej typu oraz nazwy i kończy się znakiem średnika; schematycznie:

QD]ZDB]PLHQQHMW\SB]PLHQQHM

Przykładowo:

FODVV0DLQ

^

SXEOLFVWDWLFYRLGPDLQ 6WULQJDUJV>@

^

LQWOLF]ED

`

`

Deklaracja może być równoczesna z przypisaniem wartości (inicjalizacją zmiennej):

QD]ZDB]PLHQQHMW\SB]PLHQQHM ZDUWRĞü

Przykładowo:

LQWOLF]ED 

Nazwy zmiennych

Nazwa zmiennej może się składać z liter (zarówno małych, jak i dużych), cyfr oraz znaku podkreślenia, nie może jednak zaczynać
się od cyfry. Dopuszczalny jest także znak dolara, ale przyjmuje się, że jest on zarezerwowany dla narzędzi przetwarzających kod
i raczej nie należy go stosować w nazwach zmiennych. Można wykorzystać znaki spoza ścisłego alfabetu łacińskiego (wszelkiego
rodzaju znaki narodowe).

Deklaracja wielu zmiennych

W jednym wierszu można deklarować wiele zmiennych, jeśli są one tego samego typu; schematycznie:

W\SB]PLHQQHMQD]ZDQD]ZDQD]ZD1

Przykładowo:

LQWSLHUZV]DBOLF]EDGUXJDBOLF]EDWU]HFLDBOLF]ED

Deklaracje wielu zmiennych mogą być powiązane z ich równoczesną inicjalizacją:

LQWSLHUZV]DBOLF]ED GUXJDBOLF]EDWU]HFLDBOLF]ED 

Zmienne referencyjne

Zmienne typów referencyjnych (z ang. reference types), inaczej odnośnikowych, deklaruje się tak, jak przedstawiono wyżej, czyli:

W\SB]PLHQQHMQD]ZDB]PLHQQHM

z tą różnicą, że konstrukcja ta powoduje powstanie jedynie odniesienia, któremu domyślnie zostanie przypisana wartość pusta

QXOO

. Zmiennej referencyjnej po deklaracji należy przypisać odniesienie do obiektu utworzonego oddzielną instrukcją (patrz

sekcja „Klasy i obiekty”).

Operatory arytmetyczne

Operator

Wykonywane działanie

mnożenie



dzielenie



dodawanie



odejmowanie



dzielenie modulo (reszta z dzielenia)



inkrementacja (zwiększanie)



dekrementacja (zmniejszanie)

Operatory logiczne

Operator

Symbol

Iloczyn (AND)

Suma (OR)

__

Negacja (NOT)



Operatory logiczne działają według zasad opisanych
poniżej.

Iloczyn logiczny

Wynikiem operacji AND (iloczynu logicznego) jest wartość

WUXH

, wtedy i tylko wtedy, kiedy oba argumenty mają

wartość

WUXH

. W każdym innym przypadku wynikiem jest

wartość

IDOVH

.

Argument 1

Argument 2

Wynik

WUXH

WUXH

WUXH

WUXH

IDOVH

IDOVH

IDOVH

WUXH

IDOVH

IDOVH

IDOVH

IDOVH

Suma logiczna

Wynikiem operacji OR (sumy logicznej) jest wartość

IDO

VH

, wtedy i tylko wtedy, kiedy oba argumenty mają wartość

IDOVH

. W każdym innym przypadku wynikiem jest

WUXH

.

Argument 1

Argument 2

Wynik

WUXH

WUXH

WUXH

WUXH

IDOVH

WUXH

IDOVH

WUXH

WUXH

IDOVH

IDOVH

IDOVH

Negacja logiczna

Operacja NOT (negacja logiczna) zamienia wartość argu-
mentu na przeciwną. Jeśli argument miał wartość

WUXH

,

będzie miał wartość

IDOVH

, jeśli argument miał wartość

IDOVH

, będzie miał wartość

WUXH

.

Argument

Wynik

WUXH

IDOVH

IDOVH

WUXH

Operatory bitowe

Operator

Symbol

Iloczyn (AND)

Suma (OR)

_

Negacja (NOT)

a

Różnica symetryczna (XOR)

A

Przesunięcie bitowe w prawo

!!

Przesunięcie bitowe w lewo



Przesunięcie bitowe w prawo z wypełnieniem zerami

!!!

Operatory przypisania

Argument 1

Operator

Argument 2

Znaczenie

x

y

[ \

x



y

[ [\

x



y

[ [±\

x

y

[ [ \

x



y

[ [\

x



y

[ [\

x



y

[ [\

x

!!

y

[ [!!\

x

!!!

y

[ [!!!\

x

y

[ [ \

x

_

y

[ [_\

x

A

y

[ [A\

W przypadku korzystania ze zintegrowanych środowisk programistycznych sposób kompilacji zależy od wykorzystywanego pro-
duktu. W przypadku korzystania z kompilatora pracującego w wierszu poleceń, zawartego w pakiecie Java Development Kit (JDK),
kompilacja odbywa się po wydaniu następującego polecenia:

MDYDFQD]ZDBSOLNXMDYD

Kompilator ten udostępnia m.in. opcje:

Opcja

Znaczenie

J

Włącza lub wyłącza generowanie informacji dla debugera

QRZDUQ

Wyłącza wyświetlanie ostrzeżeń

YHUERVH

Wyświetla dodatkowe informacje o postępie kompilacji

GHSUHFDWLRQ

Wyświetla informacje o użyciu przestarzałych metod API

FODVVSDWK

Specyfikuje położenie plików bibliotecznych

VRXUFHSDWK

Specyfikuje położenie plików źródłowych

G

Określa położenie plików wynikowych

HQFRGLQJ

Określa standard kodowania znaków w plikach źródłowych

VRXUFH

Określa standard, z którym kompatybilne są pliki źródłowe

WDUJHW

Określa kompatybilność kodów wynikowych z poszczególnymi wersjami maszyn wirtualnych

KHOS

Wyświetla skróconą listę opcji kompilatora

Parametr

WDUJHW

może przyjmować jedną z następujących wartości:

 x 1.1 — kod zgodny z maszyną wirtualną w wersji 1.1;

 x 1.2 — kod zgodny z wersją 1.2 i wyższymi;

 x 1.3 — kod zgodny z wersją 1.3 i wyższymi;

 x 1.4 — kod zgodny z wersją 1.4 i wyższymi;

 x 1.5 — kod zgodny z wersją 1.5 i wyższymi;

 x 1.6 — kod zgodny z wersją 1.6 i wyższymi;

 x 1.7 — kod zgodny z wersją 1.7 i wyższymi;

 x 5 — kod zgodny z wersją 1.5 i wyższymi;

 x 6 — kod zgodny z wersją 1.6 i wyższymi;

 x 7 — kod zgodny z wersją 1.7 i wyższymi.

Java udostępnia pewną liczbę wbudowanych typów danych, czyli takich, które oferuje sam język i z których można korzystać bez
potrzeby ich definiowania. Określa się je jako typy proste lub podstawowe (z ang.

primitive types).

Typ znakowy (char)

Typ

FKDU

służy do reprezentowania wszelkich znaków, m.in. liter. Jest on 16-bitowy i opiera się na standardzie Unicode (czyli

standardzie umożliwiającym przedstawienie znaków występujących w większości języków świata). Ponieważ znaki reprezentowa-
ne są tak naprawdę jako 16-bitowe kody liczbowe, typ ten można zaliczyć również do typów arytmetycznych.

Typ logiczny (boolean)

Typ

ERROHDQ

może reprezentować jedynie dwie wartości:

WUXH

(prawda) i

IDOVH

(fałsz).

Typy arytmetyczne

Typy całkowitoliczbowe

Typy arytmetyczne całkowitoliczbowe służą
do reprezentowania liczb całkowitych.
W Javie występują cztery ich rodzaje:

 x

E\WH

,

 x

VKRUW

,

 x

LQW

,

 x

ORQJ

.

Osoby programujące w innych językach programowania, takich jak C, C++ czy PHP, powinny zwrócić uwagę, że zakres wartości
możliwych do przedstawienia jest z góry ustalony i nie zależy od platformy systemowej, na której uruchamiany jest program w Javie.

Typy zmiennopozycyjne

Typy zmiennopozycyjne występują w dwóch odmianach:

 x

IORDW

(pojedynczej precyzji),

 x

GRXEOH

(podwójnej precyzji),

różniących się rozmiarem oraz zakresem liczb możliwych
do zaprezentowania.

W Javie istnieją dwa rodzaje komentarzy, oba zapożyczone z języków takich, jak C i C++:

 x blokowy,

 x wierszowy.

Komentarz blokowy

Komentarz blokowy rozpoczyna się od znaków



, a kończy się znakami



. Wszystko, co znajduje się pomiędzy tymi znakami,

jest traktowane przez kompilator jako komentarz i pomijane w procesie kompilacji. Umiejscowienie komentarza blokowego jest
w zasadzie dowolne — może on się znaleźć nawet w środku instrukcji (pod warunkiem, że nie zostanie przedzielone żadne słowo).
Komentarzy blokowych nie wolno zagnieżdżać.

FODVV0DLQ

^

SXEOLFVWDWLFYRLGPDLQ 6WULQJDUJV>@

^



WRMHVWNRPHQWDU]EORNRZ\

 

6\VWHPRXWSULQWOQ 7RMHVWQDSLV 

`

`

Komentarz wierszowy

Komentarz wierszowy zaczyna się od znaków



i obowiązuje do końca danej linii programu. Wszystko to, co występuje po tych

dwóch znakach aż do końca bieżącej linii, jest ignorowane przez kompilator.

FODVV0DLQ

^

SXEOLFVWDWLFYRLGPDLQ 6WULQJDUJV>@

^

WRMHVWNRPHQWDU]ZLHUV]RZ\

6\VWHPRXWSULQWOQ 7RMHVWQDSLV 

`

`

Komentarz wierszowy może znaleźć się w środku komentarza blokowego:



WDNRQVWUXNFMDMHVWSRSUDZQD



KOMPILACJA KODU

TYPY DANYCH

KOMENTARZE

S

S

Rodzaje te różnią się zakresem liczb, które można reprezentować za ich
pomocą, co przedstawia poniższa tabela.

Typ

Liczba bitów

Zakres

E\WH

8

od −128 do 127

VKRUW

16

od −32 768 do 32 767

LQW

32

od −2

31

do 2

31

− 1

ORQJ

64

od −2

63

do 2

63

− 1

Typ

Liczba bitów

Zakres

IORDW

32

od –3,4e38 do 3,4e38

GRXEOH

64

od –1,8e308 do 1,8e308

ZMIENNE

OPERATORY

Ciąg dalszy na stronie 2

Î

BUDOWA APLIKACJI

S

S

S

S

background image

KLASY I OBIEKTY

Operatory porównywania

Operator

Opis

Wynikiem jest

WUXH

, jeśli argumenty są sobie równe



Wynikiem jest

WUXH

, jeśli argumenty są różne

!

Wynikiem jest

WUXH

, jeśli argument lewostronny jest większy od prawostronnego



Wynikiem jest

WUXH

, jeśli argument lewostronny jest mniejszy od prawostronnego

!

Wynikiem jest

WUXH

, jeśli argument lewostronny jest większy od prawostronnego lub równy mu



Wynikiem jest

WUXH

, jeśli argument lewostronny jest mniejszy od prawostronnego lub równy mu

Priorytet operatorów

(Od najsilniejszych do najsłabszych; operatory w jednym wierszu mają ten sam priorytet).

Grupa operatorów

Symbole

Inkrementacja przyrostkowa



,



Inkrementacja przedrostkowa, negacja



,



,

a

,



Mnożenie, dzielenie

,



,



Dodawanie, odejmowanie



,



Przesunięcia bitowe



,

!!

,

!!!

Porównania (mniejsze, większe)



,

!

,



,

!

Porównania (równe, różne)

,



Bitowe AND

Bitowe XOR

A

Bitowe OR

_

Logiczne AND

Logiczne OR

__

Warunkowy

"

Przypisania

,



,



,

,



,



,

,

A

,

_

,



,

!!

,

!!!

Instrukcja continue

Instrukcja

FRQWLQXH

powoduje przerwanie bieżącej iteracji

pętli i przejście do kolejnej iteracji.

Przykład (wyświetlenie parzystych liczb z zakresu 1 – 20):

IRU LQWL L L ^

LI L  FRQWLQXH

6\VWHPRXWSULQWOQ L 

`

2

Tablice informatyczne. Java. Wydanie III

Deklaracje tablic

Tablice w Javie są obiektami. Aby móc skorzystać z tablicy,
należy najpierw zadeklarować zmienną tablicową, a następ-
nie utworzyć samą tablicę (obiekt tablicy). Schematycznie
deklaracja taka jest następująca:

W\SBWDEOLF\QD]ZDBWDEOLF\>@

lub (co ma identyczne znaczenie):

W\SBWDEOLF\>@QD]ZDBWDEOLF\

Tablicę tworzy się za pomocą operatora

QHZ

o postaci:

QHZW\SBWDEOLF\>OLF]EDBHOHPHQWyZ@

Tablicę można również jednocześnie zadeklarować i utwo-
rzyć, korzystając z konstrukcji:

W\SBWDEOLF\QD]ZDBWDEOLF\>@ QHZW\SB

´WDEOLF\>OLF]EDBHOHPHQWyZ@

lub:

W\SBWDEOLF\>@QD]ZDBWDEOLF\ QHZW\SB

´WDEOLF\>OLF]EDBHOHPHQWyZ@

Przykład:

FODVV0DLQ

^

SXEOLFVWDWLFYRLGPDLQ 6WULQJDUJV>@

^

LQWWDE>@ QHZLQW>@

WDE>@ 

6\VWHPRXWSULQWOQ 3LHUZV]\

´HOHPHQWWDEOLF\PDZDUWRĞü

´WDE>@ 

`

`

Inicjalizacja tablicy

W przypadku niewielkich tablic można dokonać inicjalizacji
tablicy, ujmując wartości, które mają się znaleźć w jej komór-
kach, w nawias klamrowy. Nie trzeba wtedy korzystać z ope-
ratora

QHZ

. Schematycznie deklaracja taka jest następująca:

W\SBWDEOLF\QD]ZDBWDEOLF\>@ ^ZDUWRĞü

´ZDUWRĞüZDUWRĞü1`

Na przykład deklarację sześcioelementowej tablicy liczb
całkowitych typu

LQW

i wypełnienie jej kolejnych komórek

wartościami od 1 do 6 można wykonać za pomocą instrukcji:

LQWWDEOLFD>@ ^`

Właściwość length

Każda tablica ma właściwość

OHQJWK

, która określa liczbę

jej komórek.
Przykład:

LQWWDEOLFD>@ QHZLQW>@

IRU LQWL LWDEOLFDOHQJWK

´L ^

WDEOLFD>L@ L

`

Tablice wielowymiarowe

Deklaracja regularnych tablic wielowymiarowych odbywa
się w sposób analogiczny do deklaracji tablic jednowymia-
rowych, dodawane są jedynie kolejne nawiasy kwadratowe.
Schematyczna deklaracja tablicy dwuwymiarowej ma po-
stać:

W\SBWDEOLF\QD]ZDBWDEOLF\>@>@

Tablica tego typu może zostać zainicjowana przy użyciu
składni z nawiasami klamrowymi:

W\SBWDEOLF\QD]ZDBWDEOLF\>@>@ ^

^ZDUWRĞüZDUWRĞüZDUWRĞü1`

^ZDUWRĞüZDUWRĞüZDUWRĞü1`

`

Przykład (dwuwymiarowa tablica liczb całkowitych wypeł-
niona danymi):

LQWWDE>@>@ ^

^`

^`

`

Do jej utworzenia można użyć także standardowego opera-
tora

QHZ

w postaci:

QHZW\SBWDEOLF\>OLF]EDBHOHPHQWyZ@

´>OLF]EDBHOHPHQWyZ@

Przykład:

LQWWDE>@>@ QHZLQW>@>@

LQWFRXQW 

IRU LQWL LL ^

IRU LQWM MM ^

WDE>L@>M@ FRXQW

`

`

Budowa klasy

Definicja klasy ma schematyczną postać:

FODVVQD]ZDBNODV\

^

WUHĞüNODV\

GHILQLFMHSyOLPHWRG

`

Przykład:

FODVV3XQNW

^

LQW[

LQW\

`

Tworzenie obiektów

Zmienna typu obiektowego (odnośnikowego, referencyjne-
go) tworzona jest za pomocą konstrukcji:

QD]ZDBNODV\QD]ZDB]PLHQQHM

Do tak zadeklarowanej zmiennej można przypisać obiekt
utworzony za pomocą operatora

QHZ

:

QHZQD]ZDBNODV\ 

Jednoczesna deklaracja zmiennej, utworzenie obiektu i przy-
pisanie go zmiennej odbywa się za pomocą schematycznej
konstrukcji:

QD]ZDBNODV\QD]ZDB]PLHQQHM QHZ

´QD]ZDBNODV\ 

Przykład:

3XQNWPRM3XQNW QHZ3XQNW 

Pola klas

Definicje pól

Pola definiowane są w ciele klasy, podobnie jak zwykłe zmien-
ne. Najpierw należy podać typ pola, a po nim — nazwę pola:

FODVVQD]ZDBNODV\

^

W\SBSRODQD]ZDBSROD

W\SBSRODQD]ZDBSROD



W\SBSROD1QD]ZDBSROD1

`

Odwołania do pól obiektu

Po utworzeniu obiektu do jego pól można odwoływać się za
pomocą operatora kropki (



); schematycznie:

QD]ZDBRELHNWXQD]ZDBSROD

Przykład:

3XQNWSXQNW QHZ3XQNW 

SXQNW[ 

SXQNW\ 

Wartości domyślne pól

Każde niezainicjowane pole klasy otrzymuje wartość domyślną,
zależną od jego typu. Wartości te zaprezentowane są w poniż-
szej tabeli.

Typ

Wartość domyślna

E\WH



VKRUW



LQW



ORQJ



IORDW



GRXEOH



FKDU

?

ERROHDQ

IDOVH

RELHNWRZ\

QXOO

Metody klas

Definicje metod

Metody definiowane są w ciele klasy pomiędzy znakami na-
wiasu klamrowego. Każda metoda może przyjmować argu-
menty oraz zwracać wynik. Schematyczna deklaracja metody
ma postać:

W\SBZ\QLNXQD]ZDBPHWRG\ DUJXPHQW\BPHWRG\

^

LQVWUXNFMHPHWRG\

`

Po umieszczeniu w ciele klasy deklaracja taka będzie wyglą-
dała następująco:

FODVVQD]ZDBNODV\

^

W\SBZ\QLNXQD]ZDBPHWRG\ DUJXPHQW\B

´PHWRG\

^

LQVWUXNFMHPHWRG\

`

`

Jeśli metoda nie zwraca żadnego wyniku, jako typ wyniku
należy zastosować słowo

YRLG

, jeśli natomiast nie przyjmuje

żadnych argumentów, pomiędzy znakami nawiasu okrągłego
nie należy nic wpisywać.
Przykład:

FODVV3XQNW

^

LQW[

LQW\

YRLGZ\VZLHWO:VSROU]HGQH

^

6\VWHPRXWSULQWOQ ZVSyáU]ĊGQD[

´ [ 

6\VWHPRXWSULQWOQ ZVSyáU]ĊGQD\

´ \ 

`

`

Odwołania do metod obiektu

Po utworzeniu obiektu do jego metod można odwoływać się
(podobnie jak w przypadku pól) za pomocą operatora kropki
(



); schematycznie:

QD]ZDBRELHNWXQD]ZDBPHWRG\ 

Przykład:

3XQNWSXQNW QHZ3XQNW 

SXQNWZ\VZLHWO:VSROU]HGQH 

Argumenty metod

Metoda może mieć dowolną liczbę argumentów umiesz-
czonych w nawiasie okrągłym za jej nazwą. Poszczególne
argumenty należy oddzielić od siebie znakami przecinka;
schematycznie:

W\SBZ\QLNXQD]ZDBPHWRG\ W\SBDUJXPHQWXB

´QD]ZDBDUJXPHQWXBW\SBDUJXPHQWXB

´QD]ZDBDUJXPHQWXBW\SBDUJXPHQWX

´B1QD]ZDBDUJXPHQWXB1

Przykład:

YRLGXVWDZ;< LQWZVS;LQWZVS<

^

[ ZVS;

\ ZVS<

`

Argumentami mogą być typy zarówno proste, jak i obiektowe.

Przeciążanie metod

W każdej klasie może istnieć dowolna liczba metod o takiej
samej nazwie, jeśli tylko różnią się przyjmowanymi argumen-
tami. Mogą, ale nie muszą się one różnić również typem zwra-

Instrukcja warunkowa if...else

Podstawowa instrukcja warunkowa ma postać:

LI ZDUXQHN ^

LQVWUXNFMH

`

HOVH^

LQVWUXNFMH

`

Oznacza to, że jeżeli

ZDUXQHN

jest prawdziwy, to zostaną

wykonane

LQVWUXNFMH

, w przeciwnym wypadku zosta-

ną wykonane

LQVWUXNFMH

. Blok

HOVH

jest opcjonalny.

Instrukcja warunkowa if...else if

Instrukcja złożona

LIHOVHLI

ma postać:

LI ZDUXQHN ^

LQVWUXNFMH

`

HOVHLI ZDUXQHN ^

LQVWUXNFMH

`

GDOV]HEORNLHOVHLI

HOVH^

LQVWUXNFMH1

`

Oznacza to, że jeżeli

ZDUXQHN

jest prawdziwy, to zosta-

ną wykonane

LQVWUXNFMH

, w przeciwnym wypadku,

jeżeli prawdziwy jest

ZDUXQHN

, zostaną wykonane

LQ

VWUXNFMH

. Liczba bloków

HOVH LI

nie jest ograni-

czona. Jeżeli żaden warunek nie będzie spełniony, zostaną
wykonane

LQVWUXNFMH1

z bloku

HOVH

. Blok

HOVH

jest

opcjonalny.

Przykład:

FODVV0DLQ

^

SXEOLFVWDWLFYRLGPDLQ 6WULQJDUJV>@

^

LQW[ 

LI [! ^

6\VWHPRXWSULQWOQ [ZLĊNV]H

´RG]HUD 

`

HOVHLI [ ^

6\VWHPRXWSULQWOQ [PQLHMV]H

´RG]HUD 

`

HOVH^

6\VWHPRXWSULQWOQ [UyZQH]HUR 

`

`

`

Instrukcja switch

Instrukcja warunkowa

VZLWFK

może zastąpić serię instrukcji

LIHOVHLI

:

VZLWFK Z\UDĪHQLH ^

FDVHZDUWRĞü

LQVWUXNFMH

EUHDN

FDVHZDUWRĞü

LQVWUXNFMH

EUHDN

FDVHZDUWRĞü

LQVWUXNFMH

EUHDN

GHIDXOW

LQVWUXNFMH

`

Znaczenie jest takie samo, jak w innych językach programo-
wania. Jeżeli wartością wyrażenia jest

ZDUWRĞü

, wyko-

nywane są

LQVWUXNFMH

, jeżeli wartością wyrażenia jest

ZDUWRĞü

, wykonywane są

LQVWUXNFMH

itd. Jeżeli

nie uda się dopasować wartości wyrażenia do wartości wystę-
pujących po klauzulach

FDVH

, wykonywane są instrukcje wy-

stępujące po słowie

GHIDXOW

. Instrukcja

EUHDN

przerywa

wykonywanie bloku

VZLWFK

.

Operator warunkowy

Operator warunkowy ma postać:

ZDUXQHN"ZDUWRĞüZDUWRĞü

Zapis ten oznacza, że jeżeli

ZDUXQHN

jest prawdziwy, warto-

ścią wyrażenia staje się

ZDUWRĞü

, w przeciwnym wypadku

wartością wyrażenia staje się

ZDUWRĞü

.

FODVV0DLQ

^

SXEOLFVWDWLFYRLGPDLQ 6WULQJDUJV>@

^

LQWOLF]ED 

LQWOLF]ED OLF]ED"

6\VWHPRXWSULQWOQ OLF]ED 

`

`

Pętla for

Pętla

IRU

ma ogólną postać:

IRU Z\UDĪHQLHSRF]ąWNRZHZ\UDĪHQLH

´ZDUXQNRZHZ\UDĪHQLHPRG\ILNXMąFH ^

LQVWUXNFMHGRZ\NRQDQLD

`

 x

Z\UDĪHQLH SRF]ąWNRZH

jest stosowane do

zainicjalizowania zmiennej używanej jako licznik liczby
wykonań pętli;

 x 

Z\UDĪHQLHZDUXQNRZH

określa warunek, jaki musi

być spełniony, aby dokonać kolejnego przejścia w pętli;

 x 

Z\UDĪHQLH PRG\ILNXMąFH

używane jest zwy-

kle do modyfikacji zmiennej będącej licznikiem.

Przykład:

IRU LQWL LL ^

6\VWHPRXWSULQWOQ 3U]HELHJL 

`

Rozszerzona pętla for

Począwszy od Javy w wersji 5.0 (1.5), dostępna jest rozsze-
rzona pętla

IRU

(z ang.

HQKDQFHG IRU

), nazywana też

pętlą typu

IRUHDFK

. Umożliwia ona automatyczną iterację

po obiekcie udostępniającym iterator (np. po kolekcji lub ta-
blicy). Konstrukcja jest następująca:

IRU W\SQD]ZDREM ^

LQVWUXNFMH

`

W kolejnych przebiegach pętli pod

QD]ZD

będzie podsta-

wiana wartość kolejnego elementu (np. kolejnej komórki
tablicy). Pętla będzie działała tak długo, aż zostaną przejrzane
wszystkie elementy obiektu

REM

typu

W\S

. Przykład:

SXEOLFFODVV0DLQ^

SXEOLFVWDWLFYRLGPDLQ 6WULQJDUJV>@ ^

LQWWDE>@ ^

´`

IRU LQWYDOWDE ^

6\VWHPRXWSULQWOQ YDO 

`

`

`

Pętla while

Ogólna postać pętli

ZKLOH

jest następująca:

ZKLOH Z\UDĪHQLHZDUXQNRZH ^

LQVWUXNFMH

`

Oznacza to, że dopóki warunek jest prawdziwy, będą wykony-
wane instrukcje.

Przykład:

LQWL 

ZKLOH L ^

6\VWHPRXWSULQWOQ 3U]HELHJL 

L

`

Pętla do...while

Pętla

GRZKLOH

jest odmianą pętli

ZKLOH

i ma postać:

GR^

LQVWUXNFMH

`

ZKLOH ZDUXQHN 

Oznacza to, że

LQVWUXNFMH

będą wykonywane, dopóki

warunek jest prawdziwy.

Przykład:

LQWL 

GR^

6\VWHPRXWSULQWOQ 3U]HELHJL 

`

ZKLOH L 

Instrukcja break

Pętle pojedyncze

Instrukcja

EUHDN

powoduje przerwanie wykonywania bieżą-

cej iteracji pętli i opuszczenie bloku pętli.

Przykład:

LQWL 

ZKLOH WUXH ^

6\VWHPRXWSULQWOQ 3U]HELHJL 

LI L!  EUHDN

`

Pętle zagnieżdżone

W przypadku pętli zagnieżdżonych instrukcja

EUHDN

po-

woduje przerwanie bieżącej iteracji jedynie tej pętli, w której
została umieszczona:

IRU LQWL LL ^

IRU LQWM MM ^

LI L  EUHDNZW\PPLHMVFX

´]RVWDQLHSU]HUZDQHZ\NRQ\ZDQLHSĊWOL

´ZHZQĊWU]QHM

6\VWHPRXWSULQWOQ LM 

`

`

TABLICE

INSTRUKCJE JĘZYKA

S

S

S

S

S

S

S

S

background image

canego wyniku. Technika ta jest nazywana przeciążaniem
(z ang.

overloading) metod. Przykład:

SXEOLFFODVV3XQNW

^

LQW[

LQW\

YRLGXVWDZ;< LQWZVS;LQWZVS<

^

[ ZVS;

\ ZVS<

`

YRLGXVWDZ;< 3XQNWSXQNW

^

[ SXQNW[

\ SXQNW\

`

`

Rodzaje klas

Klasy w Javie można ogólnie podzielić na:

 x



pakietowe,

 x



publiczne,

 x



wewnętrzne,

 x



interfejsowe (patrz sekcja „Interfejsy”).

Jeśli przed nazwą klasy nie znajduje się modyfikator

SXE

OLF

, to jest to klasa pakietowa, czyli klasa dostępna jedynie

dla innych klas z tego samego pakietu. Jeśli natomiast przed
nazwą klasy znajduje się modyfikator

SXEOLF

, to jest to kla-

sa publiczna, czyli klasa dostępna dla wszystkich innych klas.
Deklaracja klasy pakietowej ma postać:

FODVVQD]ZDBNODV\

^

SRODLPHWRG\NODV\

`

Deklaracja klasy publicznej ma postać:

SXEOLFFODVVQD]ZDBNODV\

^

SRODLPHWRG\NODV\

`

Klasy wewnętrzne to klasy zdefiniowane wewnątrz innych
klas. Postać schematyczna:

>VSHF\ILNDWRUGRVWĊSX@FODVVNODVDB

´]HZQĊWU]QD

^

>VSHF\ILNDWRUGRVWĊSX@FODVVNODVDB

´ZHZQĊWU]QD

^

SRODLPHWRG\NODV\ZHZQĊWU]QHM

`

SRODLPHWRG\NODV\]HZQĊWU]QHM

`

Przykład klasy wewnętrznej (

,QVLGH

):

SXEOLFFODVV2XWVLGH

^

FODVV,QVLGH

^

`

`

Ponieważ klasy wewnętrzne są definiowane wewnątrz innych
klas, w pewnym sensie można je traktować jako składowe
tych klas, a zatem można też w stosunku do nich stosować
modyfikatory dostępu. W związku z tym klasy wewnętrzne
mogą być:

 x



pakietowe,

 x



publiczne,

 x



prywatne,

 x



chronione

i należy je traktować tak jak składowe wymienionych typów.

Konstruktory

Definicja konstruktora

Konstruktor to specjalna metoda, która jest wywoływana
zawsze po utworzeniu obiektu w pamięci. Metoda będąca
konstruktorem nigdy nie zwraca wyniku i musi mieć nazwę
zgodną z nawą klasy; schematycznie:

SXEOLFFODVVQD]ZDBNODV\

^

QD]ZDBNODV\

^

NRGNRQVWUXNWRUD

`

`

Przykład:

SXEOLFFODVV3XQNW

^

LQW[

LQW\

3XQNW

^

[ 

\ 

`

`

Argumenty konstruktorów

Konstruktor może być bezargumentowy albo może przyjmo-
wać argumenty używane (bezpośrednio lub pośrednio) np.
do zainicjowania pól obiektu. Argumenty przekazuje się do-
kładnie w taki sam sposób, jak w przypadku zwykłych metod;
schematycznie:

FODVVQD]ZDBNODV\

^

QD]ZDBNODV\ W\SDUJXPHQWW\S

´DUJXPHQWW\S1DUJXPHQW1

^

NRGNRQVWUXNWRUD

`

`

Przykład:

SXEOLFFODVV3XQNW

^

LQW[

LQW\

3XQNW LQWZVS;LQWZVS<

^

[ ZVS;

\ ZVS<

`

`

Wywołanie konstruktora

Konstruktor bezargumentowy (czyli konstruktor domyślny)
jest wywoływany automatycznie w trakcie tworzenia obiektu
danej klasy, czyli po wykonaniu instrukcji:

QHZQD]ZDBNODV\ 

Jeżeli konstruktor wymaga podania argumentów, należy
umieścić je w nawiasie okrągłym, tak jak w przypadku zwy-
kłej metody:

QHZQD]ZDBNODV\ DUJXPHQW\BNRQVWUXNWRUD 

Przykład:

3XQNWSXQNW QHZ3XQNW  

Przeciążanie konstruktorów

Konstruktory, tak jak zwykłe metody, mogą być przeciążane,
tzn. każda klasa może mieć kilka konstruktorów, jeśli tylko róż-
nią się one przyjmowanymi argumentami.

Przykład:

FODVV3XQNW

^

LQW[

LQW\

3XQNW

^

[ 

\ 

`

3XQNW LQWZVS;LQWZVS<

^

[ ZVS;

\ ZVS<

`

3XQNW 3XQNWSXQNW

^

[ SXQNW[

\ SXQNW\

`

`

Konstruktor domyślny

Jeżeli w klasie nie będzie zdefiniowany żaden konstruktor, zo-
stanie do niej automatycznie dodany bezargumentowy kon-
struktor domyślny. Klasa taka będzie się zatem zachowywała
tak, jakby miała schematyczną postać:

SXEOLFFODVVQD]ZDBNODV\

^

QD]ZDBNODV\

^

`

SRODLPHWRG\NODV\

`

Jeżeli w klasie zostanie jawnie zdefiniowany konstruktor bez-
argumentowy, automatycznie stanie się on konstruktorem
domyślnym (jest to ważne przy dziedziczeniu), niezależnie od
tego, czy istnieją inne konstruktory.

Słowo kluczowe this

Słowo kluczowe

WKLV

to odwołanie do obiektu bieżącego.

Można je traktować jako referencję do aktualnego obiektu.
Odwołanie do pól i metod przez wskazanie

WKLV

odbywa się

za pomocą operatora kropki (



):

WKLVQD]ZDBSROD ZDUWRĞü

WKLVQD]ZDBPHWRG\ DUJXPHQW\ 

Umożliwia to m.in. stosowanie w metodach i konstruktorach
argumentów o nazwach identycznych z nazwami pól klasy.
Przykład:

SXEOLFFODVV3XQNW

^

LQW[

LQW\

3XQNW LQW[LQW\

^

WKLV[ [

WKLV\ \

`

`

Składowe statyczne

Składowe statyczne są to pola i metody klasy, które mogą ist-
nieć, nawet jeśli nie istnieje obiekt tej klasy. Każda taka meto-
da lub takie pole są wspólne dla wszystkich obiektów tej klasy.
Składowe te oznaczane są słowem

VWDWLF

.

Metody statyczne

Metody statyczne oznacza się słowem

VWDWLF

, które zwy-

czajowo powinno znaleźć się zaraz za modyfikatorem dostę-
pu; schematycznie:

PRG\ILNDWRUBGRVWĊSXVWDWLFW\SB]ZUDFDQ\

´QD]ZDBPHWRG\ DUJXPHQW\

^

WUHĞüPHWRG\

`

Przykład:

SXEOLFFODVV$

^

SXEOLFVWDWLFYRLGI

^

6\VWHPRXWSULQWOQ 0HWRGDINODV\

´$ 

`

`

Tak napisaną metodę można wywołać klasycznie, tzn. po utwo-
rzeniu obiektu klasy

$

, np. w postaci:

$D QHZ$ 

DI 

Ponieważ jednak metody statyczne istnieją nawet wtedy,
kiedy nie ma żadnego obiektu danej klasy, możliwe jest wy-
wołanie w postaci:

$I 

Ogólniej metodę statyczną można wywołać w postaci:

QD]ZDBNODV\QD]ZDBPHWRG\ DUJXPHQW\B

´PHWRG\ 

bez konieczności tworzenia obiektu danej klasy.

Pola statyczne

Pola statyczne są deklarowane przez umieszczenie słowa

VWDWLF

przed typem pola; schematycznie:

VWDWLFW\SBSRODQD]ZDBSROD

lub

PRG\ILNDWRUBGRVWĊSXVWDWLFW\SBSROD

´QD]ZDBSROD

Przykład:

SXEOLFFODVV$

^

SXEOLFVWDWLFLQWOLF]ED

`

Do pól statycznych można odwoływać się tak, jak do innych
pól klasy, poprzedzając je nazwą obiektu, czyli stosując kon-
strukcję:

QD]ZDBRELHNWXQD]ZDBSROD

bądź też poprzedzając je nazwą klasy:

QD]ZDBNODV\QD]ZDBSROD

Przykład:

$OLF]ED 

Dziedziczenie

Klasy potomne

W Javie dziedziczenie wyraża się za pomocą słowa

H[WHQGV

.

Schematyczna konstrukcja jest następująca:

FODVVNODVDBSRWRPQDH[WHQGVNODVDBED]RZD

^

WUHĞüNODV\SRWRPQHM

`

Zapis taki oznacza, że klasa potomna dziedziczy z klasy
bazowej.
Przykład:

FODVV3XQNW

^

LQW[

LQW\

`

FODVV3XQNW'H[WHQGV3XQNW

^

LQW]

`

Konstruktory w klasach potomnych

Podczas tworzenia obiektu klasy potomnej zawsze wywoły-
wany jest domyślny, bezargumentowy konstruktor klasy ba-
zowej. Jeżeli w klasie bazowej nie istnieje konstruktor domyśl-
ny, wymagane jest jawne wywołanie jednego z pozostałych
konstruktorów. Wywołanie to wymaga zastosowania składni
ze słowem kluczowym

VXSHU

. Słowo to oznacza w tym przy-

padku wywołanie konstruktora klasy bazowej. Schematyczna
konstrukcja jest następująca:

SXEOLF

FODVVNODVDBSRWRPQDH[WHQGVNODVDBED]RZD

^

NODVDBSRWRPQD

^

VXSHU DUJXPHQW\ 



«GDOV]\NRGNRQVWUXNWRUD«

 

`

`

Jeśli metodzie

VXSHU

przekaże się argumenty, zostanie wy-

wołany konstruktor klasy bazowej, który tym argumentom
odpowiada. Ważne jest, aby metoda

VXSHU

była pierwszą

instrukcją konstruktora klasy potomnej.
Przykład:

FODVV3XQNW

^

LQW[

LQW\

3XQNW LQW[LQW\

^

WKLV[ [

WKLV\ \

`

`

FODVV3XQNW'H[WHQGV3XQNW

^

LQW]

3XQNW' LQW[LQW\LQW]

^

VXSHU [\ 

WKLV] ]

`

`

Modyfikatory dostępu

Przed każdym polem i każdą metodą może wystąpić modyfi-
kator (inaczej specyfikator) dostępu, określający prawa dostę-
pu do składowych klasy. Wyróżnia się cztery rodzaje dostępu:

 x



publiczny,

 x



prywatny,

 x



chroniony,

 x



pakietowy.

Domyślnie, jeżeli przed składową klasy nie występuje żadne
określenie, dostęp jest pakietowy, co oznacza, że dostęp do
tej składowej mają wyłącznie klasy pakietu, w którym się ona
znajduje. Dostęp publiczny jest określany słowem

SXEOLF

,

dostęp prywatny — słowem

SULYDWH

, a chroniony — sło-

wem

SURWHFWHG

.

Dostęp publiczny

Jeżeli dana składowa klasy jest publiczna, oznacza to, że
mają do niej dostęp wszystkie inne klasy, czyli dostęp nie jest
w żaden sposób ograniczony. Modyfikator dostępu

SXEOLF

należy zatem umieścić przed nazwą typu, co schematycznie
wygląda tak:

SXEOLFQD]ZDBW\SXQD]ZDB]PLHQQHM

Podobnie jest z metodami — modyfikator dostępu powinien
być pierwszym elementem deklaracji:

SXEOLFW\SB]ZUDFDQ\QD]ZDBPHWRG\

´ DUJXPHQW\

Przykład:

FODVV3XQNW

^

SXEOLFLQW[

SXEOLFLQW\

SXEOLFLQWSRELHU];

^

UHWXUQ[

`

SXEOLFLQWSRELHU]<

^

UHWXUQ\

`

`

Dostęp prywatny

Składowe oznaczone słowem

SULYDWH

to takie, które do-

stępne są jedynie z wnętrza danej klasy, tzn. wszystkie metody
danej klasy mogą je dowolnie odczytywać, zapisywać (pola)
i wywoływać (metody), natomiast żadna inna klasa nie może
ich ani odczytać, ani zapisać. Modyfikator dostępu

SULYDWH

należy umieścić przed nazwą typu; schematycznie:

SULYDWHQD]ZDBW\SXQD]ZDB]PLHQQHM

Podobnie jest z metodami — specyfikator dostępu powinien
być pierwszym elementem deklaracji:

SULYDWHW\SB]ZUDFDQ\QD]ZDBPHWRG\

´DUJXPHQW\

Przykład:

FODVV3XQNW

^

SULYDWHLQW[

SULYDWHLQW\

SXEOLFLQWSRELHU];

^

UHWXUQ[

`

SXEOLFLQWSRELHU]<

^

UHWXUQ\

`

`

Dostęp chroniony

Składowe klasy, oznaczone słowem

SURWHFWHG

, to skła-

dowe chronione. Są one dostępne jedynie dla metod danej
klasy, klas potomnych oraz klas z tego samego pakietu.
Specyfikator dostępu

SURWHFWHG

należy umieścić przed

nazwą typu, co schematycznie wygląda tak:

SURWHFWHGQD]ZDBW\SXQD]ZDB]PLHQQHM

Podobnie jest z metodami — specyfikator dostępu powinien
być pierwszym elementem deklaracji:

SURWHFWHGW\SB]ZUDFDQ\QD]ZDBPHWRG\

´ DUJXPHQW\

Przykład:

FODVV3XQNW

^

SURWHFWHGLQW[

SURWHFWHGLQW\

SURWHFWHGLQWSRELHU];

^

UHWXUQ[

`

SURWHFWHGLQWSRELHU]<

^

UHWXUQ\

`

`

Dostęp pakietowy

Dostęp pakietowy jest dostępem domyślnym, stosowanym,
kiedy przed składową klasy nie występuje żaden modyfikator
dostępu. Konstrukcja taka oznacza, że dostęp do składowej
mają wszystkie klasy pakietu, w którym się ona znajduje.
Przykład:

FODVV3XQNW

^

LQW[

LQW\

LQWSRELHU];

^

UHWXUQ[

`

LQWSRELHU]<

^

UHWXUQ\

`

`

Klasy i składowe finalne

Klasy finalne

Klasa finalna to taka, z której nie wolno wyprowadzać innych
klas, innymi słowy: taka, z której nie mogą dziedziczyć inne
klasy. Pozwala to tworzyć klasy, których postać będzie z góry
ustalona. Jeśli klasa ma stać się klasą finalną, należy przed jej
nazwą umieścić słowo kluczowe

ILQDO

, zgodnie ze sche-

matem:

PRG\ILNDWRUBGRVWĊSXILQDOFODVV

´QD]ZDBNODV\

^

SRODLPHWRG\NODV\

`

Przykład:

SXEOLFILQDOFODVV([DPSOH

^

SXEOLFLQWOLF]ED

SXEOLFYRLGZ\VZLHWO

^

6\VWHPRXWSULQWOQ OLF]ED 

`

`

Pola finalne

Pole klasy oznaczone słowem

ILQDO

staje się polem final-

nym, czyli takim, którego wartość jest stała i nie można jej
zmieniać. Słowo kluczowe

ILQDO

umieszcza się zwyczajowo

przed nazwą typu danego pola:

ILQDOW\SBSRODQD]ZDBSROD

lub ogólniej:

PRG\ILNDWRUBGRVWĊSX>VWDWLF@ILQDOW\SB

´SRODQD]ZDBSROD

Poprawne są wszystkie poniższe deklaracje:

ILQDOLQWOLF]ED

SXEOLFILQDOGRXEOHOLF]ED

SXEOLFVWDWLFILQDOFKDU]QDN

Po takiej deklaracji pierwsze przypisanie wartości ustala nie-
zmienną wartość pola.
Deklaracja może też być połączona z inicjalizacją, np.:

SXEOLFILQDOGRXEOHOLF]ED 

Jeśli pole finalne jest typu referencyjnego, np.:

ILQDO3XQNWSXQNW QHZ3XQNW 

oznacza to, że nie można zmieniać pierwotnie przypisanej re-
ferencji. Nic jednak nie stoi na przeszkodzie, aby modyfikować
pola obiektu wskazywanego przez tę referencję, np.:

SXQNW[ 

Metody finalne

Metoda oznaczona słowem

ILQDO

staje się metodą finalną,

co oznacza, że nie będzie możliwe jej przesłonięcie w klasie
potomnej. Słowo

ILQDO

umieszczane jest przed typem war-

tości zwracanej przez metodę:

ILQDOW\SB]ZUDFDQ\QD]ZDBPHWRG\

´ DUJXPHQW\

lub ogólniej:

PRG\ILNDWRUBGRVWĊSX>VWDWLF@ILQDOW\SB

´]ZUDFDQ\QD]ZDBPHWRG\ DUJXPHQW\

Prawidłowe są następujące przykładowe deklaracje:

ILQDOYRLGPHWRGD ^ NRGPHWRG\ `

SXEOLFILQDOLQWPHWRGD ^ NRG

´PHWRG\ `

SXEOLFVWDWLFILQDOYRLGPHWRGD 

´^ NRGPHWRG\ `

3

Tablice informatyczne. Java. Wydanie III

S

S

S

S

background image

ciąg dalszy na stronie 5

Î

SXEOLFVWDWLFILQDOLQWPHWRGD LQW

´DUJXPHQW ^ NRGPHWRG\ `

Argumenty finalne

Argument finalny to taki, którego nie wolno zmieniać w ciele
metody. Aby uczynić argument finalnym, należy umieścić
słowo

ILQDO

przed jego typem. Schematycznie:

PRG\ILNDWRUBGRVWĊSX>VWDWLF@>ILQDO@

W\SB]ZUDFDQ\QD]ZDBPHWRG\ ILQDOW\SB

´DUJXPHQWXQD]ZDBDUJXPHQWX

Na przykład deklaracja publicznej metody o nazwie

PHWR

GD

, która nie zwraca żadnej wartości, lecz przyjmuje jeden

finalny argument typu

LQW

o nazwie

DUJXPHQW

, będzie

miała postać:

SXEOLFYRLGPHWRGD ILQDOLQWDUJXPHQW

^

 WUHĞüPHWRG\ 

`

Klasy i metody abstrakcyjne

Klasy i metody abstrakcyjne deklaruje się za pomocą słowa
kluczowego

DEVWUDFW

. Jeżeli w klasie znajduje się co naj-

mniej jedna metoda abstrakcyjna, klasa taka musi być również
zadeklarowana jako abstrakcyjna (nie wyklucza to istnienia
klas abstrakcyjnych, w których żadna z metod nie jest abs-
trakcyjna):

>SXEOLF@DEVWUDFWFODVVQD]ZDBNODV\^

>VSHF\ILNDWRUBGRVWĊSX@DEVWUDFWW\SB

´]ZUDFDQ\QD]ZDBPHWRG\ DUJXPHQW\ 

`

Metoda abstrakcyjna ma jedynie definicję, nie może zawierać
żadnego kodu. Przykładowa publiczna i abstrakcyjna klasa

6KDSH

zawierająca abstrakcyjną metodę

GUDZ

będzie

miała postać:

SXEOLFDEVWUDFWFODVV6KDSH^

SXEOLFDEVWUDFWYRLGGUDZ 

`

Po takiej deklaracji nie można będzie tworzyć obiektów klasy

6KDSH

.

Zadeklarowanie metody jako abstrakcyjnej wymusza jej rede-
klarację w klasie potomnej.

4

Tablice informatyczne. Java. Wydanie III

Tworzenie interfejsu

Interfejs to klasa czysto abstrakcyjna, czyli taka, w której
wszystkie metody traktuje się jako abstrakcyjne. Interfejs
deklaruje się za pomocą słowa kluczowego

LQWHUIDFH

.

Interfejs może być publiczny, jeśli jest zdefiniowany w pliku
o takiej samej nazwie jak nazwa interfejsu, lub pakietowy
(dostępny jedynie dla klas wchodzących w skład danego pa-
kietu). Schematyczna konstrukcja interfejsu jest następująca:

>SXEOLF@LQWHUIDFHQD]ZDBLQWHUIHMVX^

W\SB]ZUDFDQ\QD]ZDBPHWRG\ DUJXPHQW\ 

W\SB]ZUDFDQ\QD]ZDBPHWRG\ DUJXPHQW\ 

 GDOV]HPHWRG\LQWHUIHMVX 

W\SB]ZUDFDQ\QD]ZDBPHWRG\1 DUJXPHQW\ 

`

Przykładowy interfejs o nazwie

'UDZDEOH

zawierający

deklarację jednej tylko metody o nazwie

GUDZ

będzie miał

postać:

SXEOLFLQWHUIDFH'UDZDEOH^

SXEOLFYRLGGUDZ 

`

Implementowanie interfejsu

To, że klasa ma implementować dany interfejs, zaznacza się,
wykorzystując słowo kluczowe

LPSOHPHQWV

; schema-

tycznie:

>VSHF\ILNDWRUGRVWĊSX@>DEVWUDFW@

FODVVQD]ZDBNODV\LPSOHPHQWVQD]ZDB

´LQWHUIHMVX^



«SRODLPHWRG\NODV\«

 

`

Jeśli więc przykładowa klasa

6KDSH

ma implementować

przedstawiony wyżej interfejs

'UDZDEOH

, powinna mieć

postać:

SXEOLFFODVV6KDSHLPSOHPHQWV'UDZDEOH^

SXEOLFYRLGGUDZ ^

 ZQĊWU]HPHWRG\GUDZ 

`

`

Pola interfejsu

Pola interfejsu są jednocześnie publiczne, statyczne i finalne
— trzeba im przypisać wartości już w momencie ich deklara-
cji. Deklaracja pola interfejsu nie różni się od deklaracji pola
klasy. Zgodnie z konwencją przyjmuje się, że nazwy takich
pól pisze się wielkimi literami, a poszczególne człony nazwy
oddziela się znakiem podkreślenia, np.:

SXEOLFLQWHUIDFH1RZ\,QWHUIHMV^

LQW32/(B7<38B,17 

GRXEOH32/(B7<38B'28%/( 

2EMHFW32/(B7<38B2%-(&7 QHZ2EMHFW 

`

Instrukcja try...catch

Do przechwytywania wyjątków służy blok instrukcji

WU\FDWFK

o schematycznej, podstawowej postaci:

WU\^

LQVWUXNFMHPRJąFHVSRZRGRZDüZ\MąWHN

`

FDWFK 7\S:\MąWNXLGHQW\ILNDWRU:\MąWNX ^

REVáXJDZ\MąWNX

`

W nawiasie klamrowym, występującym po słowie

WU\

,

umieszcza się instrukcję (instrukcje), która może spowodo-
wać wystąpienie błędu. W bloku występującym po

FDWFK

należy umieścić kod, który ma zostać wykonany, kiedy wy-
stąpi wyjątek.
Przykład:

SXEOLFVWDWLFYRLGPDLQ 6WULQJDUJV>@

^

LQWWDE>@ QHZLQW>@

WU\^

SU]HNURF]HQLHLQGHNVXWDEOLF\

WDE>@ 

`

FDWFK $UUD\,QGH[2XW2I%RXQGV([FHSWLRQH ^

SU]HFKZ\FHQLHZ\MąWNX

6\VWHPRXWSULQWOQ 1LHSUDZLGáRZ\

´LQGHNVWDEOLF\ 

`

`

Hierarchia wyjątków

Każdy wyjątek jest obiektem pewnej klasy. Klasy podlegają
z kolei regułom dziedziczenia, zgodnie z którymi powstaje
hierarchia klas. Wszystkie typowe wyjątki, które można stan-
dardowo przechwytywać w aplikacjach za pomocą bloku

WU\FDWFK

, dziedziczą (bezpośrednio lub pośrednio)

z klasy

([FHSWLRQ

, dziedziczącej z klas

7KURZDEOH

oraz

2EMHFW

. Wynika z tego ważna właściwość: jeżeli dana

instrukcja może wygenerować wyjątek typu X, to można za-
wsze przechwycić wyjątek ogólniejszy, czyli wyjątek, którego
typem będzie jedna z klas nadrzędnych w stosunku do X.

Przechwytywanie wielu wyjątków

W jednym bloku

WU\FDWFK

można przechwytywać

wiele wyjątków. Konstrukcja taka zawiera wtedy jeden blok

WU\

i wiele bloków

FDWFK

:

WU\^

LQVWUXNFMHPRJąFHVSRZRGRZDü

´Z\MąWHN

`

FDWFK .ODVD:\MąWNXLGHQW\ILNDWRU

´:\MąWNX ^

REVáXJDZ\MąWNX

`

FDWFK .ODVD:\MąWNXLGHQW\ILNDWRU

´:\MąWNX ^

REVáXJDZ\MąWNX

`



«GDOV]HEORNLFDWFK«



FDWFK .ODVD:\MąWNX1LGHQW\ILNDWRU

´:\MąWNX1 ^

REVáXJDZ\MąWNXQ

`

Po wygenerowaniu wyjątku maszyna wirtualna sprawdza,
czy jego typem jest

.ODVD:\MąWNX

— jeśli tak, to wy-

konywane są instrukcje obsługi tego wyjątku i blok

WU\

FDWFK

jest opuszczany. Jeżeli jednak typem wyjątku nie jest

.ODVD:\MąWNX

, wtedy sprawdza się, czy jest on typu

.ODVD:\MąWNX

itd.

Przy przechwytywaniu wielu wyjątków w jednym bloku nale-
ży pamiętać o ich hierarchii. Ogólna zasada jest taka: nie ma
znaczenia kolejność, jeżeli wszystkie wyjątki są na jednym
poziomie hierarchii. Jeśli jednak przechwytywane są wyjątki
z różnych poziomów, najpierw muszą to być wyjątki bardziej
szczegółowe, czyli stojące niżej w hierarchii, a dopiero po
nich wyjątki bardziej ogólne, czyli stojące wyżej w hierarchii.
Przykład:

SXEOLFVWDWLFYRLGPDLQ 6WULQJDUJV>@

^

WU\^

LQWOLF]ED 

`

FDWFK $ULWKPHWLF([FHSWLRQH ^

6\VWHPRXWSULQWOQ H 

`

FDWFK 5XQWLPH([FHSWLRQH ^

6\VWHPRXWSULQWOQ H 

`

FDWFK ([FHSWLRQH ^

6\VWHPRXWSULQWOQ H 

`

`

Zagnieżdżanie bloków try...catch

Bloki

WU\FDWFK

można zagnieżdżać. W jednym bloku

przechwytującym wyjątek X może istnieć drugi blok, który
będzie przechwytywał wyjątek Y. Schematycznie taka kon-
strukcja ma postać:

WU\^

LQVWUXNFMHPRJąFHVSRZRGRZDü

´Z\MąWHN

WU\^

LQVWUXNFMHPRJąFHVSRZRGRZDü

´Z\MąWHN

`

FDWFK 7\S:\MąWNXLGHQW\ILNDWRU

´:\MąWNX ^

REVáXJDZ\MąWNX

`

`

FDWFK 7\S:\MąWNXLGHQW\ILNDWRU

´:\MąWNX ^

REVáXJDZ\MąWNX

`

Przykład:

SXEOLFVWDWLFYRLGPDLQ 6WULQJDUJV>@

^

3XQNWSXQNW QXOO

LQWOLF]ED

WU\^

WU\^

OLF]ED 

`

FDWFK $ULWKPHWLF([FHSWLRQH ^

6\VWHPRXWSULQWOQ 1LHSUDZLGáRZD

´RSHUDFMDDU\WPHW\F]QD 

6\VWHPRXWSULQWOQ 3U]\SLVXMĊ

´]PLHQQHMOLF]EDZDUWRĞü 

OLF]ED 

`

SXQNW[ OLF]ED

`

FDWFK ([FHSWLRQH ^

6\VWHPRXWSULQWOQ %áąGRJyOQ\ 

6\VWHPRXWSULQWOQ H 

`

`

Zgłaszanie wyjątków

Zgłoszenie własnego wyjątku polega na utworzeniu nowego
obiektu jednej z klas wyjątków. Za pomocą instrukcji

QHZ

należy utworzyć nowy obiekt klasy, która dziedziczy (pośred-
nio lub bezpośrednio) z klasy

7KURZDEOH

. W najbardziej

ogólnym przypadku będzie to klasa

([FHSWLRQ

. Tak utwo-

rzony obiekt musi stać się parametrem instrukcji

WKURZ

, np.:

WKURZQHZ([FHSWLRQ 

Jeśli taki wyjątek zostanie obsłużony przez znajdującą się
w danym bloku (danej metodzie) instrukcję

WU\

FDWFK

, nie trzeba robić nic więcej. Jeśli jednak nie zostanie

obsłużony, w specyfikacji metody należy zaznaczyć, że może
ona taki wyjątek zgłaszać. Wymaga to zastosowania instrukcji

WKURZV

w ogólnej postaci:

VSHF\ILNDWRUBGRVWĊSX>VWDWLF@>ILQDO@

´W\SB]ZUDFDQ\QD]ZDBPHWRG\ DUJXPHQW\

WKURZV.ODVD:\MąWNX.ODVD:\MąWNX

´.ODVD:\MąWNX1

^

WUHĞüPHWRG\

`

Przykład:

SXEOLFVWDWLFYRLGPDLQ 6WULQJDUJV>@

WKURZV([FHSWLRQ

^

WKURZQHZ([FHSWLRQ 

`

Jeżeli zgłaszany wyjątek ma otrzymać własny komunikat,
należy przekazać go jako argument konstruktora klasy

([FHSWLRQ

:

WKURZQHZ([FHSWLRQ NRPXQLNDW 

lub:

([FHSWLRQH[FHSWLRQ QHZ

´([FHSWLRQ NRPXQLNDW 

WKURZH[FHSWLRQ

Ponowne zgłaszanie wyjątków

Raz przechwycony wyjątek można zgłosić ponownie
(„wyrzucić”), wykorzystując instrukcję

WKURZ

:

WU\^

LQVWUXNFMHPRJąFHVSRZRGRZDü

´Z\MąWHN

`

FDWFK W\S:\MąWNXLGHQW\ILNDWRU:\MąWNX ^

LQVWUXNFMHREVáXJXMąFHV\WXDFMĊ

´Z\MąWNRZą

WKURZLQGHQW\ILNDWRU:\MąWNX

`

Przykład:

SXEOLFVWDWLFYRLGPDLQ 6WULQJDUJV>@

^

WU\^

LQWOLF]ED 

`

FDWFK $ULWKPHWLF([FHSWLRQH ^

6\VWHPRXWSULQWOQ 7XZ\MąWHN

´]RVWDáSU]HFKZ\FRQ\ 

SRQRZQH]JáRV]HQLHZ\MąWNX

WKURZH

`

`

Tworzenie wyjątków

W Javie można tworzyć własne klasy wyjątków. Należy napisać
klasę pochodną, dziedziczącą pośrednio lub bezpośrednio
z klasy

7KURZDEOH

. W praktyce wyjątki najczęściej są wy-

prowadzane z klasy

([FHSWLRQ

i klas od niej pochodnych:

SXEOLFFODVVQD]ZDBNODV\H[WHQGV([FHSWLRQ

^

WUHĞüNODV\

`

Przykład (nowy wyjątek

*HQHUDO([FHSWLRQ

):

SXEOLFFODVV*HQHUDO([FHSWLRQH[WHQGV

´([FHSWLRQ

^

`

Zgłoszenie wyjątku

*HQHUDO([FHSWLRQ

:

SXEOLFVWDWLFYRLGPDLQ 6WULQJDUJV>@

WKURZV*HQHUDO([FHSWLRQ

^

WKURZQHZ*HQHUDO([FHSWLRQ 

`

Sekcja finally

Do bloku

WU\

możemy dołączyć sekcję

ILQDOO\

, która

będzie wykonywana zawsze, niezależnie od tego, co będzie
działo się w bloku

WU\

; schematycznie:

WU\^

LQVWUXNFMHPRJąFHVSRZRGRZDüZ\MąWHN

`

FDWFK ^

LQVWUXNFMHVHNFMLFDWFK

`

ILQDOO\^

LQVWUXNFMHVHNFMLILQDOO\

`

Sekcję

ILQDOO\

można stosować w przypadku dowolnych

instrukcji, nie ma też konieczności przechwytywania wyjąt-
ku. Stosowana jest wtedy konstrukcja

WU\ILQDOO\

w postaci:

WU\^

LQVWUXNFMH

`

ILQDOO\^

LQVWUXNFMH

`

Kod z bloku

ILQDOO\

zostanie wykonany zawsze, niezależ-

nie od tego, jakie instrukcje znajdują się w bloku

WU\

.

Tworzenie pakietów

Klasy w Javie grupowane są w jednostki nazywane pakieta-
mi. Pakiet to inaczej biblioteka, zestaw powiązanych tema-
tycznie klas. Do tworzenia pakietów służy słowo kluczowe

SDFNDJH

, po którym następuje nazwa pakietu, zakończona

znakiem średnika; schematycznie:

SDFNDJHQD]ZDBSDNLHWX

Instrukcja ta musi znajdować się na początku pliku, przed nią
nie może być żadnych innych instrukcji. Przed

SDFNDJH

mogą występować jedynie komentarze:

SDNLHWLNODVDSDNLHWRZD

SDFNDJHQD]ZDBSDNLHWX

FODVVQD]ZDBNODV\

^



WUHĞüNODV\

 

`

Aby skorzystać z klasy zawartej w pakiecie w innej klasie, na-
leży użyć dyrektywy

LPSRUW

w postaci:

LPSRUWQD]ZDBSDNLHWXQD]ZDBNODV\

Dyrektywa

LPSRUW

musi znajdować się na początku pliku.

Aby zaimportować wszystkie klasy z danego pakietu, dyrek-
tywa

LPSRUW

powinna mieć postać:

LPSRUWQD]ZDBSDNLHWX 

Przykład:

LPSRUWMDYDLR 

Nazwy pakietów

Nazwy pakietów powinny być pisane w całości małymi lite-
rami, a jeśli pakiet ma być udostępniony publicznie, należy
poprzedzić go odwróconą nazwą domeny twórcy pakietu.
Nie jest to obligatoryjne, ale pozwala na utworzenie, z dużym
prawdopodobieństwem, nazwy unikatowej w skali globu.
Jeżeli np. domeną autora jest

marcinlis.com i ma powstać

pakiet o nazwie

grafika, jego pełna nazwa będzie brzmieć:

com.marcinlis.grafika. Wszystkie klasy tego pakietu będą
musiały zostać umieszczone w strukturze katalogów odpo-
wiadających tej nazwie.

Uogólnianie w klasach

Jeśli w klasie ma być użyty typ uogólniony (z ang. generic
type
), należy to zaznaczyć w jej definicji za pomocą nawiasu
kątowego umieszczonego za nazwą klasy. W nawiasie trzeba
umieścić identyfikatory typów, które zostaną zastosowane,
oddzielając je od siebie znakami przecinka; schematycznie:

>SXEOLF@FODVVQD]ZDBNODV\LGLG

´«LG1!

^

WUHĞüNODV\

`

Każdy z identyfikatorów może być następnie użyty we
wnętrzu klasy jako określenie konkretnego typu danych.
Zwyczajowo stosuje się identyfikatory jednoliterowe (rozpo-
czynając od litery T), jednak nie jest to ograniczenie formalne
(identyfikator typu może być wieloznakowy). Przykład klasy
przechowującej jedną wartość dowolnego typu:

SXEOLFFODVV2SDNRZDQLH7!^

SXEOLF7YDO

`

Przykład klasy przechowującej dwie wartości dwóch do-
wolnych typów:

SXEOLFFODVV2SDNRZDQLH79!^

SXEOLF7YDO

SXEOLF9YDO

`

Przy deklaracji zmiennych klasy korzystającej z typów uogól-
nionych należy podać w nawiasie kątowym określenia kon-
kretnych typów; schematycznie:

QD]ZDBNODV\LGLG«LG1!QD]ZDB

´]PLHQQHM

Przykład:

2SDNRZDQLH,QWHJHU!RS

2SDNRZDQLH,QWHJHU6WULQJ!RS

Analogicznie należy postąpić przy tworzeniu obiektów;
schematycznie:

QHZQD]ZDBNODV\LGLG«LG1! 

Przykład:

2SDNRZDQLH,QWHJHU!RS QHZ

´2SDNRZDQLH,QWHJHU! 

2SDNRZDQLH,QWHJHU6WULQJ!RS QHZ

´2SDNRZDQLH,QWHJHU6WULQJ! 

Po takich definicjach możliwe będą m.in. następujące przy-
pisania:

RSYDO 

RSYDO QHZ,QWHJHU  

RSYDO 

RSYDO DEF[\]

Uogólnianie metod

Uogólnianie metod jest niezależne od uogólnień klas, więc
w klasie uogólnionej mogą się znajdować nieuogólnione
metody, a uogólnione metody mogą się znajdować w zwy-
kłych klasach. Jeśli metoda ma operować na argumencie
typu ogólnego, to specyfikację tego typu należy umieścić
przed typem zwracanym przez metodę; ogólnie:

>PRG\ILNDWRUBGRVWĊSX@LGLG«LG1!

´W\SB]ZUDFDQ\QD]ZDBPHWRG\ DUJXPHQW\

^

WUHĞüPHWRG\

`

Przykład:

SXEOLFFODVV0DLQ

^

SXEOLFVWDWLF8!YRLGVKRZ 8YDO

^

6\VWHPRXWSULQWOQ YDOWR6WULQJ 

`

SXEOLFVWDWLFYRLGPDLQ 6WULQJDUJV>@

^

VKRZ QHZ2EMHFW 

VKRZ QHZ,QWHJHU  

`

`

INTERFEJSY

WYJĄTKI

PAKIETY

TYPY UOGÓLNIONE

S

S

S

S

S

S

S

S

S

S

background image

Deklaracja

Opis

3ULQW6WUHDPDSSHQG FKDUF

Dodaje znak do strumienia

3ULQW6WUHDPDSSHQG &KDU6HTXHQFHFVT

Dodaje do strumienia sekwencję znaków

3ULQW6WUHDPDSSHQG &KDU6HTXHQFHFVT

´

LQWVWDUWLQWHQG

Dodaje do strumienia część sekwencji znaków wyznaczaną
przez indeksy

VWDUW

i

HQG

ERROHDQFKHFN(UURU

Opróżnia bufor oraz sprawdza, czy nie wystąpił błąd

SURWHFWHGYRLGFOHDU(UURU

Zeruje status błędu

YRLGFORVH

Zamyka strumień

YRLGIOXVK

Powoduje opróżnienie bufora

3ULQW6WUHDPIRUPDW /RFDOHO6WULQJ

´

IRUPDW2EMHFW«DUJV

Zapisuje w strumieniu dane określone przez argumenty

DUJV

w formacie zdefiniowanym przez

IRUPDW

, zgodnie z ustawienia-

mi narodowymi wskazanymi przez

O

3ULQW6WUHDPIRUPDW 6WULQJIRUPDW

´

2EMHFW«DUJV

Zapisuje w strumieniu dane określone przez argumenty

DUJV

w formacie określonym przez

IRUPDW

YRLGSULQW ERROHDQE

Wyświetla wartość typu

ERROHDQ

YRLGSULQW FKDUF

Wyświetla znak

YRLGSULQW FKDU>@V

Wyświetla tablicę znaków

YRLGSULQW GRXEOHG

Wyświetla wartość typu

GRXEOH

YRLGSULQW IORDWI

Wyświetla wartość typu

IORDW

YRLGSULQW LQWL

Wyświetla wartość typu

LQW

YRLGSULQW ORQJO

Wyświetla wartość typu

ORQJ

YRLGSULQW 2EMHFWREM

Wyświetla ciąg znaków uzyskany przez wywołanie metody

WR6WULQJ

obiektu

REM

YRLGSULQW 6WULQJV

Wyświetla ciąg znaków

V

3ULQW6WUHDPSULQWI /RFDOHO6WULQJ

´

IRUPDW2EMHFW«DUJV

Zapisuje w strumieniu dane określone przez argumenty

DUJV

w formacie zdefiniowanym przez

IRUPDW

, zgodnie z ustawienia-

mi narodowymi wskazanymi przez

O

3ULQW6WUHDPSULQWI 6WULQJIRUPDW

´

2EMHFW«DUJV

Zapisuje w strumieniu dane określone przez argumenty

DUJV

w formacie określonym przez

IRUPDW

YRLGSULQWOQ

Wyświetla znak końca linii (powoduje przejście do nowej linii)

YRLGSULQWOQ ERROHDQE

Wyświetla wartość typu

ERROHDQ

oraz znak końca linii

YRLGSULQWOQ FKDUF

Wyświetla znak zapisany w

F

oraz znak końca linii

YRLGSULQWOQ FKDU>@WDE

Wyświetla tablicę znaków

WDE

oraz znak końca linii

YRLGSULQWOQ GRXEOHG

Wyświetla wartość typu

GRXEOH

oraz znak końca linii

YRLGSULQWOQ IORDWI

Wyświetla wartość typu

IORDW

oraz znak końca linii

YRLGSULQWOQ LQWL

Wyświetla wartość typu

LQW

oraz znak końca linii

YRLGSULQWOQ ORQJO

Wyświetla wartość typu

ORQJ

oraz znak końca linii

YRLGSULQWOQ 2EMHFWREM

Wyświetla ciąg znaków uzyskany przez wywołanie metody

WR6WULQJ

obiektu

REM

oraz znak końca linii

YRLGSULQWOQ 6WULQJV

Wyświetla ciąg znaków

V

oraz znak końca linii

SURWHFWHGYRLGVHW(UURU

Ustawia strumień w stan błędu

YRLGZULWH E\WH>@EXILQWRII

´

LQWOHQ

Zapisuje do strumienia bajty z tablicy

EXI

, w liczbie wskazywa-

nej przez

OHQ

, poczynając od komórki określonej przez

RII

YRLGZULWH LQWE

Zapisuje bajt

E

do strumienia

System plików

Klasa File

Klasa

)LOH

pozwala na wykonywanie podstawowych operacji na plikach i katalogach, takich jak ich tworzenie i usuwanie,

operacje na nazwach czy pobieranie parametrów (np. czasu utworzenia bądź modyfikacji). Nie jest to jednak klasa, która umoż-
liwiałaby modyfikację zawartości pliku. Wybrane metody udostępniane przez klasę

)LOH

zostały zebrane w poniższej tabeli.

Typ

Nazwa metody

Opis

ERROHDQ

FDQ([HFXWH

Sprawdza, czy aplikacja może uruchomić dany plik

ERROHDQ

FDQ5HDG

Sprawdza, czy aplikacja może odczytywać dany plik

ERROHDQ

FDQ:ULWH

Sprawdza, czy aplikacja ma prawa zapisu do danego pliku

LQW

FRPSDUH7R )LOHSDWKQDPH

Porównuje ścieżki dostępu do plików

VWDWLF)LOH FUHDWH7HPS)LOH 6WULQJ

´

SUHIL[6WULQJVXIIL[

Tworzy pusty plik tymczasowy. Nazwa tego pliku powstaje
przy wykorzystaniu prefiksu i sufiksu przekazanych
w parametrach.

VWDWLF)LOH

FUHDWH7HPS)LOH 6WULQJ

´

SUHIL[6WULQJVXIIL[

´

ERROHDQGHOHWH2Q([LW

´

)LOH$WWULEXWH"!DWWUV

Tworzy pusty plik tymczasowy o atrybutach wskazanych
przez

DWWUV

. Argument

GHOHWH2Q([LW

wskazuje, czy

plik ma być automatycznie usunięty po zakończeniu pracy
maszyny wirtualnej. Metoda dostępna od JDK 1.7.

VWDWLF)LOH

FUHDWH7HPS)LOH 6WULQJ

´

SUHIL[6WULQJVXIIL[

´

)LOHGLUHFWRU\

Tworzy pusty plik tymczasowy w katalogu wskazywanym
przez argument

GLUHFWRU\

ERROHDQ

GHOHWH

Usuwa plik lub katalog

YRLG

GHOHWH2Q([LW

Zaznacza, że plik ma zostać usunięty, kiedy maszyna
wirtualna będzie kończyć pracę

ERROHDQ

H[LVWV

Sprawdza istnienie pliku lub katalogu

)LOH

JHW$EVROXWH)LOH

Zwraca obiekt zawierający bezwzględną nazwę pliku
lub katalogu (wraz z pełną ścieżką dostępu)

6WULQJ

JHW$EVROXWH3DWK

Zwraca bezwzględną ścieżkę dostępu do pliku lub katalogu

)LOH

JHW&DQRQLFDO)LOH

Zwraca obiekt zawierający kanoniczną postać nazwy pliku
lub katalogu (wraz z pełną ścieżką dostępu)

6WULQJ

JHW&DQRQLFDO3DWK

Zwraca kanoniczną postać ścieżki dostępu do pliku
lub katalogu

ORQJ

JHW)UHH6SDFH

Zwraca ilość wolnego miejsca na partycji wskazywanej
przez bieżący obiekt typu

)LOH

6WULQJ

JHW1DPH

Zwraca nazwę pliku (bez ścieżki dostępu)

6WULQJ

JHW3DUHQW

Zwraca nazwę katalogu nadrzędnego

)LOH

JHW3DUHQW)LOH

Zwraca obiekt wskazujący na katalog nadrzędny

6WULQJ

JHW3DWK

Zwraca nazwę bieżącego katalogu lub pliku w postaci
obiektu typu

6WULQJ

ORQJ

JHW7RWDO6SDFH

Zwraca całkowity rozmiar partycji wskazywanej przez
bieżący obiekt

ORQJ

JHW8VDEOH6SDFH

Zwraca ilość miejsca dostępnego dla maszyny wirtualnej
na partycji wskazywanej przez bieżący obiekt

LQW

KDVK&RGH

Oblicza wartość funkcji skrótu dla danej ścieżki dostępu

ERROHDQ

LV$EVROXWH

Sprawdza, czy dana ścieżka dostępu jest ścieżką bez-
względną

ERROHDQ

LV'LUHFWRU\

Sprawdza, czy ścieżka dostępu wskazuje na katalog

ERROHDQ

LV)LOH

Sprawdza, czy ścieżka dostępu wskazuje na plik

ERROHDQ

LV+LGGHQ

Sprawdza, czy ścieżka dostępu wskazuje na ukryty katalog
lub plik

ORQJ

ODVW0RGLILHG

Zwraca czas ostatniej modyfikacji pliku lub katalogu

ORQJ

OHQJWK

Zwraca wielkość pliku w bajtach

6WULQJ>@

OLVW

Zwraca zawartość katalogu w postaci tablicy obiektów
typu

6WULQJ

6WULQJ>@

OLVW )LOHQDPH)LOWHUILOWHU

Zwraca listę plików i podkatalogów spełniających kryteria
wskazane przez

ILOWHU

)LOH>@

OLVW)LOHV

Zwraca zawartość katalogu w postaci obiektów typu

)LOH

)LOH>@

OLVW)LOHV )LOH)LOWHUILOWHU

Zwraca zawartość katalogu spełniającą kryteria wskazane
przez

ILOWHU

w postaci obiektów typu

)LOH

Standardowy strumień wejściowy

Standardowy strumień wejściowy jest reprezentowany przez obiekt

6\VWHPLQ

, czyli obiekt

LQ

zawarty w klasie

6\VWHP

(statyczne i finalne pole klasy). Jest to obiekt typu

,QSXW6WUHDP

(klasy reprezentującej strumienie wejściowe). Metody udo-

stępniane przez tę klasę zostały zebrane w poniższej tabeli.

Typ zwracany

Metoda

Opis

LQW

DYDLODEOH

Zwraca liczbę bajtów, które mogą być odczytane ze strumienia

YRLG

FORVH

Zamyka strumień i zwalnia związane z nim zasoby

YRLG

PDUN LQWUHDGOLPLW

Zaznacza bieżącą pozycję w strumieniu

ERROHDQ

PDUN6XSSRUWHG

Sprawdza, czy strumień może obsługiwać metody

PDUN

i

UHVHW

DEVWUDFWLQW UHDG

Odczytuje kolejny bajt ze strumienia

LQW

UHDG E\WH>@E

Odczytuje ze strumienia liczbę bajtów nie większą niż rozmiar tabli-
cy

E

. Zwraca faktycznie odczytaną liczbę bajtów.

LQW

UHDG E\WH>@E

LQWRIILQWOHQ

Odczytuje ze strumienia liczbę bajtów nie większą niż wskazywana
przez

OHQ

, i zapisuje je w tablicy

E

, począwszy od komórki wska-

zywanej przez

RII

. Zwraca faktycznie przeczytaną liczbę bajtów.

YRLG

UHVHW

Wraca do pozycji strumienia wskazywanej przez wywołanie metody

PDUN

ORQJ

VNLS ORQJQ

Pomija w strumieniu liczbę bajtów wskazywanych przez

Q

. Zwraca

faktycznie pominiętą liczbę bajtów.

Wczytywanie tekstu za pomocą klasy buforowej

Należy skorzystać z metody

UHDG/LQH

klasy

%XIIHUHG5HDGHU

. Aby utworzyć obiekt tej klasy powiązany ze standardowym

strumieniem wejściowym

6\VWHPLQ

, trzeba dodatkowo utworzyć obiekt pośredniczący klasy

,QSXW6WUHDP5HDGHU

,

stosując konstrukcję:

%XIIHUHG5HDGHUEU,Q QHZ%XIIHUHG5HDGHU

QHZ,QSXW6WUHDP5HDGHU 6\VWHPLQ

 

Przykład:

SXEOLFVWDWLFYRLGPDLQ 6WULQJDUJV>@

^

%XIIHUHG5HDGHUEU,Q QHZ%XIIHUHG5HDGHU

QHZ,QSXW6WUHDP5HDGHU 6\VWHPLQ

 

6\VWHPRXWSULQWOQ :SURZDGĨZLHUV]WHNVWX]DNRĔF]RQ\]QDNLHP(QWHU 

WU\^

6WULQJOLQH EU,QUHDG/LQH 

6\VWHPRXWSULQW :SURZDG]RQDOLQLDWROLQH 

`

FDWFK ,2([FHSWLRQH ^

6\VWHPRXWSULQWOQ %áąGSRGF]DVRGF]\WXVWUXPLHQLD 

`

`

Wprowadzanie liczb

Do wprowadzania wartości liczbowych można zastosować klasę

6WUHDP7RNHQL]HU

, która dzieli strumień wejściowy na

jednostki leksykalne, czyli tokeny. Ma ona pole o nazwie

QYDO

, które zawiera wartość aktualnego tokena w postaci liczby typu

GRXEOH

(o ile ten token jest liczbą). Typ tokena można rozpoznać, odczytując stan pola

WW\SH

, które może przyjmować na-

stępujące wartości:

 x



6WUHDP7RNHQL]HU77B(2)

— osiągnięty został koniec strumienia;

 x



6WUHDP7RNHQL]HU77B(2/

— osiągnięty został koniec linii;

 x



6WUHDP7RNHQL]HU77B180%(5

— token jest liczbą;

 x



6WUHDP7RNHQL]HU77B:25'

— token jest słowem.

Przykład:

LPSRUWMDYDLR 

SXEOLFFODVV0DLQ

^

SXEOLFVWDWLFYRLGPDLQ 6WULQJDUJV>@

^

6WUHDP7RNHQL]HUVWU7RN QHZ6WUHDP7RNHQL]HU

QHZ%XIIHUHG5HDGHU

QHZ,QSXW6WUHDP5HDGHU 6\VWHPLQ



 



6\VWHPRXWSULQW :SURZDGĨOLF]EĊ 



WU\^

VWU7RNQH[W7RNHQ 

`

FDWFK ,2([FHSWLRQH ^

6\VWHPRXWSULQW %áąGSRGF]DVRGF]\WXGDQ\FK]HVWUXPLHQLD 

UHWXUQ

`

LI VWU7RNWW\SH 6WUHDP7RNHQL]HU77B180%(5 ^

6\VWHPRXWSULQW 7RQLHMHVWSUDZLGáRZDOLF]ED 

UHWXUQ

`

GRXEOHOLF]ED VWU7RNQYDO

6\VWHPRXWSULQW :SURZDG]RQDOLF]EDWROLF]ED 

`

`

5

Tablice informatyczne. Java. Wydanie III

WSPÓŁPRACA Z SYSTEMEM

Klasa Scanner

Począwszy od wersji Javy 5.0 (1.5), do przetwarzania danych
wejściowych można używać klasy

6FDQQHU

. Zawiera ona

konstruktory, które mogą przyjmować obiekty klas:

)LOH

,

,QSXW5HDGHU

i

6WULQJ

, a także obiekty implementujące

interfejsy

5HDGDEOH

lub

5HDGDEOH%\WH&KDQQHO

. Jest

to więc zestaw pozwalający na obsługę bardzo wielu formatów
wejściowych. Metod klasy

6FDQQHU

jest bardzo wiele, a najbar-

dziej przydatne są te z rodziny

QH[W

i

KDV1H[W

, konstruowa-

ne na bardzo prostych zasadach, które schematycznie można
przedstawić jako:

KDV1H[W1D]ZD7\SX3URVWHJR

oraz:

QH[W1D]ZD7\SX3URVWHJR

Istnieją więc metody:

KDV1H[W

,

KDV1H[W,QW

,

KDV1H[W

'RXEOH

,

KDV1H[W%\WH

itd. Wszystkie one zwracają wartość

WUXH

, jeśli w powiązanym strumieniu danych kolejną jednostką

leksykalną jest wartość danego typu prostego, natomiast „pusta”
metoda

KDV1H[W

zwraca wartość

WUXH

, jeżeli w strumieniu

istnieje jakakolwiek kolejna jednostka leksykalna. Dodatkowo
istnieje metoda

KDV1H[W/LQH

, która określa, czy w strumie-

niu znajduje się wiersz tekstu.
Metody z rodziny

QH[W

, a więc:

QH[W,QW

,

QH[W'RXEOH

,

QH[W%\WH

itd., zwracają kolejną jednostkę leksykalną w postaci

wartości danego typu prostego. Metoda

QH[W

zwraca z kolei to-

ken w postaci ciągu znaków, a

QH[W/LQH

— cały wiersz tekstu.

Przykład:

LPSRUWMDYDXWLO 

SXEOLFFODVV0DLQ^

SXEOLFVWDWLFYRLGPDLQ 6WULQJ

´DUJV>@ ^

6FDQQHUVFDQQHU QHZ

´6FDQQHU 6\VWHPLQ 

6\VWHPRXWSULQW :SURZDGĨZDUWRĞü

´FDáNRZLWą 

ZKLOH VFDQQHUKDV1H[W,QW ^

6\VWHPRXWSULQW 7RQLHMHVW

´ZDUWRĞüFDáNRZLWD 

6\VWHPRXWSULQWOQ VFDQQHU

´QH[W 

6\VWHPRXWSULQW :SURZDGĨ

´ZDUWRĞüFDáNRZLWą 

`

LQWYDOXH VFDQQHUQH[W,QW 

LQWUHVXOW YDOXH 

6\VWHPRXWSULQWOQ YDOXH 

´ UHVXOW 

`

`

Standardowy strumień wyjściowy

Dane można wyprowadzać (np. na ekran konsoli) za pomocą instrukcji

6\VWHPRXWSULQWOQ

lub

6\VWHPRXW

SULQW

, czyli przez wywołanie metody

SULQWOQ

lub

SULQW

obiektu

6\VWHPRXW

. Jest to obiekt klasy

3ULQW6WUHDP

.

Metody udostępniane przez tę klasę zostały zebrane w tabeli u góry po prawej.

S

S

background image

ISBN: 978-83-246-4707-1

Poleć książkę na Facebook.com

Kup w wersji papierowej

Oceń książkę

Księgarnia internetowa

Lubię to!

»

Nasza społeczność

Wydawnictwo Helion

ul. Kościuszki 1c, 44-100 Gliwice

tel. 32 230 98 63

e-mail: helion@helion.pl

http://helion.pl

Informatyka w najlepszym wydaniu



 

 



   

     

 



 

 

  ­

    







 €‚ 

    ƒ„… †‡ˆ †‡







Zapis do pliku

Przykład:

 †‰Š

‹Œ

‹  ‰ Ž‘



 ’“

    ” „•Œ– —

 



ƒ‹€ ƒ

 €    





 

 Ž˜‘ 



   

    ƒ„™– ‹‹ ™

 



 

 

  

‹€ 

š š››

‹

  ƒ œž







 €‚ 

    žƒ„… †‡ˆ †‡

 







Ž‘

  



 

Zwraca zawartość katalogu spełniającą kryteria wskazane
przez

 

w postaci obiektów typu



  



Ž‘

  

Wyświetla wszystkie „korzenie” systemu plików

‹



Tworzy nowy katalog

‹



Tworzy nowy katalog z uwzględnieniem nieistniejących
katalogów nadrzędnych

‹

Ÿ 

Zmienia nazwę na wskazywaną przez argument



‹

  ‹‹



 ‹

Ustawia prawo wykonywalności dla danego pliku lub
katalogu

‹

   Œ 

Ustawia datę ostatniej modyfikacji pliku lub katalogu

‹

 ‹‹



‹

Ustawia prawo do odczytu dla danego pliku lub katalogu

‹

 ‚ 

Ustawia atrybut

‚

pliku lub katalogu

‹

 ” ‹‹



 ‹

Ustawia prawo do zapisu dla danego pliku lub katalogu

 

 

Zwraca ścieżkę dostępu w postaci obiektu klasy

 

¡€

¡€

Przekształca ścieżkę dostępu na obiekt URI

Klasa RandomAccessFile

Klasa



pozwala na wykonywanie wszelkich operacji na plikach o dostępnie swobodnym, a także na

odczytywanie i zapisywanie danych z pliku i do niego oraz przemieszczanie się po pliku. Jest dostępna we wszystkich JDK,
począwszy od wersji 1.0. Wybrane metody udostępniane przez



zostały zebrane w poniższej tabeli.

Typ

Metoda

Opis

‰



Zamyka strumień oraz zwalnia wszystkie związane z nim zasoby

¢

 ¢

Zwraca powiązany z plikiem unikatowy obiekt typu

¢

£   £

Zwraca deskryptor pliku powiązanego ze strumieniem



 ¤ 

Zwraca aktualną pozycję w pliku



 

Zwraca długość pliku





Odczytuje jeden bajt danych z pliku



‹ Ž‘‹

Odczytuje z pliku liczbę bajtów, nie większą niż rozmiar tablicy

‹

, i umieszcza je w tej tablicy. Zwraca faktycznie odczytaną

liczbę bajtów.



‹ Ž‘‹ 



 

Odczytuje z pliku liczbę bajtów, nie większą niż wskazywana
przez



, i zapisuje je w tablicy

‹

, począwszy od komórki

wskazywanej przez



. Zwraca faktycznie przeczytaną

liczbę bajtów.

‹

ƒ

Odczytuje wartość typu

‹

‹ 

ƒ 

Odczytuje wartość typu

‹ 



¢

Odczytuje wartość typu



‹

£‹

Odczytuje wartość typu

‹



 

Odczytuje wartość typu





 ‹ Ž‘‹

Odczytuje liczbę bajtów równą wielkości tablicy

‹

. Zwraca

liczbę faktycznie odczytanych bajtów.



 ‹ Ž‘‹



  

Odczytuje liczbę bajtów, wskazywaną przez



, i zapisuje je

w tablicy

‹

, począwszy od komórki wskazywanej przez



.

Zwraca faktycznie przeczytaną liczbę bajtów.



€ 

Odczytuje wartość typu



 

 

Odczytuje wiersz tekstu



 

Odczytuje wartość typu





 

Odczytuje wartość typu





¡ƒ 

Odczytuje 8-bitową wartość bez znaku



¡ 

Odczytuje 16-bitową wartość bez znaku

 

¡Ÿ

Odczytuje tekst w kodowaniu UTF-8

‰



Zmienia wskaźnik pozycji w pliku na



‰

    ¥

  

Ustawia rozmiar pliku na

   



ƒ  

Pomija



bajtów

‰

 ‹ Ž‘‹

Zapisuje tablicę bajtów

‹

do pliku

‰

 ‹ Ž‘‹ 

 

Zapisuje do pliku



bajtów z tablicy

‹

, począwszy od

komórki wskazywanej przez



‰

  ‹

Zapisuje bajt

‹

do pliku

‰

 ƒ‹‰

Zapisuje do pliku wartość

‹

w postaci jednego bajta

‰

 ƒ  ‰

Zapisuje bajt

‰

do pliku

‰

 ƒ  

Zapisuje do pliku ciąg znaków, wskazywany przez



, w postaci

ciągu bajtów

‰

 ¢ ‰

Zapisuje do pliku wartość typu



w postaci dwóch bajtów

‰

 ¢ 

Zapisuje do pliku ciąg wskazywany przez



w postaci ciągu

znaków

‰

 £‹‹‰

Konwertuje wartość

‰

na typ



, korzystając z metody

‹Ÿ ƒ 

klasy

£‹

, i tak powstałą

wartość zapisuje do pliku

‰

   ‰

Konwertuje wartość

‰

na typ



, korzystając z metody

 Ÿ€ ƒ 

klasy



, i tak powstałą wartość

zapisuje do pliku

‰

 €  ‰

Zapisuje do pliku wartość typu



w postaci czterech bajtów

‰

  ‰

Zapisuje do pliku wartość typu



w postaci ośmiu bajtów

‰

   ‰

Zapisuje do pliku wartość typu



w postaci dwóch

bajtów

‰

 ¡Ÿ  

Zapisuje do pliku ciąg znaków, wskazywany przez



,

w kodowaniu UTF-8

Odczyt pliku

Przykład:

 †‰Š

‹Œ

‹  ‰ Ž‘



 ’“

    ” „•Œ– —

 



 Ž˜‘

­ 

     

 



Tablice informatyczne. Java. Wydanie III

Strumieniowe operacje na plikach

Odczyt danych

Podstawowe klasy odczytujące dane z plików to:

 





,

 



€  

.

Pierwsza z nich powinna być stosowana podczas korzystania
ze strumienia znakowego, czyli dla plików tekstowych, druga
— podczas korzystania ze strumienia binarnego, czyli dla pli-
ków binarnych. Obie klasy mają po trzy przeciążone konstruk-
tory, których argumentami mogą być:

 



ciąg znaków zawierający nazwę pliku,

 



obiekt klasy

£ 

,

 



obiekt klasy



.

Metody odczytujące dane klasy



:

Typ Metoda

Opis

 

Odczytuje pojedynczy znak



Ž‘



‹



 



 



  

Odczytuje liczbę znaków, nie
większą niż wskazywana przez

 

, i zapisuje je w tablicy

‹

, począwszy od komórki

wskazywanej przez



.

Zwraca faktycznie przeczytaną
liczbę znaków.

Metody odczytujące dane klasy

€  

:

Typ Metoda

Opis

 

Odczytuje jeden bajt danych

 ‹ Ž‘‹

Odczytuje liczbę bajtów, nie
większą od długości tablicy

‹

,

i zapisuje je w tablicy

‹

. Zwraca

faktycznie odczytaną liczbę
bajtów.



‹ Ž‘



‹ 



 

Odczytuje liczbę bajtów, nie
większą niż wskazywana przez



, i zapisuje je w tablicy

‹

, począwszy od komórki

wskazywanej przez



.

Zwraca faktycznie przeczytaną
liczbę bajtów.

Metod tych można używać bezpośrednio lub też wykorzy-
stać obiekty klas



i

€  

jako argumenty dla konstruktorów klas dających więk-
szą funkcjonalność, np.

ƒ€  

lub

ƒ

.

Zapis danych

Podstawowe klasy zapisujące dane z plików to:

 



” 

,

 



‚   

.

Pierwsza z nich powinna być wykorzystywana do zapisu plików
tekstowych, druga — do zapisu strumieni binarnych. Obie klasy
mają po pięć przeciążonych konstruktorów. Trzy z nich są jed-
noargumentowe i mogą przyjmować następujące argumenty:

 



ciąg znaków zawierający nazwę pliku,

 



obiekt klasy

£ 

,

 



obiekt klasy



.

Pozostałe konstruktory są dwuargumentowe. Pierwszy przyj-
muje ciąg znaków oraz wartość

‹

, drugi — obiekt

klasy



i wartość

‹

. W obu przypadkach drugi

argument ustawiony na



oznacza, że dane mają być do-

pisywane na końcu pliku, a ustawiony na



— że dane

mają być zapisywane od początku pliku (nadpisując jego wcze-
śniejszą zawartość).
Wszystkie konstruktory generują wyjątek

  

, jeśli:

 



podana nazwa wskazuje na katalog, a nie na plik;

 



podany plik nie istnieje i nie można go również utworzyć;

 



nie można z jakiegoś powodu otworzyć istniejącego pliku.

Metody zapisujące dane klasy

” 

:

Typ zwracany Metoda

Opis

‰

 Ž‘



‹ 



 



Zapisuje do stru-
mienia



znaków

z tablicy

‹

,

począwszy od ko-
mórki wskazywanej
przez



‰

  

Zapisuje do stru-
mienia znak



‰

  



  



 





Zapisuje do
strumienia



znaków z ciągu

 

, począwszy

od znaku o indeksie
wskazywanym
przez



Metody zapisujące dane klasy

‚   

:

Typ zwracany Metoda

Opis

‰

 ‹ Ž‘‹

Zapisuje tablicę
bajtów

‹

do

strumienia

‰

 ‹ Ž‘‹



  





Zapisuje do
strumienia



bajtów z tablicy

‹

, począwszy

od komórki
wskazywanej
przez



‰

  ‹

Zapisuje bajt

‹

do strumienia






Document Outline


Wyszukiwarka

Podobne podstrony:
Praktyczny kurs Java Wydanie III
Praktyczny kurs Java Wydanie III
informatyka praktyczny kurs java wydanie iii marcin lis ebook
Praktyczny kurs Java Wydanie III pkjav3
Praktyczny kurs Java Wydanie III 2
Java cwiczenia praktyczne Wydanie III cwjav3
Java cwiczenia praktyczne Wydanie III
Java i XML Wydanie III javxm3
informatyka java i xml wydanie iii brett d mclaughlin ebook
Java cwiczenia praktyczne Wydanie III 2
Java cwiczenia praktyczne Wydanie III cwjav3
Java cwiczenia praktyczne Wydanie III

więcej podobnych podstron