Exception?

Galera essa tem um monte de construtor, cada um com parâmetro diferente, alguém pode me explicar o que é isso.

package model.dao;

public class LivrariaDAOException extends Exception {
	
	private static final long serialVersionUID = 1L;

	public LivrariaDAOException(){
		
	}
	
	public LivrariaDAOException(String arg){
		
		super(arg);
	}
	
	public LivrariaDAOException(Throwable arg){
		
		super(arg);
	}
	
	public LivrariaDAOException(String arg, Throwable arg1){
		
		super(arg,arg1);
	}
	

}//end class

Ola,

da uma olhada na API

São construtores sobrecarregados (overloaded).
Você pode criar instâncias dessa classe chamado qualquer um desses construtores.
Cada construtor chamará super(), passando o parâmetro fornecido. Inclusive, o primeiro construtor (o sem argumentos) também chamará super().

Dada a explicação acima, os seguintes códigos são válidos:

Exception ex = new Exception("Mensagem");
String msg = "Mensagem";
LivrariaDAOException liv = new LivrariaDAOException();
LivrariaDAOException liv2 = new LivrariaDAOException(msg);
LivrariaDAOException liv3 = new LivrariaDAOException(new Exception("Mensagem"));
LivrariaDAOException liv4 = new LivrariaDAOException("Mensagem", ex);

Quando você cria (constrói) uma classe, o compilador chama um construtor padrão, se você não declarar nenhum. Este construtor padrão será um construtor sem argumentos. Agora se você escrever um construtor para sua classe, você estará sobrecarregando o construtor (contrutores sobrecarregados). Desta forma, o construtor padrão não será mais chamado pelo compilador, mas sim o construtor que você escreveu.

Porém você pode escrever, não só um construtor, mas vários construtores sobrecarregados, como neste seu exemplo aí. O que vai decidir quando um ou outro será chamado, será o argumento que você irá passar para o construtor.

Por exemplo:

LivrariaDAOException exemplo = new LivrariaDAOException(String teste)

Vai chamar a primeira versão do seu construtor, que é o que está esperando por uma String.

Deu para entender?

Ow gente valeu mesmo, tenho só mais uma dúvida:

já que o método LivrariaDAOException extends Exception, eu poderia ao invés de criar essa classe, utilizar logo a classe Exception por exemplo:

throw new Exception(String teste);

[quote=efcjunior]Ow gente valeu mesmo, tenho só mais uma dúvida:

já que o método LivrariaDAOException extends Exception, eu poderia ao invés de criar essa classe, utilizar logo a classe Exception por exemplo:

throw new Exception(String teste);
[/quote]
Ola,

Pode, pode sim, mas vc tem que avaliar, para certas exceptions é legal vc criar uma extensão, como vc fez.

[quote=BrunoCarlo][quote=efcjunior]Ow gente valeu mesmo, tenho só mais uma dúvida:

já que o método LivrariaDAOException extends Exception, eu poderia ao invés de criar essa classe, utilizar logo a classe Exception por exemplo:

throw new Exception(String teste);
[/quote]
Ola,

Pode, pode sim, mas vc tem que avaliar, para certas exceptions é legal vc criar uma extensão, como vc fez.[/quote]

Como assim, quais exceptions por exemplos deveria ser tratada desta maneira ?

[quote=efcjunior][quote=BrunoCarlo][quote=efcjunior]Ow gente valeu mesmo, tenho só mais uma dúvida:

já que o método LivrariaDAOException extends Exception, eu poderia ao invés de criar essa classe, utilizar logo a classe Exception por exemplo:

throw new Exception(String teste);
[/quote]
Ola,

Pode, pode sim, mas vc tem que avaliar, para certas exceptions é legal vc criar uma extensão, como vc fez.[/quote]

Como assim, quais exceptions por exemplos deveria ser tratada desta maneira ?[/quote]
Bom, como no teu caso, uma DAOException, que vc pode incluir logs para especificar melhor o pq da exception… e para que as classes que usem os metodos que lançam esta exception especifica fique “melhor escrito”, e saiba o pq da exception, desta forma vc consegue tratar melhor o erro, por exemplo:

public class SameDAO ...{ public boolean save(SameObject so) throws DAOException, SQLException{....
Um exemplo bem básico, desta forma se o que der for um DAOException o metodo que chama sabe que é um erro que vc tratou e verificou que o metodo save não pode executar porque uma verificação deu erro… tal como um campo que não aceita null e a classe tava com null… coisas assim. e se vier um SQLException é pq é um erro de “programação” ou conexão… e deve ser tratado, para não exibir uma coisa “feia” para o usuário… e deve ser reportada para um admin do programa…

Saca?