标签:c style class blog code java
第10章-异常处理 --- 使用throw抛出异常
(一)抛出异常
如果需要在程序中自行抛出异常,则应使用throw语句,throw语句可以单独使用,throw语句抛出的不是异常类,而是一个异常实例,而且每次只能抛出一个异常实例.
throw语句的语法格式如下:
throw ExceptionInstance;
如果throw语句抛出的异常是Checked异常,则该throw语句要么处于try块里,显示捕获该异常,要么放在一个带throws声明抛出的方法中,即把该异常交给该方法的调用者处理;如果throw语句抛出的异常是Runtime异常,则该语句无须放在try块里,也无须放在带throws声明抛出的方法中;程序既可以显示使用try...catch来捕获并处理该异常,也可以完全不理会该异常,把该异常交给该方法调用者处理。
下面举例:
public class ThrowTest { public static void main(String[] args) { try { //调用声明抛出Checked异常的方法,要么显示捕获该异常 //要么在main方法中再次声明抛出 throwChecked(-3); } catch(Exception e) { System.out.println(e.getMessage()); } //调用声明抛出Runtime异常的方法既可以显示捕获该异常 //也可不理会该异常 throwRuntime(3); } public static void throwChecked(int a) throws Exception { if(a > 0) { //自行抛出Exception异常 //该代码必须处于try块里,或处于带throws声明的方法中 throw new Exception("a 的值大于0,不符合要求"); } } public static void throwRuntime(int a) { if(a > 0) { //自行抛出RuntimeException异常,既可以显示捕获该异常 //也可完全不理会该异常,把该异常交给该方法调用者处理 throw new RuntimeException("a 的值大于0,不符合要求"); } } }
(二)catch和throw同时使用
前面介绍的异常处理方式有如下两种:
(1)在出现异常的方法内捕获并处理异常,该方法的调用者将不能再次捕获该异常.
(2)该方法签名中声明抛出该异常,该异常完全交给方法调用者处理.
在实际应用中往往需要更复杂的处理方式---当一个异常出现时,单靠某个方法无法完全处理该异常,必须由几个方法协作才可完全处理该异常.也就是说,在异常出现的当前方法中,程序只对异常进行部分处理,还有些处理需要在该方法的调用者中才能完成,所以应该在此抛出异常,让该方法的调用者也能捕获到异常.
为了实现这种通过多个方法协作处理同一个异常的情形,可以在catch块中结合throw语句来完成,下面举例:
public class AuctionTest { private double initPrice = 30.0; //因为该方法中显式抛出了Exception异常 //所以此次需要声明 抛出Exception异常 public void bid(String bidPrice) throws Exception { double d = 0.0; try { d = Double.parseDouble(bidPrice); } catch(Exception e) { //此处完成本方法中可以对异常执行的修复处理 //此次仅仅是在控制台打印异常的跟踪栈信息 e.printStackTrace(); //再次抛出自定义异常 throw new Exception("出现了异常情况1...."); } if(initPrice > d) { throw new Exception("出现了异常情况2...."); } initPrice = d; } public static void main(String[] args) { AuctionTest at = new AuctionTest(); try { at.bid("df"); } catch(Exception e) { //再次捕获到bid()方法中的异常,并对该异常进行处理 System.out.println(e.getMessage()); } } }
第10章-异常处理 --- 使用throw抛出异常,布布扣,bubuko.com
标签:c style class blog code java
原文地址:http://www.cnblogs.com/xinhuaxuan/p/3765366.html