import java.io.*;
class West1 extends Exception {
    private String msg;
    public West1() {
    }
    public West1(String msg) {
        super(msg);
        this.msg=msg;
    }
    public West1(Throwable cause) {
        super(cause);
    }
    public West1(String msg,Throwable cause) {
        super(msg,cause);
        this.msg=msg;
    }
    public String toString() {
        return msg;
    }
    public String getMessage() {
        return msg;
    }
}
public class West {
    public static void main(String[] args) {
        try {
            throw new West1("Custom Exception.....");
        }catch(West1 ce) {
            System.out.println(ce.getMessage());
            //throw new NumberFormatException();
            throw new FileNotFoundException();
        }catch(FileNotFoundException fne) {
            fne.printStackTrace();  
        }/*catch(NumberFormatException nfe) {
            nfe.printStackTrace();
        }*/
    }
}
In the above code, NumberFormatException is thrown from catch block it compile and run successfully but when FileNotFoundException is thrown from catch block it will not compile. Following Errors are thrown:
West.java:40: error: exception FileNotFoundException is never thrown in body of
corresponding try statement
                }catch(FileNotFoundException fne){
West.java:39: error: unreported exception FileNotFoundException; must be caught
or declared to be thrown
                        throw new FileNotFoundException();
So my question is what is reason behind this behaviour?
 
     
    