Java异常时用来描述在一段代码中发生的异常情况的对象。
当出现引起异常的情况时,就会创建用来表示异常的对象,并在引起错误的方法中抛出异常对象。
Java的异常处理通过5个关键字进行处理:
1、try
2、catch
3、throw
4、throws
5、finally
所有的异常都是内置类Throwable的子类。紧随着Throwable之下的都是两个子类,他们将异常分为另个不同的分支,一个分支是Exception。另一个是Error。
我们常用的手动捕获的异常处理模块的一般形式为:
try{
}catch(ExceptionType e){
}
try{
}catch(ExceptionType e){
}finally{
}
1、try catch
为了防止并处理运行时的错误,可以简单地在try代码块中封装希望得到监视的代码。紧随着try之后,会出现一条catch语句,指定希望捕获的异常类型。
示例代码如下:
public class Test {
public static void main(String [] args){
try{
int a = 0;
int b= a/a;
}catch(ArithmeticException e){
System.out.println("devide by zero: "+e);
}
}
}
最后的输出结果是:
devide by zero: java.lang.ArithmeticException: / by zero
当然我们也可以使用多条catch子句,不过需要注意的一点事,异常子类必须位于所有的超类之前。
举例说明,下面的程序就会出现编译错误
public class Test {
public static void main(String [] args){
try{
int a = 0;
int b= a/a;
}catch(Exception e){//异常超类不能再子类之前
System.out.println("this is an exception"+e);
}catch(ArithmeticException e){
System.out.println("devide by zero: "+e);
}
}
}
也可以使用嵌套的try语句,就是try语句里面嵌套一个try语句。
2、throw和throws
throw
在Java程序中我们自己通过throw抛出异常。
throw的一般形式是:
throw ThrowableInstance;
其实ThrowableInstance必须是Throwable或者其子类的对象。
有两种方式可以获取Throwable对象:
a、在catch子句中使用参数
b、new一个新的对象
举例说明:
public class Test {
public static void main(String [] args){
try{
try{
throw new NullPointerException();//new关键字
}catch(NullPointerException e){
System.out.println("NullPointerException inside"+e);//在catch子句中使用参数
throw e;
}
}catch(NullPointerException e){
System.out.println("NullPointerException outside"+e);
}
}
}
最后的输出结果是:
NullPointerException insidejava.lang.NullPointerException
NullPointerException outsidejava.lang.NullPointerException
throws
如果方法可能引发自身不进行处理的异常,就必须指明这种行为,以便方法的调用者能够保卫他们自己以防备上诉的异常。
throw子句的方法声明的一般形式:
type method_name(parameter_list)throw exception_list{
//body of method
}
3、finally
finally后面的代码块,不管异常时候抛出都会执行