In this tutorial we will see how to use try-catch-finally blocks for exception handling. Lets see the try-catch block first and then we will see how to work with try-catch-finally.
Flow of control in try/catch blocks:
when exception doesn’t occur:
When the statements that are present in try block doesn’t throw any exception then first, the body of try block executes and then the code after catch blocks. In this case catch block never runs as they are meant to run when an exception occurs. For example-
class Example1 { public static void main(String args[]) { int x = 10; int y = 10; try{ int num= x/y; System.out.println("next-statement: Inside try block"); } catch(Exception ex) { System.out.println("Exception"); } System.out.println("next-statement: Outside of try-catch"); } }
Output:
next-statement: Inside try block next-statement: Outside of try-catch
In the above example exception didn’t occur in try block so catch block didn’t run.
when exception occurs:
First have a look at the example below and then we will discuss the output:
class Example1 { public static void main(String args[]) { int x = 0; int y = 10; try{ int num= y/x; System.out.println("next-statement: Inside try block"); } catch(Exception ex) { System.out.println("Exception Occurred"); } System.out.println("next-statement: Outside of try-catch"); } }
Output:
Exception Occurred next-statement: Outside of try-catch
Point to note in above example: There are two statements present inside try block. Since exception occurred because of first statement, the second statement didn’t execute. Hence we can conclude that if an exception occurs then the rest of the try block doesn’t execute and control passes to catch block.
Flow of control in try/catch/finally blocks:
- If exception occurs in try block’s body then control immediately transferred(skipping rest of the statements in try block) to the catch block. Once catch block finished execution then finally block and after that rest of the program.
- If there is no exception occurred in the code which is present in try block then first, the try block gets executed completely and then control gets transferred to finally block (skipping catch blocks).
- If a return statement is encountered either in try or catch block. In this case finally block runs. Control first jumps to finally and then it returned back to return statement.
Lets see this example to understand the above mentioned points:
class TestExceptions { static void myMethod(int testnum) throws Exception { System.out.println ("start - myMethod"); if (testnum == 12) throw new Exception(); System.out.println("end - myMethod"); return; } public static void main(String args[]) { int testnum = 12; try { System.out.println("try - first statement"); myMethod(testnum); System.out.println("try - last statement"); } catch ( Exception ex) { System.out.println("An Exception"); } finally { System. out. println( "finally") ; } System.out.println("Out of try/catch/finally - statement"); } }
Output:
try - first statement start - myMethod An Exception finally Out of try/catch/finally - statement
it is very useful to me… gud concept ….explanation of program is also gud…
I am having a little trouble with Exception handling as I am new to Java.
I need to make a comparison application that handles incorrect input type (integers are needed, nothing else) that stores the last-known correct input and continues from there.
Is there a way you can help me with this?
Why doesn’t the last example print out “end – myMethod” at the end? Is it because in the method, it caught an exception as testnum = 12?
wow…this article made my understanding of flow control in try/catch/finally more easy..Thanks a lot.