++++ 1 dúvida!

Boa tarde!!!
Gostaria que alguém me ajudasse a entender este outro algoritmo!!!
No meu entender haveria de imprimir ( try , finally ) mas acabou imprimindo ( try , finally)…
acho que tem haver com este comando:
throw new Exception(); // mas não sei bem o seu significado?

public class Teste {
   public static void main( String args[] ) {
      boolean b = true;
      try {
         if(b)
            throw new Exception();  // O que significa este comando??????
         System.out.print( "try " );
      } catch( Exception e ) {
         System.out.print( "catch " );
      } finally {
         System.out.println( "finally" );
      }
   }
}

Este código vai imprimir “catch, finally” porque no bloco try vc dispara uma exceção. Esta exceção vai ser capturada pelo bloco catch, executando o que tem em seu corpo (imprimindo “catch”). E o bloco finally é sempre executado, independentemente dele ter lançado ou não a exceção, portanto, imprime “finally”. A impressão de “try” só ocorreira se a variável b fosse falsa.

O guilhermeleite esta correto !!! :!:

ate agora n entendi o try{} catch{}! como usar alguem ai pode dar uma ajuda… pq o deitel n foi claro na explicacao…

vc coloca um bloco try catch quando o que está dentro dele pode lançar uma excessão.
só vai passar pelo catch se o que estiver dentro do try lançar a excessão.

Ex:

boolean b = true;
try{
  if(b){
     throw new Exception();
  }
}catch(Exception e){
   e.printStackTrace();
}finally{
   System.out.println("Finally");
}

Nesse exemplo, se o b for true, eu “chamo” a excessão. Nesse momento, o código “pula” p/ catch e tudo o q tiver dentro try depois do “throw new Exeption” não vai ser executado. Porém, independente de entrar ou não no catch, o que estiver dentro de “finally” vai ser executado.

[quote=info_god]Lembrando que se eu fizer isto:

[code] public class Teste {
public static void main( String args[] ) {
boolean b = true;
try {
if(b)
throw new Exception(); // O que significa este comando???
System.out.print( "try " );
} catch( Exception e ) {
System.out.print( "catch " );

       System.exit(0);
   } finally {
      System.out.println( "finally" );
   }
}

}[/code]

Ele não vai entrar no bloco finally e vai finalizar a aplicação.[/quote]

A linha

       System.exit(0);

simplesmente diz para JVM: “PARA TUDO! PARA TUDO AGORA!!!” :stuck_out_tongue:

Lembrando que se eu fizer isto:

[code] public class Teste {
public static void main( String args[] ) {
boolean b = true;
try {
if(b)
throw new Exception(); // O que significa este comando???
System.out.print( "try " );
} catch( Exception e ) {
System.out.print( "catch " );

       System.exit(0);
   } finally {
      System.out.println( "finally" );
   }
}

}[/code]

Ele não vai entrar no bloco finally e vai finalizar a aplicação.