Logo

郎哥编程

如何处理程序异常?

2019-12-25 236

编写Java程序经常会遇到错误。一类错误是语法错误或资源链接错误,此类错误一般在编译过程中就可以发现;另一类错误是在程序运行过程中出现的错误,该类错误被称为程序异常,由于程序异常严重影响了程序运行的稳定性。因此,程序人员必须要对此类错误进行预防和处理,对异常处理的过程即异常处理。

在工作和现实生活中,也有很多异常处理的事例。例如,在软件项目开发过程中,团队成员的突然离职、客户对需求的变更、开发进度拖延等情况的发生,都会导致项目开发过程出现异常,并需要项目经理及时处理这些异常情况。

异常不可避免,但可以对异常做出预测和预处理,预测什么情况下会出现异常,出现异常后如何处理。

例如,前面谈到的软件项目开发过程出现的异常,可以在项目管理计划书中针对团队成员离职、需求变更、进度拖延出现的异常,制定详尽的应对计划,该应对计划就是异常处理。

对于程序而言,内存溢出、数组越界、除零操作、对象没有实例化就使用、变量无赋值就使用等操作都会引发程序异常。因此,程序员在编写代码时,需要对上面的情况做出预测,并添加出现异常时的处理语句,以提高程序的稳定性。

在不支持异常处理的程序设计语言中,程序员为了检查可能发生的异常情况,需要使用很多的if—else语句,这就要求程序员非常清楚地知道是什么导致了异常的产生,以及异常的确切含义。

案例1:建立一个测试类,使用if-else语句处理程序可能出现的错误。

新建项目PCoreUnit4,在PCoreUnit4项目新建excep包,在excep包下新建ExecpTest类。代码如下:

package excep;
 
/** 
* @ClassName: ExecpTest 
* @Description: 异常处理(如何处理程序异常)案例1   
* @author 编程训练营 
* @date 
* 
*/
 
public class ExecpTest {
 
    /** 
    * @Title: main 
    * @Description: Java程序入口main方法 
    * @param @param args    参数 
   
    * @return void    返回类型 
    * @throws 
    */
 
    public static void main(String[] args) {
      
       int ret = div(20,0);
       System.out.println("除法结果为:" + ret);
    }
   
    /** 
    * @Title: div 
    * @Description: 求两数的除法
    * @param @param a
    * @param @param b
    * @param @return    参数 
   
    * @return int    返回类型 
    * @throws 
    */ 
    public static int div(Integer a,Integer b)
    {
       int ret = -1;
       //预测传入参数a为空的异常处理代码
       if( a == null )
       {
           System.out.println("传入的参数a为空");
           return ret;
       }
       //预测传入参数b为空的异常处理代码
       else if( b == null )
       {
           System.out.println("传入的参数b为空");
           return ret;
 
       }
       //预测传入参数b不能为0的异常处理代码
       else if( b == 0 )
       {
           System.out.println("传入的参数b为0,b做为除数不能为0");
           return ret;
 
       }
       ret = a / b;
       return ret;
          
    }
 
 
}

程序执行结果如下图所示:

 image.png      

有异常处理机制的语言,没有必要去编写上述的这些if—else语句。在默认的情况下,异常会输出一个错误消息,并中止程序的执行。为了更好地处理异常情况,程序员通常会在程序中定义异常处理语句来捕获和处理异常情况。Java语言提供了try—catch语句来捕获和处理异常,try—catch语句后面会详细讲解。

案例2:使用try—catch语句对上面的案例提供异常处理的支持。

在excep包下新建TryCatchTest类。代码如下:

package excep;
 
/** 
* @ClassName: TryCatchTest 
* @Description: 异常处理(如何处理程序异常)案例2 
* @author 编程训练营 
* @date 
* 
*/
 
public class TryCatchTest {
 
    /** 
    * @Title: main 
    * @Description: Java程序入口main方法
    * @param @param args    参数 
   
    * @return void    返回类型 
    * @throws 
    */
 
    public static void main(String[] args) {
       int ret = div(20,0);
       System.out.println("除法结果为:" + ret);
    }
 
    /** 
    * @Title: div 
    * @Description: 求两数和除法
    * @param @param a
    * @param @param b
    * @param @return    参数 
   
    * @return int    返回类型 
    * @throws 
    */ 
    public static int div(Integer a,Integer b)
    {
       int ret = -1;
       //try语句块用于捕获异常
       try {
           ret = a / b;
       }catch(Exception e1){
         //catch语句块用于处理异常
           System.out.println(e1.getMessage());
       }
       return ret;
    }
 
}

采用try—catch语句不仅可以使代码变得更简洁,而且能为程序调试提供很大的方便,从而达到提高程序稳定性的目的。

异常处理就是提前预测程序可能发生的所有异常情况,并通过Java提供的异常处理类捕获异常,编写异常处理代码。当出现异常后,程序执行的流程发生改变,程序的控制权转移到异常处理代码。

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论