Java Exception
Java Exception Handling
Keywords involved:
try
catch
finally
throws
throw
Example:
public void method throws xxxException,xxException,... {
try {
//..
}catch(xxException e) {
//..
throw new xxxException("xxx");
}catch(Excepiton ee) {
//..
}finally {
try {
//..
}catch(xxException eee) {
//..
}
}
//..
}
----------------------------
finally keyword
finally block will be definitely executed
except System.exit() called or thread stop running before
the finally block.
----------------------------
Structure
Throwable
|
---------------
| |
Exception Error
|
-----------------
| |
checked Exceptions RuntimeException
---------------------------------
Error
Errors generally describe problems that are sufficiently
unusual and sufficiently difficult to recover from.
JVM-related failure. e.g. running out of memory.
You are not required to handle Errors.
--------------------------------
Runtime Exception or unchecked exception
Typically describe program bugs.
e.g. ArrayIndexOutOfBoundsException
since it can be avoided by correctly coding program
e.g NullPointerException, like attempting to access object
fields or call object methods via object reference variables that
contain null values
e.g ArithmeticException, like integers divided by zero
You are not required to handle Runtime Exception or unchecked exceptions
---------------------------------
Checked Exceptions
--Exceptions that must be dealt with in a program; the compiler checks
to ensure the program handles them.
--Any subclass of Exception except subclasses of runtime
exception is a checked exception
----------------------------
How to Deal With Checked Exception
Two options:
--put a try block around the code that might throw the exception
and catch related exception.
--Add throws in the method header to let potential callers to
deal with it.
----------------------------
If a method throws an exception(only checked exception),
that exception must be caught or declared to be thrown.
For example, any method in File class throws IOException,
when you use those methods, you can:
option 1 (declared to be thrown)
public void openFile() throws IOException {
File f = new File(“xxx.txt”);
f.xxx();
}
option 2 (try/catch it)
public void openFile() {
try {
File f = new File(“xxx.txt”);
f.xxx();
}catch(IOException io) {
System.out.println(io.getMessage());
}
}
-------------------------------------
Exceptions vs. Overriding
Overriding method cannot be declared to throw checked exceptions
other than those that were declared by the method in the super class.
For example:
void method() throws IOException{}//in your super class
Your overriding method can be one of them:
void method() throws IOException{}//throw same exception
void method (){} //don't throw any exception
void method() throws EOFException, ArrayIndexOutOfBoundsException{}
//EOFException is subclass of IOException, ArrayIndexOutOfBoundsException
//is a runtime exception(unchecked exception)
---------------------------------
StackTraceElement class
getClassName(),
getFileName(),
getLineNumber(),
getMethodName(),
etc.
printStackTrace();==> get elements of stack trace
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
at SortIntegerArray.sort(SortIntegerArray.java:19)
at SortIntegerArray.main(SortIntegerArray.java:9)
---------------------------------
create our own exception
e.g.
class WrongInputException extends Exception {
WrongInputException(String s) {
super(s);
}
}
class Input {
void method() throws WrongInputException {
throw new WrongInputException("Wrong input");
}
}
class TestInput {
public static void main(String[] args){
try {
new Input().method();
}catch(WrongInputException wie) {
System.out.println(wie.getMessage());
}
}
}
>javac TestInput.java
>java TestInput
Wrong input
---------------------------------
Lab
1. book example, Questions
2. modify GuessNumber.java
3. project 5