web-dev-qa-db-fra.com

Comment créer un type d'exception personnalisé en Java?

Duplicate possible:
Comment puis-je écrire une exception par moi-même?

J'aimerais créer une exception personnalisée en Java, comment puis-je le faire?

...

try{

...

String Word=reader.readLine();

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

}
catch(){

Lorsque je crée mon exception personnalisée avec throw new..., j'obtiens l'erreur unreported exception...must be caught or declared to be thrown.

159
Mazzy

Vous devriez pouvoir créer une classe d’exception personnalisée qui étend la classe Exception , par exemple:

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

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

Utilisation:

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

Vous devez créer une classe qui s'étend de Exception. Ça devrait ressembler à ça:

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);
    }
}

Votre question ne précise pas si cette nouvelle exception doit être cochée ou non.

Comme vous pouvez le voir ici , les deux types sont différents:

  • Les exceptions cochées sont destinées à signaler une situation problématique que le développeur qui appelle votre méthode devrait gérer. Il devrait être possible de récupérer d'une telle exception. Un bon exemple de ceci est un FileNotFoundException . Ces exceptions sont des sous-classes de Exception .

  • Les exceptions non contrôlées sont censées représenter un bogue dans votre code, une situation inattendue pour laquelle vous ne pourrez peut-être pas récupérer. Un NullPointerException est un exemple classique. Ces exceptions sont des sous-classes de RuntimeException

L'exception vérifiée doit être traitée par la méthode d'appel, soit en l'attrapant et en agissant en conséquence, soit en la renvoyant à la méthode d'appel. Les exceptions non contrôlées ne doivent pas être interceptées, même s'il est possible de le faire.

113
Laf

Excellentes réponses sur la création de classes d'exception personnalisées. Si vous avez l'intention de réutiliser l'exception en question, je suivrais leurs réponses/conseils. Cependant, si vous n'avez besoin que d'une exception rapide avec un message, vous pouvez utiliser la classe d'exception de base sur-le-champ.

String Word=reader.readLine();

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

Comme vous pouvez simplement créer et lancer des exceptions, cela pourrait être aussi simple que

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

Si vous souhaitez être plus formel, vous pouvez créer une classe Exception.

class SpaceyWordException extends RuntimeException
{

}

Dans les deux cas, si vous utilisez RuntimeException, votre nouveau Exception ne sera pas coché.

12
emory

Comme un programmeur avisé lève souvent une exception pour une occurrence spéciale, il convient de mentionner certaines exceptions d'usage général telles que IllegalArgumentException et IllegalStateException et UnsupportedOperationException. IllegalArgumentException est mon préféré:

throw new IllegalArgumentException("Word contains blank: " + Word);
10
Joop Eggen

Une exception est une classe comme n'importe quelle autre classe, sauf qu'elle s'étend de Exception . Donc, si vous créez votre propre classe

public class MyCustomException extends Exception

vous pouvez lancer un tel exemple avec

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

Et this pourrait être une lecture intéressante

5
Robin

Vous devez simplement créer une classe qui étend Exception (pour une exception vérifiée) ou toute sous-classe d'Exception, ou RuntimeException (pour une exception d'exécution) ou toute sous-classe de RuntimeException.

Ensuite, dans votre code, utilisez simplement

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

Lisez le tutoriel Java. Tous les développeurs Java devraient connaître les éléments de base suivants: http://docs.Oracle.com/javase/tutorial/essential/exceptions/

3
JB Nizet

Vous devez définir votre exception ailleurs comme une nouvelle classe

public class YourCustomException extends Exception{

//Required inherited methods here
}

Ensuite, vous pouvez lancer et attraper YourCustomException autant que vous le souhaitez.

2
Thomas

Vous pouvez créer votre propre exception en héritant de Java.lang.ExceptionHere est un exemple qui peut vous aider à le faire.

2
GETah