quarta-feira, 4 de agosto de 2010

Questão 11 - Exception

Classe TestException:
1. public class TestException extends Exception {}


    Classe A:
1. public class A {
2.   public String sayHello(String name) throws TestException {
3.     if(name == null) {
4.       throw new TestException();
5.     }
6.     return “Hello ”+ name;
7.   }
8. }

Um programador quer usar este código em uma aplicação:
55. A a = new A();
56. System.out.println(a.sayHello(“John”));

Quais as alternativas corretas relacionadas a essa implementação?
A. Classe A não compilará.
B. Linha 56 pode disparar a exceção TestException que não foi checada.
C. Linha 55 pode disparar a exceção TestException que não foi checada.
D. Linha 56 compila se adicionar TestException na declaração do método que apresenta esse código.
E. Linha 56 compila se estiver dentro de um bloco try-catch, em que a exceção TestException é tratada.


A Classe A não apresenta erros apesar de ter um método que aborda a exceção TestException. Esta última não apresenta implementação no corpo da classe, mas possui uma codificação herdada de Exception. E no código da aplicação (linhas 55 e 56) não há possibilidade de se disparar a exceção porque a mesma não foi checada no código. Assim as alternativas A, B e C são descartadas, enquanto que as demais opções são mantidas e estão corretas.
As alternativas D e E apresentam as duas opções possíveis para viabilizar a execução do código da aplicação. Na opção D, menciona-se que indicar o tratamento da exceção TesteException no método que chama sayHello() permite a execução do código (mesmo que seja o método principal). E na opção E, destaca-se o tratamento desta mesma exceção inserindo o código da questão em um bloco try-catch (ou caso seja necessário, um bloco try-catch-finally) para resolver o problema.
Alternativas corretas: D, E.

Questão 10 - ENUM

De acordo com o código abaixo:
21. public class Ball {
22.  public enum Color { RED, GREEN, BLUE };
23.   public void foo() {
24.     // insert code here
25.     { System.out.println(c); }
26.   }
27. }


Que código inserido na linha 24 causa ao método “foo” imprimir RED, GREEN e BLUE?
A. for(Color c : Color.values())
B. for(Color c = RED; c <= BLUE; c++)
C. for(Color c; c.hasNext() ; c.next())
D. for(Color c = Color[0]; c <= Color[2]; c++)
E. for(Color c = Color.RED; c <= Color.BLUE; c++) 


Operadores de incremento e comparação não podem ser aplicados a tipos de enumeração, o que inviabiliza a execução dos códigos presentes nas alternativas B, D e E. A opção C está incorreta já que em um enum não há implementação dos métodos hasNext() e next(). E ainda, os elementos de um enum não podem ser acessados por índices, mas sim pela notação “.” (dot notation). Concluindo, apenas a opção A possui uma codificação correta usando uma alternativa criada desde a versão 1.5 da linguagem para acesso a todos os elementos de uma coleção ou enumeração.
Alternativa correta: A.

Questão 9 - For

Qual dos itens são os valores finais de ‘a´ e ‘b´ que surgirão no corpo do loop for ao ser executado?
for(a=1, b=4; a < b; a++, b--){ }


A. a=1, b=2
B. a=2, b=3
C. a=3, b=4
D. Erro de compilação.


A declaração do loop for possuir três partes principais, além do corpo do loop: declaração e inicialização de variáveis, teste condicional e expressão de iteração. Cada uma dessas partes é separada por um ponto e vírgula. No teste condicional só pode ter uma expressão de teste e nas demais partes pode ser adicionado mais de uma expressão. Neste caso, o valor final de a será 2 e de b será 3 (a menor que b será satisfeita). Alternativa correta: B.


Questão 8 - Declaração de variáveis

Dado:
15.String  #name = “Jane Doe”;
16. int  $age=24;
17. Double  _height = 123.5;
18. double  ~temp = 37.5;


 
Quais as alternativas corretas?
A. Linha 15 não compilará.
B. Linha 16 não compilará.
C. Linha 17 não compilará.
D. Linha 18 não compilará.


Os identificadores devem começar com uma letra, um cifrão ($) ou um caractere de conexão (como underscore ‘_´). Estes não podem começar com um número, mas em seguida ao primeiro caractere, os identificadores podem conter qualquer combinação de letras, caracteres de moedas, caracteres de conexão ou números. Por conta destas características, as linhas 15 e 18 estão sintaticamente incorretas. Lembrando ainda que não é possível usar uma palavra-chave Java como identificador, com isso apenas as alternativas A e D estão corretas.
Alternativas corretas: A, D.

Questão 7 - Inicialização de vetores

Considere as seguintes linhas de código:
float[] x = new float[10];
Float[] y = new Float[10];
Depois da execução, quais das expressões a seguir são verdadeiras?

A. x[9] == 0
B. x[10] == 0.0f
C. y[9] == 0.0f
D. x.length == 10
E. y.length() == 10
F. y[9] == null


O compilador inicializa todos os elementos do array x para 0.0f, que é o elemento default para tipo float. Todos os elementos do array y são inicializados para null, desde que null é o valor default para tipos de referência de objetos. Na alternativa A, 0 é promovido a 0.0f durante a comparação, enquanto que x[9] é o último elemento do array. Alternativa B é incorreta ao tentar acessar x[10], o que resulta em disparar uma exceção. A alternativa F é correta e C é incorreta porque y[9] é null e não pode ser comparada a 0.0f. Todos os arrays têm uma variável de instância nomeada length, que retorna o número de elementos no array. Dessa forma D está correta, enquanto E está incorreta visto que não há nenhum método chamado length().
Alternativas corretas: A, D, F.




segunda-feira, 2 de agosto de 2010

Questão 6 - Herança

class Alpha { int over = 1; }
class Beta extends Alpha { int over = 2; }
class Gamma extends Beta {
  int over = 3;
  public stativ void main(String[] args) {
    new Gamma().go();
  }


  void go() {
   Beta b = new Gamma();
   Alpha a = new Gamma();
   System.out.println(super.over + " " b.over + " " + a.over);
  }
}


Qual o resultado?
   A. 2 2 1
   B. 3 2 1
   C. 2 3 3 
   D. 3 3 3
   E. Não compila


Segue a dica, sempre usar como referência o tipo e não a instância. Super, refere-se a classe pai, neste caso, Beta é super de Gamma. b é do tipo Beta e a é do tipo Alpha, assim o resultado certo é Beta, Beta e Alpha (2 2 1), letra A.

Questão 5 - Classes Nativas

String d = "beekeeper";
d.substring(1,7);
d = "w" + d;
d.insert(3, "bee");

System.out.println(d);

Qual o resultado?
   A. weekbeeeep
   B. wbeekeeper
   C. wbeekeepe
   D. weekeeper
   E. Falha de compilação
   F. RunTime Exception


Tentando digitar o código no eclipse, e vimos que o objeto String não possui o método insert, assim, não compila.