Diskuze: Umístění try a catch

Java Java Umístění try a catch

Aktivity (1)
Avatar
Petr Kasnal
Člen
Avatar
Petr Kasnal:22.4.2016 16:43

Zdarec lidi mám začátečnický dotaz :) Chtěl bych od začátku psát kód aby se dal číst :D Mam jenom dotaz zda vadí že použiji try a catch na celou metodu a ne jen na problematickou část. Viz příklad

public void pocitani(int a, int b) {
try {
 System.out.println(a+b);
 System.out.println(a-b);
 System.out.println(a*b);
 System.out.println(a/b);
} catch(Exception e) {
        System.out.println("Chyba!");
}
}

Vadí takovíto zápis ?

 
Odpovědět 22.4.2016 16:43
Avatar
Hartrik
Redaktor
Avatar
Odpovídá na Petr Kasnal
Hartrik:22.4.2016 17:39

Jde o to, že potom není vidět co přesně chybu způsobilo. Také není dobré odchytávat tak obecnou výjimku jako je Exception. Někde hlouběji může dojít k významné chybě a tobě se vypíše jen "Chyba!" a budeš si myslet, že to způsobilo např. dělení nulou, místo toho, aby ses dozvěděl čím je to skutečně způsobené a opravil to.

Ale v tomto triviálním případě je to asi jedno.

 
Nahoru Odpovědět 22.4.2016 17:39
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na Hartrik
Petr Kasnal:22.4.2016 21:16

Jo jasně děkuju moc a co například tady ?

private void preskoc() {
        Button btn = new Button();
        anchorPane.getChildren().add(btn);
        btn.setOnKeyPressed(new EventHandler<KeyEvent>() {
            public void handle(KeyEvent event) {
                if (event.getCode() == KeyCode.SPACE) {
                    mediaPlayer.stop();
                    Node node;
                    try {
                        node = (Node) FXMLLoader.load(getClass().getResource("Okno.fxml"));
                        anchorPane.getChildren().setAll(node);
                    } catch (IOException e) {
                        System.out.println(e);
                    }
                }
            }
        });
    }
 
Nahoru Odpovědět 22.4.2016 21:16
Avatar
Hartrik
Redaktor
Avatar
Odpovídá na Petr Kasnal
Hartrik:22.4.2016 21:45

Může být, ale tu výjimku bych zabalil jako UncheckedIOEx­ception a poslal dál.

 
Nahoru Odpovědět 22.4.2016 21:45
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na Hartrik
Petr Kasnal:22.4.2016 21:56

To moc nevím co znamená mohl by si mi to prosím vysvětlit ?

 
Nahoru Odpovědět 22.4.2016 21:56
Avatar
Hartrik
Redaktor
Avatar
Odpovídá na Petr Kasnal
Hartrik:22.4.2016 22:31

Místo toho výpisu dej

throw new UncheckedIOException(e);

Když nemáš jak na výjimku reagovat, tak je lepší ji nechat, než vypisovat do konzole.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 22.4.2016 22:31
Avatar
Petr Kasnal
Člen
Avatar
Odpovídá na Hartrik
Petr Kasnal:22.4.2016 22:38

Jasný super díky moc :)

 
Nahoru Odpovědět 22.4.2016 22:38
Avatar
Eldan
Člen
Avatar
Eldan:22.4.2016 23:14

Na druhou stranu, pokud děláš věc kterou budeš vypouštět na veřejnost tak se hodí udělat nějaký univerzální Exception handler a dát jeden trycatch na nejvyšší level, ať aplikace místo padání vyhazuje tvojí chybovou hlášku. Vypadá to pro uživatele mnohem přívětivěj.

Nahoru Odpovědět 22.4.2016 23:14
Unobfuscated executable == free source code
Avatar
Petr Kasnal
Člen
Avatar
Petr Kasnal:22.4.2016 23:17

Jo díky moc super rada :)

 
Nahoru Odpovědět 22.4.2016 23:17
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.