Возможный дубликат:. Как написать исключение самостоятельно?
Я хочу создать пользовательское исключение в 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
.
Вы должны быть в состоянии создать собственный класс исключений, который расширяет класс 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
}
Вы должны создать класс, который простирается от исключение
. Это должно выглядеть так:
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);
}
}
Ваш вопрос не указать, если это новое исключение должно быть checked или unchecked.
Как можно увидеть здесь, Эти два типа отличаются:
Проверенные исключения предназначены для того, чтобы пометить проблемные ситуации, которые должны решаться разработчиком, который называет свой метод. Это должно быть возможным, чтобы оправиться от такого исключения. Хороший пример это исключение filenotfoundexception. Эти исключения являются подклассами исключение.
Неотмеченные исключения предназначены для того, чтобы представлять ошибку в коде, неожиданная ситуация, что вы не сможете оправиться. А поскольку является классическим примером. Эти исключения являются подклассами к RuntimeException
Проверенное исключение должны быть обработано в вызывающем методе, либо ловить его и вести себя соответствующим образом, или, бросив его в вызывающий метод. Неотмеченные исключения не предназначены, чтобы быть пойманным, даже если это возможно сделать так.
Отличные ответы про создание пользовательских классов исключений. Если вы намерены повторно использовать исключение в вопрос, то я последую за ответы/советы. Однако, если вам нужна только быстрая исключение с сообщением, затем вы можете использовать базовый класс exception на месте
String word=reader.readLine();
if(word.contains(" "))
/*create custom exeception*/
throw new Exception("My one time exception with some message!");
}
Так как вы можете просто создавать и бросать исключения, это может быть так просто, как
if ( word.contains(" ") )
{
throw new RuntimeException ( "Word contains one or more spaces" ) ;
}
Если вы хотите быть более формальным, вы можете создать класс исключений
class SpaceyWordException extends RuntimeException
{
}
В любом случае, если вы используете к RuntimeException
, новый исключение
будет снят.
Как заботливый программист часто будет бросать исключение на особый случай, стоит отметить некоторые исключения общего назначения, как IllegalArgumentException
и IllegalStateException
и возникновению unsupportedoperationexception.
IllegalArgumentException-это мое любимое:
throw new IllegalArgumentException("Word contains blank: " + word);
Исключение - это такой же класс, как и любой другой класс, за исключением того, что он расширяется от Exception
. Поэтому если вы создадите свой собственный класс
public class MyCustomException extends Exception
вы можете бросить такой экземпляр с помощью
throw new MyCustomException( ... );
//using whatever constructor params you decide to use
И это может быть интересным чтением
Вам просто нужно создать класс, который расширяет исключением (за проверенное исключение) или любой подкласс исключение, или к RuntimeException (за исключение времени выполнения) или любой подкласс RuntimeException.
Затем, в коде, просто использовать
if (word.contains(" "))
throw new MyException("some message");
}
Читать учебное руководство по Java. Это базовые вещи, что каждый Java программист должен знать: http://docs.oracle.com/javase/tutorial/essential/exceptions/
Вы должны определить свое исключение в другом месте как новый класс
public class YourCustomException extends Exception{
//Required inherited methods here
}
Тогда вы сможете бросать и ловить YourCustomException столько, сколько захотите.