Comment créer un type d'exception personnalisé en Java? [dupliquer]
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
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
}
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.
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!");
}
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.
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);
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
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/
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.