public class ExceptionExample {

    public static void main(String[] args) {
        
        foo();

        try {
            bar();
        } catch (IndexOutOfBoundsException iobe) {
            System.out.println("ERROR 1");
        } catch (ArithmeticException ae) {
            System.out.println("ERROR 2");
        } finally {
            System.out.println("DONE");
        }
    }

    public static void foo() {
        // PROGRAM LINE A

        try {
            // PROGRAM LINE B
        } catch (NullPointerException npe) {
            System.out.println(npe.getMessage());
            npe.printStackTrace();
        }
    }

    public static void bar() {
        // PROGRAM LINE C

        try {
            // PROGRAM LINE D
            methodX();
        } catch (NullPointerException npe) {
            System.out.println("ERROR 3");
        } catch (IndexOutOfBoundsException iobe) {
            System.out.println("ERROR 4");
        }

        System.out.println("DONE BAR");
    }

    public static void methodX() {
        // PROGRAM LINE E
			
        try {
            // PROGRAM LINE F
		
        } catch (IndexOutOfBoundsException iobe) {
            System.out.println(iobe.getMessage());
            iobe.printStackTrace();
        } catch (NumberFormatException nfe) {
            System.out.println("ERROR 5");
            return;
        } finally {
            System.out.println("DONE METHODX");
        }
    }
}
