异常类
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 }