Melhor compreensão sobre verificado vs. Exceções não verificadas – Como lidar melhor com exceções em Java?
Publicados: 2014-09-15Exceção verificada
O que é Checked Exception na linguagem de programação Java. Em linguagem simples: Exceção que é verificada em tempo de compilação chamada Checked Exception. Alguns destes são mencionados abaixo. Se em seu código se algum método lançar uma checked exception
, então o método deve handle the exception
ou deve especificar a exceção usando a palavra-chave throws
.
- IOException
- SQLException
- DataAccessException
- ClassNotFoundException
- InvocationTargetException
- MalformedURLException
Vamos dar uma olhada no exemplo:
No exemplo abaixo, vamos obter o conteúdo do site “Crunchify.com” e imprimi-lo no console. Durante esta operação, o Programa Java lançará MalformedURLException
ou IOException
nas linhas destacadas abaixo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
package com . crunchify . tutorial ; import java . io . BufferedReader ; import java . io . InputStreamReader ; import java . net . URL ; import java . net . URLConnection ; import java . nio . charset . Charset ; /** * @author Crunchify.com * */ public class CrunchifyCheckedException { public static void main ( String [ ] args ) { System . out . println ( "\nOutput: \n" + callCrunchifyURL ( "https://crunchify.com" ) ) ; } public static String callCrunchifyURL ( String myURL ) { System . out . println ( "Requested URL:" + myURL ) ; StringBuilder sb = new StringBuilder ( ) ; URLConnection urlConn = null ; InputStreamReader in = null ; URL url = new URL ( myURL ) ; urlConn = url . openConnection ( ) ; if ( urlConn ! = null ) urlConn . setReadTimeout ( 60 * 1000 ) ; if ( urlConn ! = null && urlConn.getInputStream() != null) { in = new InputStreamReader(urlConn.getInputStream(), Charset.defaultCharset()); BufferedReader bufferedReader = new BufferedReader ( in ) ; if ( bufferedReader ! = null ) { int cp ; while ( ( cp = bufferedReader . read ( ) ) ! = - 1 ) { sb . append ( ( char ) cp ) ; } bufferedReader . close ( ) ; } } in . close ( ) ; return sb . toString ( ) ; } } |
Existem duas maneiras de resolver isso. Add throws clause
OU Add Try, Catch block
ao seu código para resolvê-lo. Aqui está um código atualizado.
- Modifica as linhas 16 e 20 e adiciona
throws IOException
- Adicionar bloco try catch em 26,42,43
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
package com . crunchify . tutorial ; import java . io . BufferedReader ; import java . io . IOException ; import java . io . InputStreamReader ; import java . net . URL ; import java . net . URLConnection ; import java . nio . charset . Charset ; /** * @author Crunchify.com * */ public class CrunchifyCheckedException { public static void main ( String [ ] args ) throws IOException { System . out . println ( "\nOutput: \n" + callCrunchifyURL ( "https://crunchify.com" ) ) ; } public static String callCrunchifyURL ( String myURL ) throws IOException { System . out . println ( "Requested URL:" + myURL ) ; StringBuilder sb = new StringBuilder ( ) ; URLConnection urlConn = null ; InputStreamReader in = null ; try { URL url = new URL ( myURL ) ; urlConn = url . openConnection ( ) ; if ( urlConn ! = null ) urlConn . setReadTimeout ( 60 * 1000 ) ; if ( urlConn ! = null && urlConn.getInputStream() != null) { in = new InputStreamReader(urlConn.getInputStream(), Charset.defaultCharset()); BufferedReader bufferedReader = new BufferedReader ( in ) ; if ( bufferedReader ! = null ) { int cp ; while ( ( cp = bufferedReader . read ( ) ) ! = - 1 ) { sb . append ( ( char ) cp ) ; } bufferedReader . close ( ) ; } } } catch ( IOException e ) { // TODO: Consume and Throw an error with detailed message. } in . close ( ) ; return sb . toString ( ) ; } } |

Exceção desmarcada
A exceção não verificada em Java são aquelas exceções cujo tratamento NOT verified during Compile time
. Essas exceções ocorrem devido à má programação.
O programa não dará erro de compilação.
Todas as exceções Unchecked são subclasses diretas da classe RuntimeException
.
Simple Example
: Você criou um formulário online que aceita entrada do usuário. É forma de texto livre. O uso pode inserir qualquer valor errado no caso de campo de e-mail ou campo de nome de usuário OU campo de número de telefone.
Se você não tiver validação no lado do cliente, há mais possibilidades de obter a exceção de validação de tempo de execução ao executar o aplicativo em produção. O erro pode ser gerado por operação de banco de dados ou campo de conversão de um formato para outro.
Abaixo estão os tipos de exceções não verificadas:
- Null Pointer Exception
- ArrayIndexOutOfBound
- Exceção de argumento ilegal
- IllegalStateException
O que mais me incomoda é o NullPointer Exception. Eu escrevi um artigo detalhado sobre NPE na semana passada.
Há um total de 8 dicas diferentes fornecidas para evitar NPE.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package com . crunchify . tutorial ; /** * @author Crunchify.com */ public class CrunchifyUncheckedException { public static void main ( String args [ ] ) { String crunchifyArr [ ] = { "Crunchify" , "Google" , "Yahoo" , "Amazon" , "eBay" } ; String myString = crunchifyArr [ 7 ] ; // This throws ArrayIndexOutOfBoundException System . out . println ( myString ) ; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
package com . crunchify . tutorial ; /** * @author Crunchify.com */ public class CrunchifyUncheckedException { public static void main ( String args [ ] ) { String crunchifyArr [ ] = { "Crunchify" , "Google" , "Yahoo" , "Amazon" , "eBay" } ; try { String myString = crunchifyArr [ 7 ] ; // This throws ArrayIndexOutOfBoundException System . out . println ( myString ) ; } catch ( ArrayIndexOutOfBoundsException e ) { System . out . println ( "ArrayIndexOutOfBoundException appears here. Better handle it in code above :)" + e ) ; } } } |
No Java 7, você pode manipular várias exceções em um único Catch block
. Você pode alterar a linha 13 da linha acima alterada para abaixo.
1 |
} catch ( ArrayIndexOutOfBoundsException | NumberFormatException e ) { |
Resumindo, as exceções verificadas e não verificadas são tratadas usando a palavra-chave try, catch
e finally
.
Em termos de Funcionalidade Checked e Unchecked Exception são os mesmos.