Git Product home page Git Product logo

exceptions-java's Introduction

TRATAMENTO DE EXCEÇÕES EM JAVA

Curso que apresenta conceitos introdutórios sobre como podemos identificar e tratar Exceptions na linguagem Java. Curso este ministrado por mim em nome da DIGITAL INNOVATION ONE 🧡💛 e disponibilizado de forma gratuita para a comunidade dos desenvolvedores Java.

🛑 Pré-requistos

  • Java JDK 8 ou superior
  • IDE para desenvolvimento Java
  • Conhecimento BÁSICO em OOP
  • Estar disposto a aprender

📚 Ementa

  1. Visão Geral
  2. Unchecked Exception
  3. Checked Exception
  4. Exception Personalizada

Visão Geral

  • Exceção é um evento que interrompe o fluxo normal de processamento de uma classe.
  • O uso correto de exceções torna o programa mais robusto e confiável.
  • Com o tratamento de exceções, um programa pode continuar executando depois de lidar com um problema.
  • Importante: Incorpore sua estratégia de tratamento de exceções no sistema desde o princípio do processo de projeto. Pode ser difícil incluir um tratamento de exceções eficiente depois que um sistema foi implementado.

Error:

Usado pela JVM que serve para indicar se existe algum problema de recurso do programa, tornando a execução impossível de continuar.

Unchecked (Runtime):

Exceptions que PODEM ser evitados se forem tratados e analisados pelo desenvolvedor.

Checked Exception:

Exceptions que DEVEM ser evitados etratados pelo desenvolvedor para o programa funcionar.
amoTu

Hierarquia Exceptions

Palavras Reservadas:

  • try, catch, finally: Cada uma dessas palavras, juntas, definem blocos para o tratamento de exceções.
  • throws: Declara que um método pode lançar uma ou várias exceções.
  • throw: Lança explicitamente uma exception.

🔸 Error

  • Usado pela JVM, serve para indicar quando existe algum problema de recurso do programa, tornando a execução impossível de continuar.
  • O “Erro” é algo que não pode mais ser tratado, ao contrário da “Exceção” que trata seus erros, pois todas as subclasses de Exception (menos as subclasses RuntimeException) são exceções que obrigatóriamente devem ser tratadas.

🔸 Unchecked Exception

  • Herdam da classe RuntimeException ou da classe Error.
  • O compilador não verifica o código para ver se a exceção foi capturada ou declarada.
  • Se uma exceção não-verificada ocorrer e não tiver sido capturada, o programa terminará ou executará com resultados inesperados.
  • Em geral, podem ser evitadas com uma codificação adequada.

🔸 Checked Exception

  • As exceções que são herdadas da classe Exception, mas não de RuntimeException.
  • O compilador impõe um requisito do tipo "capturar ou declarar".
  • O compilador verifica cada chamada de método e declaração de método para determinar se o método lança (throws) exceções verificadas.
  • Se lançar, o compilador assegura que a exceção verificada é capturada ou declarada em uma cláusula throws.
  • Caso não capturada nem declarada, ocorre um erro de compilação.

🔸 Exception Personalizada

  • Programadores podem achar útil declarar suas próprias classes de exceção.
  • Essas Exceptions são específicas aos problemas que podem ocorrer quando outro programador empregar suas classes reutilizáveis.
  • Uma nova classe de exceção deve estender uma classe de exceção existente que assegura que a classe pode ser utilizada com o mecanismo de tratamento de exceções, logo essas Exceções customizadas são derivadas da classe Exception.
  • Importante: Antes de criar a nossa própria exceção, é recomendado verificar se já existe alguma exceção na biblioteca Java que já nos forneça o que precisamos. Afinal, não queremos reinventar a roda!

🔸 Blocos try/catch/finally

    Bloco try:
  • Região onde se encontra o código que queremos verificar se irá ou não lançar uma exceção.
  • Caso ocorra uma exceção em algum ponto, o restante do código contido no bloco try não será executado.
  • O bloco try não pode ser declarado sozinho, por tanto, precisa estar seguido de um ou vários blocos catch e/ou de um bloco finally.
    Bloco catch:
  • Região onde se encontra o possível tratamento da exceção. Isso significa que só será executado caso o bloco try apresentar alguma exceção.
  • Recebe como argumento a classe ou subclasse da possível exceção.
  • No seu escopo ficam as instruções de como tratar essa exceção.
  • Pode haver mais de um bloco catch, porém, será executado apenas o primeiro bloco que identificar a exceção.
  • Importante: Caso você utilize mais de um catch e houver exceções de uma mesma hierarquia de classes, certifique-se que a classe mais genérica esteja como argumento do último catch. Caso contrário, qualquer exceção sempre cairá neste primeiro catch, assim fazendo com que a exception mais específica não seja verificada.
    Bloco finally:
  • Este bloco é opcional, mas caso seja construído, quase sempre será executado. (A menos que seja forçada sua parada, por exemplo, com um System.exit(0), no catch)
  • Dentro do bloco finally, poderá conter outros blocos try, catch, bem como outro finally.
  • Geralmente utilizado quando precisamos executar algum código independente se ocorrer exception ou não.

