代码之家  ›  专栏  ›  技术社区  ›  Benny

有人能给我解释一下异常处理吗?

  •  2
  • Benny  · 技术社区  · 15 年前

    我认为这是一个愚蠢的问题,但我听到并看到了“例外”一词 处理 很多。我用过“尝试/捕获”,但我仍然想知道到底是什么。 处理 “手段。任何人都能举个例子,我们可以说,例外实际上是 处理 “?

    对不起,英语不好,希望我能说清楚。

    7 回复  |  直到 14 年前
        1
  •  3
  •   danben    15 年前

    这意味着捕获一个异常并根据它的类型执行一些逻辑,这样应用程序就可以优雅地处理它,而不是突然关闭它。

    这是爪哇的一个例子(虽然是人为的):

    public int arrayRetrieve(int[] a, int index) {
       return a[index]; 
    }
    

    鉴于此功能,无法保证 index 将是一个有效的职位 a . 在爪哇,这将引发 ArrayOutOfBoundsException .

    调用的代码 arrayRetrieve 需要意识到这种可能性,并相应地处理这种情况:

    int num = 0;
    try {
        num = arrayRetrieve(someArray, 77);
    }  catch (ArrayOutOfBoundsException e) {
        // Set num to a default value, or log an error, or however you want to handle this case
    }
    

    如果 arraYouToBoundsException 如果没有被捕获,这将导致程序崩溃。

    (我说这个例子是捏造的一个原因是因为Java特别有两种类型。 Exception -你必须明确抓住的那种,而你没有抓住的那种。 arraYouToBoundsException 是后者的一个例子。)

        2
  •  6
  •   McAden    15 年前

    “处理”基本上是优雅地处理错误,而不是做出假设,然后让程序崩溃。

    这可能包括记录和继续、吞咽(隐藏它并假装它从未发生过)、显示错误并取消当前操作,或者实际上可能包括关闭应用程序。这完全取决于应用程序,以及异常是什么。

        3
  •  3
  •   Macha    15 年前

    异常处理是捕获并处理异常的过程。处理它可能是从中恢复,提示错误消息,或者只是使用示例数据——什么是适当的取决于您的应用程序。在一个游戏中使用样本数据可能是很好的,其中一个蓝色像素不会造成任何伤害,而在医疗软件中这是一个坏主意。

    它与异常吞咽形成对比,异常吞咽捕获异常,而不使用它做任何事情。

        4
  •  2
  •   Klaus Byskov Pedersen    15 年前

    异常处理 指的是在程序中处理异常事件的行为,以使程序不会崩溃,而是以有意义的方式继续运行。您说您已经使用了try/catch,那么无论您在catch块中做什么,都是实际的异常处理。

        5
  •  1
  •   John Parker    15 年前

    简单来说,“处理”就是“处理”。

    例如,您可能…

    • 将错误数据记录到文件或数据库中
    • 向用户显示错误消息
    • 终止程序的执行

    …取决于您正在开发的应用程序的错误/种类的严重性。

        6
  •  1
  •   Jeff B    15 年前

    它被称为异常处理,因为异常并不总是终止条件。

    当您得到一个异常时,您可以“处理”那个异常,通过纠正引起异常的任何原因并继续进行。

    例如,您可能会得到一个“被零除”的异常。如果您有一个异常处理程序,您可以捕获异常,并修复有问题的数据,或者导致“无效数据”消息,而不是应用程序完全死机。

        7
  •  0
  •   Hank Gay    15 年前

    中的代码 catch block(或您使用的任何语言)正在“处理”异常,或者至少应该是这样。