Qual é o tipo de exception poderia gerar?

public static double sacar2(double valor) {//ao chamar o método deverá passar um valor if(valor <= 0){ throw new NumberFormatException("Não pode ser 0 ou negativo!"); } else{ saldo -= valor; } return valor; }

poderia ser IllegalArgumentException? Qual outra poderia ser?

Bem ao meu ver a unica coisa que poderia acontecer é ser passada um caracter ai.

Abraços

Eu usaria um IllegalArgumentException, pois um dos parametros de entrada está errado/invalido. Se fosse algo que pudesse alterar o estado dos meus objetos seria um IllegalStateException. Para os casos de parametros obrigatórios que estão nulos eu uso NullPointerException.

eu faria assim…

/** * Saca da conta e retona o saldo. * * {@link NullPointerException} se for passado o valor do saque nulo. * * {@link IllegalArgumentException} se for passado o valor do saque negativo. * * {@linl ExcetionParticular} se o valor do saque for maior que o valor do saldo. * * @param valueToDraw valor a ser sacado. * @return valor do saldo apos o saque. */ public Double drawAndGetBalance(final Double valueToDraw) { if (valueToDraw == null) { throw new NullPointerException("É necessario informar o valor a ser sacado."); } if (valueToDraw.doubleValue() <= 0) { throw new IllegalArgumentException("O valor do saque deve ser possitivo."); } synchronized (this.balance) { if (this.balance.doubleValue() < valueToDraw.doubleValue()) { // Alguma exception propria da camada de negocio informando que 'O valor do saque é maior que o // saldo'... } return this.balance = this.balance - valueToDraw; } }

[quote=andrejusti]eu faria assim…

/** * Saca da conta e retona o saldo. * * {@link NullPointerException} se for passado o valor do saque nulo. * * {@link IllegalArgumentException} se for passado o valor do saque negativo. * * {@linl ExcetionParticular} se o valor do saque for maior que o valor do saldo. * * @param valueToDraw valor a ser sacado. * @return valor do saldo apos o saque. */ public Double drawAndGetBalance(final Double valueToDraw) { if (valueToDraw == null) { throw new NullPointerException("É necessario informar o valor a ser sacado."); } if (valueToDraw.doubleValue() <= 0) { throw new IllegalArgumentException("O valor do saque deve ser possitivo."); } synchronized (this.balance) { if (this.balance.doubleValue() < valueToDraw.doubleValue()) { // Alguma exception propria da camada de negocio informando que 'O valor do saque é maior que o // saldo'... } return this.balance = this.balance - valueToDraw; } }

[/quote]

Ótima implementação, mas acho que esse synchronized não esta apropriado, neste momento return this.balance = this.balance - valueToDraw; antes de retornar outra thread poderia entrar no drawAndGetBalance, pois a trava usada é a do antigo this.balance e não do novo this.balance, logo após o método retorna um valor diferente ao chamador.

Ou então vc poderia criar usa própria exceção. Com isso, o seu sistema poderia trata-la como vc desejar.

throw new ValorInvalido("Favor digitar apenas número, e maior do que zero") 

Lembre-se, ao utilizar um sistema que tenha um throw em runtime vc está utilizando a chamada programação Defensiva. Tem suas vantagens mas uma grande desvatagem é a poluição visual que seu código trará uma vez que para cada método chamado vc terá vários try/catch envolvido.

Na minha opinião não é necessário o uso de classes wrapper nesse caso, um tipo primitivo para o double já é suficiente, pois evitaria uma verificação a mais (valor == null).

A exceção mais apropriada é a IllegalArgumentException, não esqueçe de declarar um throws para ela pois ela é de runtime e não necessita de um tratamento obrigatório, porém é sempre bom deixar quem vai chamar o método ciente que algo pode acontecer.

Até mais.

[quote=jgavazzisp]Na minha opinião não é necessário o uso de classes wrapper nesse caso, um tipo primitivo para o double já é suficiente, pois evitaria uma verificação a mais (valor == null).

A exceção mais apropriada é a IllegalArgumentException, não esqueçe de declarar um throws para ela pois ela é de runtime e não necessita de um tratamento obrigatório, porém é sempre bom deixar quem vai chamar o método ciente que algo pode acontecer.

Até mais.[/quote]

Concordo em gênero, número de “degrau”…

Oi,

Eu criaria uma exceção própria e a tratava.

Tchauzin!

[quote=lina]Oi,

Eu criaria uma exceção própria e a tratava.

Tchauzin![/quote]
Eu tambem faria isso, alguma coisa como ValorInválidoException :idea:

Por que você colocaria como parâmetro de entrada um Double ao invés do tipo primitivo double?
Se você não vai permitir nulos, então fazer isso não faz o menor sentido.