Как создать настраиваемый тип исключения в 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

Вы должны создать собственный класс исключений, который расширяет класс 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

Вам нужно создать класс, который простирается от 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. Эти исключения являются подклассами Exception.

  • Исключенные исключения предназначены для представления ошибки в коде, неожиданной ситуации, от которой вы, возможно, не сможете восстановиться. A NullPointerException является классическим примером. Эти исключения являются подклассами RuntimeException

Проверенное исключение должно обрабатываться вызывающим методом либо путем его улавливания, либо действовать соответствующим образом, либо путем его вызова вызывающему методу. Неконтролируемые исключения не должны быть пойманы, даже если это возможно.

Ответ 3

Отличные ответы о создании настраиваемых классов исключений. Если вы намерены повторно использовать рассматриваемое исключение, я буду следовать их ответам/советам. Однако, если вам нужно только быстрое исключение, созданное с помощью сообщения, вы можете использовать базовый класс исключений на месте

String word=reader.readLine();

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

Ответ 4

Поскольку вы можете просто создавать исключения и создавать исключения, это может быть так же просто, как

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

Если вы хотите быть более формальным, вы можете создать класс Exception

class SpaceyWordException extends RuntimeException
{

}

В любом случае, если вы используете RuntimeException, ваш новый Exception будет снят.

Ответ 5

Как осторожный программист часто генерирует исключение для особого случая, стоит упомянуть некоторые исключения общего назначения, такие как IllegalArgumentException и IllegalStateException и UnsupportedOperationException. IllegalArgumentException - мой любимый:

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

Ответ 6

Исключением является класс, подобный любому другому классу, за исключением того, что он простирается от Exception. Поэтому, если вы создаете свой собственный класс

public class MyCustomException extends Exception

вы можете отправить такой экземпляр с помощью

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

И этот может быть интересным для чтения

Ответ 7

Вам просто нужно создать класс, который расширяет Exception (для проверенного исключения) или любой подкласс Exception или RuntimeException (для исключения во время выполнения) или любой подкласс RuntimeException.

Затем в вашем коде просто используйте

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

Прочтите учебник по Java. Это базовый материал, который должен знать каждый разработчик Java: http://docs.oracle.com/javase/tutorial/essential/exceptions/

Ответ 8

Вы должны определить свое исключение в другом месте как новый класс

public class YourCustomException extends Exception{

//Required inherited methods here
}

Тогда вы можете бросить и поймать YourCustomException столько, сколько захотите.

Ответ 9

Вы можете создать собственное исключение, наследуя от java.lang.Exception Здесь приведен пример, который может помочь вам в этом.