01 /** Testando...
02 tratamento de exceção com todos os elementos (try catch finally).
03 O que motivou este teste é verificar que elementos são executados mesmo
04 Qual a ordem de execução quando ocorre exceção e finally não tem return?
05 Neste código, o que vem depois do tratamento não é executado por causa
06 do return dentro do try.
07 Este é curioso - quando lança a exceção, executa o catch, antes do return salta para o finally, salta de volta para o finally e executa o return do catch.
08 Quando não lança, executa o finally e continua depois do try...
09
10 Para que serve finally?
11 O bloco finally existe para agregar todas as instruções que "precisam ser executadas para encerrar o método limpamente". Em geral contém comandos que liberam recursos compartilhados, por exemplo, fecham arquivos, pipes, sockets, liberam acesso a variáveis compartilhadas, ...
12
13 um exemplo do que acontece quando isso não é feito direito:
14 Quando estamos editando um arquivo armazenado num pendrive e o editor aborta com o arquivo aberto, em geral não é possÃvel ejetar o pendrive. Explicação: o funcionamento normal do SO não permite ejetar o pendrive enquanto o arquivo estiver em uso - isso evita perda de dados. Quando abrimos o arquivo no editor de texto, este informa ao sistema operacional que o arquivo está em uso. Quando o editor aborta, não informa ao sistema operacional para fechar (e liberar) o arquivo, logo para o SO, o arquivo continua em uso. O que vemos é o editor fechado e o pendrive que não ejeta.
15 */
16 public class DivZero6 {
17 public static void main (String[] args) {
18 int a, b;
19 a=5;
20 b=0;
21 try {
22 a=a/b;
23 System.out.println ("depois do erro, dentro do try.");
24 } catch (Exception e) {
25 System.out.println ("catch " + e.getMessage());
26 return;
27 } finally {
28 System.out.println ("finally");
29 }
30 System.out.println ("continuou...depois do try, fora do catch e do finally");
31 }
32 }
|
Nenhum comentário:
Postar um comentário