How
1 XXMethod()throws Child1Exception,Child2ExCeption//除了RuntimeExceptiong及其子类,均要throws异常
2 {
3 try
4 {
5 //抛出Child1Exception对象
6 new throw Child1Exception();
7 new throw Child2Exception();
8 }
9 catch (Child1Exception e)//捕获抛出的异常对象并处理
10 {
11 e.printStackTrace();
12 ...
13 }
14 catch (Child2ExCeption e)
15 {
16 e.printStackTrace();
17 ...
18 }
19 ...
20 finally
21 {
22 要释放的资源
23 或一定要执行的代码
24 }
25 }
自定义异常实例
1 /**
2 *自定义两个异常:除数为负数异常,除数为零异常
3 *throws 异常类1,异常类2 ,写在函数后面,表示这个函数可能有问题
4 *throw new 异常1(..) ,写在函数里面,抛出异常1对象,将供给catch
5 *catch(异常1 e){}将捕获抛出的异常1的对象,赋给e,然后再操作e
6 *当throw执行时,其后的语句将不会执行,与return类似
7 *RuntimeException及其子类是特殊的异常类,可以直接抛出起对象,意义在于发生异常时终止程序,提示须改程序
8 *finally:主要用于释放资源!如操作数据库异常,不做finally处理,数据库连接将不会断开,占用资源
9 *注意1:子类继承父类,那么子类抛出的异常只能是父类异常的子类对象或则子集
10 *注意2:父类或接口没有定义的异常对象,子类只能try不能抛
11 */
12 class FuShuException extends Exception
13 {
14 FuShuException(){
15 super();
16 }
17 //声明负数异常的构造方法,调用父类的构造方法
18 FuShuException(String msg){
19 super(msg);
20 }
21 }
22 class ZeroException extends Exception
23 {
24
25 //声明负数异常的构造方法,调用父类的构造方法
26 ZeroException(String msg){
27 super(msg);
28 }
29 }
30 class Test
31 {
32 public double count(int a,int b)throws FuShuException,ZeroException
33 {
34 //RuntimeException可直接抛出,而并没有throws,也没有catch,其子类如NullPointerException,ArithmeticException等
35 if(a<0) throw new RuntimeException("被除数a<0");
36 else if(b<0) throw new FuShuException("负数异常: by / 负数");
37 else if(b==0) throw new ZeroException("除数零异常:by / 0");
38 return a/b;
39 }
40 }
41 class YiChang
42 {
43 public static void main(String[] args)
44 {
45 try{
46 Test t=new Test();
47
48 System.out.println(t.count(5,-1));
49
50 }
51 catch(FuShuException e){
52 e.printStackTrace();//异常对象:错误信息+错误代码行数
53 //System.out.println(e.toString());//异常对象:错误信息
54 //下面这一句可以测试出finally的作用
55 //return;
56 }
57 catch(ZeroException e){
58 e.printStackTrace();//异常对象:错误信息+错误代码行数
59 //System.out.println(e.toString());//异常对象:错误信息
60 }
61 finally{
62 System.out.println("over");//finally里面写一定会执行的语句(除非调用System.exit(0)退出jvm虚拟机)
63 }
64 //注意,这里与finally不同的是,如果异常执行并停止程序的时候,下面的语句不执行,而finally中的会执行
65 System.out.println("over2");
66 }
67 }