🔸 Cláusulas throws e throw

    Cláusula throws
  • Usada na assinatura do método.
  • Necessária apenas para exceções checked.
  • Informa ao chamador que este método pode lançar uma das exceções listadas no escopo do método. Isso obriga a fazer a captura dessa exception (try-catch) ou relançar o throws.
    Cláusula throw
  • É usada para lançar explicitamente uma exceção de um método ou de qualquer bloco de código.
  • Usada principalmente para lançar exceções personalizadas
  • Importante:
  • O fluxo de execução "normal" do programa para imeditamente apos a execução da cláusula throw. O bloco try envolvente mais próximo é verificado para encontrar um bloco catch que corresponda ao tipo de exceção.
  • Caso encontre essa correspondência, o controlado é transferido para esse bloco. Caso contrário, o próximo bloco try envolvente é verificado e assim por diante.
  • Outro caso, é se nenhuma captura for encontrada, o manipulador da exceção padrão interromperá o programa.

🔗 Referências

🤝 Contribuindo

Este repositório foi criado para fins de estudo, então contribua com ele.
Se te ajudei de alguma forma, ficarei feliz em saber. E caso você conheça alguém que se identidique com o conteúdo, não deixe de compatilhar.

Se possível:

⭐️ Star o projeto

🐛 Encontrar e relatar issues


Disponibilizado com ♥ por cami-la.

exceptions-java's People

Contributors

cami-la avatar viniberaldo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

exceptions-java's Issues

Boa didática

Estou assistindo as suas aulas de Java através da Formação Java Developer, e gostaria de dizer que sua didática e clareza durante as explicações é excelente. Parabéns

Não mostra a mensagem da ArithmeticException

Olá @cami-la ! Espero que esteja bem! :)
Primeiramente gostaria de parabenizar pela sua didática e pelos exemplos que trazes nas aulas, me ajudam bastante a entender os conceitos.

Gostaria de sua ajuda para entender porque não mostra a janela com a mensagem no cath em que não é possível dividir por zero. A Exception de NumberException mostra a mensagem normalmente. Segue o código abaixo, caso precise dar uma olhada:

`public class UncheckedException {
public static void main(String[] args) {

    boolean continueLooping = true;
    double resultado = 0.0;

    do {

        try {
            String a = JOptionPane.showInputDialog(("Numerador: "));
            String b = JOptionPane.showInputDialog("Denominador: ");
            resultado = dividir(Double.parseDouble(a), Double.parseDouble(b));
            System.out.println(a + " / " + b + " = " + resultado);
            continueLooping = false;

        } catch (NumberFormatException e){
            e.printStackTrace();
            JOptionPane.showMessageDialog(null, "Entrada inválida, informe um número.");

        } catch (ArithmeticException e ) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(null, "Impossível dividir um número por zero.");

        } finally {
            System.out.println("Fim do programa");
        }
    } while (continueLooping);


}

public static double dividir (double a, double b) {
    return (a / b);
}`

Agradeço desde já! 👍🏼

Endereço para imprimir o arquivo txt.

Boa tarde.
No código que você explicando CheckedException, não compreendi em qual lugar é a passado o endereço do arquivo ttxt("romance-blake-crouch.txt"), para que este seja imprimido no console.

Pequena modificação no texto

Olá Camila, tudo bem? Fiz uma pequena modificação no parágrafo referente ao "Checked Exception", inseri um espaço no "e tratados", realizei a modificação e fiz o envio por meio do comando "git pull origin master", gostaria de saber se agi da maneira correta ou se teria um outro caminho, muito obrigado pela atenção e por todo o conteúdo disponibilizado, Deus abençoe.

Correção de uma palavra no README do curso

Olá professora Camila, como vai?

Vi que você mencionou uma pequena correção na palavra "unchecked" no README do repositório. Criei um pull request corrigindo esse subtítulo. Eu procedi da maneira correta?

Supondo que estivesse num projeto com mais pessoas, eu deveria ter realmente feito um "fork" no seu repositório, feito a correção e depois solicitado o "pull request" ?
Ou talvez por ser algo muito simples, só acrescentar uma letra, eu deveria ter apenas criado uma "issue" como essa?

Se procedi de maneira inadequada, me informe por favor e tento descobrir como dar "roll back" nessa mudança.

Até mais!

NaN deve ser tratado como Exception ou não???

NotANumber Exception

Primeiramente gostaria de agradecer e parabenizar a 👧 @cami-la pela excelente didática 📚 .

Agora vamos ao caso:
Converti as vcariáveis para double e quando tentei dividir 0 (zero) por 0(zero) não me retornou nenhuma mensagem, apenas NaN. 💥

Tem como tratar esse caso?

Parabéns pelo trabalho

