码迷,mamicode.com
首页 > 其他好文 > 详细

第10章-异常处理 --- 使用throw抛出异常

时间:2014-06-06 23:41:41      阅读:410      评论:0      收藏:0      [点我收藏+]

标签: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来捕获并处理该异常,也可以完全不理会该异常,把该异常交给该方法调用者处理。

  下面举例:

bubuko.com,布布扣
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,不符合要求");
        }
    }
}
bubuko.com,布布扣

 

 

 (二)catch和throw同时使用

  前面介绍的异常处理方式有如下两种:

  (1)在出现异常的方法内捕获并处理异常,该方法的调用者将不能再次捕获该异常.

  (2)该方法签名中声明抛出该异常,该异常完全交给方法调用者处理.

  在实际应用中往往需要更复杂的处理方式---当一个异常出现时,单靠某个方法无法完全处理该异常,必须由几个方法协作才可完全处理该异常.也就是说,在异常出现的当前方法中,程序只对异常进行部分处理,还有些处理需要在该方法的调用者中才能完成,所以应该在此抛出异常,让该方法的调用者也能捕获到异常.

  为了实现这种通过多个方法协作处理同一个异常的情形,可以在catch块中结合throw语句来完成,下面举例:

bubuko.com,布布扣
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());
        }
    }
}
bubuko.com,布布扣

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

第10章-异常处理 --- 使用throw抛出异常,布布扣,bubuko.com

第10章-异常处理 --- 使用throw抛出异常

标签:c   style   class   blog   code   java   

原文地址:http://www.cnblogs.com/xinhuaxuan/p/3765366.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!