java中有什么异常?

时间:2010-05-10 11:55:54

标签: java exception

我对java中的异常有几个问题:

  1. 什么是java异常?

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

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

  4. 有多少例外?

8 个答案:

答案 0 :(得分:11)

  1. 代码中出现故障但可以通过编程方式恢复的信号。

  2. 取决于您如何解释“错误”。这是不明确的。

  3. 如果您想要在代码中发出信号失败的信号,但可以通过编程方式恢复。

  4. 不计其数。你也可以创建自定义的。

  5. 要了解有关例外的详情,请查看Sun tutorial on the subject

答案 1 :(得分:8)

答案 2 :(得分:4)

  

什么是java异常?

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

  

异常是否被视为错误?

不总是(并且取决于你所谓的错误)

  

什么时候应该抛出异常?

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

  

有多少例外?

有三个:

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

这些异常不是程序员可以归咎的,而是它所遇到的环境,程序员可以对它做一些事情(程序员可以处理它)

  • 运行时异常(a.k.a. GoodProgrammerExpected tm ,不应处理,即NullPointerException)

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

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

这些异常不是程序员可以归咎的,而是它所遇到的环境,它们与已检查的异常不同,程序员无法对它做任何事情。例如,如果系统内存不足,

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

答案 3 :(得分:2)

  1. 异常是您的应用程序中的可恢复错误。

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

  3. 您应该随时抛出异常。您可以创建一个不会抛出异常的应用程序。就像一个很棒的文字处理器,每当你敲击一个键时就抛出异常,但当它捕获异常时,它会输出你刚输入的字符。此外,你可以制作一个令人敬畏的连接四游戏,每次你赢得它都会抛出异常。

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

答案 4 :(得分:2)

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

coder's revenge

答案 5 :(得分:0)

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 ...
      }
    }
  }
}

随着错误条件数量的增加,这可能会变得非常混乱。例外情况让我们随时摆脱困境,而不需要一堆“其他”条款。

此外,我们经常使用调用其他函数调用其他函数的函数,或循环内循环内的循环。可以在结构内部深处处理一些错误。主要是这意味着我们可以处理和恢复的那些,就像糟糕的记录。其他人应该在更高层次上处理。主要是这意味着我们所能做的就是中止进程并为用户显示错误消息或将错误写入日志文件或其他任何内容。例外情况让我们通过设置捕获错误的级别来实现此目的。我们可以在可能产生错误的语句之后立即设置“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会击落整件事。

例外的第三个优点是它们有助于清楚地识别异常情况。

嗯,这是一个教程,因为我要写下我的头脑!

答案 6 :(得分:0)

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

enter image description here

答案 7 :(得分:0)

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

2-错误"表示合理的应用程序不应该试图捕获的严重问题。"而, - 例外"表示合理的应用程序可能想要捕获的条件。"

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

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

另一方面,我们有未选中的例外情况。这些是如果一切都井然有序可能不会发生的例外情况,但确实会发生。示例包括ArrayIndexOutOfBoundException,ClassCastException