如何在Java中创建自定义异常类型?

时间:2011-12-07 22:44:29

标签: java exception

  

可能重复:
  How can I write an Exception by myself?

我想在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

9 个答案:

答案 0 :(得分:225)

您应该能够创建扩展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
}

答案 1 :(得分:113)

您需要创建一个从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);
    }
}

您的问题未指定是否应选中或取消选中此新异常。

正如您所见here,两种类型不同:

  • 已检查的异常旨在标记应由调用方法的开发人员处理的有问题的情况。应该可以从这种例外中恢复。一个很好的例子是FileNotFoundException。这些例外是Exception的子类。

  • 未经检查的异常旨在表示代码中的错误,这是您可能无法恢复的意外情况。 NullPointerException是一个经典的例子。这些例外是RuntimeException

  • 的子类

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

答案 2 :(得分:16)

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

String word=reader.readLine();

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

答案 3 :(得分:12)

由于您可以创建并抛出异常,因此可以像

一样简单
if ( word.contains(" ") )
{
     throw new RuntimeException ( "Word contains one or more spaces" ) ;
}

如果您想要更正式,可以创建一个Exception类

class SpaceyWordException extends RuntimeException
{

}

无论哪种方式,如果您使用RuntimeException,您的新Exception都将取消选中。

答案 4 :(得分:10)

作为一个细心的程序员经常会针对特殊情况抛出异常,值得一提的是一些通用异常,例如IllegalArgumentExceptionIllegalStateException以及UnsupportedOperationExceptionIllegalArgumentException是我的最爱:

throw new IllegalArgumentException("Word contains blank: " + word);

答案 5 :(得分:5)

异常是一个类,与任何其他类一样,除了它从Exception延伸。所以,如果你创建自己的类

public class MyCustomException extends Exception

你可以用

抛出这样的实例
   throw new MyCustomException( ... );
   //using whatever constructor params you decide to use

this可能是一个有趣的阅读

答案 6 :(得分:3)

您只需创建一个扩展Exception(对于已检查的异常)或Exception的任何子类,或RuntimeException(对于运行时异常)或RuntimeException的任何子类的类。

然后,在您的代码中,只需使用

if (word.contains(" "))
    throw new MyException("some message");
}

阅读Java教程。这是每个Java开发人员应该知道的基本内容:http://docs.oracle.com/javase/tutorial/essential/exceptions/

答案 7 :(得分:2)

您必须在其他地方将您的例外定义为新类

public class YourCustomException extends Exception{

//Required inherited methods here
}

然后你可以随意抛出并捕获YourCustomException。

答案 8 :(得分:2)

您可以通过继承java.lang.Exception来创建自己的例外 Here就是一个可以帮助你做到这一点的例子。