Questão

17 respostas
G

Ai galera, o que imprime nesse programa? Não vale executar antes de responder :slight_smile:

package Exceptions;

public class E1{


	public static void main(String[] args){
		test();
	}

	public static int test(){
		try{
			System.out.println("Entrei");
			return 10;
			System.out.println("Sai");			

		}catch(Exception e){
			e.printStackTrace();
		}finally{
			System.out.println("finally");
		}


	}


}
  1. Entrei, Sai, Finally
  2. Entrei, Finally
  3. Não compila
  4. Entrei , a pilha da excessão,Finally

[]s
Gunnar

17 Respostas

T

Não compila, porque o compilador detecta que a linha 14 é “unreachable” já que a linha anterior é um “return 10;” sem condição nenhuma.

P

o que seria unreachable ?

:oops:

G

pardal_nb:
o que seria unreachable ?

:oops:

inalcançável :slight_smile:

[]s
Gunnar

G

ok…pra dificultar mais então…o que seria impresso se a linha 14 fosse comentada?

[]s
Gunnar

P

everson_z:
Resposta 1

  • Ops, lembrei que é esperado um int… rs, não compila!!!

e ele retorna um int…

G

vou esperar mais um pouco pra ver o que o pessoal responde…
:slight_smile:

[]s
Gunnar

P

e catch lança a exceção uai…rs

não entendi o q vc quis dizer com isso… :slight_smile:

LPJava

nao compila ja que a linha 14 jamais vai ser executada e o compilador nao vai permitir que algo que nunca aconteça seja compilado hehe

anderson.bonavides

Bem na minha resposta seria o famoso Entra primeiro no try{…} e já que não lança nenhuma exeção ele passa pro bloco finally.
Minha resposta está muito obvia portanto sei que o return está complicando tudo… heheh

Então manda logo ai a pegadinha da questão…
=]

P

Se a linha com o return fosse comentada ele não compila pois não tem o return.

//editado

e se não fosse comentada não compila por causa do unreachable.

Se comentar a linha 14 imprime entrei e retorna o 10.

G

Bom

Não compila por causa que a linha 14 causa um unreachable, ou seja, o System.out.println(“Sai”); NUNCA seria executado.

Comentando essa linha também não compila porque é necessário que SEMPRE seja retornado um valor…e o return 10; dentro do try não satisfaz essa condição, já que dentro do catch não retorna nada e não há garantias para o compilador que o return 10; seja executado. Existem várias soluções

  1. colocar return 10; fora do bloco try/catch/finally
  2. lançar um erro como foi proposto anteriormente throw new Error(); Lançar uma Exception() não é possível porque o método precisa declarar que lança uma exceção.

Caso esses problemas fossem resolvidos o programa iria imprimir “Entrei”, encontraria o return 10; , executaria o finally e então imprimiria na tela “finally” e retornaria 10 ao método que chamou.

[]s
Gunnar

everson_z

Resposta 3

Acho que essa é muito facil… ?

everson_z

Resposta 1

  • Ops, lembrei que é esperado um int… rs, não compila!!!
everson_z

pardal_nb:
everson_z:
Resposta 1

  • Ops, lembrei que é esperado um int… rs, não compila!!!

e ele retorna um int…

É verdade :oops:

Mesmo assim não compila!!! rs

A única maneira de deixar o return dentro do try é se o catch lançar um erro :smiley:

everson_z

e catch lança a exceção uai…rs

não entendi o q vc quis dizer com isso… :slight_smile:

Assim,

public static int test() {  
         try{  
             System.out.println("Entrei");  
             return 10;  
             //System.out.println("Sai");            
   
         }catch(Exception e){  
             throw new Error();
         }finally{  
             System.out.println("finally");  
         }  
   
     }
everson_z

paulohrl:
Se a linha com o return fosse comentada ele não compila pois não tem o return.

//editado

e se não fosse comentada não compila por causa do unreachable.

Se comentar a linha 14 imprime entrei e retorna o 10.

O finally sempre vai ser executado se compilar e não gerar erros na execução

everson_z

Muito Facil essa

Criado 28 de novembro de 2007
Ultima resposta 28 de nov. de 2007
Respostas 17
Participantes 7