Java 3 MPDI Programowanie obiektowe W7
import java.io.*; public class X { // kontrukcja throws – określenie jakie wyjątki może dana metoda // sygnalizować – wyjątek (Exception) to sytuacja nienormalna public void y () throws IOException { //tworzymy nową instancję obiektu klasy InputStreamReader, //powiązaną ze źródłem danych (np. System.in) InputStreamReader potok = new InputStreamReader (System.in); //buforowanie znaków pochodzących z obiektu powiązanego ze źródłem danych // np. typu InputStreamReader - należy utworzyć obiekt klasy BufferedReader BufferedReader wejscie = new BufferedReader(potok); System.out.print("Podaj liczbę: "); String tekst = new String(); //nowa instancja obiektu tekstowego int liczba; //wykorzystanie metody readLine tekst = wejscie.readLine(); //metoda readLine potrzebuje "uchwytu" wyjątku int liczba = Integer.parseInt(tekst);// zamieniamy tekst na liczbę System.out.println("Wprowadziłeś liczbę: "+liczba); } Interakcja z użytkownikiem
import java.util.Scanner; public class Odczyt{ public static void X() { int tab[] = {1,2,3,4,5}; Scanner odczyt = new Scanner(System.in); System.out.println("Podaj indeks tablicy, który chcesz zobaczyć: "); int index = odczyt.nextInt(); System.out.println(tab[index]); } public static void main(String[] args) { Odczyt a=new Odczyt(); a.X(); } Można też wykorzystać klasę Scanner
try { kod programu mogący generować wyjątki } catch (TypWyjątku1 a){ Obsługa wyjątku a } catch (TypWyjątku2 b){ Obsługa wyjątku b }... finally { Blok instrukcji, który wykona się niezależnie, czy wyjątki wystąpią, czy nie } Można przechwycić wyjątek instrukcja try wzorzec
… /* tu może wystąpić błąd konwersji jeśli użytkownik poda zły ciąg znaków którego nie można skonwertować*/ try { a = 0; b = 5; c = b/a; // wystąpiło dzielenie przez zero // to próbowaliśmy wykonać } catch (ArithmeticException e) { // te instrukcje wykonają się gdy typ wyjątku System.out.println("Dzielenie przez zero"); System.out.println(e); System.exit(1); // zatrzymanie programu }
NumberFormatException ArithmeticException IllegalArgumentException Bardzo różne typy wyjątków do przechwycenia String filename = "/niemafoldera/plik"; try { // Create the file new File(filename).createNewFile();} catch (IOException e) { // coś tu zrobić }
class MojWyjatek extends Exception { MojWyjatek(String s) { super("Wystąpił mój wyjątek: " + s); } konstruktor klasy nadrzędnej czyli Exception Można tworzyć własne klasy wyjątków
import java.util.Scanner; public class X{ public static void X{ int tab[] = {1,2,3,4,5}; Scanner odczyt = new Scanner(System.in); System.out.println("Podaj indeks tablicy:"); index = odczyt.nextInt(); try { System.out.println(tab[index]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println ("Źle, rozmiar tablicy to: "+tab.length); } … z klasą Scanner
… w naszym przykładzie … tekst = wejscie.readLine(); try { liczba = Integer.parseInt(tekst); } catch (NumberFormatException e) { System.out.println("Konwersja nie powiodła się"); //System.out.println(e); liczba=0; }
Uwaga: Jeśli metoda obsługuje wyjątek, to inne metody które uruchamiają tę metodę również wymagają obsługi wyjątku public class A public void y() throws IOException { //tu akcja wymagająca obsługi wyjątku } public void z() throws IOException { y(); }