23.int z=5;
24.
25. public void stuff1(int x) {
26. assert (x> 0);
27. switch(x) {
28. case 2: x= 3;
29. default: assert false; } }
30.
31. private void stuff2(int y) { assert (y < 0); }
32.
33. private void stuff3() { assert (stuff4O); }
34.
35. private boolean stuff4() { z = 6; return false; }
Which is true?
A. All of the assert statements are used appropriately.
B. Only the assert statement on line 31 is used appropriately.
C. The assert statements on lines 29 and 31 are used appropriately.
D. The assert statements on lines 26 and 29 are used appropriately.
E. The assert statements on lines 29 and 33 are used appropriately.
F. The assert statements on lines 29, 31, and 33 are used
appropriately.
G. The assert statements on lines 26, 29, and 31 are used
appropriately.
Resposta certa do testkiller falou que seria a C, mais eu discordo com isso, olhe o que esta escrito no livro da kathy.
Não use assertivas, mesmo em métodos públicos, para procurar instruções case que sabe que nunca ocorrerão
Isso pode incluir blocos de códigos que provavelmente nunca serão alcançados, como bloco default de uma instrução switch.
é apropriado vc usar a expressão “assert false” quando vc tem certeza q o programa nao devia ter chegado ai …
é inapropriado vc realizar uma avaliação … caso o programa chegue à linha q não deveria ter chegado …
mas é apropriado vc colocar o false direto … assert false … q é o q tah colocando na pergunta XD
se tu tah usando o livro da scjp 5 portugues … tu vai encontrar na pagina 222 bem no rodapé … um exemplo igual
dizendo q não pode executar um teste … e sim afirmar q será false
Acho que entendi, então ja teria essa maldade na cabeça? é apropriado pelo fato de quando o case chegar até default seria o caso de todos os testes case darem errado?, ou seja em algum momento que isso acontecer, se acontecer, se chegar até default ira lançar o AssertionError pelo assert já ser false.
Então quer dizer que só pq ele disse
C. The assert statements on lines 29 and 31 are used [size=18][color=red]appropriately[/color][/size].
mesmo a linha 26
26. assert (x> 0);
compilando e rodando normalmente, por causa do [size=18][color=red]appropriately[/color][/size] a resposta certa é a C ?
Na linha 26 a assertiva NAO está sendo usada apropriadamente, porque está avaliando o valor de uma variavel recebida como PARAMETRO, de um método PUBLIC
quando a variavel é um paramentro de um metodo public, não convem avaliar com assertiva, e sim lançar IllegalArgumentException
Observe que na linha 31 ESTA SIM sendo usada apropriadamente, pois ele está avaliando uma variavel q foi recebida como parametro, porem o metodo é PRIVATE, ai sim é apropriado avaliar com a assertva e não lançar IllegalArgumentException.
Na linha 26 a assertiva NAO está sendo usada apropriadamente, porque está avaliando o valor de uma variavel recebida como PARAMETRO, de um método PUBLIC
quando a variavel é um paramentro de um metodo public, não convem avaliar com assertiva, e sim lançar IllegalArgumentException
Observe que na linha 31 ESTA SIM sendo usada apropriadamente, pois ele está avaliando uma variavel q foi recebida como parametro, porem o metodo é PRIVATE, ai sim é apropriado avaliar com a assertva e não lançar IllegalArgumentException.[/quote]
a letra é a propriada, segundo a resposta do killer está correta, e tem questoes bem semelhante do o assunto, parece que o killer copiou de la… a questao é que o default nunca será executado nessa estrutura a partir do momento que vc tem o valor de x, agora se vc nao tem o valor de x, fosse digitado pelo usuario, nao seria apropriado, ja que assert nao pode causa efeitos colaterais, isso é outra regra tb importante.