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


Cette question a déjà des réponses ici: Comment puis-je écrire des Exceptions personnalisées? (4 réponses) Fermé l'année dernière.

Je voudrais créer une exception personnalisée en Java, comment dois-je faire?

...

try{

...

String word=reader.readLine();

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

}
catch(){

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

Author: Samuel Liew, 2011-12-07

9 answers

Vous devriez pouvoir créer une classe d'exception personnalisée qui étendException classe, 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
}
 232
Author: Rion Williams, 2017-05-09 18:47:26

Vous devez créer une classe qui s'étend de Exception. Cela devrait ressembler à ceci:

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 spécifie pas si cette nouvelle exception doit être cochée ou décochée.

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

  • Les exceptions vérifiées sont destinées à signaler une situation problématique qui doit être gérée par le développeur qui appelle votre méthode. 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 cochées sont censées représenter un bogue dans votre code, une situation inattendue dont vous ne pourrez peut-être pas vous remettre. Une NullPointerException est un exemple classique. Ces exceptions sont des sous-classes de RuntimeException

L'exception vérifiée doit être gérée par la méthode appelante, soit en l'attrapant et en agissant en conséquence, ou en le jetant à la méthode appelante. Les exceptions non cochées ne sont pas censées être interceptées, même s'il est possible de le faire.

 114
Author: Laf, 2014-09-03 07:47:50

Excellentes réponses sur la création de classes d'exceptions 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 lancée avec un message, vous pouvez utiliser la classe d'exception de base sur place

String word=reader.readLine();

if(word.contains(" "))
  /*create custom exeception*/
  throw new Exception("My one time exception with some message!");
}
 16
Author: Matthew Cox, 2011-12-07 22:49:53

Puisque 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 d'Exception

class SpaceyWordException extends RuntimeException
{

}

De toute façon, si vous utilisez RuntimeException, nouveau Exception sera désactivée.

 12
Author: emory, 2017-05-30 06:09:50

Comme un programmeur prudent lancera souvent une exception pour une occurrence spéciale, il convient de mentionner certaines exceptions à usage général comme IllegalArgumentException et IllegalStateException et UnsupportedOperationException. IllegalArgumentException est mon préféré:

throw new IllegalArgumentException("Word contains blank: " + word);
 11
Author: Joop Eggen, 2015-10-15 18:54:16

Une exception est une classe comme toute 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 une telle instance avec

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

Et ce peut-être une lecture intéressante

 5
Author: Robin, 2011-12-07 22:47:21

Il vous suffit de 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. Ce sont des choses de base que chaque développeur Java devrait savoir: http://docs.oracle.com/javase/tutorial/essential/exceptions/

 3
Author: JB Nizet, 2011-12-07 22:48:13

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
Author: Thomas, 2011-12-07 22:47:35

, Vous pouvez créer votre propre exception en héritant de java.lang.Exception Voici un exemple qui peut vous aider à le faire.

 2
Author: GETah, 2011-12-07 22:49:27