java7.pdf
(
45 KB
)
Pobierz
Wykład na temat języka programowania JAVA
Java – wyjątki
Wyjątek (exception) jest to błąd, który pojawia się w trakcie wykonywania programu.
Obsługa wyjątków pozwala zautomatyzować większość kodu obsługi błędów. W Javie
wszystkie wyjątki są reprezentowane przez klasy wyjątków wyprowadzone z klasy
Throwable. Istnieją dwie podklasy Exception i Error.
Wyjątki typu Error są związane z błędami w VMJ i są poza kontrolą programisty. Błędy
realizacji programu wywodzą się z podklasy Exception. Ważną podklasą Exception jest
klasa Runtime Exception która służy do reprezentowania różnych typów błędów.
Zarządzanie wyjątkami obsługiwane jest w Javie za pomocą słów kluczowych:
try
– blok ten zawiera zbiór instrukcji służących do monitorowania błędów.
catch
– przechwytywanie błędu po wyrzuceniu sterowania z bloku try i obsługa wyjątku.
throw
– samodzielne zgłoszenie wyjątku.
throws
– wyjątek wyrzucany poza metodę musi być określony za pomocą instrukcji
throws.
finally
– blok instrukcji który musi być absolutnie zawsze wykonany po wyjściu z bloku
try.
Podstawową formą obsługi wyjątków są instrukcje try i catch, które działają razem.
TRY i CATCH
try {
// blok kodu do monitorowania
}
catch (TypWyjatku1 exc)
{
// uchwyt dla danego typu wyjątku 1
}
catch (TypWyjątku2 exc)
{
// uchwyt do typu wyjątku 2
W bloku try może wystąpić kilka instrukcji catch. Typ wyjątku określa, która instrukcja
catch zostanie wykonana otrzymując wartość exOb. Jeżeli w bloku try nie wystąpi
wyjątek to wszystkie instrukcje catch zostaną pominięte.
Przykładowe klasy wyjątków to:
w pakiecie java.io.*:
EOFException - koniec pliku
FileNotFoundException - brak pliku
InterruptedIOException - przerwanie operacji we/wy
IOException - klasa nadrzędna wyjątków we/wy
}
Java – wyjątki
w pakiecie java.lang.*:
ArithmeticException - wyjątek operacji arytmetycznych np. dzielenie przez zero,
ArrayIndexOutOfBoundsException - przekroczenie zakresu tablicy,
ClassNotFoundException - brak klasy,
Exception - klasa nadrzędna wyjątków.
Przykładowe błędy:
NoSuchFieldError - błąd braku danego pola w klasie,
NoSuchMethodError - błąd braku danej metody w klasie,
OutOfMemoryError- błąd braku pamięci
Kod który trzeba monitorować znajduje się zawsze w bloku try. W razie wystąpienia
wyjątku, realizacja programu zostanie przerwana, a wyjątek jest wyrzucany poza blok
try i przechwytywany przez odpowiedni blok catch, który obsługuje dany wyjątek. Jeżeli
brak wystąpienia wyjątków cały blok instrukcji zawarty w try jest wykonywany, bloki
catch są pomijane a program jest kontynuowany za instrukcjami catch. Ponieważ
instrukcja catch przechwytuje wyjątki, czyli nie jest wywoływana, stąd wykonanie
programu nie wraca do punktu w którym został zgłoszony wyjątek.
Jeżeli program nie przechwyci wyjątku to zostanie on obsłużony przez JVM, która zgłosi
błąd i zakończy działanie programu.
Standardowa obsługa wyjątku polega na wyświetleniu nazwy wyjątku oraz zawartości
stosu. Pozwala to użytkownikowi znaleźć miejsce wystąpienia błędu.
catch (Exception e)
{
System.err.println( e.getMessage());
e.printStackTrace();
}
W jednym bloku try można użyć wiele instrukcji catch, np. do sprawdzania zakresu
tablicy i błąd dzielenia przez zero.
Blok Finally
Blok kodu oznaczony finally jest wykonywany zawsze niezależnie od obsługi wyjątków.
Szereg czynności takich jak zwolnienie pamięci, zamknięcie plików, trzeba wykonać
niezależnie od obsługi wyjątków. Blok finally można używać do wykonania wszelkich
czynności po zwróceniu wartości metody instrukcją return, po użyciu instrukcji break i
continue
throws. Deklarowanie metod mogących zgłaszać wyjątki
W celu zaznaczenia, że metoda może zgłosić wyjątek, należy użyć specjalnej konstrukcji
throws w definicji metody. Aby zaznaczyć, że fragment kodu znajdującego się wewnątrz
metody może zgłaszać wyjątek, należy umieścić słowo kluczowe throws za sygnaturą
metody i podać za nim nazwę wyjątku jaki może zostać obsłużony. Gdy w deklaracji
Java – wyjątki
metody podana zostanie nazwa klasy bazowej całej grupy klas wyjątków, oznacza to, że
metoda może zgłosić dowolny wyjątek będący klasą potomną klasy bazowej.
Słowo kluczowe throws w definicji metody oznacza, że metoda może zgłosić wyjątek, a
nie że go na pewno zgłosi.
Zamiast bloku try-catch można umieścić w definicji metody słowo kluczowe throws i
podać nazwę klas wyjątków, które ta metoda będzie zgłaszać. Wyjątki te będą musiały
zostać obsłużone w metodzie, która bezpośrednio wywoła tę metodę.
Ćwiczenie 1:
Program, który próbuje odwołać się do nieistniejącego elementu tablicy.
class wyj1 {
public static void main(String args[]) {
int tab[] = new int [5];
try {
System.out.println(tab.length);
tab[20] = 5; // próba indeksowania tablicy poza jej zakresem, powodująca
wyjatek.
System.out.println( "Ta część programu nie zostanie wykonana");
}
catch ( ArrayIndexOutOfBoundsException exc) { // przechwycenie
wyjątku
System.out.println("Indeks tablicy poza zakresem");
}
System.out.println("To jest koniec programu – instrukcja poza wyjatkiem ");
}
}
Ćwiczenie 2
Program dzielący przez siebie liczby znajdujące się w dwóch tablicach.
class wyj2 {
public static void main(String args[]) {
int tab1[] = { 4, 8, 16, 32, 64, 128, 256 };
int tab2[] = { 2, 0, 8, 4, 0};
for ( int i=0; i<tab1.length; i++ ) {
try {
System.out.println(tab1[i]+"/"+tab2[i]+" jest "+ tab1[i]/tab2[i]);
}
Java – wyjątki
catch( ArithmeticException exc) {
System.out.println(" Nie wolno dzielic przez zero!");
}
catch ( ArrayIndexOutOfBoundsException exc) {
// przechwycenie wyjatku
System.out.println("Indeks tablicy poza zakresem");
}
}
}
}
Ćwiczenie 3:
Przykładowy program z definicją metody, która może wywołać wyjątek.
public class c46
{
public static void main (String args[])
{
Tablica tab = new Tablica();
int value = 0;
try{
value = tab.getElement(20);
}
catch(ArrayIndexOutOfBoundsException e){
System.out.println("Nie ma elementu o numerze 20!");
System.exit(-1);
}
System.out.println("Element nr 20 to: " + value);
}
}
class Tablica
{
int tab[];
public Tablica()
{
tab = new int[5];
}
int getElement(int index)
throws ArrayIndexOutOfBoundsException
{
return tab[index];
}
}
Plik z chomika:
ell_lornzo
Inne pliki z tego folderu:
java14.pdf
(182 KB)
java13.pdf
(40 KB)
java12.pdf
(89 KB)
java11.pdf
(47 KB)
java10.pdf
(51 KB)
Inne foldery tego chomika:
c#
c++
Free Pascal
Zgłoś jeśli
naruszono regulamin