bom pessoal
sei que a IllegalExceptionArgument pode receber string como parametro mas pode receber double tb ?
Que tipo de parametros pode receber a IllegalExceptionArgument
6 Respostas
public class ValorinvalidoExcecao extends IllegalArgumentException {
public ValorinvalidoExcecao(double valor){
System.out.println("Valor negativo invalido: " + valor);
}
}
vejam de quem minha classe herda. IllegalArgumentException recebe string como parametro. Só que eu preciso passar double como vcs veem ai no construtor.
Se IllegalArgumentException só aceita o parametro string entao qualtipo de exceçao eu uso ?
vejam a minha classe conta
package br.com.empresa.banco.conta;
public abstract class Conta {
protected double saldo;
public double getSaldo(){return this.saldo;}
public void atualiza(double selic){this.saldo = this.saldo + this.saldo * selic;}
public void deposita(double valor){
if (valor < 0){
throw new IllegalArgumentException("Deposite um valor positivo!");
}
else { this.saldo += valor; }
}
public void saca(double valor){
if (this.saldo < valor){
throw new IllegalArgumentException("Saldo insuficiente para sacar este valor!");
}
if (valor < 0){
throw new ValorinvalidoExcecao( valor );
} else { this.saldo = valor; }
}
}
abaixo vejam o main
package br.com.empresa.banco;
import br.com.empresa.banco.conta.ContaCorrente;
public class TestaDeposita {
public static void main(String[] args) {
ContaCorrente contaTeste = new ContaCorrente();
System.out.println(contaTeste.getSaldo());
try {
contaTeste.deposita(100);
} catch (IllegalArgumentException erro){
System.out.println(erro.getMessage());
}
System.out.println(contaTeste.getSaldo());
try {
contaTeste.saca(-100);
} catch (IllegalArgumentException erro){
System.out.println(erro.getMessage());
}
System.out.println(contaTeste.getSaldo());
}
}
ele imprime o saldo -ok
efetua o deposito -ok
imprime o saldo -ok
tenta sacar e da o erro de exceção correspondente e valor indevido -ok
aqui ele imprime “null” :shock: pq? é pq a “IllegalArgumentException” nao aceita double como parametro? se nao, entao o que ?
public class ValorinvalidoExcecao extends IllegalArgumentException { public ValorinvalidoExcecao(double valor){ System.out.println("Valor negativo invalido: " + valor); } }vejam de quem minha classe herda. IllegalArgumentException recebe string como parametro. Só que eu preciso passar double como vcs veem ai no construtor.
Se IllegalArgumentException só aceita o parametro string entao qualtipo de exceçao eu uso ?
A classe IllegalArgumentException tem 4 construtores, sendo que um deles não recebe parâmetros.
Quando você utiliza esse construtor a mensagem será nula mesmo.
Você está utilizando em seu código, por não estar declarando explicitamente qual construtor usar.
Tente fazer isso:
public class ValorinvalidoExcecao extends IllegalArgumentException {
public ValorinvalidoExcecao(double valor){
super("Valor negativo invalido: " + valor);
}
}
public class ValorinvalidoExcecao extends IllegalArgumentException {
public ValorinvalidoExcecao(double valor){
super("Valor negativo invalido: " + valor);
}
}
quer dizer que assim eu estou chamando um construtor da classe mae? pelo visto entao ele aceita tanto parametro string qto double né? pq rodou ok aqui!
quer dizer que assim eu estou chamando um construtor da classe mae?
Querendo ou não, você sempre chama um construtor da classe mâe.
Se você não põe nada, ele chama o construtor padrão (sem parâmetros)
pelo visto entao ele aceita tanto parametro string qto double né? pq rodou ok aqui!
Não, o construtor da IllegalArgumentException só aceita String.
Quando você concatena a variáve double com a mensagem:
"Valor negativo invalido: " + valor
Está criando uma String… e passando essa String para o construtor da classe mãe.
antes dava null pq pq a classe IllegalExceptionArgument tem 4 construtores e todos ficaram null pq especifiquei nenhum (visto eu usei um cosntrutor escrito na mao) ?