Questão sobre assertivas

public class Assertion { static int i =10; public static void main(String args []){ i *= 2; try { assert (i<10): i = 5; } catch (AssertionError exception) {} System.out.println("Valor é "+i); } public static boolean isValid(){ i=i*2; return false; } }

pessoal a saída do código acima será “Valor é 20”, não entendi pq 20 alguém explica :?:

outra coisa aqui: assert (i<10): i = 5;
quando i vai receber 5, quando for true, false ou sempre :?:

Javabuntu,

Vou dar minha opinião sobre a sua dúvida.

[quote=Javabuntu] public class Assertion { static int i =10; public static void main(String args []){ i *= 2; try { assert (i<10): i = 5; } catch (AssertionError exception) {} System.out.println("Valor é "+i); } public static boolean isValid(){ i=i*2; return false; } }

pessoal a saída do código acima será “Valor é 20”, não entendi pq 20 alguém explica :?:
[/quote]
Porque na linha 4 é feita a multiplicação e por isso o valor é 20. :mrgreen:

[quote]
outra coisa aqui: assert (i<10): i = 5;
quando i vai receber 5, quando for true, false ou sempre :?: [/quote]

Quando a expressão for falsa;
Quando você executar a sua classe com a opção -ea == -enabledassertion ocorrerá uma AssertionError
Dê uma procurada sobre essa opção :thumbup: .

Lembrando que não é recomendável utilizar as asserts em produção, apenas em testes.

mas minha dúvida principal é porque o valor não foi pra 40?

public static boolean isValid(){ i=i*2; return false; }

quando ele chamar este método teoricamente iria pra 40 e depois lancar o erro, pois a multiplicação já tinha ocorrido, não entendi porque não vai pra 40?

Javabuntu

Como você quer que o valor vá para 40 se nenhum método isValid() no main foi chamado?

Você deve verificar se o código foi compilado com assertions habilida ou desabilitada, deve observar também se o código foi executado com assertions habilitada ou desabilitada. Isso pode pesar na resposta.

Quando o codigo chegar na linha 6 ele verificará se o resultado é true ou false, caso seja false um AssertionError é lançado e a resposta será: Valor é 20.
Sobre a atribuição do valor i = 5 você deve verificar pq não ocorreu. Uma dica é jogar no eclipse e procurar compilar.

Qualquer coisa é só perguntar.

at+

[quote=anderson.bonavides] Javabuntu

Como você quer que o valor vá para 40 se nenhum método isValid() no main foi chamado?

Você deve verificar se o código foi compilado com assertions habilida ou desabilitada, deve observar também se o código foi executado com assertions habilitada ou desabilitada. Isso pode pesar na resposta.

Quando o codigo chegar na linha 6 ele verificará se o resultado é true ou false, caso seja false um AssertionError é lançado e a resposta será: Valor é 20.
Sobre a atribuição do valor i = 5 você deve verificar pq não ocorreu. Uma dica é jogar no eclipse e procurar compilar.

Qualquer coisa é só perguntar.

at+[/quote]

ops… eu colei o código depois realizar uns testes, o método é chamado aqui:

tinha colocado errado pois tinha feito testes:

é aqui que é chamado o método, e as assertivas estão habilitadas em execução…
porque eu tinha imaginado o seguinte:

ele chama o método e o valor que é 20 vai para 40 e depois que retornou false lança o AssertionError, mas não… mas no caso a assertion está validando um método público o que é algo inadequado…pode ser isso…

mas vlw…