例外或它如何从“内部”起作用?

时间:2016-06-21 02:28:40

标签: java

以下是两个负责EOF和NFN例外的类:

public class FileNotFoundException extends IOException {

  public FileNotFoundException() {

    super();

  }

}

class EOFException extends IOException {

  public EOFException() {

    super();

  }

}

如果我们查看Throwable超类的其他子类,大多数情况都是一样的。只有默认构造函数调用超类的构造函数,依此类推,除非我们到达继承链的顶部。

我无法理解代码中哪些逻辑部分负责EOF或NFN情况?如果它们之间的差异包含try和catch块,那么让我们尝试下一步:

try  {

  // code with possible IOException

}

catch(FileNotFoundException e) {

  // what to do if FNF has happened

}

catch(EOFException e) {

  // what to do if EOF has happened

}

现在让我们尝试使用EOFException更改FileNotFoundException:

try  {

  // code with possible IOException

}

catch(EOFException e) {

  // what to do if FNF has happened

}

catch(FileNotFoundException e) {

  // what to do if EOF has happened

}

两个变体必须以相同的方式工作,因为它们的类相同并且做同样的工作 - 只需调用它们的超类的构造函数。

那么为什么我们需要两个做同样工作的课程呢?

P.S。对于Throwable类的大多数子类,同样的问题。为什么我们不只有两个Throwable类的子类 - 一个是可检查的,另一个是不可检查的?为什么我们需要这么多相同的类来做同样的工作 - 只需调用他们超类的构造函数?

2 个答案:

答案 0 :(得分:1)

  

那么我们需要做两个同样工作的课程呢?

有两组不同的工作正在发生,当你抛出异常时,Java会为你做的工作,即捕获堆栈跟踪并展开堆栈等。&#39 ; s也是工作,应用程序可能会或可能不会根据异常的类型选择执行,例外类型是线索开发人员在捕获特定的类型 Exception时需要执行工作的代码。对象的名称允许开发人员确定类型。请注意,编译器并不关心异常被调用的内容,即两个异常可能很容易被调用...

Exception65599
Exception1729

但是人类不能很好地处理这样的名字,因此他们将这些名称命名为合理的。因此,对于每个类型的Exception,我们在大多数情况下都有合理的名称,当开发人员在文档或代码中看到其中一个名称时,他们知道该类型的含义以及工作他们可能需要做。

这也意味着大多数例外与他们扩展的例外情况相差甚远,但类型非常重要。

What's in a name? that which we call a rose By any other name would smell as sweet;

答案 1 :(得分:0)

您提到的构造函数都是关于使用new运算符创建这些对象的。 “负责EOF或FNF情况的逻辑部分”在该代码中,该代码使用throw new FileNotFoundException();

之类的命令创建和抛出这些对象