Estou assistindo as tuas aulas de Java através do Bootcamp DIO GFT QA e só gostaria de dizer que adoro a sua didática, a paciência e até quando aparecem os erros é bom deixar no vídeo porque já ensina como resolver.

Deus abençoe fortemente.

Unchecked Exception - String

Oie Cami, tudo bem?

Seria incorreto se eu apenas alterasse a string desse código por um int? Eu terei que fazer isso todas as vezes que colocar o string e quiser fazer um calculo, por exemplo?
É o meu primeiro contato direto com a programação, então fiquei um pouco confusa pois pelo o que eu entendi até agora o string teria que ser usado para letras 😭 😭

Muito obrigada ✨

Erro na prova

Olá professora Camila! tudo bom?
Olha, estou passando aqui rapidão pra avisar que a provinha no fim desse curso está trocada!
A prova que está lá é sobre repetições e arrays e não sobre exceptions.
Quando tiver um tempinho olhe lá,
Espero ter ajudado,
até mais!

Erro - Line

Oi Camila! Tudo bom?

Apaguei o comentário, consegui resolver.

class CheckedException

Oi Camila, tudo bem?
Muito bom seu curso de Exceptions, estou fazendo o bootcamp do Banco Pan e vc está entre os melhores instrutores. Não é muito uma issue, mais uma sugestão tá? Quando vc explica checked exceptions é muito difícil capturar a IOException (você teria que deletar o arquivo txt durante a leitura do mesmo).
Fica uma sugestão para vc forçar a mesma incluir no finar da função imprimirArquivoNoConsole usando um throw

throw new IOException("IoException!");

Deixando claro para os alunos que vc só está querendo validar a captura da exception pelo bloco try catch

Obrigado Camila

Venho agradecer pela aula de Exceções Java, foi muito clara e didática. Parabéns!

cláusulas try/catch

Olá Professora

No texto sobre try/catch/finally do README.md, você explica que a exception mais genérica deve figurar na cláusula mais acima, na primeira. O texto:

"Importante: Caso você utilize mais de um catch e houver exceções de uma mesma hierarquia de classes, certifique-se que a classe 'mais genérica' esteja como argumento do 'primeiro catch'. Caso contrário, qualquer exceção sempre cairá neste primeiro catch, assim fazendo com que a exception mais específica não seja verificada".

Depois você continua explicando, a meu ver, corretamente. Parece que houve uma inversão ocasional. Entendo que a cláusula mais genérica é IOException e FileNotFoundException é a mais específica.

Será que isso ocorreu ou eu me equivoquei? terei interpretado equivocadamente a sua explcação?

Percebi que talvez esteja errado na explicação da aula Checked Exceptions Parte 2. Parece estar indo contra a sua explicação, a meu ver correta, na aula citada. Isso não é um grande problema, visto que a IDE não deixa o dev escrever as cláusulas de forma equivocada. Mas é importante para o nosso aprendizado que o conteúdo esteja correto.

Espero ter contribuído.

Exceções personalizadas não podem estender de RuntimeException?

Oi Cami,

Parabéns pela didática! (:

Vc não abordou sobre a possibilidade das exceptions personalizadas poderem estender de RuntimeException ao invés de estenderem direto de Exception. Mas essa possibilidade existe, correto?

Aguardo retorno e agradeço desde já <3 <3

Boa Prática

Camila, nas aulas de tratamento de exceção, vc diz que "se eu lançar uma exception, outro método tem que tratar"! Pelo que deu pra eu entender, é tipo "jogar o problema para outro resolver". Como sabemos, programas grandes são divididos em partes e depois, junta tudo! A minha dúvida é: Uma empresa(ou outros desenvolvedores) podem ver com maus olhos se, ao invés de eu tratar uma exce´tion na parte do programa que me cabe, eu simplesmente "lançar" todas as exceptions que, por ventura, a parte do programa que está sob minha responsabilidade venha a ter ou esta hipótese que eu levantei é impossível? Pergunto pq eu nunca trabalhei em um projeto em equipe! Acho que ficou claro o que eu quero saber, mas se não, me diz que eu tento ser mais claro!

bloco try catch

Olá Camila,
Parabéns pelos seus cursos e acho que os videos ficam melhor sem a imagem do instrutor uma vez que a mesma pode ficar em cima de parte do código e atrapalhar visualização do mesmo.

Relativamente ao bloco try/catch aparcebi-me que ao definir uma variável dentro do try depois não consigo utilizar a mesma fora do bloco, como exemplo:

try {
div = n1/n2;
System.out.println(div);
} catch (ArithmeticException e) {
System.out.println("Não é possível dividir por zero");
e.printStackTrace();
}
outraOperacaoMatematica = div + 2; //não se consegue utilizar aqui o resultado de div

Há alguma forma de ultrapassar este problema ou tem que se escrever código todo dentro do bloco se formos utilizar uma variável que esteja dentro do try?

Desde já obrigado.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.