Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Exceptions Syntax, semantics, and pragmatics Exceptions 1 Exception create If (some error){ throw new SomeException(”some message”); } Exceptions 2 Exceptions catch Try{ methods where exception can occur } catch( SomeException se){ do the exception handling } Exceptions 3 Finally • The finally block is executed whether or not an exception is thrown. – Leaving the method you always execute the finally block • Used to release resources – Example: Closing a connection to a network, database, or file – Coding idiom: FileReader input = null; try { … open input and use it … } finally { if (input != null) { input.close(); } } Exceptions 4 Try with resource statement • Java 7 language feature • The coding idiom – Declare … try { open + use } finally {close } – Is now supported in the Java programming language • New syntax – Try (open + initialize) { use } – The resource must implement the java.lang.AutoCloseable interface – Finally is no longer necessary in this case – Further readings + examples • The Java Tutorial – http://download.oracle.com/javase/tutorial/essential/exceptions/try ResourceClose.html Exceptions 5 Program your own exception • Why? – Technical exceptions like IOException, SQLException, etc. should not be propagated to the model layer. – Instead you must define your own application specific exception like LibraryException • How? That’s very easy! – Define a new class which extends the class Exception – You probably need to define 3 constructors. – Your exception class may have data + methods • But you probably never need it. – NetBeans can assist you. Exceptions 6 Item 57: Use exceptions only for exceptional conditions • Don’t loop over a collection until it throws an exception. • Only throw exceptions if the state is really exceptional – Searching for something without finding it, is that exceptional? Probably not. Better to return null. Exceptions 7 Item 58: Checked exceptions vs. run-time exceptions • Use checked exceptions for recoverable conditions and run-time exceptions for programming errors – Use checked exception for conditions form which the call can reasonably be expected to recover. – Use run-time exceptions to indicate programming error • The caller made an error – Most likely a violation the methods precondition – Examples: IndexOutOfBoundException, NullPointerException Exceptions 8 Item 59: Avoid unnecessary use of checked exceptions • If the caller cannot handle the exception, then throw a run-time exception. • Provide check methods – Example: StringTokenizer.hasMoreElements() Exceptions 9 Item 60: Favor the use of standard exceptions • Don’t use a home-made exception if you can use a standard exception. • Specially with run-time exceptions. • Reusable standard run-time exceptions – IllegalArgumentException – IllegalStateException – NullPointerException – IndexOutOfBoundsException – UnsupporteOperationException Exceptions 10 Item 61: Throw exceptions appropriate to the abstraction • Higher layers should catch lower-level exceptions and throw exceptions appropriate for the higher level • Exception translation – Catch (LowLevelException ex) { throw new HighLevelException(message); } • Exception chaining – Catch (LowLevelException ex) { throw new HighLevelException(ex); } – The LowLevelException is “inside” the HighLevelException – New in Java 1.4: New constructor in class Throwable Exceptions 11 Item 62: Document all exceptions thrown by each method • For all your methods – Document (using the Javadoc @throws tag) all the exceptions the method might throw – Including unchecked exceptions. • NetBeans can assist you – Mainly with checked exceptions. – Don’t forget the run-time exceptions. Exceptions 12 Item 63: Include failure-capture information in detail message • The message in the exception is the only information the receiver gets. • The message in the exception should include all values that “contributed” to the exception Exceptions 13 Item 64: Strive for failure atomicity • A failed method should invocation should leave the object in the state that it was prior to invocation. – Easier to recover from exception. Exceptions 14 Item 65: Don’t ignore exceptions • An empty catch block is highly suspicious – If you really mean it, then write a comment in the empty catch block. Exceptions 15 References • Ken Arnold et al.: The Java Programming Language, 4th edition, Addison Wesley, 2006 – Chapter 12: Exceptions and Assertions, page 279303 • Joshua Bloch: Effective Java, 2nd edition, Addison Wesley, 2008 – Chapter 9: Exceptions, page 241-258 Exceptions 16