quarta-feira, 4 de agosto de 2010

Questão 19 - Declaração de Classes

Quais dos seguintes itens são permitidos?

A. public abstract void m1(){}
B. protected native int m1();
C. static final void m1(){}


O item A não é permitido porque métodos abstratos não possibilitam a definição de um corpo de método. Nessa situação, a declaração o método deve ser finalizada com ; ao invés de {}. As alternativas B e C estão corretas sintaticamente: métodos nativos não possuem um corpo e métodos estáticos podem ser finais (assumir a expressão final em sua declaração).
Alternativas corretas: B, C.

Questão 18 - Enum complexo

Assumindo o código abaixo:


31. public enum Title {
32.  MR(“Mr.”), MRS(“Mrs.”), MS(“Ms.”);
33.   private final String title;
34.   private Title(String t) { title = t; }
35.   public String format(String last, String first) {
36.     return title + “ ” + first + “ ” + last;
37.   }
38.   public static void main(String[] args) {
39.     System.out.println(Title.MR.format(”Doe”, “John”));
40.   }
41. }


Qual será o resultado?


A. Mr. John Doe.
B. Uma exceção é disparada em tempo de execução.
C. Falha de compilação provocada por erro na linha 32.
D. Falha de compilação provocada por erro na linha 36.
E. Falha de compilação provocada por erro na linha 39.


O enum da questão terá comportamento de uma classe, com um método principal e seus atributos e comportamentos. Na linha 32 do enum há a listagem dos itens enumerados (atributo): MR, MRS e MS. Neste caso, cada atributo é definido como um objeto de Title com sua respectiva entrada no construtor (o que já define o valor do atributo final title). Como isso é possível, as alternativas C e D serão descartadas.
Por conta dessa inicialização dos atributos, quando um destes for chamado no método principal tem-se então uma instância de Title que pode executar qualquer método que foi implementado no enum. Assim, pode ser chamado o método format na linha 39, já que MR está associado ao construtor MR(“Mr.”), que associa “Mr.” ao atributo title. Essa explicação inviabiliza a opção E. Como os trechos de código de maior dúvida já foram explanados anteriormente, nenhuma execução deve ser disparada ao executar este código. Conclui-se que a opção B se apresenta errônea e apenas a alternativa A está correta.
Alternativa correta: A.

Questão 18 -

Assumindo o código abaixo:


31. public enum Title {
32.  MR(“Mr.”), MRS(“Mrs.”), MS(“Ms.”);
33.   private final String title;
34.   private Title(String t) { title = t; }
35.   public String format(String last, String first) {
36.     return title + “ ” + first + “ ” + last;
37.   }
38.   public static void main(String[] args) {
39.     System.out.println(Title.MR.format(”Doe”, “John”));
40.   }
41. }

Qual será o resultado?

A. Mr. John Doe.
B. Uma exceção é disparada em tempo de execução.
C. Falha de compilação provocada por erro na linha 32.
D. Falha de compilação provocada por erro na linha 36.
E. Falha de compilação provocada por erro na linha 39.


O enum da questão terá comportamento de uma classe, com um método principal e seus atributos e comportamentos. Na linha 32 do enum há a listagem dos itens enumerados (atributo): MR, MRS e MS. Neste caso, cada atributo é definido como um objeto de Title com sua respectiva entrada no construtor (o que já define o valor do atributo final title). Como isso é possível, as alternativas C e D serão descartadas.
Por conta dessa inicialização dos atributos, quando um destes for chamado no método principal tem-se então uma instância de Title que pode executar qualquer método que foi implementado no enum. Assim, pode ser chamado o método format na linha 39, já que MR está associado ao construtor MR(“Mr.”), que associa “Mr.” ao atributo title. Essa explicação inviabiliza a opção E. Como os trechos de código de maior dúvida já foram explanados anteriormente, nenhuma execução deve ser disparada ao executar este código. Conclui-se que a opção B se apresenta errônea e apenas a alternativa A está correta.
Alternativa correta: A.

Questão 17 - float primitivo

