Programo
w
anie
obiekto
w
e
(Ja
v
a)
10
1
P
om
yªk
a
P
o
dsta
w
o
w
¡
ideologi¡
Ja
jest
zaªo»enie,
»e
'¹le
sform
uªo
w
an
y
k
o
d
nie
zostanie
wyk
onan
y'
Przykªad:
Istniej¡
dwie
publizne
klasy
w
dwó
h
plik
a
h
M ain.java
i
T est.java
:
1
pakage
pl .kiele . tu.lab10 ;
2
3
publi
lass
Main
{
4
publi
stati
void
main (String [℄
args )
{
5
Test
t
=
new
Test ();
6
}
7
}
Przykªad
1:
sr/pl/kiele/tu/lab10/Main.ja
v
a
1
pakage
pl .kiele . tu.lab10 ;
2
3
publi
lass
Test
{
4
publi
Test ()
{
5
}
6
}
Przykªad
2:
sr/pl/kiele/tu/lab10/T
est.ja
v
a
K
ompilaja
i
uru
homienie:
1
java
pl\ kiele \tu \lab10 \Test .java
2
java
pl\ kiele \tu \lab10 \Main .java
3
java
pl.kiele
.tu. lab10 .Main
Aplik
aja
dziaªa
p
opra
wnie.
Co
stanie
si
je±li
k
onstruktor
klasy
T est
uzynim
y
pryw
atn
ym,
a
nastpnie
przez
'p
om
yªk
'
sk
ompilujem
y
t
ylk
o
klas
T est
(zap
omina
j¡
o
klasie
M ain
)
i
uru
homim
y
aplik
aj?
Exeption
in
thread
"main "
java. lang .IllegalAessError
:
tried
to
aess
method
←֓
pl.kiele
.tu. lab10 .Test .<init >() V
from
lass
pl.kiele
.tu.lab10 . Main
at
pl.kiele
.tu. lab10 .Main .main (Main .java :5)
2
W
yj¡tek
W
yj¡tek
(exeption)
Sp
ejaln
y
b
yt
programist
yzn
y
p
o
w
o
duj¡y
przerw
anie
lub
za
wieszenie
normal-
nej
nitki
stero
w
ania
program
u
i
przej±ie
do
sp
ejalnego
fragmen
tu
program
u
za
jm
uj¡ego
si
obsªug¡
tego
wyj¡tku.
(.
.
.
)
W
sytuaji
wyj¡tk
o
w
ej
nie
mo»na
k
on
t
yn
uo
w
a¢
przet
w
arzania,
p
oniew
a»
w
aktualn
ym
k
on
tek±ie
nie
ma
dostpu
do
informaji
k
onieznej
do
rozwi¡zania
problem
u.
W
szystk
o,
o
mo»na
zrobi¢,
to
wyj±¢
z
aktualnego
k
on
tekstu
i
przek
aza¢
problem
dalej.
T
ak
si
wªa±nie
dzieje
gdy
zgªaszan
y
jest
wyj¡tek."
W
jaki
sp
osób
p
o
dobne
problem
y
zostaªy
rozwi¡zane
w
jzyk
a
h,
w
który
h
nie
ma
wyj¡tk
ó
w
(np.
w
C)?
Klasa
Thro
w
able
opisuje
wszystk
o
o
mo»e
b
y¢
zgªoszone
jak
o
wyj¡tek.
Istniej¡
dw
a
ro
dza
je
obiektó
w
Thro
w
able
(.
.
.
).
Error
reprezen
tuje
bªdy
k
ompilaji
i
system
u
(.
.
.
).
Exeption
jest
p
o
dsta
w
o
wym
t
yp
em,
jaki
mo»e
b
y¢
wyrzuon
y
z
do
w
olnej
meto
dy
klasy
biblioteki
standardo
w
ej
Ja
vy
i
wªasnej
meto
dy
lub
w
wyniku
inn
y
h
bªdó
w
przy
wyk
onaniu.
W
yj¡tki
dzielim
y
na:
1
Thinking
in
Ja
v
a,
Brue
E
k
el,
W
ydanie
IV,
Helion,
2006
1
-
niew
eryk
o
w
alne
(niespra
wdzalne,
niek
on
trolo
w
ane,
ang.
un
he
k
ed)
wyj¡tek
Run
timeExeption
oraz
klasy
p
otomne,
k
ompilator
nie
w
erykuje
zy
tego
t
ypu
wyj¡tek
jest
zgªaszan
y
lub
obsªugiw
an
y
przez
meto
d,
-
w
eryk
o
w
alne
(spra
wdzalne,
k
on
trolo
w
ane)
inne
wyj¡tki.
Hierar
hia
klas:
1
java .lang .Objet
2
extended
by
java . lang. Throwable
3
extended
by
java .lang .Exeption
1
java .lang .Objet
2
extended
by
java . lang. Throwable
3
extended
by
java .lang .Exeption
4
extended
by
java .lang .RuntimeExeption
1
java .lang .Objet
2
extended
by
java . lang. Throwable
3
extended
by
java .lang .Error
T
w
orzenie
klas
wªasn
y
h
wyj¡tk
ó
w:
1
pakage
pl .kiele . tu.lab10 ;
2
3
publi
lass
MyExeption
extends
Exeption
{
4
}
Przykªad
3:
sr/pl/kiele/tu/lab10/MyExeption.ja
v
a
1
pakage
pl .kiele . tu.lab10 ;
2
3
publi
lass
MyRuntimeExeption
extends
RuntimeExeption
{
4
}
Przykªad
4:
sr/pl/kiele/tu/lab10/MyRun
timeExeption.ja
v
a
Blok
prób
(ang.
try)
blok
prze
h
wytuj¡y
wyj¡tki.
Pro
edury
obsªugi
wyj¡tku
nastpuj¡
b
ezp
o±rednio
p
o
bloku
try
i
s¡
oznazane
p
oprzez
sªo
w
o
kluzo
w
e
catch
Sek
ja
f inally
fragmen
t
k
o
du,
który
hielib
y±m
y
wyk
ona¢
niezale»nie
o
d
tego,
zy
w·bloku
try
zostanie
zgªoszon
y
wyj¡tek
Zgªaszanie
wyj¡tk
ó
w:
"(...)
mo»na
zgªosi¢
k
a»dy
ro
dza
j
obiektu,
który
mo»na
wyrzui¢
tj.
dziedziz¡y
p
o
klasie
T hrowable
"
np.
throw new M yException
()
.
Prze
h
wyenie
wszystki
h
wyj¡tk
ó
w:
1
try
{
2
...
3
}
ath
(Exeption
e){
4
e.printStakTrae
();
5
}
Zastoso
w
anie
sym
b
olu
"|"
(or)
umo»liwia
st
w
orzenie
bloku
ath,
w
którym
realizo
w
ana
jest
obsªuga
wielu
wyj¡tk
ó
w.
P
oni»ej
przedsta
wiono
przykªady
obsªugi
dw
ó
h
wyj¡tk
ó
w:
1
try
{
2
...
3
}
ath
(ArithmetiExeption
|
ArrayIndexOutOfBoundsExeptio n
e){
4
e.printStakTrae
();
5
}
2
1
try
{
2
...
3
}
ath
(ArithmetiExeption
e1){
4
e1. printStakTrae
();
5
}
ath
(ArrayIndexOutOfBoundsExepti on
e2 ){
6
e2. printStakTrae
();
7
}
Rozszerzona
forma
wyra»enia
try
zw
ana
try-with-r
esour
e
ma
nastpuj¡¡
p
osta¢
1
try
{speyfikaja
- zasobu }
{
2
//
uzyie
zasobu
3
}
Mo»e
zosta¢
ona
wyk
orzystana
t
ylk
o
z
zasobami
implemen
tuj¡ymi
in
terfejs
java.lang.A
utoClose
able,
który
p
osiada
t
ylk
o
jedn¡
meto
d
lose().
In
terfejsy
ten
rozszerza
java.io.Close
able,
który
tak»e
p
osiada
t
ylk
o
jedn¡
meto
d
lose().
Skªadnia
ta
jest
zsto
wyk
orzyst
yw
ana
w
p
o
wi¡zaniu
ze
strumieniami,
np.
plik
o
wymi.
W
meto
dzie
przei¡»onej
mo»na
zgªasza¢
jedynie
te
wyj¡tki,
które
zostaªy
p
o
dane
w
sp
eyk
aji
z
klasy
bazo
w
ej.
(.
.
.
)
Mo»na
zanie
ha¢
wyrzuania
jaki
hk
olwiek
wyj¡tk
ó
w
p
omimo
i
h
ob
eno±i
w
klasie
bazo
w
ej.
1
publi
lass
TestCath
{
2
publi
stati
void
main (String [℄
args )
throws
Exeption
{
3
Random
r
=
new
Random
(
new
Date ().getTime
()
>>>
(
new
Date () .getTime ()
%
4));
4
try
{
5
swith
(r.nextInt
()
%
4)
{
6
ase
0:
System . out. print (
"0.
"
);
7
throw
new
MyExeption
() ;
8
ase
1:
System . out. print (
"1.
"
);
9
throw
new
MyRuntimeExeption
();
10
ase
2:
System . out. print (
"2.
"
);
11
throw
new
NullPointerExeption
() ;
12
default
:
System
.out .print (
"3.
"
);
13
throw
new
FileNotFoundExeption
() ;
14
}
15
}
ath
(MyExeption
e)
{
16
System
.out. println (
" e.getClass
().getSimpleName
()
=
"
+
e. getClass () .getSimpleName
()) ;
17
}
ath
(FileNotFoundExeption
e)
{
18
System
.out. println (
" e.getClass
().getSimpleName
()
=
"
+
e. getClass () .getSimpleName
()) ;
19
}
ath
(Exeption
e)
{
20
//
obsªuga
wszystkih
pozostaªyh
wyj¡tków
21
System
.out. println (
" e.getClass
().getSimpleName
()
=
"
+
e. getClass () .getSimpleName
()) ;
22
System
.out. println (
" e.getMessage
()
=
"
+
e. getMessage
());
23
//
zwraa
szzegóªow¡
informaj
24
System
.out. println (
" e.getLoalizedMessage
()
=
"
+
e. getLoalizedMessage
());
25
System
.out. println (
" e.printStakTrae
() "
);
26
e. printStakTrae
(System . out) ;
//
drukuje
komunikat
oraz
stos
wywoªa«
27
System
.out. println (
" e.getCause
()
=
"
+
e.getCause
()) ;
//
zwraa
przyzyn
28
}
29
}
30
}
Przykªad
5:
sr/pl/kiele/tu/lab10/T
estCat
h.ja
v
a
Co
si
stanie
je»eli
wyj¡tek
nie
zostanie
wyªapan
y?
Która
z
p
oni»szy
h
deniji
jest
nie
p
opra
wna
i
dlazego?
1
publi
lass
TestThrows
{
2
publi
void
a ()
{
3
throw
new
MyExeption
();
4
}
5
3
6
publi
void
b ()
{
7
throw
new
MyRuntimeExeption
() ;
8
}
9
10
publi
void
()
throws
Exeption
{
11
throw
new
MyExeption
();
12
}
13
14
publi
void
d ()
throws
Exeption
{
15
throw
new
MyRuntimeExeption
() ;
16
}
17
18
publi
void
e ()
throws
RuntimeExeption
{
19
throw
new
MyExeption
();
20
}
21
22
publi
void
f ()
throws
RuntimeExeption
{
23
throw
new
MyRuntimeExeption
() ;
24
}
25
26
publi
void
g ()
throws
MyExeption
{
27
throw
new
MyExeption
();
28
}
29
30
publi
void
h ()
throws
MyExeption
{
31
throw
new
MyRuntimeExeption
() ;
32
}
33
34
publi
void
i ()
throws
MyRuntimeExeption
{
35
throw
new
MyExeption
();
36
}
37
38
publi
void
j ()
throws
MyRuntimeExeption
{
39
throw
new
MyRuntimeExeption
() ;
40
}
41
42
publi
void
k ()
throws
MyExeption
,
MyRuntimeExeption
{
43
return
;
44
}
45
}
Przykªad
6:
sr/pl/kiele/tu/lab10/T
estThro
ws.ja
v
a
1
publi
lass
TestFinally
{
2
stati
void
method
()
throws
MyExeption
{
3
Random
r
=
new
Random
();
4
if
(r.nextInt
()
%
2
==
0)
{
5
System
.out. println (
" method ()
throw "
);
6
throw
new
MyExeption
();
7
}
else
{
8
System
.out. println (
" method ()
return "
);
9
return
;
10
}
11
}
12
13
publi
stati
void
main (String [℄
args )
{
14
try
{
15
method
();
16
System
.out. println (
" main()
return "
);
17
return
;
18
}
ath
(MyExeption
e)
{
4
19
System
.out. println (
" main()
ath
"
+
e );
20
}
finally
{
21
System
.out. println (
" main()
finally
"
);
22
}
23
}
24
}
Przykªad
7:
sr/pl/kiele/tu/lab10/T
estFinally
.ja
v
a
3
T
yp
o
w
e
sp
osob
y
obsªugi
wyj¡tk
ó
w
T
yp
o
w
e
sp
osob
y
obsªugi
wyj¡tk
ó
w
zrealizo
w
ano
na
p
o
dsta
wie:
Ja
v
a.
Obsªuga
wyj¡tk
ó
w,
usu
w
anie
bªdó
w
i
testo
w
anie
k
o
du,
Stephen
Stelting,
Helion,
2005.
3.1
Zapis
bªdu
lub
zwi¡zanej
z
nim
informaji
do
dziennik
a
Informaja
o
bªdzie
mo»e
zosta¢
wy±wietlona
na
k
onsoli
lub
przekiero
w
ana
do
pliku.
W
bardziej
zaa
w
an-
so
w
an
y
h
rozwi¡zania
h
nale»aªob
y
u»y¢
J avaLoggingAP I
.
W
przykªadzie
p
oni»ej
informaja
o
wyj¡tku
jest
wy±wietlana
na
k
onsoli
przy
p
omo
y
System.out,
zapisyw
ana
w
pliku
przy
p
omo
y
przekiero
w
anego
System.err
oraz
wy±wietlana
w
oknie
dialogo
wym.
1
publi
lass
MyClass
{
2
stati
String
getLanguage
()
throws
Exeption
{
3
throw
new
Exeption
(
" My
exeption
"
) ;
4
}
5
}
Przykªad
8:
sr/pl/kiele/tu/lab10/MyClass.ja
v
a
1
publi
lass
TestExeption1
{
2
3
stati
{
4
try
{
5
System
.setErr (
new
PrintStream
(
"log .txt "
));
6
}
ath
(FileNotFoundExeption
ignored )
{
7
ignored
.printStakTrae
() ;
8
}
9
}
10
11
publi
stati
void
main (String [℄
args )
{
12
try
{
13
MyClass
.getLanguage
() ;
14
}
ath
(Exeption
e)
{
15
e. printStakTrae
(System . out) ;
16
e. printStakTrae
(System . err) ;
17
JOptionPane
.showMessageDialog
(
null
,
e) ;
18
}
19
}
20
}
Przykªad
9:
sr/pl/kiele/tu/lab10/T
estExeption1.ja
v
a
3.2
Zwró
enie
si
do
u»ytk
o
wnik
a
z
pro±ba
o
p
o
djeie
o
dp
o
wiedniej
deyzji
1
publi
lass
TestExeption2
{
2
3
publi
stati
void
main (String [℄
args )
{
5
4
try
{
5
MyClass
.getLanguage
() ;
6
}
ath
(Exeption
e)
{
7
int
answer
=
JOptionPane
. showConfirmDialog
(
null
,
"End ?"
,
"Confirm
Dialog "
,
←֓
JOptionPane
.YES_NO_OPTION
,
JOptionPane
.ERROR_MESSAGE
);
8
if
(answer
==
JOptionPane
.YES_OPTION
)
9
System
.out .println (
"End"
);
10
else
11
System
.out .println (
"Not
end"
);
12
}
13
}
14
}
Przykªad
10:
sr/pl/kiele/tu/lab10/T
estExeption2.ja
v
a
3.3
U»yie
w
arto±i
dom
y±ln
y
h
lub
alternat
ywn
y
h
1
publi
lass
TestExeption3
{
2
3
final
private
stati
String
DEFAULT_LANGUAGE
=
"EN "
;
4
private
stati
String
language ;
5
6
publi
stati
void
main (String [℄
args )
{
7
try
{
8
language
=
MyClass .getLanguage
();
9
}
ath
(Exeption
e)
{
10
language
=
DEFAULT_LANGUAGE
;
11
}
12
}
13
}
Przykªad
11:
sr/pl/kiele/tu/lab10/T
estExeption3.ja
v
a
3.4
Przek
azanie
stero
w
ania
do
innej
z±i
aplik
aji
1
publi
lass
TestExeption4
{
2
3
publi
stati
void
main (String [℄
args )
{
4
try
{
5
MyClass
.getLanguage
() ;
6
}
ath
(Exeption
e)
{
7
reset () ;
8
}
9
}
10
11
stati
void
reset
(){
12
//
...
13
}
14
}
Przykªad
12:
sr/pl/kiele/tu/lab10/T
estExeption4.ja
v
a
3.5
K
on
w
ersja
wyj¡tku
do
innej
p
ostai
Zaªó»m
y
,
»e
klasa
p
o
winna
implemen
to
w
a¢
in
terfejs
M yInterf ace
,
a
w
ewn¡trz
meto
dy
method
()
p
o
winna
wyw
oªa¢
M yClass.getLanguage
()
,
która
mo»e
zgªosi¢
wyj¡tek.
Do
danie
frazy
throws Exception
do
sygna-
tury
meto
dy
method
()
nie
jest
mo»liw
e
p
oniew
a»
wtedy
nie
b
dzie
si
ona
zgadza¢
z
sygnatur¡
meto
dy
6
w
in
terfejsie.
W
takim
przypadku
mo»em
y
u»y¢
wyj¡tku
niespra
wdzalnego,
który
jak
o
przyzyn
b
dzie
miaª
usta
wion
y
nasz
wyj¡tek
(
throw new RuntimeException
(e)
).
1
publi
interfae
MyInterfae
{
2
publi
void
method
();
3
}
Przykªad
13:
sr/pl/kiele/tu/lab10/MyIn
terfae.ja
v
a
1
publi
lass
TestExeption5
implements
MyInterfae
{
2
3
Override
4
publi
void
method
()
{
//
!!!
throws
Exeption
{
5
try
{
6
MyClass
.getLanguage
() ;
7
}
ath
(Exeption
e)
{
8
throw
new
RuntimeExeption
(e) ;
9
}
10
}
11
12
publi
stati
void
main (String [℄
args )
{
13
TestExeption5
t
=
new
TestExeption5
() ;
14
t.method
();
15
}
16
}
Przykªad
14:
sr/pl/kiele/tu/lab10/T
estExeption5.ja
v
a
3.6
Zignoro
w
anie
problem
u
Jest
bardzo
maªo
przypadk
ó
w,
kiedy
mo»na
zignoro
w
a¢
wyst¡
pienie
wyj¡tku
dlatego
na
jlepiej
nie
stoso
w
a¢
tej
te
hniki.
1
publi
lass
TestExeption6
{
2
3
publi
stati
void
main (String [℄
args )
{
4
try
{
5
MyClass
.getLanguage
() ;
6
}
ath
(Exeption
ignore
)
{
7
}
8
}
9
}
Przykªad
15:
sr/pl/kiele/tu/lab10/T
estExeption6.ja
v
a
3.7
P
o
wtórzenie
op
eraji
W
p
oni»szym
przypadku
trzykrotnie
wyw
oªyw
ana
jest
meto
da
getLanguage
()
.
P
omidzy
p
oszzególn
ymi
wyw
oªaniami
mo»na
zastoso
w
a¢
o
dstp
zaso
wy
(
T imeU nit.SECON DS.sleep
(1)
).
Je»eli
meto
da
nie
zgªosi-
ªab
y
wyj¡tku
instruk
ja
break
sp
o
w
o
duje
przerw
anie
wyk
on
yw
ania
p
tli.
1
publi
lass
TestExeption7
{
2
publi
stati
void
main (String [℄
args )
{
3
int
ounter
=
0;
4
while
( ounter ++
<
3)
{
5
try
{
6
MyClass
.getLanguage
();
7
break
;
8
}
ath
(Exeption
e )
{
7
9
System
.err .println (
"Exeption
no.
"
+
ounter );
10
e .printStakTrae
() ;
11
try
{
12
TimeUnit . SECONDS .sleep (1) ;
13
}
ath
(InterruptedExeption
e2)
{
14
e2.printStakTrae
();
15
}
16
}
17
}
18
}
19
}
Przykªad
16:
sr/pl/kiele/tu/lab10/T
estExeption7.ja
v
a
3.8
W
yw
oªanie
op
eraji
alternat
ywnej
1
publi
lass
TestExeption8
{
2
3
publi
stati
void
main (String [℄
args )
{
4
try
{
5
MyClass
.getLanguage
() ;
6
}
ath
(Exeption
e)
{
7
getLanguageFromFile
() ;
8
}
9
}
10
11
stati
void
getLanguageFromFile
()
{
12
//
...
13
}
14
}
Przykªad
17:
sr/pl/kiele/tu/lab10/T
estExeption8.ja
v
a
3.9
Przygoto
w
anie
aplik
aji
do
zamkniia
Przed
zamkniiem
aplik
aji
mo»e
wyst¡
pi¢
k
oniezno±¢:
-
zamkniia
ot
w
art
y
h
plik
ó
w,
-
zamkniia
ot
w
art
y
h
p
oª¡ze«
sieio
wy
h,
bazo
dano
wy
h
itp.,
-
zapisanie
dan
y
h,
-
p
oinformo
w
anie
inn
y
h
aplik
aji,
systemó
w
itp.
o
t
ym
fak
ie.
1
publi
lass
TestExeption9
{
2
3
publi
stati
void
main (String [℄
args )
{
4
try
{
5
MyClass
.getLanguage
() ;
6
}
ath
(Exeption
e)
{
7
/*
zamkniie
otwartyh
plików
,
8
zamkniie
otwartyh
poª¡ze«
sieiowyh
,
bazodanowyh
itp
9
zapisanie
danyh ,
10
poinformowanie
innyh
aplikaji
,
systemów
itp.
o
tym
fakie .
11
12
zamkniie
aplikaji
13
jako
parametr
podaje
si
"kod
statusu
"
14
warto±i
inne
ni»
0
oznazaj¡
nienormalne
zamkniie
aplikaji
*/
8
15
System
.exit (1);
16
}
17
}
18
}
Przykªad
18:
sr/pl/kiele/tu/lab10/T
estExeption9.ja
v
a
4
P
o
dsta
w
o
w
e
wyj¡tki
W
yj¡tki
zdenio
w
ane
w
pakieie
ja
v
a.lang
ArithmetiExeption
Arra
yIndexOutOfBoundsExeption
Arra
yStoreExeption
ClassCastExeption
ClassNotF
oundExeption
CloneNotSupp
ortedExeption
En
umConstan
tNotPresen
tExeption
Exeption
IllegalA
essExeption
IllegalArgumen
tExeption
IllegalMonitorStateExeption
IllegalStateExeption
IllegalThreadStateExeption
IndexOutOfBoundsExeption
Instan
tiationExeption
In
terruptedExeption
Negativ
eArra
ySizeExeption
NoSu
hFieldExeption
NoSu
hMetho
dExeption
NullP
oin
terExeption
Num
b
erF
ormatExeption
Reetiv
eOp
erationExeption
Run
timeExeption
Seurit
yExeption
StringIndexOutOfBoundsExeption
T
yp
eNotPresen
tExeption
Unsupp
ortedOp
erationExeption
9
W
yj¡tki
zdenio
w
ane
w
pakieie
ja
v
a.util
Conurren
tMo
diationExeption
DupliateF
ormatFlagsExeption
Empt
ySta
kExeption
F
ormatFlagsCon
v
ersionMismat
hExeption
F
ormatterClosedExeption
IllegalF
ormatCo
deP
oin
tExeption
IllegalF
ormatCon
v
ersionExeption
IllegalF
ormatExeption
IllegalF
ormatFlagsExeption
IllegalF
ormatPreisionExeption
IllegalF
ormatWidthExeption
IllformedLo
aleExeption
InputMismat
hExeption
In
v
alidProp
ertiesF
ormatExeption
MissingF
ormatArgumen
tExeption
MissingF
ormatWidthExeption
MissingResoureExeption
NoSu
hElemen
tExeption
T
o
oMan
yListenersExeption
Unkno
wnF
ormatCon
v
ersionExeption
Unkno
wnF
ormatFlagsExeption
Reetiv
eOp
erationExeption
Run
timeExeption
Seurit
yExeption
StringIndexOutOfBoundsExeption
T
yp
eNotPresen
tExeption
Unsupp
ortedOp
erationExeption
10
5
Aserje
Staªe
1
publi
lass
TestStati
{
2
3
final
private
stati
boolean
TEST
=
true
;
4
5
stati
int
age
=
-1;
6
7
publi
stati
void
main (String [℄
args )
{
8
if
( TEST )
9
if
(age
<
0)
10
throw
new
RuntimeExeption
(
" Not
orret
value :
age
=
"
+
age );
11
System . out.println
(
"My
age
=
"
+
age );
12
}
13
}
Przykªad
19:
sr/pl/kiele/tu/lab10/T
estStati.ja
v
a
TEST
=
false
publi
stati
void
main (java .lang .String [℄) ;
Code :
0:
getstati
#2
//
Field
java /lang /System
.out :Ljava /io /PrintStream
;
3:
new
#3
//
lass
java /lang /StringBuilder
...
TEST
=
true
publi
stati
void
main (java .lang .String [℄) ;
Code :
0:
getstati
#2
//
Field
age :I
3:
ifge
35
6:
new
#3
//
lass
java /lang /RuntimeExeption
9:
dup
10:
new
#4
//
lass
java /lang /StringBuilder
13:
dup
14:
invokespeial
#5
//
Method
java /lang /StringBuilder
."< init >":() V
17:
ld
#6
//
String
Not
orret
value :
age
=
19:
invokevirtual
#7
//
Method
←֓
java/ lang/ StringBuilder
.append :(Ljava
/lang /String ;) Ljava /lang /StringBuilder
;
22:
getstati
#2
//
Field
age :I
25:
invokevirtual
#8
//
Method
java /lang /StringBuilder
.append
:(I) Ljava /lang /StringBuilder
;
28:
invokevirtual
#9
//
Method
java /lang /StringBuilder
.toString
:() Ljava /lang /String
;
31:
invokespeial
#10
//
Method
java / lang/ RuntimeExeption
."< init >":( Ljava /lang /String ;) V
34:
athrow
35:
getstati
#11
//
Field
java /lang / System .out :Ljava /io /PrintStream
;
38:
new
#4
//
lass
java /lang /StringBuilder
...
Aserje
"Stosunk
o
w
o
no
wym
elemen
tem
w
Ja
vie
jest
sªo
w
o
kluzo
w
e
assert
W
trak
ie
t
w
orzenia
i
testo
w
ania
programó
w
u»yw
a
si
go
do
aserji,
zyli
spra
wdzania,
zy
dan
y
w
arunek
jest
sp
eªnion
y
w
trak
ie
dziaªania
program
u."
Wª¡zanie
aserji:
1
java
-ea[:< pakagename
>...|:<
lassname
>℄
klasaPosiadajaaMetodeMain
11
2
java
-enableassertions
[:< pakagename
>...|:< lassname
>℄
klasaPosiadajaaMetodeMain
1
publi
lass
TestAssertion
{
2
3
stati
int
age
=
-1;
4
5
publi
stati
void
main (String [℄
args )
{
6
assert
age
>=
0
:
"Not
orret
value :
age
=
"
+
age;
7
System . out.println
(
"My
age
=
"
+
age );
8
}
9
}
Przykªad
20:
sr/pl/kiele/tu/lab10/T
estAssertion.ja
v
a
Uru
homienie:
java
pl.kiele
.tu. lab10 .TestAssertion
W
ynik
dziaªania:
My
age
=
-1
Uru
homienie:
java
-ea
pl.kiele
.tu.lab10
.TestAssertion
W
ynik
dziaªania:
Exeption
in
thread
"main "
java. lang .AssertionError
:
Not
orret
value :
age
=
-1
at
pl.kiele
.tu. lab10 .TestAssertion
.main (TestAssertion
.java :8)
Deasem
blaja:
javap
-
pl.kiele
.tu.lab10
.TestAssertion
W
ynik
deasem
blaji:
Compiled
from
"TestAssertion
.java "
publi
lass
pl.kiele . tu.lab10 . TestAssertion
{
stati
int
age;
stati
final
boolean
$assertionsDisabled
;
publi
pl.kiele
.tu. lab10 .TestAssertion
();
Code :
0:
aload_0
1:
invokespeial
#1
//
Method
java /lang /Objet
."<init >":() V
4:
return
publi
stati
void
main ( java. lang. String [℄) ;
Code :
0:
getstati
#2
//
Field
\$assertionsDisabled
:Z
3:
ifne
41
6:
getstati
#3
//
Field
age :I
9:
ifge
41
12:
new
#4
//
lass
java /lang /AssertionError
15:
dup
16:
new
#5
//
lass
java /lang /StringBuilder
19:
dup
20:
invokespeial
#6
//
Method
java /lang /StringBuilder
."< init >":() V
23:
ld
#7
//
String
Not
orret
value :
age
=
12
25:
invokevirtual
#8
//
Method
←֓
java/ lang/ StringBuilder
.append :(Ljava
/lang /String ;) Ljava /lang /StringBuilder
;
28:
getstati
#3
//
Field
age :I
...
6
R
TTI
Informaje
o
t
ypie
w
zasie
wyk
onania
(ang.
run-time
t
yp
e
information,
R
TTI)
p
ozw
ala
j¡
na
iden
t
yk
aj
t
yp
ó
w
i
wyk
orzyst
yw
anie
informaji
o
ni
h
w
zasie
dziaªania
program
u.
Op
erator
instanceof
oraz
meto
da
isInstane()
zostaªy
omó
wione
na
w
ze±niejszy
h
za
jia
h.
Obiekt
Class
za
wiera
informaje
o
m.in.
k
onstrukta
h
(np.
getConstructors
()
,
getDeclaredConstructors
()
),
meto
da
h
(np.
getM ethods
()
,
getDeclaredM ethods
()
)
oraz
atrybuta
h
(p
ola
h)
klasy
(np.
getF ields
()
,
getDeclaredF ields
()
).
Szzegóªy
dot
yz¡e
klasy
Class
mo»na
znale¹¢
na
stronie:
1
publi
lass
TestRTTI
{
2
publi
int
i
=
1234;
3
stati
{
4
System . out.println
(
"Stati
init "
);
5
}
6
7
publi
TestRTTI
()
{
8
System . out.println
(
"Construtor
TestRTTI
()"
) ;
9
}
10
11
publi
int
getI ()
{
12
System . out.println
(
"Method
getI ()"
) ;
13
return
i;
14
}
15
16
publi
stati
void
main (String [℄
args )
throws
Exeption
{
17
Class <?>
t
=
null
;
18
t
=
Class .forName
(
"pl .kiele .tu .lab10 .TestRTTI
"
) ;
19
//
Stati
init
20
Construtor
<?>[℄
=
t.getConstrutors
() ;
21
System . out.println
(
"Construtors
"
);
22
for
(
int
i
=
0;
i
<
.length ;
i++)
23
System
.out. println ( [i℄);
24
//
Construtors
25
//
publi
TestRTTI
()
26
27
TestRTTI
instane
=
( TestRTTI )
[0℄. newInstane
(( Objet [℄)
null
);
28
//
Construtor
TestRTTI
()
29
30
Method [℄
m
=
t.getMethods
();
31
System . out.println
(
"Methods
"
);
32
for
(
int
i
=
0;
i
<
m .length ;
i++)
33
System
.out. println (m [i℄);
34
//
Methods
35
//
publi
stati
void
TestRTTI
.main (java .lang .String [℄)
...
36
//
publi
int
TestRTTI
.getI ()
37
//
publi
final
void
java .lang .Objet .wait ()
...
38
//
publi
final
void
java .lang .Objet .wait (long , int)
...
39
//
publi
final
native
void
java .lang .Objet
.wait (long )
...
40
//
publi
native
int
java .lang .Objet .hashCode
()
41
//
publi
final
native
java .lang .Class
java. lang .Objet .getClass
()
42
//
publi
boolean
java .lang .Objet . equals (java .lang .Objet
)
43
//
publi
java .lang .String
java .lang .Objet . toString ()
13
44
//
publi
final
native
void
java .lang .Objet
.notify ()
45
//
publi
final
native
void
java .lang .Objet
.notifyAll
()
46
//
Method
getI ()
47
m[1℄. invoke ( instane ,
(Objet [℄)
null
);
48
//
Method
getI ()
49
Field [℄
f
=
t.getFields
() ;
50
System . out.println
(
"Fields
"
);
51
for
(
int
i
=
0;
i
<
f .length ;
i++)
52
System
.out. println (f [i℄);
53
//
Fields
54
//
publi
int
TestRTTI
.i
55
f[0℄. set (instane
,
5678) ;
56
System . out.println
(f[0℄. get (instane
));
57
//
5678
58
}
59
}
Przykªad
21:
sr/pl/kiele/tu/lab10/T
estR
TTI.ja
v
a
7
A
dnotaje
A
dnotaje
(nazyw
ane
te»
metadan
ymi)
umo»liwia
j¡
umieszzenie
do
datk
o
w
ej
informaji
w
plik
a
h
¹ró-
dªo
wy
h.
Strategie
za
ho
w
ania
adnotaji
SOUR
CE
"A
dnotaje
ze
strategi¡
SOUR
CE
jest
za
ho
wyw
ana
t
ylk
o
w
pliku
k
o
du
¹ró
dªo
w
ego.
Inn
ymi
sªo
wy
,
jest
p
omijana
w
trak
ie
k
ompilaji
k
o
du."
CLASS
"A
dnotaje
ze
strategi¡
SOUR
CE
jest
za
ho
wyw
ana
w
pliku
.lass
w
trak
ie
k
ompilaji.
Nie
jest
jednak
dostpna
dla
maszyn
y
wirtualnej
w
trak
ie
wyk
onania
program
u."
R
UNTIME
"A
dnotaje
ze
strategi¡
R
UNTIME
jest
za
ho
wyw
ana
w
pliku
.lass
w
trak
ie
k
ompilaji
i
jest
dostpna
dla
maszyn
y
wirtualnej
w
trak
ie
wyk
onania
program
u."
A
dnotaje
mog¡
za
wiera¢
skªado
w
e,
np.
w
przykªado
w
ej
adnotaji
MyA
nnotation
s¡
to
id()
i
name()
:
1
Retention
(RetentionPoliy
. RUNTIME )
2
publi
interfae
MyAnnotation
{
3
int
id() ;
4
5
String
name () ;
6
}
Przykªad
22:
sr/pl/kiele/tu/lab10/MyAnnotation.ja
v
a
Oznazenie
klasy
przy
p
omo
y
adnotaji:
1
MyAnnotation
(id
=
1234,
name
=
"abd "
)
2
publi
lass
MyAnnotatedClass
{
3
}
Przykªad
23:
sr/pl/kiele/tu/lab10/MyAnnotatedClass.ja
v
a
Odzytanie
adnotaji
przy
p
omo
y
reeksji:
1
publi
lass
MyAnnotationRefletion
{
2
3
stati
Class < MyAnnotatedClass
>
lazz
=
MyAnnotatedClass
.
lass
;
4
5
publi
stati
void
main (String [℄
args )
throws
ClassNotFoundExeption
{
6
Annotation
[℄
annotations
=
lazz .getAnnotations
() ;
14
7
for
(Annotation
annotation
:
annotations
)
{
8
System
.out. println (
" Class
"
+
lazz
+
"
is
annotated
with
"
9
+
annotation
);
10
MyAnnotation
myA
=
lazz . getAnnotation
(MyAnnotation
.
lass
);
11
if
(myA
!=
null
)
12
System
.out .println (
"name
=
"
+
myA .name ()
13
+
",
id
=
"
+
myA .id() );
14
}
15
}
16
}
Przykªad
24:
sr/pl/kiele/tu/lab10/MyAnnotationReetion.ja
v
a
K
ompilaja
i
uru
homienie
aplik
aji:
java
pl\ kiele \tu \lab10 \MyAnnotation
.java
java
pl\ kiele \tu \lab10 \MyAnnotatedClass
.java
java
pl\ kiele \tu \lab10 \MyAnnotationRefletion
.java
java
pl.kiele
.tu. lab10 .MyAnnotationRefletion
W
ynik
dziaªania:
Class
lass
pl .kiele .tu .lab10 .MyAnnotatedClass
is
annotated
with
←֓
pl. kiele .tu .lab10 .MyAnnotation
(id=1234,
name =abd )
name
=
abd ,
id
=
1234
Odzytanie
adnotaji
przy
p
omo
y
pro
esora
adnotaji:
1
publi
lass
MyAnnotationProessor
extends
AbstratProessor
{
2
3
Class <MyAnnotation
>
annotation
=
MyAnnotation
.
lass
;
4
5
Override
6
publi
boolean
proess
(Set <?
extends
TypeElement
>
annotations
,
7
RoundEnvironment
roundEnv
)
{
8
9
Messager
messager
=
proessingEnv
.getMessager
();
10
11
Set <?
extends
Element
>
elements
=
roundEnv
12
. getElementsAnnotatedWith
(annotation
) ;
13
14
for
(Element
element
:
elements
)
{
15
messager
.printMessage
(Kind .NOTE ,
" Class
"
+
element
16
+
"
is
annotated
with
"
+
annotation
) ;
17
MyAnnotation
myA
=
element
.getAnnotation
(MyAnnotation
.
lass
);
18
if
(myA
!=
null
)
19
messager
.printMessage
(Kind .NOTE ,
"name
=
"
+
myA .name ()
20
+
",
id
=
"
+
myA .id() );
21
}
22
return
true
;
23
}
24
25
Override
26
publi
SoureVersion
getSupportedSoureVersion
()
{
27
return
SoureVersion
. RELEASE_7
;
28
}
29
30
Override
31
publi
Set <String
>
getSupportedAnnotationTypes
()
{
32
HashSet
<String >
tmp
=
new
HashSet <String
>();
33
tmp .add (annotation
.getName
());
34
return
tmp;
15
35
}
36
37
Override
38
publi
Set <String
>
getSupportedOptions
()
{
39
return
new
HashSet
<String
>();
40
}
41
42
}
Przykªad
25:
sr/pl/kiele/tu/lab10/MyAnnotationPro
essor
.ja
v
a
K
ompilaja
i
uru
homienie
aplik
aji:
java
pl\ kiele \tu \lab10 \MyAnnotationProessor
.java
java
-proessor
pl .kiele . tu.lab10 . MyAnnotationProessor
pl \kiele \ tu\lab10 \MyAnnotatedClass
.java
W
ynik
dziaªania:
Note :
Class
pl .kiele .tu .lab10 .MyAnnotatedClass
is
annotated
with
interfae
←֓
pl.kiele
.tu. lab10 .MyAnnotation
Note :
name
=
abd,
id
=
1234
8
T
est
y
jednostk
o
w
e
Mo»na
wyró»ni¢
nastpuj¡e
p
oziom
y
testo
w
ania
oprogramo
w
ania
testo
w
anie
jednostk
o
w
e
"Przedmiotem
testo
w
ania
jednostk
o
w
ego
(unit
testing,
mo
dule
testing)
s¡
p
o
dsta
w
o
w
e
jednostki
pro-
gram
u
opisane
w
pro
jek
ie
szzegóªo
wym.
P
osta¢
t
y
h
jednostek
zale»y
o
d
te
hnologii
implemen
taji
mog¡
b
y¢
nimi
p
o
dprogram
y
(pro
edury
,
funk
je)
napisane
w
jzyku
strukturaln
ym,
skrypt
y
SQL
alb
o
meto
dy
lub
klasy
zapisane
w
jzyku
obiekto
wym.
Celem
testo
w
ania
na
t
ym
p
oziomie
jest
spra
wdzenie
zgo
dno±i
dziaªania
wszystki
h
oprao
w
an
y
h
jednostek
z
i
h
sp
eyk
aj¡
wynik
a
j¡a
z
pro
jektu,
oraz
wykryie
i
usuniie
jak
na
jwikszej
lizb
y
bªdó
w."
testo
w
anie
in
tegrayjne
"P
oª¡zenie
dw
ó
h
wsp
óªdziaªa
j¡y
h
jednostek
t
w
orzy
no
w
¡
jednostk
,
w
której
uja
wnia
j¡
si
bª-
dy
zwi¡zane
z
niedopaso
w
aniem
me
hanizmó
w
i
h
wsp
óªpray
.
Przedmiotem
dziaªa«
p
o
dejmo
w
an
y
h
p
o
dzas
testo
w
ania
in
tegrayjnego
(in
terfae
testing)
jest
ª¡zenie
jednostek
program
u
w
oraz
wiksze
k
omp
onen
t
y
i
spra
wdzanie
zgo
dno±i
i
h
dziaªania
ze
sp
eyk
aj¡
wynik
a
j¡¡
z
pro
jektu
ar
hitektury
oprogramo
w
ania.
Celem
testó
w
jest
spra
wdzenie
funk
jono
w
ania
in
terfejsó
w
(...)."
testo
w
anie
systemo
w
e
"Przedmiotem
testo
w
ania
systemo
w
ego
(system
testing)
jest
aªo±¢
oprogramo
w
ania
zin
tegro
w
ana
i
za-
instalo
w
ana
w
o
dp
o
wiednim
±ro
do
wisku
wyk
ona
w
zym.
Celem
testó
w
jest
spra
wdzenie
zgo
dno±i
sp
o-
sobu
dziaªania
wszystki
h
funk
ji
oprogramo
w
ania
ze
sp
eyk
aj¡
oraz
w
eryk
aja
inn
y
h
wªa±iw
o±i
system
u
okre±lon
y
h
przez
wymagania
niefunk
jonalne."
testo
w
anie
ak
eptayjne
"T
esto
w
aniu
ak
eptayjnem
u
(aeptane
testing)
p
o
dlega
oprogramo
w
anie
stano
wi¡e
przedmiot
do-
sta
wy
dla
u»ytk
o
wnik
a,
zainstalo
w
ane
w
do
elo
wym
±ro
do
wisku
pray
lub
w
±ro
do
wisku
imituj¡ym
do
elo
w
e
±ro
do
wisk
o
pray
oprogramo
w
ania.
Celem
testó
w
jest
spra
wdzenie
zgo
dno±i
dziaªania
z
wy-
maganiami
i
p
otrzebami
u»ytk
o
wnik
a.
F
orma
testó
w
mo»e
b
y¢
p
o
dobna
do
testó
w
systemo
wy
h,
jednak
pro
es
testo
w
ania
nie
jest
zorien
to
w
an
y
na
zna
jdo
w
anie
i
usu
w
anie
defektó
w,
lez
razej
na
zademonstro-
w
anie
i
zat
wierdzenie
pro
duktu
przez
u»ytk
o
wnik
a
oraz
ew
en
tualnie
dostro
jenie
do
jego
rzezywist
y
h
p
otrzeb."
St
w
orzenie
testu
jednostk
o
w
ego
dla
klasy
Calulator
przy
u»yiu
biblioteki
JUnit
w
±ro
do
wisku
Elipse
przebiega
w
nastpuj¡y
sp
osób:
File
>
New
>
Other
>
Java
JUnit
JUnit
T
est
Case.
W
nastpuj¡y
h
p
ola
h
nale»y
wpisa¢:
16
"Class
under
test"
nazw
klasy
,
której
b
dzie
dot
yzyª
test
(np.
pl.kiel
e.tu.lab10.Calulator
),
"Pakage"
nazw
pakietu
(np.
pl.kiel
e.tu.lab10
),
"Name"
nazw
klasy;
zazwyza
j
nazw
a
testu
jednostk
o
w
ego
to
nazw
a
klasy
,
której
dot
yzy
oraz
sªo
w
o
"T
est"
(np.
CalulatorT
est
).
P
o
nai±niiu
"Next"
nale»y
zaznazy¢
meto
dy
,
który
h
b
d¡
dot
yzyªy
test
y
,
zyli
"mul(int,
int)"
i
"div(int,
int)".
W
i±nieie
"Finish"
p
o
w
o
duje
wygenero
w
anie
klasy
CalulatorT
est.
W
k
olejn
ym
kroku
nale»y
dla
meto
d
testMul()
oraz
testDiv()
zast¡
pi¢
aktualne
iaªa
meto
d("fail("Not
yet
implemente
d");"
)
o
dp
o
wied-
nim
k
o
dem.
Uru
homienie
testu
nastpuje
p
oprzez
klikniie
pra
wy
kla
wiszem
na
k
o
dzie
i
wybranie:
R
un
As
>
JUnit
T
est.
A
dnotaje
zwi¡zane
z
JUnit
:
T
est
sªu»y
do
oznazania
meto
dy
jak
o
testu
jednostk
o
w
ego,
za
wiera
op
jonalne
skªado
w
e
exp
e
te
d
i
time
out
:
publi
abstr
at
java.lang.Class<?
extends
java.lang.Thr
owable>
exp
e
te
d
op
jonalna
skªado
w
a
p
o
w
o
duj¡a,
»e
wyw
oªanie
meto
dy
testo
w
ej
zak
o«zy
si
suk
esem
t
ylk
o
gdy
zgªosi
ona
wyj¡tek,
T
est
(exp
e
te
d
=
Ex
eption.lass)
publi
abstr
at
long
time
out
op
jonalna
skªado
w
a
p
o
w
o
duj¡a,
»e
wyw
oªanie
meto
dy
testo
w
ej
zak
o«zy
si
p
ora»k
¡,
je»eli
trw
aªo
ono
dªu»ej
ni»
p
o
dan
y
limit
zasu,
T
est(time
out=100)
Before
meto
da
oznazona
ta
adnotaj¡
b
dzie
wyw
oªyw
ana
przed
meto
d¡
testo
w
¡,
After
meto
da
oznazona
ta
adnotaj¡
b
dzie
wyw
oªyw
ana
p
o
meto
dzie
testo
w
ej,
BeforeClass
meto
da
oznazona
ta
adnotaj¡
b
dzie
wyw
oªyw
ana
przed
wyw
oªaniem
pierwszej
meto
dy
testo
w
ej
z
tej
klasy
,
AfterClass
meto
da
oznazona
ta
adnotaj¡
b
dzie
wyw
oªyw
ana
p
o
wyw
oªaniu
ostatniej
meto
dy
testo
w
ej
z
tej
klasy
,
Ignore
meto
da
oznazona
ta
adnotaj¡
nie
zostanie
wyw
oªana
jak
o
test,
za
wiera
skªado
w
¡
value,
która
sªu»y
do
op
jonalnego
p
o
dania
p
o
w
o
du
dlazego
test
zostaª
zignoro
w
an
y
,
publi
abstr
at
java.lang.String
value
Klasa
org.junit.Assert
za
wiera
zbiór
przei¡»on
y
h
meto
daserji
wyk
orzyst
yw
an
y
h
p
o
dzas
pisania
testó
w:
assertArra
yEquals()
assertEquals()
assertF
alse()
assertNotNull()
assertNotSame()
assertNull()
assertThat()
2
h
ttp://junit.soureforge.net/ja
v
ado
/
3
h
ttp://junit.soureforge.net/ja
v
ado
/org /junit/Assert .h
tml
17
assertT
rue()
fail()
Klasa
org.junit.Assume
za
wiera
zbiór
meto
d
sªu»¡y
h
dla
wyra»ania
zaªo»e«
o
w
arunk
a
h,
dla
który
h
test
ma
znazenie
(jest
w
a»n
y).
Je»eli
zaªo»enie
nie
jest
sp
eªnione,
to
nie
znazy
to,
»e
k
o
d
jest
uszk
o
dzon
y
,
ale
»e
test
nie
dostarza
»adnej
u»yteznej
informaji.
assumeNoExeption()
assumeNotNull()
assumeThat()
assumeT
rue()
Przykªado
w
a
klasa:
1
pakage
pl .kiele . tu.lab10 ;
2
3
publi
lass
Calulator
{
4
5
publi
int
mul (
int
x,
int
y){
6
return
x
*
y ;
7
}
8
9
publi
int
div (
int
x,
int
y){
10
return
x
/
y ;
11
}
12
}
Przykªad
26:
sr/pl/kiele/tu/lab10/Calulator.ja
v
a
Przykªado
w
a
klasa
testuj¡a:
1
import
org .junit .Test ;
2
3
publi
lass
CalulatorTest
{
4
5
final
stati
int
CORRECT_ANSWER
=
4;
6
final
stati
int
NOT_CORRECT_ANSWER
=
1;
7
final
stati
int
EXPECTED_ANSWER
=
CORRECT_ANSWER
;
8
9
final
stati
boolean
THROW_EXCEPTION
=
false
;
10
11
Test (expeted
=
ArithmetiExeption
.
lass
)
12
publi
void
testDiv
()
{
13
Calulator
al
=
new
Calulator
();
14
al .div (1,
0);
15
}
16
17
Test
18
publi
void
testMul
()
{
19
Calulator
al
=
new
Calulator
();
20
assertEquals
(EXPECTED_ANSWER
,
al. mul(2,
2) );
21
if
(THROW_EXCEPTION
)
22
throw
new
RuntimeExeption
();
23
}
24
25
}
Przykªad
27:
sr/pl/kiele/tu/lab10/Calulator
T
est.ja
v
a
4
h
ttp://junit.soureforge.net/ja
v
ado
/org /junit/Assume.h
tml
18
9
Przykªado
w
a
tre±¢
lab
oratorium
Zostanie
p
o
dana
w
p
ó¹niejszym
terminie.
1.
Prosz
st
w
orzy¢
aplik
aj
przedsta
wia
j¡¡
wszystkie
sp
osob
y
(9)
obsªugi
wyj¡tk
ó
w
przedsta
wione
w
tej
instruk
ji
lab
oratoryjnej.
2.
Prosz
st
w
orzy¢
aplik
aj
przedsta
wia
j¡¡
przykªad
zastoso
w
ania
aserji.
3.
Prosz
st
w
orzy¢
przykªado
wy
testu
jednostk
o
wy
z
wyk
orzystaniem
biblioteki
JUnit.
Literatura
[1℄
S
hildt
Herb
ert,
Ja
v
a.
K
omp
endium
programist
y
.
W
ydanie
VI
I
I,
Helion,
2012
[2℄
E
k
el
Brue,
Thinking
in
Ja
v
a,
Edyja
p
olsk
a,
W
ydanie
IV,
Helion,
2006
[3℄
Horstmann
Ca
y
S.,
Cornell
Gary
,
Ja
v
a.
P
o
dsta
wy
,
W
ydanie
VI
I
I,
Helion,
2008
[4℄
Horstmann
Ca
y
S.,
Cornell
Gary
,
Ja
v
a.
T
e
hniki
zaa
w
anso
w
ane,
W
ydanie
VI
I
I,
Helion,
2009
[5℄
Blo
h
Josh
ua,
Ja
v
a.
Efekt
ywne
programo
w
anie.
W
ydanie
I
I,
Helion,
2009
[6℄
Bra
k
een
Da
vid,
Bark
er
Bret,
V
anhelsu
w
e
Laurene,
Ja
v
a.
T
w
orzenie
gier,
Helion,
2004
[7℄
Sªo
wnik
terminó
w
z
zakresu
obiekto
w
o±i.
Kazimierz
Subieta,
Ak
ademi
k
a
Oyna
W
yda
wniza
PLJ,
W
arsza
w
a
1999
[8℄
Sedgewi
k
Rob
ert,
W
a
yne
Kevin,
Algorytm
y
.
W
ydanie
IV,
Helion,
2012
[9℄
Krzysztof
Sa
ha,
In»ynieria
oprogramo
w
ania,
PWN,
2010
Materiaªy
do
przedmiotu
dostpne
s¡
na
strona
h:
h
ttp://a
hilles.tu.kiele.pl/
h
ttp://w
eaii-
mo
o
dle.tu.kiele.pl/
19