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.
Eu e mais alguns colegas de trabalho iniciamos um grupo de estudo para a certificação SCJP. Postaremos aqui todas questões estudadas, suas respectivas respostas e nossos comentários sobre elas. Espero que seja tão útil para quem lê, quanto é para nós...
quarta-feira, 4 de agosto de 2010
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.
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.
Marcadores:
Enum
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.
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.
Marcadores:
Controle de Fluxo
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.
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.
Marcadores:
Compilador,
Variáveis
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.
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.
Marcadores:
Classes Nativas,
Pegadinhas,
Tipos
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.
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.
Marcadores:
Heranç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.
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.
Marcadores:
Classes Nativas,
Pegadinhas
Assinar:
Postagens (Atom)