我们为什么要用Java编写自定义异常类

raj*_*esh 7 java oop exception

编写自定义异常类的目的主要是什么,它的作用是相同的.例如,NullPointerException:

class NullPointerException extends RuntimeException {
      private static final long serialVersionUID = 5162710183389028792L;


      public NullPointerException() {
          super();
      }


      public NullPointerException(String s) {
          super(s);
      }
}
Run Code Online (Sandbox Code Playgroud)

这是我见过和创建的大多数异常类的基本模板.

我能想到的一个目的是处理这些异常.但是这不能基于异常消息吗?我们主要为每种异常类型编写单个处理代码.我知道这有"例外".

但还有什么呢?这不是重复自己只有班级名称改变的地方吗?

还有任何JDK异常类有一些代码吗?

NPE*_*NPE 7

我可以想到几个原因:

  • 拥有多个异常类允许程序员在其catch子句中具体化,并且只捕获他们关心的异常并知道如何处理.
  • 异常类可以携带有关导致异常的错误的信息.例如,ArrayIndexOutOfBoundsException携带有问题的数组索引,SQL异常往往带有特定于数据库的错误代码和消息.
  • 异常规范 - 列出异常 - 可用于在编译时检查正确性.

  • 我更倾向于说`catch(NullPointerException e){}`而不是`catch(异常e){if(e.getMessage().equals("NullPointerException"){}}`甚至然后如果我得到了我的消息怎么办?错误? (2认同)

Ank*_*kit 0

它基本上是用不同的方式处理不同的异常。比如说,您可能希望对 ArrayIndexOutOfBoundsException 执行一些与 NumberFormatException 不同的操作。

或者更清楚地

}catch (ArrayIndexOutOfBoundsException ex){
//operation 1
}catch (NumberFormatException ex){
//operation 2
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,每个捕获都有不同的操作。这正是它的意义。 (2认同)