Java语言提供两种异常处理机制:捕获异常和声明抛弃异常;
1)捕获异常:在Java程序运行过程中系统得到一个异常对象是,它将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码。找到能够处理这种类型异常的方法后,运行时系统把当前异常交给这个方法处理;如果找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。捕获异常是通过try-catch-finally语句实现的。语法为:
try{
...
}catch(ExceptionName1 e){
...
}catch(ExceptionName2 e){
...
}
...
}finally{
...
}
2)声明抛弃异常:当Java程序运行时系统得到一个异常对象时,如果一个方法并不知道如何处理所出现的异常,则可在方法声明时,声明抛弃异常。声明抛弃异常是在一个方法声明中的throws子句中指明的。如:
public int read() throws IOException{
...
}
其中throws IOException就是声明抛弃异常,throws后可以跟多个异常类型。
有两中方式:1.捕获异常,自己处理.
2.throw出去,让别人处理.
举个例子:
public class A{
try{
可能发生异常的语句...
}catch(Exception e){
e.getMessage();//自己处理
}
}
public class A throws Exception{
可能发生异常的语句...
}//throw出去,让别人处理
注意这里用的是throws
如果在方法里面则用throw
举例:
public class A{
try{
可能放生异常的语句...
}catch(Exception e){
e.getMessage();//自己处理
throw new Exception ("");
}
}
try-throw-catch
try-catch-finally
例题:
/**
* @(#)FinallyDemo.java
*
*
* @author
* @version 1.00 2009/3/16
*/
class NegativeNumberException extends Exception{
public NegativeArraySizeException(){
super("Negative Number Exception!");
}
public NegativeArraySizeException(String message){
super(message);
}
}
public class FinallyDemo {
public static void main(String[] args) {
try{
exerciseMethod(42);
}
catch(Exception e){
System.out.println("Caught in main.");
}
}
public static void exerciseMethod(int n) throws Exception{
try{
if(n>0)
throw new Exception();
else if(n<0)
throw new NegativeNumberException();
else
System.out.print("No Exception.");
System.out.println("Still in sampleMethod.");
}
catch(NegativeNumberException e){
System.out.println("Caught in sampleMethod.");
}
finally{
System.out.println("In finally block.");
}
System.out.println("After finally block.");
}
}
输出:
In finally block.
Caught in main.
1 try {} catch(Exection e){}finally{}
2 方法名加throws Exection
3 抛出一个新的异常
程序式异常处理机制和声明式异常处理机制