SóProvas


ID
748063
Banca
CESGRANRIO
Órgão
Petrobras
Ano
2012
Provas
Disciplina
Programação
Assuntos

    Sejam as seguintes classes Java:

public class CA {
            int val=0;
            public void op1(int x)
            {
                      val+=x;
            }
            public void op2(int x,int y)
            {
                      val-=x+y;
            }
                      int getVal()
            {
                      return val;
            }
}
public class CB extends CA{
          public void op1(int x)
            {
                      val-=x;
            }
          public void op2(int x,int y)
            {
            try
            {
                     val+=x/y;
            }
            catch(Exception e)
            {
                      val=10;
            }
            finally
            {
                      val++;
            }
      }
}
public class Main {
          public static void main(String[] args) {
                      CA obj=new CB();
                      obj.op1(10);
                      obj.op2(5,8);
                      System.out.printf(“%d\n”,obj.getVal());
            }
}



O que será exibido no console quando for executado o método main ( ) ?

   

Alternativas
Comentários
  • Na questão não é preciso olhar para a classe pai, a não ser na hora de pegar o valor inicial da variavel val.

    A partir daí basta olhar o código ca classe CB.

    em CB.opt1(10) a variável val terá seu valor alterado para -10.

    em CB.opt2(5,8) fica assim:

         val += x/y; (5/8 vai dar zero) como val é inteiro a parte decimal será ignorada. isso não gera erro) - dessa forma val continua como -10.
         o finally SEMPRE é executado: entao val = -9

    Resposta -9!
  • Discordo quando o Daniel diz que o finally é sempre executado. Há uma exceção. Quando existe o comando System.exit(), o finally não é executado.
  • A respeito do bloco finally, ele SEMPRE será chamado, independente se o bloco try ao qual ele faz parte lançar ou não uma exceção. No entanto, existe mesmo uma exceção que seria caso o bloco try emitir um System.exit(). 

    Outro ponto que devemos estar atentos é ao fato de que não é porque finally ser sempre chamado que ele sempre será concluído. O próprio bloco finally pode lançar uma exceção ou chamar System.exit().