OCPtech

All is good.. except for Exceptions

Point Out The Mistakes

public class Mistakes {
    public static void main(String[] args) {
        try {
            throwException();
        } catch (MissingResourceException e){
        } catch (InputMismatchException e | FileNotFoundException e){
        } catch (ParseException | ArrayIndexOutOfBoundsException e){
        } catch (MissingResourceException | IllegalArgumentException e){
        } catch (Throwable e){
        } catch (IOException e){
        }
    }

    private static void throwException() throws DateTimeException, IOException{
        // ...
    }
}
  • Line six tries to use multi-catch but fails to use the right syntax
  • Line 9 and 10 are in the wrong order
  • The MissingResourceException on line 8 has already been caught
  • The checked ParseException on line 7 is never thrown in the try block

Suppressed Exceptions

Suppressed exceptions occur when an exception is thrown in the try with clause:

package Exceptions;

public class Suppressed {
    static class Tools implements AutoCloseable{
        @Override
        public void close() throws IllegalArgumentException {
            throw new IllegalArgumentException("OMG what did I do");
        }
    }

    public static void main(String[] args) {
        try(Tools tools = new Tools()){
            throw new RuntimeException("Oh No");
        } catch (IllegalArgumentException e){
            System.out.println("Exception occured: " + e.getMessage());
        }
    }
}

Output:

Exception in thread "main" java.lang.RuntimeException: Oh No
	at Exceptions.Suppressed.main(Suppressed.java:13)
	Suppressed: java.lang.IllegalArgumentException: OMG what did I do
		at Exceptions.Suppressed$Tools.close(Suppressed.java:7)
		at Exceptions.Suppressed.main(Suppressed.java:14)

 

Good 2 Know

  • Checked exceptions cannot be caught when not thrown in the corresponding try block
  • close() may not throw an Exception in a class that implements Closeable
  • Assertions can be turned on with the -ea argument

 

 

Leave a Reply

Your email address will not be published.