如何在 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

380861 次浏览

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

除了从 Exception扩展之外,异常与其他类一样是一个类。所以如果你创建自己的类

public class MyCustomException extends Exception

可以抛出这样的实例

   throw new MyCustomException( ... );
//using whatever constructor params you decide to use

这个可能是一本有趣的读物

您必须在其他地方将异常定义为一个新类

public class YourCustomException extends Exception{


//Required inherited methods here
}

然后您可以抛出和捕获 YourCustomException,只要您愿意。

因为您可以只创建和抛出异常,所以可以像下面这样简单

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

如果希望更正式一些,可以创建一个 Exception 类

class SpaceyWordException extends RuntimeException
{


}

无论哪种方式,如果您使用 RuntimeException,您的新 Exception将被取消检查。

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

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

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

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

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

您的问题没有指定是否应该选中或取消选中这个新异常。

正如你所看到的 给你,这两种类型是不同的:

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

  • 未检查的异常意味着代码中存在 bug,这是一种可能无法恢复的意外情况。NullPointerException是一个经典的例子。这些异常是 RuntimeException的子类

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

可以通过从 java.lang.Exception继承来创建自己的异常 这里 是一个可以帮助您做到这一点的例子。

关于创建自定义异常类的好答案。如果您打算重用所讨论的异常,那么我将遵循他们的回答/建议。但是,如果您只需要随消息抛出一个快速异常,那么您可以现场使用基本异常类吗

String word=reader.readLine();


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

由于细心的程序员经常会为特殊事件抛出异常,因此值得一提的是一些通用异常,如 IllegalArgumentExceptionIllegalStateExceptionUnsupportedOperationExceptionIllegalArgumentException是我的最爱:

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