Unchecked Exceptions
- For unchecked exception, method is not forced to caught or throws.
- unchecked exceptions are subclasses of RuntimeException.
- unchecked exception represent defects in your program or in your logic for example your are going to divide something with 0. They don,t represent run-time related problem in which your program executes.
- For example IllegalArgumentException,ArithmeticException,NullPointerException etc.
- you don,t need to deal with them at compile time.
class A{
public void div(int a,int b){
int c=0;
if(b==0){
ArithmeticException e=new ArithmeticException("Devisor must not be 0");
throw e;
}
c=a/b;
System.out.println(c);
}
}
class Main{
public static void main(String ar[]){
A a1=new A();
a1.div(10,0);
}
}
public void div(int a,int b){
int c=0;
if(b==0){
ArithmeticException e=new ArithmeticException("Devisor must not be 0");
throw e;
}
c=a/b;
System.out.println(c);
}
}
class Main{
public static void main(String ar[]){
A a1=new A();
a1.div(10,0);
}
}
Checked Exceptions
- For checked exception, method is forced to caught or throws.
- checked exceptions are subclasses of Exception or itself.
- Checked exception represent problem in run-time environment in which your program executes.(e.g. Your program is reading data from USB pen Drive and you inject it then runtime enviornment will not supply data to your program and it will lead to problem. But incase of checked exception, you allready defined the try-catch block or throws clause to deal with it, so rest of program will continue according to your logic)
class A{
public void div(int a,int b){
int c=0;
if(b==0){
Exception eObj=new Exception("Devisor must not be 0");
throw eObj;
}
c=a/b;
System.out.println(c);
}
}
class Main{
public static void main(String ar[]){
A a1=new A();
a1.div(10,0);
}
}
Now, when you compile this program , you will get following compile time error
Exception in thread "main" java.lang.ArithmeticException: Devisor must not be 0
at A.div(UnCheckedException.java:5)
at Main.main(UnCheckedException.java:15)
So , we need to handle it at compile time as follows
we can handle exception using try-catch block at the statement at which it is going to be thrown for example we encapsulate line number 6 in try-catch block.
class A{
public void div(int a,int b){
int c=0;
if(b==0){
Exception eObj=new Exception("Devisor must not be 0");
try{
throw eObj;
}catch(Exception e){
System.out.println("There is a Exception");
System.out.println(e);
}
}
c=a/b;
System.out.println(c);
}
}
class Main{
public static void main(String ar[]){
A a1=new A();
a1.div(10,0);
}
}
There is another way to handle it. we declared it to be throws by method. If any method declares exception as throws, then other program that is calling this method need to handle it, other wise it will not compile.
class A{
public void div(int a,int b)throws Exception{
int c=0;
if(b==0){
Exception eObj=new Exception("Devisor must not be 0");
throw eObj;
}
c=a/b;
System.out.println(c);
}
}
class Main{
public static void main(String ar[]){
A a1=new A();
try{
a1.div(10,0);
}catch(Exception e){
System.out.println("There is a Exception");
System.out.println(e);
}
}
}
Comments