Ik wil graag een aangepaste uitzondering in Java maken, hoe doe ik het?
...
try{
...
String word=reader.readLine();
if(word.contains(" "))
/*create custom exception*/
}
catch(){
Wanneer ik mijn aangepaste uitzondering maak met throw new...
, ik verkrijg ik de fout unreported exception...must be caught or declared to be thrown
Antwoord 1, Autoriteit 100%
U zou in staat moeten zijn om een aangepaste uitzonderingsklasse te maken die de Exception
klasse, bijvoorbeeld:
class WordContainsException extends Exception
{
// Parameterless Constructor
public WordContainsException() {}
// Constructor that accepts a message
public WordContainsException(String message)
{
super(message);
}
}
Gebruik:
try
{
if(word.contains(" "))
{
throw new WordContainsException();
}
}
catch(WordContainsException ex)
{
// Process message however you would like
}
Antwoord 2, Autoriteit 48%
U moet een klasse maken die zich uitstrekt van Exception
. Het zou er als volgt uit moeten zien:
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);
}
}
Uw vraag geeft niet aan of deze nieuwe uitzondering moet worden aangevinkt of niet.
Zoals je hierkunt zien, zijn de twee typen verschillend:
-
Aangevinkte uitzonderingen zijn bedoeld om een problematische situatie te signaleren die moet worden afgehandeld door de ontwikkelaar die uw methode aanroept. Het moet mogelijk zijn om van een dergelijke uitzondering te herstellen. Een goed voorbeeld hiervan is een FileNotFoundException. Die uitzonderingen zijn subklassen van Uitzondering.
-
Niet-aangevinkte uitzonderingen zijn bedoeld om een fout in uw code te vertegenwoordigen, een onverwachte situatie waarvan u mogelijk niet kunt herstellen. Een NullPointerExceptionis een klassiek voorbeeld. Die uitzonderingen zijn subklassen van RuntimeException
Aangevinkte uitzondering moetworden afgehandeld door de aanroepmethode, ofwel door deze te vangen en dienovereenkomstig te handelen, of door deze naar de aanroepmethode te gooien. Niet-aangevinkte uitzonderingen zijn niet bedoeld om te worden opgevangen, ook al is het mogelijk om dit te doen.
Antwoord 3, autoriteit 7%
Geweldige antwoorden over het maken van aangepaste uitzonderingsklassen. Als u van plan bent de betreffende uitzondering opnieuw te gebruiken, zou ik hun antwoorden / advies opvolgen. Als u echter alleen een snelle uitzondering nodig heeft die met een bericht wordt gegenereerd, kunt u ter plekke de basisuitzonderingsklasse gebruiken
String word=reader.readLine();
if(word.contains(" "))
/*create custom exeception*/
throw new Exception("My one time exception with some message!");
}
Antwoord 4, autoriteit 5%
Omdat je gewoon uitzonderingen kunt maken en weggooien, kan het net zo eenvoudig zijn als
if ( word.contains(" ") )
{
throw new RuntimeException ( "Word contains one or more spaces" ) ;
}
Als u formeler wilt zijn, kunt u een uitzonderingsklasse maken
class SpaceyWordException extends RuntimeException
{
}
Hoe dan ook, als u RuntimeException
gebruikt, wordt uw nieuwe Exception
uitgeschakeld.
Antwoord 5, autoriteit 5%
Omdat een zorgvuldige programmeur vaak een uitzondering maakt voor een speciale gebeurtenis, is het de moeite waard om enkele algemene uitzonderingen te noemen, zoals IllegalArgumentException
en IllegalStateException
en UnsupportedOperationException
. IllegalArgumentException
is mijn favoriet:
throw new IllegalArgumentException("Word contains blank: " + word);
Antwoord 6, autoriteit 2%
Een uitzondering is een klasse zoals elke andere klasse, behalve dat deze zich uitstrekt van Exception
. Dus als je je eigen klas maakt
public class MyCustomException extends Exception
je kunt zo’n instantie gooien met
throw new MyCustomException( ... );
//using whatever constructor params you decide to use
En ditis misschien een interessante lees
Antwoord 7
U hoeft alleen maar een klasse aan te maken die Exception uitbreidt (voor een gecontroleerde uitzondering) of een subklasse van Exception, of RuntimeException (voor een runtime-uitzondering) of een subklasse van RuntimeException.
Gebruik dan in je code
if (word.contains(" "))
throw new MyException("some message");
}
Lees de Java-zelfstudie. Dit zijn basisdingen die elke Java-ontwikkelaar zou moeten weten: http://docs.oracle.com /javase/tutorial/essentieel/uitzonderingen/
Antwoord 8
U moet uw uitzondering ergens anders definiëren als een nieuwe klasse
public class YourCustomException extends Exception{
//Required inherited methods here
}
Dan kun je YourCustomException zo vaak gooien en vangen als je wilt.
Antwoord 9
U kunt uw eigen uitzondering maken door over te nemen van java.lang.Exception
Hieris een voorbeeld dat u daarbij kan helpen.