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
publi zne
klasy
w
dwó
h
plik
a
h
M ain.java
i
T est.java
:
1
pa kage
pl .kiel e . 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/kiel e/tu/lab10/Main.ja
v
a
1
pa kage
pl .kiel e . tu.lab10 ;
2
3
publi
lass
Test
{
4
publi
Test ()
{
5
}
6
}
Przykªad
2:
sr /pl/kiel e/tu/lab10/T
est.ja
v
a
K
ompila ja
i
uru
homienie:
1
java
pl\ kiel e \tu \lab10 \Test .java
2
java
pl\ kiel e \tu \lab10 \Main .java
3
java
pl.kiel e
.tu. lab10 .Main
Aplik
a ja
dziaªa
p
opra
wnie.
Co
stanie
si
je±li
k
onstruktor
klasy
T est
u zynim
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
a j?
Ex eption
in
thread
"main "
java. lang .IllegalA essError
:
tried
to
a ess
method
←֓
pl.kiel e
.tu. lab10 .Test .<init >() V
from
lass
pl.kiel e
.tu.lab10 . Main
at
pl.kiel e
.tu. lab10 .Main .main (Main .java :5)
2
W
yj¡tek
W
yj¡tek
(ex eption)
Sp
e jaln
y
b
yt
programist
y zn
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
e jalnego
fragmen
tu
program
u
za
jm
uj¡ ego
si
obsªug¡
tego
wyj¡tku.
(.
.
.
)
W
sytua ji
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
informa ji
k
onie znej
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
ompila ji
i
system
u
(.
.
.
).
Ex eption
jest
p
o
dsta
w
o
wym
t
yp
em,
jaki
mo»e
b
y¢
wyrzu on
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,
Bru e
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
timeEx eption
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 .Obje t
2
extended
by
java . lang. Throwable
3
extended
by
java .lang .Ex eption
1
java .lang .Obje t
2
extended
by
java . lang. Throwable
3
extended
by
java .lang .Ex eption
4
extended
by
java .lang .RuntimeEx eption
1
java .lang .Obje t
2
extended
by
java . lang. Throwable
3
extended
by
java .lang .Error
T
w
orzenie
klas
wªasn
y
h
wyj¡tk
ó
w:
1
pa kage
pl .kiel e . tu.lab10 ;
2
3
publi
lass
MyEx eption
extends
Ex eption
{
4
}
Przykªad
3:
sr /pl/kiel e/tu/lab10/MyEx eption.ja
v
a
1
pa kage
pl .kiel e . tu.lab10 ;
2
3
publi
lass
MyRuntimeEx eption
extends
RuntimeEx eption
{
4
}
Przykªad
4:
sr /pl/kiel e/tu/lab10/MyRun
timeEx eption.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¡
ozna zane
p
oprzez
sªo
w
o
klu zo
w
e
catch
Sek
ja
f inally
fragmen
t
k
o
du,
który
h ielib
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
wyrzu i¢
tj.
dziedzi z¡ y
p
o
klasie
T hrowable
"
np.
throw new M yException
()
.
Prze
h
wy enie
wszystki
h
wyj¡tk
ó
w:
1
try
{
2
...
3
}
at h
(Ex eption
e){
4
e.printSta kTra e
();
5
}
Zastoso
w
anie
sym
b
olu
"|"
(or)
umo»liwia
st
w
orzenie
bloku
at h,
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
}
at h
(Arithmeti Ex eption
|
ArrayIndexOutOfBoundsEx eptio n
e){
4
e.printSta kTra e
();
5
}
2
1
try
{
2
...
3
}
at h
(Arithmeti Ex eption
e1){
4
e1. printSta kTra e
();
5
}
at h
(ArrayIndexOutOfBoundsEx epti on
e2 ){
6
e2. printSta kTra e
();
7
}
Rozszerzona
forma
wyra»enia
try
zw
ana
try-with-r
esour
e
ma
nastpuj¡ ¡
p
osta¢
1
try
{spe yfika ja
- zasobu }
{
2
//
uzy ie
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
prze i¡»onej
mo»na
zgªasza¢
jedynie
te
wyj¡tki,
które
zostaªy
p
o
dane
w
sp
e yk
a ji
z
klasy
bazo
w
ej.
(.
.
.
)
Mo»na
zanie
ha¢
wyrzu ania
jaki
hk
olwiek
wyj¡tk
ó
w
p
omimo
i
h
ob
e no± i
w
klasie
bazo
w
ej.
1
publi
lass
TestCat h
{
2
publi
stati
void
main (String [℄
args )
throws
Ex eption
{
3
Random
r
=
new
Random
(
new
Date ().getTime
()
>>>
(
new
Date () .getTime ()
%
4));
4
try
{
5
swit h
(r.nextInt
()
%
4)
{
6
ase
0:
System . out. print (
"0.
"
);
7
throw
new
MyEx eption
() ;
8
ase
1:
System . out. print (
"1.
"
);
9
throw
new
MyRuntimeEx eption
();
10
ase
2:
System . out. print (
"2.
"
);
11
throw
new
NullPointerEx eption
() ;
12
default
:
System
.out .print (
"3.
"
);
13
throw
new
FileNotFoundEx eption
() ;
14
}
15
}
at h
(MyEx eption
e)
{
16
System
.out. println (
" e.getClass
().getSimpleName
()
=
"
+
e. getClass () .getSimpleName
()) ;
17
}
at h
(FileNotFoundEx eption
e)
{
18
System
.out. println (
" e.getClass
().getSimpleName
()
=
"
+
e. getClass () .getSimpleName
()) ;
19
}
at h
(Ex eption
e)
{
20
//
obsªuga
wszystki h
pozostaªy h
wyj¡tków
21
System
.out. println (
" e.getClass
().getSimpleName
()
=
"
+
e. getClass () .getSimpleName
()) ;
22
System
.out. println (
" e.getMessage
()
=
"
+
e. getMessage
());
23
//
zwra a
sz zegóªow¡
informa j
24
System
.out. println (
" e.getLo alizedMessage
()
=
"
+
e. getLo alizedMessage
());
25
System
.out. println (
" e.printSta kTra e
() "
);
26
e. printSta kTra e
(System . out) ;
//
drukuje
komunikat
oraz
stos
wywoªa«
27
System
.out. println (
" e.getCause
()
=
"
+
e.getCause
()) ;
//
zwra a
przy zyn
28
}
29
}
30
}
Przykªad
5:
sr /pl/kiel e/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
deni ji
jest
nie
p
opra
wna
i
dla zego?
1
publi
lass
TestThrows
{
2
publi
void
a ()
{
3
throw
new
MyEx eption
();
4
}
5
3
6
publi
void
b ()
{
7
throw
new
MyRuntimeEx eption
() ;
8
}
9
10
publi
void
()
throws
Ex eption
{
11
throw
new
MyEx eption
();
12
}
13
14
publi
void
d ()
throws
Ex eption
{
15
throw
new
MyRuntimeEx eption
() ;
16
}
17
18
publi
void
e ()
throws
RuntimeEx eption
{
19
throw
new
MyEx eption
();
20
}
21
22
publi
void
f ()
throws
RuntimeEx eption
{
23
throw
new
MyRuntimeEx eption
() ;
24
}
25
26
publi
void
g ()
throws
MyEx eption
{
27
throw
new
MyEx eption
();
28
}
29
30
publi
void
h ()
throws
MyEx eption
{
31
throw
new
MyRuntimeEx eption
() ;
32
}
33
34
publi
void
i ()
throws
MyRuntimeEx eption
{
35
throw
new
MyEx eption
();
36
}
37
38
publi
void
j ()
throws
MyRuntimeEx eption
{
39
throw
new
MyRuntimeEx eption
() ;
40
}
41
42
publi
void
k ()
throws
MyEx eption
,
MyRuntimeEx eption
{
43
return
;
44
}
45
}
Przykªad
6:
sr /pl/kiel e/tu/lab10/T
estThro
ws.ja
v
a
1
publi
lass
TestFinally
{
2
stati
void
method
()
throws
MyEx eption
{
3
Random
r
=
new
Random
();
4
if
(r.nextInt
()
%
2
==
0)
{
5
System
.out. println (
" method ()
throw "
);
6
throw
new
MyEx eption
();
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
}
at h
(MyEx eption
e)
{
4
19
System
.out. println (
" main()
at h
"
+
e );
20
}
finally
{
21
System
.out. println (
" main()
finally
"
);
22
}
23
}
24
}
Przykªad
7:
sr /pl/kiel e/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
informa ji
do
dziennik
a
Informa ja
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
informa ja
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
Ex eption
{
3
throw
new
Ex eption
(
" My
ex eption
"
) ;
4
}
5
}
Przykªad
8:
sr /pl/kiel e/tu/lab10/MyClass.ja
v
a
1
publi
lass
TestEx eption1
{
2
3
stati
{
4
try
{
5
System
.setErr (
new
PrintStream
(
"log .txt "
));
6
}
at h
(FileNotFoundEx eption
ignored )
{
7
ignored
.printSta kTra e
() ;
8
}
9
}
10
11
publi
stati
void
main (String [℄
args )
{
12
try
{
13
MyClass
.getLanguage
() ;
14
}
at h
(Ex eption
e)
{
15
e. printSta kTra e
(System . out) ;
16
e. printSta kTra e
(System . err) ;
17
JOptionPane
.showMessageDialog
(
null
,
e) ;
18
}
19
}
20
}
Przykªad
9:
sr /pl/kiel e/tu/lab10/T
estEx eption1.ja
v
a
3.2
Zwró
enie
si
do
u»ytk
o
wnik
a
z
pro±ba
o
p
o
dje ie
o
dp
o
wiedniej
de yzji
1
publi
lass
TestEx eption2
{
2
3
publi
stati
void
main (String [℄
args )
{
5
4
try
{
5
MyClass
.getLanguage
() ;
6
}
at h
(Ex eption
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/kiel e/tu/lab10/T
estEx eption2.ja
v
a
3.3
U»y ie
w
arto± i
dom
y±ln
y
h
lub
alternat
ywn
y
h
1
publi
lass
TestEx eption3
{
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
}
at h
(Ex eption
e)
{
10
language
=
DEFAULT_LANGUAGE
;
11
}
12
}
13
}
Przykªad
11:
sr /pl/kiel e/tu/lab10/T
estEx eption3.ja
v
a
3.4
Przek
azanie
stero
w
ania
do
innej
z± i
aplik
a ji
1
publi
lass
TestEx eption4
{
2
3
publi
stati
void
main (String [℄
args )
{
4
try
{
5
MyClass
.getLanguage
() ;
6
}
at h
(Ex eption
e)
{
7
reset () ;
8
}
9
}
10
11
stati
void
reset
(){
12
//
...
13
}
14
}
Przykªad
12:
sr /pl/kiel e/tu/lab10/T
estEx eption4.ja
v
a
3.5
K
on
w
ersja
wyj¡tku
do
innej
p
osta i
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
przy zyn
b
dzie
miaª
usta
wion
y
nasz
wyj¡tek
(
throw new RuntimeException
(e)
).
1
publi
interfa e
MyInterfa e
{
2
publi
void
method
();
3
}
Przykªad
13:
sr /pl/kiel e/tu/lab10/MyIn
terfa e.ja
v
a
1
publi
lass
TestEx eption5
implements
MyInterfa e
{
2
3
Override
4
publi
void
method
()
{
//
!!!
throws
Ex eption
{
5
try
{
6
MyClass
.getLanguage
() ;
7
}
at h
(Ex eption
e)
{
8
throw
new
RuntimeEx eption
(e) ;
9
}
10
}
11
12
publi
stati
void
main (String [℄
args )
{
13
TestEx eption5
t
=
new
TestEx eption5
() ;
14
t.method
();
15
}
16
}
Przykªad
14:
sr /pl/kiel e/tu/lab10/T
estEx eption5.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
TestEx eption6
{
2
3
publi
stati
void
main (String [℄
args )
{
4
try
{
5
MyClass
.getLanguage
() ;
6
}
at h
(Ex eption
ignore
)
{
7
}
8
}
9
}
Przykªad
15:
sr /pl/kiel e/tu/lab10/T
estEx eption6.ja
v
a
3.7
P
o
wtórzenie
op
era ji
W
p
oni»szym
przypadku
trzykrotnie
wyw
oªyw
ana
jest
meto
da
getLanguage
()
.
P
omidzy
p
osz zegó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
TestEx eption7
{
2
publi
stati
void
main (String [℄
args )
{
3
int
ounter
=
0;
4
while
( ounter ++
<
3)
{
5
try
{
6
MyClass
.getLanguage
();
7
break
;
8
}
at h
(Ex eption
e )
{
7
9
System
.err .println (
"Ex eption
no.
"
+
ounter );
10
e .printSta kTra e
() ;
11
try
{
12
TimeUnit . SECONDS .sleep (1) ;
13
}
at h
(InterruptedEx eption
e2)
{
14
e2.printSta kTra e
();
15
}
16
}
17
}
18
}
19
}
Przykªad
16:
sr /pl/kiel e/tu/lab10/T
estEx eption7.ja
v
a
3.8
W
yw
oªanie
op
era ji
alternat
ywnej
1
publi
lass
TestEx eption8
{
2
3
publi
stati
void
main (String [℄
args )
{
4
try
{
5
MyClass
.getLanguage
() ;
6
}
at h
(Ex eption
e)
{
7
getLanguageFromFile
() ;
8
}
9
}
10
11
stati
void
getLanguageFromFile
()
{
12
//
...
13
}
14
}
Przykªad
17:
sr /pl/kiel e/tu/lab10/T
estEx eption8.ja
v
a
3.9
Przygoto
w
anie
aplik
a ji
do
zamkni ia
Przed
zamkni iem
aplik
a ji
mo»e
wyst¡
pi¢
k
onie zno±¢:
-
zamkni ia
ot
w
art
y
h
plik
ó
w,
-
zamkni ia
ot
w
art
y
h
p
oª¡ ze«
sie io
wy
h,
bazo
dano
wy
h
itp.,
-
zapisanie
dan
y
h,
-
p
oinformo
w
anie
inn
y
h
aplik
a ji,
systemó
w
itp.
o
t
ym
fak
ie.
1
publi
lass
TestEx eption9
{
2
3
publi
stati
void
main (String [℄
args )
{
4
try
{
5
MyClass
.getLanguage
() ;
6
}
at h
(Ex eption
e)
{
7
/*
zamkni ie
otwarty h
plików
,
8
zamkni ie
otwarty h
poª¡ ze«
sie iowy h
,
bazodanowy h
itp
9
zapisanie
dany h ,
10
poinformowanie
inny h
aplika ji
,
systemów
itp.
o
tym
fak ie .
11
12
zamkni ie
aplika ji
13
jako
parametr
podaje
si
"kod
statusu
"
14
warto± i
inne
ni»
0
ozna zaj¡
nienormalne
zamkni ie
aplika ji
*/
8
15
System
.exit (1);
16
}
17
}
18
}
Przykªad
18:
sr /pl/kiel e/tu/lab10/T
estEx eption9.ja
v
a
4
P
o
dsta
w
o
w
e
wyj¡tki
W
yj¡tki
zdenio
w
ane
w
pakie ie
ja
v
a.lang
Arithmeti Ex eption
Arra
yIndexOutOfBoundsEx eption
Arra
yStoreEx eption
ClassCastEx eption
ClassNotF
oundEx eption
CloneNotSupp
ortedEx eption
En
umConstan
tNotPresen
tEx eption
Ex eption
IllegalA
essEx eption
IllegalArgumen
tEx eption
IllegalMonitorStateEx eption
IllegalStateEx eption
IllegalThreadStateEx eption
IndexOutOfBoundsEx eption
Instan
tiationEx eption
In
terruptedEx eption
Negativ
eArra
ySizeEx eption
NoSu
hFieldEx eption
NoSu
hMetho
dEx eption
NullP
oin
terEx eption
Num
b
erF
ormatEx eption
Ree tiv
eOp
erationEx eption
Run
timeEx eption
Se urit
yEx eption
StringIndexOutOfBoundsEx eption
T
yp
eNotPresen
tEx eption
Unsupp
ortedOp
erationEx eption
9
W
yj¡tki
zdenio
w
ane
w
pakie ie
ja
v
a.util
Con urren
tMo
di ationEx eption
Dupli ateF
ormatFlagsEx eption
Empt
ySta
kEx eption
F
ormatFlagsCon
v
ersionMismat
hEx eption
F
ormatterClosedEx eption
IllegalF
ormatCo
deP
oin
tEx eption
IllegalF
ormatCon
v
ersionEx eption
IllegalF
ormatEx eption
IllegalF
ormatFlagsEx eption
IllegalF
ormatPre isionEx eption
IllegalF
ormatWidthEx eption
IllformedLo
aleEx eption
InputMismat
hEx eption
In
v
alidProp
ertiesF
ormatEx eption
MissingF
ormatArgumen
tEx eption
MissingF
ormatWidthEx eption
MissingResour eEx eption
NoSu
hElemen
tEx eption
T
o
oMan
yListenersEx eption
Unkno
wnF
ormatCon
v
ersionEx eption
Unkno
wnF
ormatFlagsEx eption
Ree tiv
eOp
erationEx eption
Run
timeEx eption
Se urit
yEx eption
StringIndexOutOfBoundsEx eption
T
yp
eNotPresen
tEx eption
Unsupp
ortedOp
erationEx eption
10
5
Aser je
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
RuntimeEx eption
(
" Not
orre t
value :
age
=
"
+
age );
11
System . out.println
(
"My
age
=
"
+
age );
12
}
13
}
Przykªad
19:
sr /pl/kiel e/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 /RuntimeEx eption
9:
dup
10:
new
#4
//
lass
java /lang /StringBuilder
13:
dup
14:
invokespe ial
#5
//
Method
java /lang /StringBuilder
."< init >":() V
17:
ld
#6
//
String
Not
orre t
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:
invokespe ial
#10
//
Method
java / lang/ RuntimeEx eption
."< 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
...
Aser je
"Stosunk
o
w
o
no
wym
elemen
tem
w
Ja
vie
jest
sªo
w
o
klu zo
w
e
assert
W
trak
ie
t
w
orzenia
i
testo
w
ania
programó
w
u»yw
a
si
go
do
aser ji,
zyli
spra
wdzania,
zy
dan
y
w
arunek
jest
sp
eªnion
y
w
trak
ie
dziaªania
program
u."
Wª¡ zanie
aser ji:
1
java
-ea[:< pa kagename
>...|:<
lassname
>℄
klasaPosiadaja aMetodeMain
11
2
java
-enableassertions
[:< pa kagename
>...|:< lassname
>℄
klasaPosiadaja aMetodeMain
1
publi
lass
TestAssertion
{
2
3
stati
int
age
=
-1;
4
5
publi
stati
void
main (String [℄
args )
{
6
assert
age
>=
0
:
"Not
orre t
value :
age
=
"
+
age;
7
System . out.println
(
"My
age
=
"
+
age );
8
}
9
}
Przykªad
20:
sr /pl/kiel e/tu/lab10/T
estAssertion.ja
v
a
Uru
homienie:
java
pl.kiel e
.tu. lab10 .TestAssertion
W
ynik
dziaªania:
My
age
=
-1
Uru
homienie:
java
-ea
pl.kiel e
.tu.lab10
.TestAssertion
W
ynik
dziaªania:
Ex eption
in
thread
"main "
java. lang .AssertionError
:
Not
orre t
value :
age
=
-1
at
pl.kiel e
.tu. lab10 .TestAssertion
.main (TestAssertion
.java :8)
Deasem
bla ja:
javap
-
pl.kiel e
.tu.lab10
.TestAssertion
W
ynik
deasem
bla ji:
Compiled
from
"TestAssertion
.java "
publi
lass
pl.kiel e . tu.lab10 . TestAssertion
{
stati
int
age;
stati
final
boolean
$assertionsDisabled
;
publi
pl.kiel e
.tu. lab10 .TestAssertion
();
Code :
0:
aload_0
1:
invokespe ial
#1
//
Method
java /lang /Obje t
."<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:
invokespe ial
#6
//
Method
java /lang /StringBuilder
."< init >":() V
23:
ld
#7
//
String
Not
orre t
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
Informa je
o
t
ypie
w
zasie
wyk
onania
(ang.
run-time
t
yp
e
information,
R
TTI)
p
ozw
ala
j¡
na
iden
t
yk
a j
t
yp
ó
w
i
wyk
orzyst
yw
anie
informa ji
o
ni
h
w
zasie
dziaªania
program
u.
Op
erator
instanceof
oraz
meto
da
isInstan e()
zostaªy
omó
wione
na
w
ze±niejszy
h
za
j ia
h.
Obiekt
Class
za
wiera
informa je
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
()
).
Sz zegóªy
dot
y z¡ 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
(
"Constru tor
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
Ex eption
{
17
Class <?>
t
=
null
;
18
t
=
Class .forName
(
"pl .kiel e .tu .lab10 .TestRTTI
"
) ;
19
//
Stati
init
20
Constru tor
<?>[℄
=
t.getConstru tors
() ;
21
System . out.println
(
"Constru tors
"
);
22
for
(
int
i
=
0;
i
<
.length ;
i++)
23
System
.out. println ( [i℄);
24
//
Constru tors
25
//
publi
TestRTTI
()
26
27
TestRTTI
instan e
=
( TestRTTI )
[0℄. newInstan e
(( Obje t [℄)
null
);
28
//
Constru tor
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 .Obje t .wait ()
...
38
//
publi
final
void
java .lang .Obje t .wait (long , int)
...
39
//
publi
final
native
void
java .lang .Obje t
.wait (long )
...
40
//
publi
native
int
java .lang .Obje t .hashCode
()
41
//
publi
final
native
java .lang .Class
java. lang .Obje t .getClass
()
42
//
publi
boolean
java .lang .Obje t . equals (java .lang .Obje t
)
43
//
publi
java .lang .String
java .lang .Obje t . toString ()
13
44
//
publi
final
native
void
java .lang .Obje t
.notify ()
45
//
publi
final
native
void
java .lang .Obje t
.notifyAll
()
46
//
Method
getI ()
47
m[1℄. invoke ( instan e ,
(Obje t [℄)
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 (instan e
,
5678) ;
56
System . out.println
(f[0℄. get (instan e
));
57
//
5678
58
}
59
}
Przykªad
21:
sr /pl/kiel e/tu/lab10/T
estR
TTI.ja
v
a
7
A
dnota je
A
dnota je
(nazyw
ane
te»
metadan
ymi)
umo»liwia
j¡
umiesz zenie
do
datk
o
w
ej
informa ji
w
plik
a
h
¹ró-
dªo
wy
h.
Strategie
za
ho
w
ania
adnota ji
SOUR
CE
"A
dnota je
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
ompila ji
k
o
du."
CLASS
"A
dnota je
ze
strategi¡
SOUR
CE
jest
za
ho
wyw
ana
w
pliku
. lass
w
trak
ie
k
ompila ji.
Nie
jest
jednak
dostpna
dla
maszyn
y
wirtualnej
w
trak
ie
wyk
onania
program
u."
R
UNTIME
"A
dnota je
ze
strategi¡
R
UNTIME
jest
za
ho
wyw
ana
w
pliku
. lass
w
trak
ie
k
ompila ji
i
jest
dostpna
dla
maszyn
y
wirtualnej
w
trak
ie
wyk
onania
program
u."
A
dnota je
mog¡
za
wiera¢
skªado
w
e,
np.
w
przykªado
w
ej
adnota ji
MyA
nnotation
s¡
to
id()
i
name()
:
1
Retention
(RetentionPoli y
. RUNTIME )
2
publi
interfa e
MyAnnotation
{
3
int
id() ;
4
5
String
name () ;
6
}
Przykªad
22:
sr /pl/kiel e/tu/lab10/MyAnnotation.ja
v
a
Ozna zenie
klasy
przy
p
omo
y
adnota ji:
1
MyAnnotation
(id
=
1234,
name
=
"ab d "
)
2
publi
lass
MyAnnotatedClass
{
3
}
Przykªad
23:
sr /pl/kiel e/tu/lab10/MyAnnotatedClass.ja
v
a
Od zytanie
adnota ji
przy
p
omo
y
reeksji:
1
publi
lass
MyAnnotationRefle tion
{
2
3
stati
Class < MyAnnotatedClass
>
lazz
=
MyAnnotatedClass
.
lass
;
4
5
publi
stati
void
main (String [℄
args )
throws
ClassNotFoundEx eption
{
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/kiel e/tu/lab10/MyAnnotationRee tion.ja
v
a
K
ompila ja
i
uru
homienie
aplik
a ji:
java
pl\ kiel e \tu \lab10 \MyAnnotation
.java
java
pl\ kiel e \tu \lab10 \MyAnnotatedClass
.java
java
pl\ kiel e \tu \lab10 \MyAnnotationRefle tion
.java
java
pl.kiel e
.tu. lab10 .MyAnnotationRefle tion
W
ynik
dziaªania:
Class
lass
pl .kiel e .tu .lab10 .MyAnnotatedClass
is
annotated
with
←֓
pl. kiel e .tu .lab10 .MyAnnotation
(id=1234,
name =ab d )
name
=
ab d ,
id
=
1234
Od zytanie
adnota ji
przy
p
omo
y
pro
esora
adnota ji:
1
publi
lass
MyAnnotationPro essor
extends
Abstra tPro essor
{
2
3
Class <MyAnnotation
>
annotation
=
MyAnnotation
.
lass
;
4
5
Override
6
publi
boolean
pro ess
(Set <?
extends
TypeElement
>
annotations
,
7
RoundEnvironment
roundEnv
)
{
8
9
Messager
messager
=
pro essingEnv
.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
Sour eVersion
getSupportedSour eVersion
()
{
27
return
Sour eVersion
. 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/kiel e/tu/lab10/MyAnnotationPro
essor
.ja
v
a
K
ompila ja
i
uru
homienie
aplik
a ji:
java
pl\ kiel e \tu \lab10 \MyAnnotationPro essor
.java
java
-pro essor
pl .kiel e . tu.lab10 . MyAnnotationPro essor
pl \kiel e \ tu\lab10 \MyAnnotatedClass
.java
W
ynik
dziaªania:
Note :
Class
pl .kiel e .tu .lab10 .MyAnnotatedClass
is
annotated
with
interfa e
←֓
pl.kiel e
.tu. lab10 .MyAnnotation
Note :
name
=
ab d,
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
sz zegóªo
wym.
P
osta¢
t
y
h
jednostek
zale»y
o
d
te
hnologii
implemen
ta ji
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
opra o
w
an
y
h
jednostek
z
i
h
sp
e yk
a j¡
wynik
a
j¡ a
z
pro
jektu,
oraz
wykry ie
i
usuni ie
jak
na
jwikszej
li zb
y
bªdó
w."
testo
w
anie
in
tegra yjne
"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
óªpra y
.
Przedmiotem
dziaªa«
p
o
dejmo
w
an
y
h
p
o
d zas
testo
w
ania
in
tegra yjnego
(in
terfa e
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
e yk
a j¡
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
e yk
a j¡
oraz
w
eryk
a ja
inn
y
h
wªa± iw
o± i
system
u
okre±lon
y
h
przez
wymagania
niefunk
jonalne."
testo
w
anie
ak
epta yjne
"T
esto
w
aniu
ak
epta yjnem
u
(a eptan e
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
pra y
lub
w
±ro
do
wisku
imituj¡ ym
do
elo
w
e
±ro
do
wisk
o
pra y
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,
le z
ra zej
na
zademonstro-
w
anie
i
zat
wierdzenie
pro
duktu
przez
u»ytk
o
wnik
a
oraz
ew
en
tualnie
dostro
jenie
do
jego
rze zywist
y
h
p
otrzeb."
St
w
orzenie
testu
jednostk
o
w
ego
dla
klasy
Cal ulator
przy
u»y iu
biblioteki
JUnit
w
±ro
do
wisku
E lipse
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
y zyª
test
(np.
pl.kiel
e.tu.lab10.Cal ulator
),
"Pa kage"
nazw
pakietu
(np.
pl.kiel
e.tu.lab10
),
"Name"
nazw
klasy;
zazwy za
j
nazw
a
testu
jednostk
o
w
ego
to
nazw
a
klasy
,
której
dot
y zy
oraz
sªo
w
o
"T
est"
(np.
Cal ulatorT
est
).
P
o
na i±ni iu
"Next"
nale»y
zazna zy¢
meto
dy
,
który
h
b
d¡
dot
y zyªy
test
y
,
zyli
"mul(int,
int)"
i
"div(int,
int)".
W
i±nie ie
"Finish"
p
o
w
o
duje
wygenero
w
anie
klasy
Cal ulatorT
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
klikni ie
pra
wy
kla
wiszem
na
k
o
dzie
i
wybranie:
R
un
As
>
JUnit
T
est.
A
dnota je
zwi¡zane
z
JUnit
:
T
est
sªu»y
do
ozna zania
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
a t
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
a t
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
ozna zona
ta
adnota j¡
b
dzie
wyw
oªyw
ana
przed
meto
d¡
testo
w
¡,
After
meto
da
ozna zona
ta
adnota j¡
b
dzie
wyw
oªyw
ana
p
o
meto
dzie
testo
w
ej,
BeforeClass
meto
da
ozna zona
ta
adnota j¡
b
dzie
wyw
oªyw
ana
przed
wyw
oªaniem
pierwszej
meto
dy
testo
w
ej
z
tej
klasy
,
AfterClass
meto
da
ozna zona
ta
adnota j¡
b
dzie
wyw
oªyw
ana
p
o
wyw
oªaniu
ostatniej
meto
dy
testo
w
ej
z
tej
klasy
,
Ignore
meto
da
ozna zona
ta
adnota j¡
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
dla zego
test
zostaª
zignoro
w
an
y
,
publi
abstr
a t
java.lang.String
value
Klasa
org.junit.Assert
za
wiera
zbiór
prze i¡»on
y
h
meto
daser ji
wyk
orzyst
yw
an
y
h
p
o
d zas
pisania
testó
w:
assertArra
yEquals()
assertEquals()
assertF
alse()
assertNotNull()
assertNotSame()
assertNull()
assertThat()
2
h
ttp://junit.sour eforge.net/ja
v
ado
/
3
h
ttp://junit.sour eforge.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
zna zenie
(jest
w
a»n
y).
Je»eli
zaªo»enie
nie
jest
sp
eªnione,
to
nie
zna zy
to,
»e
k
o
d
jest
uszk
o
dzon
y
,
ale
»e
test
nie
dostar za
»adnej
u»yte znej
informa ji.
assumeNoEx eption()
assumeNotNull()
assumeThat()
assumeT
rue()
Przykªado
w
a
klasa:
1
pa kage
pl .kiel e . tu.lab10 ;
2
3
publi
lass
Cal ulator
{
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/kiel e/tu/lab10/Cal ulator.ja
v
a
Przykªado
w
a
klasa
testuj¡ a:
1
import
org .junit .Test ;
2
3
publi
lass
Cal ulatorTest
{
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 (expe ted
=
Arithmeti Ex eption
.
lass
)
12
publi
void
testDiv
()
{
13
Cal ulator
al
=
new
Cal ulator
();
14
al .div (1,
0);
15
}
16
17
Test
18
publi
void
testMul
()
{
19
Cal ulator
al
=
new
Cal ulator
();
20
assertEquals
(EXPECTED_ANSWER
,
al . mul(2,
2) );
21
if
(THROW_EXCEPTION
)
22
throw
new
RuntimeEx eption
();
23
}
24
25
}
Przykªad
27:
sr /pl/kiel e/tu/lab10/Cal ulator
T
est.ja
v
a
4
h
ttp://junit.sour eforge.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
a j
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
a j
przedsta
wia
j¡ ¡
przykªad
zastoso
w
ania
aser ji.
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
Bru e,
Thinking
in
Ja
v
a,
Edy ja
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
Lauren e,
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
O yna
W
yda
wni za
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.kiel e.pl/
h
ttp://w
eaii-
mo
o
dle.tu.kiel e.pl/
19