Jak mogę pisać niestandardowe wyjątki?

Jak mogę utworzyć Nowy Exception inny od gotowych typów?

public class InvalidBankFeeAmountException extends Exception{
    public InvalidBankFeeAmountException(String message){
        super(message);
    }
 }

Wyświetli ostrzeżenie dla InvalidBankFeeAmountException , które jest napisane w pierwszej linii.

Author: Ashish Ratan, 2009-07-01

4 answers

Wystarczy utworzyć Nowy class i mieć go extend Exception.

Jeśli chcesz Exception, który jest niezaznaczony, musisz extend RuntimeException.

Uwaga : sprawdzony {[3] } to taki, który wymaga albo otoczenia Exception w try/catch zablokować lub mieć klauzulę "throws " na deklaracji metody. (podobnie jak IOException) niezaznaczone Exceptions mogą być rzucone tak samo jak zaznaczone Exceptions, ale nie musisz ich w żaden sposób obsługiwać (IndexOutOfBoundsException).

Na przykład:

public class MyNewException extends RuntimeException {

    public MyNewException(){
        super();
    }

    public MyNewException(String message){
        super(message);
    }
}
 114
Author: jjnguy,
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
2009-07-01 18:34:24

Po prostu rozszerz

  • Exception, jeśli chcesz, aby twój wyjątek był sprawdzany (tj.: wymagany w klauzuli throws)
  • RuntimeException, jeśli chcesz, aby wyjątek był niezaznaczony.
 33
Author: toolkit,
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-05-27 06:26:15

Upewnij się, że nie przesadzasz z wyjątkami, szczególnie wyjątkami zaznaczonymi. Polecam przeczytanie rozdziału 9 efektywnej Javy Joshuy Blocha, a w szczególności jego pozycji 60 (faworyzowanie stosowania standardowych WYJĄTKÓW). Jego zalecenia obejmują również używanie WYJĄTKÓW sprawdzonych dla WYJĄTKÓW, z których można odzyskać, używanie WYJĄTKÓW niezaznaczonych (RuntimeExceptions) dla błędów programowania i unikanie niepotrzebnego używania WYJĄTKÓW sprawdzonych.

Jeśli wyjątek InvalidBankAccount jest wyrzucony za każdym razem, gdy zostanie znaleziony błąd programowania, prawdopodobnie chcesz zamiast tego rzucić standardowe, niezaznaczone, nielegalne wyrażenie Java. (To starannie pomija potrzebę deklarowania serialVersionUID.)

 6
Author: Jim Ferrans,
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-05-31 06:26:04

Spójrz na:

Http://www.onjava.com/pub/a/onjava/2003/11/19/exceptions.html?page=1

Przykład jest podany na stronie 2:

public class DuplicateUsernameException
    extends Exception {
    public DuplicateUsernameException 
        (String username){....}
    public String requestedUsername(){...}
    public String[] availableNames(){...}
}

Wraz z zestawem wskazówek, kiedy i dlaczego tworzysz własne wyjątki.

 3
Author: Jon,
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
2009-07-01 18:21:37