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 :?:
[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?
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.
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…