自定义两个异常如下:
package com.ahuier.exception;
public class MyException extends Exception{
/*
* 参考ArithmeticException的实现
* 使用supe关键字可以保证将字符串的信息一层一层网上传到Throwable类让其维护字符串描述信息
*/
public MyException(){
super();
}
public MyException(String message){
super(message);
}
}
package com.ahuier.exception;
public class MyException2 extends Exception{
public MyException2(){
super();
}
public MyException2(String message){
super(message);
}
}
写一个测试异常类:
package com.ahuier.exception;
public class ExceptionTest4 {
public void method(String str) throws MyException, MyException2{
if(str == null){
throw new MyException("传入的字符串参数不能为null");
}
else if(str.equals("hello")){
throw new MyException2("传入的字符不能为hello");
}
else{
System.out.println(str);
}
}
/*
* 根据多态,也可以抛出 Exception类型的异常:
* 1) throws Exception
* 2) 捕获也可以这样写 catch(Exception e)
*/
public static void main(String[] args) throws MyException{
try{
ExceptionTest4 test = new ExceptionTest4();
test.method("hello");
}catch(MyException e){
System.out.println("进入到MyException catch块");
e.printStackTrace();
}catch(MyException2 e){
System.out.println("进入到MyException catch块2");
e.printStackTrace();
} //这部有可能会抛出两种异常,有可能抛出的都必须用catch捕获
finally{
System.out.println("异常处理完毕");
}
System.out.println("程序执行完毕");
}
}
编译执行
com.ahuier.exception.MyException2: 传入的字符不能为hello
at com.ahuier.exception.ExceptionTest4.method(ExceptionTest4.java:9)
at com.ahuier.exception.ExceptionTest4.main(ExceptionTest4.java:25)
进入到MyException catch块2
异常处理完毕
程序执行完毕
【说明】:这边 test.method("hello");传入的是“hello”,则进入MyException2的catch块,如果是test.method(null);传入的是null,则进入MyException的catch块。通过这个程序可以知道,一个程序有多种抛出异常的可能,都要去捕获这些异常,每一个catch捕获一种异常类型。
分析以上程序ExceptionTest4: