Como criar exceções personalizadas em Java
Você pode criar exceções personalizadas em Java. Como um programador, você provavelmente tem uma boa compreensão sobre exceções, mas aqui, você vai usar a herança para criar exceções de seu próprio país.
Traçando a hierarquia Throwable
Você usar a instrução try / catch para capturar exceções eo lançar declaração para lançar exceções. Cada tipo de exceção que pode ser capturado ou jogado é representado por uma classe de exceção diferente. O que você pode não ter percebido é que essas classes de exceção usar uma cadeia de herança bastante complexo.
Os parágrafos seguintes descrevem as classes nessa hierarquia:
Throwable: A raiz da hierarquia exceção é o Throwable classe. Esta classe representa qualquer objeto que pode ser jogado com um lançar declaração e pego com um pegar cláusula.
Erro: Esta subclasse de Throwable representa as condições de erro graves que programas razoáveis não pode recuperar. Os subclasse desta classe representam os tipos específicos de erros que podem ocorrer. Se a Máquina Virtual Java é executado fora de memória, por exemplo, um VirtualMachineError é lançada. Você não tem que se preocupar em pegar esses erros em seus programas.
Exceção: Esta subclasse de Throwable representa uma condição de erro que a maioria dos programas deve tentar recuperar. Assim, Exceção é efetivamente o topo da hierarquia para os tipos de exceções que você captura com try / catch declarações.
Com a exceção (sorry) de RuntimeException, as subclasses de Exceção representam tipos específicos de exceções verificadas que devem ser capturados ou jogados. Note-se que algumas destas subclasses têm subclasses próprias. A classe de exceção chamada IOException, por exemplo, tem mais do que 25 subclasses representativas de diferentes tipos de excepções de E / S que podem ocorrer.
RuntimeException: Esta subclasse de Exceção representa exceções não verificadas. Você não tem que pegar ou lançar exceções não verificadas, mas você pode, se você quiser. subclasses de RuntimeException incluir Null Pointer Exception e ArithmeticException.
Se seu aplicativo precisa para lançar uma exceção personalizada, você pode criar uma classe de exceção que herda qualquer uma das classes nessa hierarquia. Normalmente, no entanto, você começa com a Exceção classe para criar uma exceção personalizada marcada.
Criando uma classe de exceção
Para criar uma classe de exceção personalizada, basta definir uma classe que estende uma das classes na hierarquia de exceção Java. Normalmente você estender Exceção para criar uma exceção personalizada marcada.
Suponha que você está desenvolvendo uma classe que recupera os dados do produto a partir de um arquivo ou banco de dados, e você quer métodos que encontrar I / O erros para lançar uma exceção personalizada em vez do genérico IOException que é fornecido na API Java. Você pode fazer isso criando uma classe que estende a Exceção classe:
classe pública ProductDataException estende Exception {}
Infelizmente, os construtores não são considerados membros da classe, para que eles não são herdadas quando você estender uma classe. Como resultado, o ProductDataException tem apenas um construtor padrão. o Exceção própria classe ea maioria das outras classes de exceção tem um construtor que lhe permite passar uma mensagem de cadeia que está armazenado com a exceção e pode ser recuperada através do getMessage método.
Assim, você quiser adicionar este construtor para sua classe, o que significa que você deseja adicionar um construtor padrão explícita também. Então, agora a ProductDataException classe tem esta aparência:
classe pública ProductDataException estende Exception {ProductDataException pública {} ProductDataException pública (String message) {super (mensagem) -}}
Embora seja possível fazê-lo, a adição de campos ou métodos a uma classe de exceção personalizada é incomum.
Jogando uma exceção personalizada
Como para qualquer exceção, você usa um lançar declaração para lançar uma exceção personalizada. Você normalmente este código lançar declaração no meio de um pegar cláusula que pega alguma outra exceção, mais genérico. Aqui está um método que recupera os dados do produto a partir de um arquivo e lança um ProductDataException se um IOException ocorre:
classe pública ProductDDB {public static Produto getProduct (código String) lança ProductDataException {try {produto P - // código que recebe o produto a partir de um arquivo // e pode lançar uma IOExceptionp = new Product () - retorno p} catch (IOException e) {throw new ProductDataException ( "ocorreu um erro IO.") -}}}
Aqui está algum código que chama a getProduct método e captura a exceção:
try {Produto p = ProductDB.getProduct (productCode) -} catch (ProductDataException e) {System.out.println (e.getMessage ()) -}
Aqui a mensagem é simplesmente exibido no console se um ProductDataException é lançada. Em um programa real, você quer registrar o erro, informar o usuário, e descobrir como para continuar o programa graciosamente embora esta excepção de dados ocorreu.