początkujący wyjątki

0

co robi throws, bo nie rozumiem
dlaczego w tym kodzie poniżej instrukcja catch sie nie wykonuje skoro wiadomo że in.read() powoduje wyjątek.
w ksiażce mam napisane że jeśli metoda generuje wyjątek którego nie obsługuje to musi być poprzedzona throws. Ale skoro generuje wyjątek to program powinien być przerwany
Może te nieobsługiwane wyjątki są nieobsługiwane bo mają rezultat nie w moim programie a w JVM albo systemie opeaceyjnym a tam JVM nie sięga?

class ThrowsDemo {   
  public static char prompt(String str) 
    throws java.io.IOException { 
 
    System.out.print(str + ": "); 
    return (char) System.in.read();  
  }   
 
  public static void main(String args[]) { 
    char ch; 
 
    try { 
      ch = prompt("Enter a letter"); 
    } 
    catch(java.io.IOException exc) { 
      System.out.println("I/O exception occurred."); 
      ch = 'X'; 
    } 
 
    System.out.println("You pressed " + ch); 
  } 
}
0

Metoda in.read() nie musi powodować wyjątku (rzuci go wtedy, gdy wystąpi błąd I/O). Ponieważ zadeklarowałeś metodę prompt tak, że rzuca ten wyjątek na zewnątrz, więc musisz wywołanie tej metody umieścić w sekcji try...catch. Ale wyjątek powstanie tylko w określonych wypadkach i wtedy wykona się blok catch.
Polecam lekturę: http://java.sun.com/docs/books/tutorial/essential/exceptions/

0

throw java.io.IOExcption

dodaj to przed returnem metody w ten sposob zagwarantujesz sobie ze taki wyjatek zostanie wyzucony i catch zadziala

1 użytkowników online, w tym zalogowanych: 0, gości: 1