A Classe Exception, representa os erros que ocorrem durante a execução de aplicativos.
Um erro de aplicativo é um erro de tempo de execução que não pode necessariamente ser evitado escrevendo um código livre de erros.
Erros de tempo de execução podem ocorrer por uma variedade de razões. No entanto, nem todos os erros devem ser tratados como exceções em seu código.
Em alguns casos, um erro de programa pode refletir uma condição de erro esperada ou de rotina. Neste caso, você pode querer evitar o uso de tratamento de exceção para lidar com o erro do programa.
Em outros casos, um erro de programa reflete uma condição de erro inesperado que pode ser manipulado em seu código. Por exemplo, mesmo que você tenha verificado para garantir que existe um arquivo, ele pode ser excluído antes que você possa abri-lo, ou ele pode estar corrompido.
A falha do sistema é um erro de tempo de execução que não podem ser tratada por meio de programação de uma maneira significativa. Por exemplo, qualquer método pode lançar uma exceção OutOfMemory se o Runtime é incapaz de alocar memória adicional
Um modelo de tratamento de exceção que se baseia a representação de exceções como objetos, e a separação de código de programa e o código de tratamento de exceções em blocos TRY e blocos CATCH. Pode haver um ou mais blocos catch, cada um projetado para lidar com um determinado tipo de exceção, ou um bloco projetado para capturar uma exceção mais específica que outro bloco.
Exemplo:
Neste exemplo criamos uma classe para nosso erro herdada da classe Exception(Java, C++ e C#) e usamos o comando Try…Catch para manipular o erro e exibir uma mensagem mais amigável para o usuário.
Java
Classe #1 – Principal
public class Principal { static double saldo = 0.0; static void saque (double valor) throws MinhaExcecao { if ( valor <= saldo ) { saldo -= valor; } else { double insuficiente = valor - saldo; throw new MinhaExcecao(insuficiente); } } public static void main(String[] args) { // Efetua Um deposito na conta System.out.println("Deposito de: R$ 500,00"); saldo = 500.00; // Tenta efetuar um saque try { System.out.println("Saque de: R$ 1000,00"); saque(1000.00); } catch (MinhaExcecao erro) { System.out.println("Desculpe mas seu pedido ultrapassa o saldo em: " + erro.pegaValor() ); // Imprime conteudo do erro erro.printStackTrace(); } } }
Erro
public class MinhaExcecao extends Exception { private double valor; public MinhaExcecao ( double valor ) { this.valor = valor; } public double pegaValor ( ) { return valor; } }
C++
Programa – Principal
#include "stdafx.h" #include <iostream> #include <exception> #include "minhaexcecao.h" using namespace std; static double saldo = 0.0; static void saque(double valor) { if (valor <= saldo) { saldo -= valor; } else { double insuficiente = valor - saldo; throw MinhaExcecao(insuficiente); } } int _tmain(int argc, _TCHAR* argv[]) { // Efetua Um deposito na conta cout << "Deposito de: R$ 500,00" << endl; saldo = 500.00; // Tenta efetuar um saque try { cout << "Saque de: R$ 1000,00" << endl; saque(1000.00); } catch (MinhaExcecao erro) { cout << "Desculpe mas seu pedido ultrapassa o saldo em: " << erro.pegaValor() << endl; } system("pause"); return 0; }
Erro – (.h)
#include "stdafx.h" #include <iostream> #include <exception> using namespace std; class MinhaExcecao : public exception { private: double valor; public: MinhaExcecao(double valor) { this->valor = valor; } double pegaValor() { return valor; } };
C#
Classe #1 – Principal
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DesenvolvimentoAberto { class Program { static double saldo = 0.0; static void saque (double valor) { if ( valor <= saldo ) { saldo -= valor; } else { double insuficiente = valor - saldo; throw new MinhaExcecao(insuficiente); } } static void Main(string[] args) { // Efetua Um deposito na conta Console.WriteLine("Deposito de: R$ 500,00"); saldo = 500.00; // Tenta efetuar um saque try { Console.WriteLine("Saque de: R$ 1000,00"); saque(1000.00); } catch (MinhaExcecao erro) { Console.WriteLine("Desculpe mas seu pedido ultrapassa o saldo em: " + erro.pegaValor() ); // Imprime conteudo do erro Console.WriteLine(erro.StackTrace); } Console.ReadKey(); } } }
Classe #2 – Erro
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DesenvolvimentoAberto { class MinhaExcecao : Exception { private double valor; public MinhaExcecao(double valor) { this.valor = valor; } public double pegaValor() { return valor; } } }