Download Exceptions

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
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