Qual o resultado quando o seguinte fragmento de código for executado?
int a = 8;
int b = 3;
float f = a++/b--;
System.out.println(f);


A. 3.0
B. 4.5
C. 2.0
D. 2.6 


Caso o operador incremento/decremento se apresentasse anteriormente à a/b, o valor de memória já seria passado às variáveis resultando no valor 3.0 (alternativa A). Ainda que os operadores ++ e -- tenham maior procedência que /, não há conflito entre as operações neste exemplo. Portanto, a operação 8/3 resulta em 2.0 para f do tipo float, depois que a é incrementado para 9 e b é decrementado para 2 (alternativa C). Os demais valores não são possíveis de alcançar com as operações apresentadas.
Alternativa correta: C.

Questão 16 - Comparação de objetos

O que acontece ao tentar compilar e executar o seguinte código?
public class TestEqual
{
  public static void main(String args[])
  {
    Integer i = new Integer(7);
    Long l = new Long(7);
    System.out.println(l.equals(i));
  }
}

A. imprimirá - true
B. imprimirá - false
C. erro de compilação


O código imprimirá false. Para qualquer classe Wrapper padrão, x.equals(y) sempre retorna false se x e y são objetos de classes diferentes. Isso acontece até mesmo para o exemplo da questão, em que ambos os objetos carregam o mesmo valor (o inteiro 7).
Alternativa correta: B.

Questão 15 - Classe File

Assumindo o seguinte código:


70. class MakeFile {
71.  public static void main(String[] args) {
72.     try {
73.       File directory = new File(“d”);
74.       File file = new File(directory, “f”);
75.       if(!file.exists()) {
76.         file.createNewFile();
77.       }
78.     } catch (IOException e) {
79.       e.printStackTrace
80.     }
81.   }
82. }

O diretório atual não contém um diretório nomeado “d”. Quais alternativas a seguir podem ser consideradas corretas?

A. Linha 76 nunca é executada.
B. Uma exceção é disparada em tempo de execução.
C. Linha 73 cria um objeto File nomeado “d”.
D. Linha 74 cria um objeto File nomeado “f”.
E. Linha 73 cria um diretório nomeado “d” no sistema de arquivos.
F. Linha 76 cria um diretório nomeado “d” e um arquivo “f” dentro do sistema de arquivos.
G. Linha 74 cria um arquivo nomeado “f” dentro do diretório nomeado “d” no sistema de arquivos.


No enunciado da questão é informado que não há um diretório “d” criado no diretório atual do programa. Com essa informação, a alternativa G já pode ser descartada visto que a aplicação só está acessando o diretório atual (pelo que é apontado nas instanciações dos objetos de File) e não há diretório “d” criado anteriormente. E este mesmo diretório não pode ser criado por esse programa, nem na instanciação do objeto diretorio, nem no comando da linha 76. Nessa situação, somente seria possível a criação de um arquivo (neste caso o que é referenciado pelo objeto file), caso o diretório “d” já existisse. Essa última informação inviabiliza as alternativas E e F.
Mesmo não existindo o diretório “d” e o arquivo “f”, é possível instanciar os objetos directory e file. O único problema ocorrerá quando se tenta acessar o arquivo físico apontado por esses objetos. Esse momento acontece na execução da linha 76 (criação de novo arquivo), em que não há acesso ao arquivo real e dispara-se uma exceção em tempo de execução. Dessa maneira, a alternativa A se mostra incorreta enquanto B se apresenta como uma das alternativas corretas. As demais são as opções C e D, que não provocam erros no programa.
Alternativas corretas: B, C, D.

Questão 14 - Métodos de Thread

Qual dos itens são métodos estáticos da classe Thread?


A. sleep
B. yield
C. wait
D. notify


Em sleep() e yield() (alternativas A e B) temos a descrição de métodos estáticos da classe Thread que atuam na thread de execução atual. Os métodos wait() e notify() são oriundos da classe Object, e não da classe Thread. Portanto, as alternativas C e D são incorretas.
Alternativas corretas: A, B.