// ---------------
// Exceptions.java
// ---------------

final class ExceptionsTest {
    private static int c = 0;

    private static void f (boolean b) throws IllegalAccessException, InstantiationException {
        if (b)
            throw new InstantiationException("abc");
        else
            throw new IllegalAccessException("abc");}

    private static void g () throws InstantiationException {
        try {
            f(true);
            assert false;
            }
        catch (IllegalAccessException e) {
            assert false;}
        finally {
            ++c;}
        assert false;}

    private static void h () throws InstantiationException {
        try {
            f(true);
            assert false;
            }
        catch (IllegalAccessException e) {
            assert false;}
        catch (InstantiationException e) {
            assert e.toString().equals("java.lang.InstantiationException: abc");
            throw e;}
        finally {
            ++c;}
        assert false;}

    public static void main (String[] args) {
        System.out.println("Exceptions.java");

        assert c == 0;

        try {
            f(true);
            assert false;
            }
        catch (IllegalAccessException e) {
            assert false;}
        catch (InstantiationException e) {
            assert e.toString().equals("java.lang.InstantiationException: abc");}

        assert c == 0;

        try {
            g();
            assert false;
            }
        catch (InstantiationException e) {
            assert e.toString().equals("java.lang.InstantiationException: abc");}

        assert c == 1;

        try {
            h();
            assert false;
            }
        catch (InstantiationException e) {
            assert e.toString().equals("java.lang.InstantiationException: abc");}

        assert c == 2;

        System.out.println("Done.");}}
