1) // Classe que representa a classe de exceção definida pelo uso MyException extends Exception {public MyException (String s) {super (s); }} ------------------------------------------------ 2) tente {// Lance um objeto de exceção definida pelo usuário e lance new MyException ("TestException"); } catch (MyException ex) {System.out.println ("Capturado"); // Imprime a mensagem do objeto MyException System.out.println (ex.getMessage ()); }
Mandeep Yadav
Respostas:
285
Para definir uma exceção verificada, você cria uma subclasse (ou hierarquia de subclasses) de java.lang.Exception. Por exemplo:
... e o código que chama esse método deve manipular ou propagar essa exceção (ou ambas):
try{int i =5;
myObject.calculate(5);}catch(FooException ex){// Print error and terminate application.
ex.printStackTrace();System.exit(1);}catch(IOException ex){// Rethrow as FooException.thrownewFooException(ex);}
Você observará no exemplo acima que IOExceptioné capturado e mostrado novamente como FooException. Essa é uma técnica comum usada para encapsular exceções (geralmente ao implementar uma API).
Às vezes, haverá situações em que você não deseja forçar todos os métodos a declarar sua implementação de exceção na cláusula throws. Nesse caso, você pode criar uma exceção desmarcada . Uma exceção desmarcada é qualquer exceção que se estende java.lang.RuntimeException(que é uma subclasse de java.lang.Exception):
Exceções não verificadas geralmente são usadas para indicar um erro do programador, por exemplo, passando um argumento inválido para um método ou tentando violar os limites de um índice de matriz.
A java.lang.Throwableclasse é a raiz de todos os erros e exceções que podem ser lançados no Java. java.lang.Exceptione java.lang.Errorsão as duas subclasses de Throwable. Qualquer coisa que subclasse Throwablepossa ser lançada ou capturada. No entanto, geralmente é uma má prática capturar ou lançar, Errorpois isso é usado para indicar erros internos à JVM que geralmente não podem ser "manipulados" pelo programador (por exemplo OutOfMemoryError). Da mesma forma, você deve evitar capturar Throwable, o que pode resultar em capturar Errors além de Exceptions.
Tecnicamente, qualquer coisa que se estenda Throwablepode ser lançada, mas as exceções geralmente são extensões da Exceptionclasse, para que sejam verificadas exceções (exceto RuntimeException ou classes baseadas nela, que não são verificadas), em oposição ao outro tipo comum de lançamento, Errors que geralmente não são algo projetado para ser manipulado normalmente além dos internos da JVM.
Você também pode tornar as exceções não públicas, mas só pode usá-las no pacote que as define, ao contrário dos pacotes.
No que diz respeito a lançar / capturar exceções personalizadas, ele funciona exatamente como as incorporadas -
RuntimeException estende Exception e não é uma exceção verificada.
Adamski
2
Tecnicamente, qualquer coisa que se estenda Throwablepode ser lançada ; as exceções se estendem Exception. Uma subclasse personalizada de Throwable não seria capturada por um try { ... } catch (Exception e) { ... }bloco.
Andrzej Doyle
Por que as pessoas estão votando esta resposta? Ele contém algumas imprecisões. 1) Você não pode implementar o throwable , pois é uma interface. 2) Qualquer coisa que estenda Throwable NÃO é uma exceção ( Errornão é uma exceção, é um erro). 3) Isso implica que qualquer subclasse de Exception seja verificada, enquanto RuntimeException não. A resposta dada por Adamski é muito mais precisa!
Oxbow_lakes 18/11/2009
Opa - eu quis dizer que jogável não é uma interface, é claro!
Oxbow_lakes 18/11/2009
@oxbow_lakes - a solução ideal seria corrigir as imprecisões, não? De qualquer maneira, eu os corrigi desde que ninguém mais o fez.
Respostas:
Para definir uma exceção verificada, você cria uma subclasse (ou hierarquia de subclasses) de
java.lang.Exception
. Por exemplo:Os métodos que podem potencialmente lançar ou propagar essa exceção devem declará-la:
... e o código que chama esse método deve manipular ou propagar essa exceção (ou ambas):
Você observará no exemplo acima que
IOException
é capturado e mostrado novamente comoFooException
. Essa é uma técnica comum usada para encapsular exceções (geralmente ao implementar uma API).Às vezes, haverá situações em que você não deseja forçar todos os métodos a declarar sua implementação de exceção na cláusula throws. Nesse caso, você pode criar uma exceção desmarcada . Uma exceção desmarcada é qualquer exceção que se estende
java.lang.RuntimeException
(que é uma subclasse dejava.lang.Exception
):Métodos podem lançar ou propagar
FooRuntimeException
exceção sem declará-la; por exemploExceções não verificadas geralmente são usadas para indicar um erro do programador, por exemplo, passando um argumento inválido para um método ou tentando violar os limites de um índice de matriz.
A
java.lang.Throwable
classe é a raiz de todos os erros e exceções que podem ser lançados no Java.java.lang.Exception
ejava.lang.Error
são as duas subclasses deThrowable
. Qualquer coisa que subclasseThrowable
possa ser lançada ou capturada. No entanto, geralmente é uma má prática capturar ou lançar,Error
pois isso é usado para indicar erros internos à JVM que geralmente não podem ser "manipulados" pelo programador (por exemploOutOfMemoryError
). Da mesma forma, você deve evitar capturarThrowable
, o que pode resultar em capturarError
s além deException
s.fonte
Jogue-o como:
Capturar como:
fonte
Para uma exceção verificada:
Tecnicamente, qualquer coisa que se estenda
Throwable
pode ser lançada, mas as exceções geralmente são extensões daException
classe, para que sejam verificadas exceções (exceto RuntimeException ou classes baseadas nela, que não são verificadas), em oposição ao outro tipo comum de lançamento,Error
s que geralmente não são algo projetado para ser manipulado normalmente além dos internos da JVM.Você também pode tornar as exceções não públicas, mas só pode usá-las no pacote que as define, ao contrário dos pacotes.
No que diz respeito a lançar / capturar exceções personalizadas, ele funciona exatamente como as incorporadas -
e pegar via
fonte
Throwable
pode ser lançada ; as exceções se estendemException
. Uma subclasse personalizada de Throwable não seria capturada por umtry { ... } catch (Exception e) { ... }
bloco.Error
não é uma exceção, é um erro). 3) Isso implica que qualquer subclasse de Exception seja verificada, enquanto RuntimeException não. A resposta dada por Adamski é muito mais precisa!