【问题标题】:What is an exception in java?java中的异常是什么?
【发布时间】:2010-05-10 11:55:53
【问题描述】:

我有几个关于 java 异常的问题:

  1. 什么是java异常?

  2. 异常是否被视为错误?

  3. 什么时候应该抛出异常?

  4. 有多少种异常?

【问题讨论】:

  • 自己做作业。
  • 我不认为这是家庭作业 :) 家庭作业问题往往只是“复制”,这里有太多错别字!
  • 尽管如此,一定程度的谦虚和自嘲是受欢迎的,但请考虑改变你的绰号。
  • @LukeN: Do your own homework 只是一种语言文化习语。有趣的是,在许多情况下,在 SO 网站上它已经“重新”获得了字面意思:)。
  • 人们对此反应消极的原因是这是一个非常基本的问题,您可以在任何 Java 教程或书籍中找到答案。你不需要在这里问。

标签: java exception


【解决方案1】:
  1. 代码中出现故障的信号,但可以通过编程方式恢复。

  2. 取决于您如何解释“错误”。这是模棱两可的。

  3. 当您想表明代码中的某些内容失败但可以通过编程方式恢复时。

  4. 无数。您也可以创建自定义的。

要了解有关异常的更多信息,请查看Sun tutorial on the subject

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

      什么是java异常?

      这是一个用于识别应用程序中意外行为的类。

      异常是否被视为错误?

      不总是(取决于你所说的错误)

      什么时候应该抛出异常?

      当您的应用程序进入意外状态或您想要发出意外行为的信号时

      有多少种异常?

      一共有三个:

      • 已检查的异常(必须处理,即 FileNotFoundException)

      这些异常不能归咎于程序员,而是归咎于它运行的环境,程序员可以对此做些什么(程序员可以处理)

      • 运行时异常(又名 GoodProgrammerExpectedtm,不应处理,即 NullPointerException)

      这些异常是程序员的错误,由糟糕的编码实践(或知识)引起,并且总是可以防止的,即不检查数组边界。

      • 错误(即OutOfMemoryError,应该处理)

      这些异常不能归咎于程序员,而是归咎于它运行的环境,它们与受检异常的不同之处在于,程序员对此无能为力。例如,如果系统内存不足,

      有关更详细的说明,请参阅this answer

      【讨论】:

        【解决方案4】:
        1. 异常是应用程序中可恢复的错误。

        2. 这与您正在做的事情和用户的期望有关。假设您有一个除以 0 的异常,并且您的应用程序是一个计算器。大多数用户都希望会弹出一条消息,解释他们除以 0。

        3. 您应该随时抛出异常。您可以制作一个什么都不做的应用程序,即抛出异常。就像一个很棒的文字处理器,每次你按下一个键都会抛出异常,但是当它捕捉到异常时,它会输出你刚刚输入的字符。此外,您还可以制作精彩的四人连线游戏,每次获胜都会引发异常。

        4. 有许多类型的异常。用户生成的异常(由“throw”命令完成)、系统异常(除以 0 的示例)等等。

        【讨论】:

        • 我还应该补充一点,异常不一定是错误,所以你不应该一直认为异常是“坏”的事情。
        【解决方案5】:

        顺便说一句,你也可以创建自己的异常...例如:

        【讨论】:

          【解决方案6】:

          Java 异常是一种中断正常程序流程的机制,通常(但不一定)出现阻止继续处理的错误时。例外对于“恐慌中止弹出!!”最有用。条件。

          在编写程序时,您经常会遇到一些无法继续进行的情况。一个程序中经常有很多这样的条件。例如,假设您正在读取一个应该包含姓名和地址列表的文件。您可能会发现在硬盘驱动器上找不到该文件。格式可能与您的预期不符。可能有重复的条目。等等。其中一些错误可能会使操作根本无法继续,例如“找不到文件”。在其他情况下,您可能不得不放弃记录,但可以继续处理文件中的剩余记录。

          在发明异常之前,程序员经常发现自己使用深度嵌套的 IF 来处理所有可能的错误。喜欢(一些伪代码,没有特定的语言):

          fileHandle=open("myfile.txt");
          if (fileHandle==null)
          {
            writeMessage("File not found");
          }
          else
          {
            while (record=fileHandle.read())
            {
              parseRecord(record);
              if (parseError)
              {
                writeMessage("Invalid record format");
              }
              else
              {
                lookupRecord(record);
                if (found)
                {
                  writeMessage("Duplicate record");
                }
                else
                {
                  ... etc ...
                }
              }
            }
          }
          

          随着错误条件数量的增加,这可能会变得非常混乱。例外让我们在任何时候都能摆脱困境,而不需要一堆“else”子句。

          此外,我们经常有调用其他函数的函数,这些函数调用其他函数等,或者循环中的循环。一些错误可以在结构的深处进行处理。这主要是指我们可以处理和恢复的那些,比如不良记录。其他的要上级处理。这主要意味着我们所能做的就是中止进程并为用户显示错误消息或将错误写入日志文件或其他任何内容。异常让我们通过设置捕获错误的级别来做到这一点。我们可以在可能产生错误的语句之后立即放置“catch”块并采取一些纠正措施。我们可以把它放得更高一点,比如中止处理一条记录,但继续处理下一条记录。或者我们可以把它放在顶部以中止整个事情。拿上面的例子来说:

          try
          {
            fileHandle=open("myfile.txt");
            if (fileHandle==null)
              throw new FileException("File not found")
          while (record=fileHandle.read())
          {
            try
            {
              parseRecord(record);
              if (parseError)
                throw new RecordException("Invalid format")
              lookupRecord(record);
                throw new RecordException("Duplicate record")
              ... etc ...
            }
            catch (RecordException e)
            {
              showMessage(e.getMessage())
            }
          }
          catch (FileException e)
          {
            showMessage(e.getMessage())
          }
          

          请注意,RecordException 将中止处理记录,但让我们继续下一个。一个 FileException 击落了整个事情。

          异常的第三个优点是它们有助于清楚地识别异常条件。

          嗯,这就是一个教程,我要写下我的头顶!

          【讨论】:

            【解决方案7】:

            异常子类表示程序可以合理地从中恢复的错误。除了 RuntimeException 及其子类(见下文)之外,它们通常表示程序在正常工作过程中预计会发生的错误:例如,网络连接错误和归档系统错误。

            【讨论】:

              【解决方案8】:

              1- 异常是在程序执行期间发生的事件,它破坏了程序指令的正常流程。

              2- 错误“表示合理的应用程序不应尝试捕获的严重问题。”尽管, - 异常“表示合理的应用程序可能想要捕获的条件。”

              3-我个人的指导方针是:当发现当前代码块的基本假设为假时,抛出异常。

              4- 检查的异常通常是程序可以从中恢复的异常,以编程方式从此类异常中恢复可能是个好主意。示例包括 FileNotFoundException、ParseException 等。程序员应使用 try-catch 块检查这些异常或将其返回给调用者

              另一方面,我们有未经检查的异常。如果一切正常,这些例外情况可能不会发生,但确实会发生。示例包括 ArrayIndexOutOfBoundException、ClassCastException

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2012-03-11
                • 1970-01-01
                • 2022-12-12
                • 2011-11-03
                • 2010-09-22
                • 2011-01-02
                • 1970-01-01
                相关资源
                最近更新 更多