【问题标题】:How to handle runtime exceptions in a chain of methods?如何处理方法链中的运行时异常?
【发布时间】:2016-07-12 23:10:29
【问题描述】:

我最近经历了一家公司的面试过程,有人问我这个问题:

假设有三种方法: A()、B() 和 C(); 流程如下:

A(){
    B();
}

B(){
    C();
}

and 
C()
{
          // The code here may throw runtime exception.
}

现在,在我们的 main 方法中,我们调用了方法 A(),并且在 C() 中发生了异常。 所以问题是如何处理这种情况? 我想到的第一个解决方案是我们可以使用 throws 关键字,并且在 A() 方法中,我们可以应用 try-catch 块。

但面试官看起来并不满意,可能是我没有给出他期望的答案。

谁能帮我解决这个问题?

【问题讨论】:

  • 技术面试问题总是打基础:)

标签: java exception exception-handling runtime


【解决方案1】:

根据正在进行的业务,您有两种选择。

1) 现场处理,即在方法C()中try catch并做必要的步骤

2) 只需将throw 重新发送给调用者,直到它到达父调用者A(),以便它处理这种情况。

【讨论】:

    【解决方案2】:

    我的意见是不做任何从运行时异常中恢复的事情,只是让编译器抛出错误,我的意思是根本不处理 Rumtime 异常,原因如下

    由于运行时异常/未经检查的异常表示由编程问题导致的问题,例如除以零;尝试通过空引用访问对象;和索引异常,试图通过索引太大或太小来访问数组元素..等等..

    According to Java doc

    如果可以合理地期望客户端从异常中恢复,则将其设为受检异常。如果客户端无法从异常中恢复,请将其设为未经检查的异常。

    【讨论】:

      【解决方案3】:

      这取决于您的要求

      1 方法:- 您可以使用每个函数的签名声明 异常类型。 例如。

      A() throws ExceptionType
      {
          B();
      }
      
      
      B() throws ExceptionType{
          C();
      }
      
      and 
      C() throws ExceptionType
      {
                // The code here may throw runtime exception.
      }
      

      第二种方法:-

          try
          {
          a();
          }catch(ExceptionType){}
      A(){
          B();
      }
      
      B(){
          C();
      }
      
      and 
      C()
      {
                // The code here may throw runtime exception.
      }
      

      第三种方法:- 您可以在

      中调用每个函数
      try
      {
      //Function Calling
      }catch(ExceptionType){//handeling code}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        • 2010-10-04
        相关资源
        最近更新 更多