Syntax of throws keyword:
void method_name() throws exception_class_name{ ... }
Which exception should we declare?
checked exception only, because:
- unchecked Exception: under your control so correct your code.
- error: beyond your control e.g. you are unable to do anything if there occurs VirtualMachineError or StackOverflowError.
Program which describes that checked exceptions can be propagated by throws keyword.
import java.io.IOException; class Simple{ void m()throws IOException{ throw new IOException("device error");//checked exception } void n()throws IOException{ m(); } void p(){ try{ n(); }catch(Exception e){System.out.println("exception handled");} } public static void main(String args[]){ Simple obj=new Simple(); obj.p(); System.out.println("normal flow..."); } }
exception handled
normal flow…
Rule: If you are calling a method that declares an exception, you must either caught or declare the exception.
There are two cases:
- Case1:You caught the exception i.e. handle the exception using try/catch.
- Case2:You declare the exception i.e. specifying throws with the method.
Case1: You handle the exception
In case you handle the exception, the code will be executed fine whether exception occurs during the program or not.
import java.io.*; class M{ void method()throws IOException{ throw new IOException("device error"); } } class Test{ public static void main(String args[]){ try{ Test t=new Test(); t.method(); }catch(Exception e){System.out.println("exception handled");} System.out.println("normal flow..."); } }
exception handled
normal flow…
Case 2: You declare the exception
- In case you declare the exception, if exception does not occur, the code will be executed fine.
- In case you declare the exception if exception occurs, an exception will be thrown at runtime because throws does not handle the exception.
A)Program if exception does not occur
import java.io.*; class M{ void method()throws IOException{ System.out.println("device operation performed"); } } class Test{ public static void main(String args[])throws IOException{//declare exception Test t=new Test(); t.method(); System.out.println("normal flow..."); } }
device operation performed
normal flow…
B)Program if exception occurs
import java.io.*; class M{ void method()throws IOException{ throw new IOException("device error"); } } class Test{ public static void main(String args[])throws IOException{//declare exception Test t=new Test(); t.method(); System.out.println("normal flow..."); } }
Runtime Exception