Que tipo de parametros pode receber a IllegalExceptionArgument

6 respostas
R

bom pessoal
sei que a IllegalExceptionArgument pode receber string como parametro mas pode receber double tb ?

6 Respostas

R
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 ?

R

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 ?

A
rafaelczy:
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);
	}
}
R
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!

A

rafaelczy:

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)

rafaelczy:

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.

R

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) ?

Criado 15 de outubro de 2011
Ultima resposta 15 de out. de 2011
Respostas 6
Participantes 2