Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
Mamytuwyraźniepowiedziane,żebłądwystąpiłw4.wierszuplikuTestijava,że
oczekiwanybyłokrągłynawiaszamykający(azabrakłogo),przyczymmiejsce,wktó-
rymwystąpiłproblem,wskazanejestznakiem^.Niezawszekomunikatyzkompilacji
będątakklarowne.Czasamibłądniebędziedokładniezlokalizowany(informacjabę-
dziewskazywaćnainnywierszniżten,wktórymwystąpiłbłąd).Musimywtedygłę-
biejzastanowićsięnadprzyczynąbłęduiprzeanalizowaćpoprawnośćwcześniejszych
wierszyprogramu.
Program,któryprzeszedłetapkompilacji,jestpoprawnyskładniowo,alejegowykonanie
niekonieczniemusibyćpoprawne.Mogąwnimbowiemwystąpićtzw.błędyfazywykonania.
Następującyprogramskompilujesiębezbłędnie:
publicclassTestRTE{
staticStringnapis;
publicstaticvoidmain(String
[
]args){
Systemioutiprintln(napisilength());
}
aleprzyjegowykonaniuwystąpibłąd:
Exceptioninthread"main"javailangiNullPointerException
atTestRTEimain(TestRTEijava:7)
bowiempróbujemypobraćdługośćłańcuchaznakowego(napisu),którynieistnieje.Zresz-
tąprzyczynaniejesttuistotna,terazważnejesttylko,byśmywiedzieli,żebłądwy-
konaniamożewystąpićmimopomyślnejkompilacji.Zwróćmyuwagę,żeJavanazywa
takiebłędywyjątkami(exception)iżeJVMpodaje,jakirodzajwyjątkuwystąpił,wjakiej
klasie,wjakiejmetodzieiktórywierszwprogramiegospowodował.Wartojeszczeraz
podkreślić,żenawetjeśliprogramniemabłędówskładniowych(kompilacjapomyślna)
iniewystępująbłędyfazywykonania,tojeszczenieznaczy,żejestonpoprawny.Na
przykładnastępującyprogramprzejdziepomyślniekompilacjęiwykonasiębezbłędów
(zgłaszanychprzezJVM):
publicclassTestBad{
publicstaticvoidmain(String
[
]args){
Systemioutiprintln("2+2="+(2-2));
}
}
2+2=0
26
1.Wprowadzenie