Jak utworzyć niestandardowy typ wyjątku w Javie? [duplikat]
Chciałbym utworzyć niestandardowy wyjątek w Javie, jak to zrobić?
...
try{
...
String word=reader.readLine();
if(word.contains(" "))
/*create custom exception*/
}
catch(){
Kiedy tworzę własny wyjątek z throw new...
, otrzymuję błąd unreported exception...must be caught or declared to be thrown
9 answers
Powinieneś być w stanie utworzyć niestandardową klasę WYJĄTKÓW, która rozszerza Exception
klasa, na przykład:
class WordContainsException extends Exception
{
// Parameterless Constructor
public WordContainsException() {}
// Constructor that accepts a message
public WordContainsException(String message)
{
super(message);
}
}
Użycie:
try
{
if(word.contains(" "))
{
throw new WordContainsException();
}
}
catch(WordContainsException ex)
{
// Process message however you would like
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-09 18:47:26
Musisz utworzyć klasę, która rozciąga się od Exception
. Powinno to wyglądać tak:
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);
}
}
Twoje pytanie nie określa, czy ten nowy wyjątek ma być zaznaczony czy nie.
Jak widać tutaj , dwa typy są różne:
Zaznaczone wyjątki mają oznaczać problematyczne sytuacje, które powinny być obsługiwane przez programistę, który wywołuje twoją metodę. Powinno być możliwe odzyskanie po takim wyjątku. Dobrym tego przykładem jest FileNotFoundException . Wyjątki te są podklasami wyjątek .
Niezaznaczone wyjątki mają reprezentować błąd w kodzie, nieoczekiwaną sytuację, z której możesz nie być w stanie odzyskać. Klasyczny przykład toNullPointerException . Wyjątki te są podklasami RuntimeException
Zaznaczony wyjątek musi być obsługiwany przez metodę wywołującą, albo przez wyłapanie go i działanie odpowiednio, lub poprzez wrzucenie go do metody wywołującej. Niezaznaczone wyjątki nie są przeznaczone do przechwytywania, nawet jeśli jest to możliwe.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-03 07:47:50
Świetne odpowiedzi na temat tworzenia niestandardowych klas WYJĄTKÓW. Jeśli zamierzasz ponownie skorzystać z omawianego wyjątku, zastosuję się do ich odpowiedzi/porad. Jeśli jednak potrzebujesz tylko szybkiego wyjątku rzuconego z wiadomością, możesz użyć podstawowej klasy WYJĄTKÓW na miejscu
String word=reader.readLine();
if(word.contains(" "))
/*create custom exeception*/
throw new Exception("My one time exception with some message!");
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-07 22:49:53
Ponieważ możesz po prostu tworzyć i wyrzucać wyjątki, może to być tak proste, jak
if ( word.contains(" ") )
{
throw new RuntimeException ( "Word contains one or more spaces" ) ;
}
Jeśli chcesz być bardziej formalny, możesz utworzyć klasę Exception
class SpaceyWordException extends RuntimeException
{
}
Tak czy inaczej, jeśli użyjesz RuntimeException
, Twój nowy Exception
będzie niezaznaczony.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-30 06:09:50
Ponieważ uważny programista często rzuca wyjątek dla specjalnego zdarzenia, warto wspomnieć o niektórych wyjątkach ogólnego przeznaczenia, takich jak IllegalArgumentException
i IllegalStateException
i UnsupportedOperationException
. IllegalArgumentException
jest moim ulubionym:
throw new IllegalArgumentException("Word contains blank: " + word);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-15 18:54:16
Wyjątek jest klasą jak każda inna klasa, z tą różnicą, że rozciąga się od Exception
. Więc jeśli stworzysz własną klasę
public class MyCustomException extends Exception
Możesz rzucić taką instancję za pomocą
throw new MyCustomException( ... );
//using whatever constructor params you decide to use
I to może być ciekawą lekturą
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-07 22:47:21
Wystarczy utworzyć klasę, która rozszerza wyjątek (dla zaznaczonego wyjątku) lub dowolną podklasę wyjątku, lub RuntimeException (dla wyjątku uruchomieniowego) lub dowolną podklasę RuntimeException.
Następnie w kodzie użyj
if (word.contains(" "))
throw new MyException("some message");
}
Przeczytaj samouczek Javy. To podstawowe rzeczy, które powinien znać każdy programista Javy: http://docs.oracle.com/javase/tutorial/essential/exceptions/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-07 22:48:13
Musisz zdefiniować swój wyjątek gdzie indziej jako nową klasę
public class YourCustomException extends Exception{
//Required inherited methods here
}
Następnie można rzucać i złapać YourCustomException tyle, ile chcesz.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-07 22:47:35
Możesz utworzyć własny wyjątek dziedzicząc z java.lang.Exception
Tutaj {[3] } jest przykład, który może Ci w tym pomóc.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-07 22:49:27