Download Java Course -- Get Started

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
Programming in Java
Exception Handling
蔡文能
交通大學資訊工程學系
[email protected]
交通大學資訊工程學系
Java
More Java Examples
Exception example
try {
readFromFile("datafile");
} catch (FileNotFoundException e) {
System.err.println("Error: File not found");
}
交通大學資訊工程學系 蔡文能
第2頁
Java
More Java Examples
Exception Handling: Some Options
Print something
Throw a new exception
Re-Throw the exception
Fix the problem
Exit
交通大學資訊工程學系 蔡文能
第3頁
Java
More Java Examples
Exception Handling: Printing
You can print a stack trace by calling the exception method
printStackTrace()
Sometimes it's better to send error messages to stderr:
 System.err.println("Error: invalid thingy");
Some applications log error messages
 file
 logging service (syslog).
交通大學資訊工程學系 蔡文能
第4頁
Java
More Java Examples
Exception Handling: throw
• You can throw an exception from an exception
handler (a catch block).
• Allows you to change exception type and/or
error message.
• You can also alter the base of the stack trace
•fillInStackTrace()
交通大學資訊工程學系 蔡文能
第5頁
Java
More Java Examples
Exception example
public class ThrowUp {
public static void main(String[ ] args) {
String tmp;
try {
// generate an ArrayIndexOutOfBoundsExceptions ..
// .. (on purpose!).
for (int i=0 ; i<args.length+10 ; i++) {
tmp = args[i];
}
System.out.println("I made it!");
} catch (ArrayIndexOutOfBoundsException up) {
throw new SecurityException("Trouble");
}
} // main
}
交通大學資訊工程學系 蔡文能
第6頁
Java
More Java Examples
Exception Handling: Re-throw
• You can throw an exception from an exception
handler (a catch block) without changing
anything:
• called rethrowing
• The caller needs to deal with the exception.
• This also happens if you don't catch the
exception!
• sometimes you need to take some action and
then rethrow the exception.
交通大學資訊工程學系 蔡文能
第7頁
Java
More Java Examples
Another way to re-throw
You can allow selected types of exceptions to be
propogated to the caller of your method:
void blah() throws IOException {
Within blah() you don't need to catch these exceptions
(to be able to compile).
交通大學資訊工程學系 蔡文能
第8頁
Java
More Java Examples
Exception Handling:
Fix the problem.
• You can't fix things and then resume execution
automatically
• you can do this in C++.
• You can have a loop the retries the code again.
交通大學資訊工程學系 蔡文能
第9頁
Java
More Java Examples
Exception Handling: exiting
• Sometimes the error is fatal, and you want to stop
the program immediately.
System.exit();
交通大學資訊工程學系 蔡文能
第10頁
Java
Wait.java
More Java Examples
public class Wait {
public static void main(String[ ] args) {
boolean done=false;
int seconds=0;
try {
seconds = Integer.parseInt(args[0]);
} catch (Exception e) {
System.out.println("Please specify the number of seconds");
System.exit(1);
}
long initialtime = System.currentTimeMillis( );
while (!done) {
try {
if (System.currentTimeMillis()-initialtime < seconds*1000)
throw new Exception("Not Yet - keep trying");
done=true;
} catch (Exception e) {
System.out.println(e);
}
}
System.out.println("Done!\n");
}
}
交通大學資訊工程學系
蔡文能
第11頁
Java
More Java Examples
How/when do you generate exceptions?
Use throw:
throw new Exception("broken!");
You can use throw anywhere.
 you detect some error that means the following code should
not be executed.
In some cases, you can think of throw as an alternate
return
交通大學資訊工程學系 蔡文能
第12頁
Java
More Java Examples
Exception Enforcement
In general, you do the following:
 specify what exceptions each method can generate.
(throw)
 write code to catch all exceptions that can be generated
by a method call.
The compiler (usually) enforces this
 it is a compilation error to call a method without
catching it's declared exception types.
交通大學資訊工程學系 蔡文能
第13頁
Java
More Java Examples
RunTime Exceptions
There are exceptions that are generated by the system (that
are usually caused by programming mistakes):
 NullPointerException (null references)
 ArrayIndexOutOfBoundsException
If you don't catch these, a stack trace will be generated and
the program will terminate.
The compiler does not force you to catch these exceptions.
交通大學資訊工程學系 蔡文能
第14頁
Java
More Java Examples
Exception Types
Exceptions are objects!
Exception types are classes.
 A (quite large!) hierarchy of classes.
All exception types are derived from the class
Exception
 there are some methods defined in this base class.
交通大學資訊工程學系 蔡文能
第15頁
Java
NullPointer.java
import java.util.*;
public class NullPointer {
public static void main(String[ ] args) {
Date f = new Date();
f=null;
PrintSomething2(f); // comment out to test PrintSomething
PrintSomething(f);
}
// no checks, if x is null runtime exception default behavior
static void PrintSomething(Object x) {
System.out.println(x.getClass( ).getName());
}
// we explicitly check for runtime exception!
static void PrintSomething2(Object x) {
try {
System.out.println(x.getClass().getName());
} catch (RuntimeException re) {
System.out.println("Fatal Error!");
System.exit(1);
}
} // main
}
交通大學資訊工程學系 蔡文能
More Java Examples
第16頁
Java
More Java Examples
Exception Type Hierarchy (partial)
Throwable
Exception
Error
VirtualMachineError
RunTimeException
IOException
NullPointerException
EOFException
ArithmeticException
交通大學資訊工程學系 蔡文能
第17頁
Java
More Java Examples
Some Exception Methods
These are actually inherited from throwable
printStackTrace()
fillInStackTrack()
getMessage()
交通大學資訊工程學系 蔡文能
第18頁
Java
More Java Examples
Creating Your Own Exception Types
It is often useful to create your own type of exception.
 generally all you create is a name.
 you can get fancy and add new methods to your exception class(es).
User-defined Exception Type
class FooException extends Exception {
}
// ..
class BlahException extends Exception {
BlahException(){}
BlahException(String s) { super(s); }
}
// ..
throw new BlahException("Invalid blah");
交通大學資訊工程學系 蔡文能
第19頁
Java
More Java Examples
using finally
try {
statements . . .
} catch (ExceptionType1 ename1) {
error handling statements . . .
} catch (ExceptionType2 ename2) {
error handling statements . . .
} finally {
… this code always executed …
}
交通大學資訊工程學系 蔡文能
第20頁
Java
More Java Examples
Why finally?
What is there to clean up?
 No memory cleanup required in Java!
 No destructors to call!
Sometimes you need to set the state of things
(fields) to some stable (acceptable) state.
交通大學資訊工程學系 蔡文能
第21頁
Java
More Java Examples
Exception Handling
謝謝捧場
http://www.csie.nctu.edu.tw/~tsaiwn/oop/
蔡文能
交通大學資訊工程學系 蔡文能
第22頁