如何在Java中创建自定义异常类型? [重复]

问题

可能重复:我如何自己编写例外?

我想在Java中创建一个自定义异常,我该怎么做?

...

try{

...

String word=reader.readLine();

if(word.contains(" "))
  /*create custom exception*/

}
catch(){

当我使用throw new...创建自定义异常时,我获得了错误unreported exception...must be caught or declared to be thrown


#1 热门回答(215 赞)

你应该能够创建扩展Exception类的自定义异常类,例如:

class WordContainsException extends Exception
{
      // Parameterless Constructor
      public WordContainsException() {}

      // Constructor that accepts a message
      public WordContainsException(String message)
      {
         super(message);
      }
 }

用法:

try
{
     if(word.contains(" "))
     {
          throw new WordContainsException();
     }
}
catch(WordContainsException ex)
{
      // Process message however you would like
}

#2 热门回答(103 赞)

你需要创建一个从Exception扩展的类。它应该如下所示:

public class MyOwnException extends Exception {
    public MyOwnException () {

    }

    public MyOwnException (String message) {
        super (message);
    }

    public MyOwnException (Throwable cause) {
        super (cause);
    }

    public MyOwnException (String message, Throwable cause) {
        super (message, cause);
    }
}

你的问题未指定是应检查还是取消选中此新异常。

如你所见,887749920,两种类型不同:

  • 已检查的异常旨在标记应由调用方法的开发人员处理的有问题的情况。应该可以从这种例外中恢复。一个很好的例子是FileNotFoundException。这些异常是Exception的子类。
  • 未经检查的异常旨在表示代码中的错误,这是你可能无法从中恢复的意外情况。 NullPointerException是一个经典的例子。这些异常是RuntimeException的子类

检查异常必须由调用方法处理be,方法是捕获它并相应地执行操作,或者将其抛给调用方法。未经检查的异常并不意味着被捕获,即使有可能这样做。


#3 热门回答(16 赞)

关于创建自定义异常类的好答案。如果你打算重用有问题的例外,那么我会按照他们的答案/建议。但是,如果你只需要使用消息抛出快速异常,那么你可以在现场使用基本异常类

String word=reader.readLine();

if(word.contains(" "))
  /*create custom exeception*/
  throw new Exception("My one time exception with some message!");
}