1. throw
operador
Quando uma exceção é capturada por um catch
bloco, e até que seja lançada para a máquina Java, é apenas um objeto que herda Exception
(ou melhor, Throwable
). O próprio objeto de exceção não possui propriedades mágicas.
Toda a lógica de como as exceções funcionam é apenas uma maneira especial pela qual a máquina Java se comporta quando uma exceção é lançada para ela.
Você sempre pode relançar uma exceção capturada para a máquina Java. Para fazer isso, você precisa usar o throw
operador:
throw exception;
Exemplo:
Código | Saída do console |
---|---|
|
|
Nesse código, capturamos uma exceção, exibimos uma mensagem sobre ela na tela e a lançamos novamente.
Uma exceção relançada não pode ser capturada por outros catch
blocos no mesmo try
bloco.
2. Suas exceções
A propósito, você mesmo pode criar um objeto de exceção: é apenas um objeto cujo tipo é Exception
ou uma classe que o herda. E jogá-lo.
É mais fácil do que parece. Exemplo:
Código | Saída do console |
---|---|
|
|
No exemplo acima, criamos um novo objeto de exceção cujo tipo é RuntimeException
e imediatamente o lançamos usando o throw
operador.
Ele será capturado imediatamente pelo catch
bloco, pois RuntimeException herda Exception
. O catch (Exception except)
código captura objetos de exceção de todas as classes que herdam a Exception
classe.
3. finally
palavra-chave
Outro ponto importante. Às vezes, um programador precisa executar alguma ação, independentemente de ter ocorrido uma exceção no código. Por exemplo, suponha que abrimos um arquivo para gravação. O arquivo aberto deve ser fechado chamando close()
.
try
{
// Code where an exception might occur
}
catch(ExceptionType name)
{
// Exception handling code
}
finally
{
// Code that must executed no matter what happens
}
Para executar essas ações obrigatórias, outro tipo de bloco ( finally
) foi adicionado ao try-catch
constructo, criando assim o try-catch-finally
constructo. Se parece com isso:
Exemplo:
FileInputStream source = null;
try
{
source = new FileInputStream("c:\\note.txt");
source.read();
}
catch(Exception except)
{
System.out.println("Caught the exception");
throw except;
}
finally
{
if (source != null)
source.close();
}
O código no finally
bloco será executado em qualquer caso, independentemente de haver uma exceção. Mesmo que uma exceção seja lançada e não capturada, o finally
bloco ainda será executado.
A propósito, se você não deseja capturar uma exceção, mas precisa de um finally
bloco, use a notação abreviada para a try-catch-finally
construção: um try-finally
bloco. Parece algo assim:
try
{
// Code where an exception might occur
}
finally
{
// Code that must executed no matter what happens
}
GO TO FULL VERSION