[MÚSICA] [MÚSICA] Esse é o curso de Orientação a Objeto com Java. Meu nome é Eduardo Guerra. Hoje vocês vão conhecer as exceções. A gente vai entender como as exceções funcionam e como elas podem ser utilizadas para fazer o tratamento de erro. Na aula anterior a gente viu aà outras abordagens pra tratar erro, vimos vários problemas nela e hoje vamos aprender a usar as exceções para fazer isso. Certo? Bom, para começar o que é que é uma exceção? Exceção é uma classe especial, que vai estar representando esse erro, vai estar representando problema que aconteceu. E essas classes elas têm as caracterÃsticas de poder ser lançada para quem chamou o método. Você pode simplesmente falar assim: "Olha, deu erro aqui, está representado por uma exceção, joga para quem chamou". Para uma classe ser uma exceção ela tem que ser uma subclasse de "Exception". Mais para frente, nessa aula mesmo, eu vou falar de outros casos aà de classes que podem ser lançadas, mas para criar uma exceção, ela tem que ser uma subclasse de "exception", basta isso. Se ela for uma subclasse de "exception" você consegue lançar ela como erro. Então como é que a gente faz isso? Todo o método que pode dar erro na execução dele, ele tem que declarar isso a partir dessa cláusula "throws". Então, se esse método aqui ele tem esse "throws MinhaException" quer dizer que ele pode lançar uma "MinhaException", como resultado da sua execução. E durante a execução do método, eu posso verificar se houve, que deu erro, eu posso ir lá e dar "throw new MinhaException". E aà ou seja, eu crio a minha exceção e jogo ela, mas para fazer isso, o método tem que declarar que pode jogar uma exceção daquela. É mais ou menos como se o método falasse o seguinte: "Olha, você vai me executar, eu tenho tal retorno, você tem que me dar tais parâmetros, e pode ser que se der erro, eu vá te jogar essa exceção." Para que quem chama já fique preparado pra ela. E aà quem chama tem duas opções. Uma delas é tratar essa exceção, como é que ele faz isso? A partir de bloco do "try catch". O "try" é mais ou menos: "tenta executar esse método" "para ver se vai dar erro". E aà o "catch" é bloco que ele vai quando o erro efetivamente acontece. Então, o que é que você pode fazer? Você pode falar assim:"Oh, tenta reexecutar aÃ". Aconteceu a minha execeção? Eu vou lá então, vou tratar aquele método, vou fazer tratamento para esse erro. Vamos supor por exemplo, imagina você tentar abrir arquivo, você recebe erro que ele não existe. Você pode no tratamento desse erro falar assim: "Então vá lá e crie o arquivo e tente de novo". E então você pode obviamente aqui numa situação fictÃcia. Então você pode tratar o erro, você pode escolher o que fazer. Às vezes por exemplo, se você está fazendo acesso de rede você pode tentar de novo até número determinado de vezes. Então tudo isso é questão de você saber como lidar aà com o erro e usar o bloco "try catch" para conseguir tratar caso de erro. Uma outra opção é você passar o problema para quem te chamou. Você falou: " eu chamei método pode ser que ele dê uma exceção. Só que eu não quero lidar com isso agora". Eu vou deixar aqui para quem me chamo lidar com essa exceção. Então o que é que você faz? Você também declara que você pode julgar uma "MinhaException" ou seja, eu passo o erro para a frente. E aà o que é importante a gente saber é que você pode tanto tratar o erro, quanto pode passar para quem te chamou tratar, só que uma coisa que você não pode fazer, é simplesmente ignorar o erro. Então você não pode simplesmente chamar método que declara uma exceção e falar: "Não, eu não estou nem aÃ, não vou fazer nada". Não, ou você declara que você também joga essa exceção, ou você trata aquele erro. Você não pode ignorar. É tipo, está uma bomba aà na sua mão, e aÃ? Você vai apagar o fogo ou você vai jogar essa bola no próximo? Você não pode ficar alà simplesmente com a bomba ou ignorar ela, que ela vai explodir. Não vai dar certo. Bom, Java a gente tem uma hierarquia de classes que podem ser exceções, que podem ser lançadas. Aqui cima a gente tem o "throwable". E a gente tem abaixo dele a classe "error" e a classe "exception" e dentro das classes "exception", a gente tem o "RuntimeException" que é tipo de exceção diferente. Vamos ver cada e vamos ver alguns exemplos aÃ. A subclasse de erro, que é tipo especial de "throwable", é aquele tipo de problema que dificilmente você vai conseguir fazer alguma coisa relação para tratar ele. Por exemplo, "CoderMalfunction, FactoryConfiguration, VirtualMachineError" à s vezes são erros que as vezes é erros de hardware, à s vezes é erro sei lá, no sistema operacional. Coisas que está fora do seu controle. Então esses aà são as subclasses de erro, as "RuntimeException' são aqueles erros, digamos assim, normais que você não é obrigado a tratar. Então, tudo aquilo que eu valei de "throw" " você tem que colocar 'throw', ou 'trycatch" isso não vale para o "RuntimeException". Normalmente, o RuntimeException é aquele erro, que acaba sendo erro meio que de codificação, é aquele erro que não deveria acontecer. Então por exemplo, "ArithmeticException" sei lá, você tem uma divisão por 0. "ClassCastException", que é você tentar fazer "cast" de objeto para uma classe que não é a dele. O "NullPointerException" você tentar chamar método de uma variável que está com o valor nulo. O "IndexOutofBoundsException" que é no caso de você tentar acessar Ãndice por exemplo de "array", que é maior que o tamanho dele. Então, são erros que não deveriam acontecer, esses casos eles são, ele jogam o "RuntimeException" se você quiser, você pode criar uma "RuntimeException", você pode lançar da mesma forma. A grande diferença é que você não é obrigado a declarar que o método joga aquela "RuntimeException", nem você é obrigado a tratar aquela exceção de forma explÃcita com o "try catch" ou declarando o "throws". E por fim a gente tem as exceções aà que são as exceções, digamos assim, normais, que são aqueles erros que podem acontecer durante a execução, que normalmente você vai querer tratar. Por exemplo, "SQLException" uma "IOException" uma exceção de impressão, talvez formato de data. São coisas que podem acontecer por exemplo, você pode rodar uma "query" que esteja errada, você pode tentar acessar uma tabela que você não tem permissão, você pode tentar acessar arquivo que está bloqueado, você pode dar erro na impressora, ele vai te jogar "PrintException". São coisas que podem acontecer, não é porque o código está errado que ele está acessando lá "array" que não deveria. Esses erros aà são erros que realmente podem acontecer. Esses aà são as "Exceptions" que a gente é obrigado a tratar. Então com isso, eu acho que deve ter dado pra entender melhor as exceções. Tenho certeza aà que deu para ter uma ideia como é que é. Você simplesmente joga elas para cima, a gente viu pouquinho aà também de como elas funcionam e vimos alguns exemplos aà de exceções, de ''errors, RuntimException, exception" e entendemos a diferença aà entre eles. Vejo você na próxima aula. [MÚSICA]