Forum » Programiranje » Java try, catch blok
Java try, catch blok
marjan_h ::
Mene zanima zakaj ne vidi objekta skener, če ga dam v try blok?
Četudi dam skener.close() v blok finally ga še vedno ne vidi.
Četudi dam skener.close() v blok finally ga še vedno ne vidi.
import java.io.File; import java.util.Scanner; public class OdpriDatoteko { public static void main(String args[]){ try{ Scanner skener = new Scanner(new File("podatki.txt")); } catch (Exception e){ System.err.println("Datoteka ne obstaja!"); } //Zakaj ne vidi skenerja? skener.close(); } }
kunigunda ::
public class OdpriDatoteko { public static void main(String args[]){ Scanner skener = null ; try{ skener = new Scanner(new File("podatki.txt")); } catch (Exception e){ System.err.println("Datoteka ne obstaja!"); } //Zdej bo vidu if (skener != null) { skener.close(); } } }
ali pa
public class OdpriDatoteko { public static void main(String args[]){ try{ Scanner skener = new Scanner(new File("podatki.txt")); skener.close() ; } catch (Exception e){ System.err.println("Datoteka ne obstaja!"); } } }
Zgodovina sprememb…
- spremenil: Mavrik ()
KaRkY ::
Če uporabljaš java 7 lahko tudi uporabiš
To bo avtomatsko zaprlo scanner.
public class OdpriDatoteko { public static void main(String args[]){ try(Scanner skener = new Scanner(new File("podatki.txt"))){ //delaš z datoteko } catch (Exception e){ System.err.println("Datoteka ne obstaja!"); } } }
To bo avtomatsko zaprlo scanner.
When you look long into an abyss, the abyss looks into you
Spura ::
Ce nimas Jave 7 za zgornji konstrukt, je pravilno:
Koda od kanigunde bo sicer delala v tem primeru, samo to te ugrizne v rit ko bos imel bolj kompleksno kodo.
Pravilna praksa je da dajes take stvari v finally blok.
Scanner skener = null; try { Scanner skener = new Scanner(new File("podatki.txt")); } catch (Exception e) { System.err.println("Datoteka ne obstaja!"); } finally { if (skener != null) skener.close(); }
Koda od kanigunde bo sicer delala v tem primeru, samo to te ugrizne v rit ko bos imel bolj kompleksno kodo.
Pravilna praksa je da dajes take stvari v finally blok.
kunigunda ::
Res je, sicer stvar navade, jest finally ne uporabljam ker sm dokej striktn pr cleanupu :)
Baje pa da Java7 clo sama popuca kar se v try bloku kreira (jest sm se na 6)
Baje pa da Java7 clo sama popuca kar se v try bloku kreira (jest sm se na 6)
Spura ::
To, da si dost striken pri cleanupu nima veze, ker se ne gre za to. V tem primeru imas (kvazi) catch-all in nimas problemov.
Recimo pa, da imas catch (IOException), v bloku se zgodi NullPointerException. V tem primeru tvoja varianta ne dela, ker se bo tvoj
if (skener != null) skener.close(); ki sledi bloku gladko preskocil in si v riti.
Zato se uporablja finally blok, ker finally blok se izvede ne glede na to, ali catch ujame ta tip exceptiona ali ne.
Poleg tega se finally blok izvede tudi ce se kontrola prenese izven try bloka zaradi break, continue in return stavkov.
To ti dovoljuje pisanje bolj zanesljive in lazje razumljive kode.
Recimo:
Java 7 popuca kar odpres v glavi try bloka, ne pa kar vse, kar se odpre v bloku.
Recimo pa, da imas catch (IOException), v bloku se zgodi NullPointerException. V tem primeru tvoja varianta ne dela, ker se bo tvoj
if (skener != null) skener.close(); ki sledi bloku gladko preskocil in si v riti.
Zato se uporablja finally blok, ker finally blok se izvede ne glede na to, ali catch ujame ta tip exceptiona ali ne.
Poleg tega se finally blok izvede tudi ce se kontrola prenese izven try bloka zaradi break, continue in return stavkov.
To ti dovoljuje pisanje bolj zanesljive in lazje razumljive kode.
Recimo:
SqlSession sess = null; try { sess = SqlSessionFactory.openSession(); return sess.doSelect(...); } catch (SqlException e) { log.error(e.getMessage); } finally { if (sess != null) { try { sess.close(); } catch (SqlException e) { log.error(e.getMessage); } } }
Java 7 popuca kar odpres v glavi try bloka, ne pa kar vse, kar se odpre v bloku.
Zgodovina sprememb…
- spremenil: Spura ()
kunigunda ::
Stvar navade, 20let nazaj ni blo exceptionov pa smo vse na roko krmilil, navada je zelezna srajca :)
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Java ObjektiOddelek: Programiranje | 2250 (1944) | Mavrik |
» | JAVA neujemanje tipovOddelek: Programiranje | 1991 (1624) | l0g1t3ch |
» | [JAVA] mysql-connector-java in povezava z MysqlOddelek: Programiranje | 2037 (1919) | Sergio |
» | [java] Runtime.exec()Oddelek: Programiranje | 1884 (1757) | borchi |
» | Kako pošiljanje datotek v JAVI.Oddelek: Programiranje | 1835 (1706) | kopernik |