Try-catch används för att inte koden ska sluta exekvera (krascha) när ett fel har inträffat (ofta orsakat av användaren).
Ibland uppstår situationer då det finns en risk att fel uppstår, (exempelvis orsakat av användaren). Normalt när fel uppstår i java, så kraschar programmet och slutar exekveras. För att förhindra detta använder man sig av try/catch-block. När ett fel inträffar kommer Java normalt att stoppa och sedan generera ett felmeddelande. Den tekniska termen som används för detta är: “Java will throw an exception (throw an error).”
Vi kan tänka oss att när ett fel uppstår så kastar Java ut oss från programmet och sedan avslutar det. Det Try och Catch gör är att “fånga upp” det kastet som Java gör för att kunna fortsätta programmet. Bilden nedan visar hur vi skulle kunna tänka oss att det ser ut, pilarna visar hur vi kastas ut när ett fel uppstår.
En exception som catch blocket kan fånga kan vara till exempel ArrayIndexOutOfBoundsException. Det vill säga, att vi försöker nå ett index utanför vår Array. Eller, ArithmeticException, när vi vill fånga en exception på grund av att vi försökt göra en beräkning som inte är tillåten (t.ex. dividera med noll). Vi kommer nedan se exempel på hur vi kan använda en sådan exception.
Syntax är,
try { // Koden för try-blocket } catch (Exception e) { // Koden för catch-blocket }
Finally är ytterligare en funktion i Java för att hantera Exceptions. Den använder vi genom att koppla en Finally till ett try catch block. Koden inuti det Finally blocket kommer alltid att exekveras, även om en exception har kastats. Vidare, om din kod har ett retur-statement inuti din try catch så kommer koden inuti Finally blocket att utföras innan metoden avslutas.
Syntax för finally är på liknande sätt som tidigare,
try { // Koden för try-blocket } catch (Exception e) { // Koden för catch-blocket } finally { // Koden för finally-blocket }
Anta att du har skrivit ett program som ska ta kvoten mellan två tal som användaren skrivit in:
int tal1; //tal som användaren får skriva in int tal2; //tal som användaren får skriva in System.out.println(tal2/tal1); //Skriv ut kvoten mellan två tal
Skulle användaren skriva in siffran noll på tal1 i detta fall så skulle koden krascha och sluta exekvera (det går inte dela ett tal med noll). Detta är ju dumt, eftersom man ger användaren “makten” att skriva in vilket tal som helst.
class TryCatch { public static void main(String args[]) { int tal1, tal2; try { /* Sker det något fel inom try-blocket, kommer catch-blocken fånga detta fel och fortsätta exekvera koden. */ tal1 = 0; tal2 = 13 / tal1; System.out.println(tal2); System.out.println("Slutet på try-blocket"); } catch (ArithmeticException e) { // Detta catch-block fångar alla fel som sker av aritmetiska skäl. System.out.println("Man kan inte dela ett tal med 0! Fel: " + e); // Skriv ut felet } catch (Exception e) { // Detta block fångar alla övriga fel som inte redan har fångats av övriga ovanstående catch-block. System.out.println("Fel har inträffat! Fel: " + e); // Skriv ut felet } System.out.println("Slutet av try-catch-blocket!"); // Slutet på try-catch-blocket, koden fortsätter att exekvera! } }
Utskriften blir i ovanstående fall:
Man kan inte dela ett tal med 0! Fel: java.lang.ArithmeticException: / by zero Slutet av try-catch-blocket!
Koden kommer alltså fortsätta att exekvera fastän användaren har skrivit in ett värde som egentligen inte är tillåtet.
Skulle tal1 istället vara ett annat tal än noll, exempelvis 1, skulle utskriften bli:
13 Slutet på try-blocket Slutet av try-catch-blocket!
Inga fel upptäcks och programmet fortsätter att köras som vanligt.
I vårt fall kommer vi använda de här funktionerna för exceptions för att hantera inladdning av lämpliga bilder till spelet.
För mer teknisk information se Oracle Hemsida om Catching and Handling Exceptions
För att navigera dig till nästa artikel kan du trycka på framåtpilen nedan.
Vad tyckte du om sidan?
Lämna gärna feedback och hjälp oss göra sidan bättre
Feedback gör oss bättre!
Lämna gärna feedback om vad du tyckte om avsnittet!