domingo, 18 de maio de 2014

Erros e exceções em Java

Definição de Exceções em java

São várias as possibilidades de um código gerar um erro, por exemplo, se você faz um programa que lê um número informado pelo usuário e o usuário digita uma letra.

Confira este exemplo abaixo:

Se o usuário digitar um número o programa é executado como deveria:


Agora veja o que acontece quando o usuário digita uma letra ao invés de um número:


Quando não tratamos este erro o programa simplesmente para de funcionar e podemos ver no console que uma Exception é gerada: InputMismatchException.

A documentação da classe Scanner diz que o método nestInt( ) lança esta Exception se o próximo valor não corresponde a um número inteiro.

Nesta documentação você também pode conferir várias outras Exception que os métodos da classe Scanner podem lançar. Mas o que é uma Exception?

A Exception é uma subclasse Throwable que por sua vez é uma subclasse de Object. A Exception e suas subclasses representam exceções que podem ocorrer em um programa e desta maneira podemos captura-las e trata-las. Exceções como vimos no exemplo em que um método espera um número inteiro e o usuário digita uma letra.

Sendo assim, uma exceção é uma ocorrência que altera o fluxo do programa. As exceções podem ocorrer por falhas de hardware, exaustão de recursos e erros.

“Todas as classes de exceção do java herdam direta ou indiretamente da classe Exception, formando uma hierarquia de herança. Você pode estender essa hierarquia com suas próprias classes de exceção.”  (DEITEL & DEITEL. Java – como programar. 8a Edição, Bookman, 2012)

Ou seja, você pode criar suas próprias classes de exceção aplicando o conceito de herança da classe Exception.

Veja a hierarquia de exceções em java:



Exceções verificadas e não verificadas

Toda exceção verificada deriva da classe Exception.

As não verificadas ou não-checadas derivam da class RuntimeException.

Throwable – é o pai de todas as exceções.

Error – não são exceções e sim erros que jamais poderiam ter acontecido. Ex.: estouro da memória.

Exception- as classes que deveriam aqui, lançam exceções e não erros de programação.

Exemplo: tentar abrir um arquivo que não existe. Então é lançado uma exceção verificada, porque a classe de leitura de arquivos deriva de Exception.

RuntimeException – são exceções que indicam erros de programas (não de lógica, pois senão não passaria pelo compilador). Esse tipo de exceção é conhecido como não verificada. Sendo assim, não é requisito declarar uma cláusula try{} e catch{}. Ex.: tentar converter “dois” em “2”.

Alguns exemplos de exceções já definidas no pacote java.lang incluem:

ArithmeticException: indica situações de erros em processamento aritmético, tal como uma divisão inteira por 0. A divisão de um valor real por 0 não gera uma exceção (o resultado é o valor infinito);

NumberFormatException: indica que tentou-se a conversão de uma String para um formato numérico, mas seu conteúdo não representava adequadamente um número para aquele formato. É uma subclasse de IllegalArgumentException;

IndexOutOfBounds: indica a tentativa de acesso a um elemento de um agregado aquém ou além dos limites válidos. É a superclasse de ArrayIndexOutOfBoundsException, para arranjos, e de StringIndexOutOfBounds, para strings;

NullPointerException: indica que a aplicação tentou usar uma referência a um objeto que não foi ainda definida;

ClassNotFoundException: indica que a máquina virtual Java tentou carregar uma classe mas não foi possível encontrá-la durante a execução da aplicação.

Além disso, outros pacotes especificam suas exceções, referentes às suas funcionalidades. Por exemplo, no pacote java.io define-se IOException, que indica a ocorrência de algum tipo de erro em operações de entrada e saída. É a superclasse para condições de exceção mais específicas desse pacote, tais como EOFException (fim de arquivo ou stream), FileNotFoundException (arquivo especificado não foi encontrado) e InterruptedIOException (operação de entrada ou saída foi interrompida).

Uma exceção contém pelo menos uma string que a descreve, que pode ser obtida pela aplicação do método getMessage(), mas pode eventualmente conter outras informações. Por exemplo, InterruptedIOException inclui um atributo público do tipo inteiro, bytesTransferred, para indicar quantos bytes foram transferidos antes da interrupção da operação ocorrer. Outra informação que pode sempre ser obtida de uma exceção é a seqüência de métodos no momento da exceção, obtenível a partir do método printStackTrace().

Agora veremos abaixo a estrutura de como tratar um erro ou exceção:

try - é usada para indicar um bloco de código que possa ocorrer uma exceção.

catch – serve para manipular as exceções, ou seja, tratar o erro.

finally – sempre será executado depois do bloco try/catch. O importante é saber que esse bloco sempre será executado (exceto nos casos de encerramento da jvm System.exit()).

Veja abaixo as combinações válidas e inválidas para o uso do try{}, cacth{} e finally{} (isso é questão de certificação).

Combinações válidas:

try{}
catch{}
try{}
finally{}
try{}
catch{}
finally{}

Inválidas não Compila:

try{}
catch{}
finally{}
try{}
finally{}
catch{}

As palavras try e catch servem para informar a JVM o que fazer quando ocorrer uma exceção.

Os blocos catch devem aparecer após o try (isso é um requisito); entre os blocos não podem possuir nenhuma instrução.

Quando uma exceção é identificada no try{} o restante do código não é executado e não há um retorno para o término do código.

Exercício de tratamento de exceção:

Voltando ao exercício que iniciamos no inicio do texto, vejamos como poderíamos tratar a exceção para o usuário que digita uma letra ao invés de um número:


No bloco try { } colocamos todo o nosso código anterior, principalmente a parte que pode gerar a exceção. Já no bloco catch temos a impressão da Exception e uma mensagem para o usuário explicando que o mesmo deve informar um número.

Perceba que agora o programa não para de rodar quando o usuário digita uma letra. O que acontece é que a Exception é capturada, impressa e uma mensagem para o usuário o alerta para o erro.

Você pode aprender mais sobre tratamento de exceções no vídeo a seguir:


E para testar o que aprendeu vamos a um exercício:


Uma ArithmeticException é lançada na ocorrência de algum erro matemático, como por exemplo a divisão por zero. Faça um programa que lê dois números e mostre o resultado da divisão destes. Realize o tratamento para a exceção ArithmeticException.

Bibliografia

Livro:

DEITEL & DEITEL. Java – como programar. 8a Edição, Bookman, 2012

Site:

Java – Blog Camilo Lopes

DEVMEDIA

DEVMEDIA
http://www.devmedia.com.br/trabalhando-com-excecoes-em-java/27601


Grupo:

Eduardo Tanaka
Rodrigo Rocillo
Vanks Estevão
Vitório Lima


Classe Date – JAVA



Classe Date – JAVA

A classe Date de Java serve para a manipulação de datas com entradas como ano, mês, dia, hora, minuto, segundo, formatação e análise de Strings de uma determinada data(20 de "Setembro" de 1987). Essa classe deve conter os construtores que contém instruções que serão executadas sempre que for instanciado um objeto desta Classe.

Essa classe possui mais de um construtor:
- Um construtor que recebe como parâmetro o ano, o mês e o dia.
- E outro onde são passados como parâmetros: ano, mês, dia, hora, minutos e segundos.

Padrões

- O construtor recebe três parâmetros: ano, mês e dia. Sendo que deve-se diminuir 1900 do anopassado como parâmetro, ou seja, neste caso como queríamos imprimir o ano de 2011, então foipassado como parâmetro o número 111, pois, 2011 - 1900 = 111;
- Os números que representam os meses do ano vão de 0 (zero) até 11 (onze), ou seja, o mês de Janeiro é representado pelo número zero e o mês de Dezembro pelo número onze.
-Para formatar a representação de um objeto Date podemos utilizar a classe SimpleDateFormat.Esta classe fornece um conjunto de caracteres padrão para formatação do objeto Date. Veja abaixo uma cópia retirada da documentação do Java onde cada campo de uma data tem uma representação String.


Símbolo
Significado
Apresentação
Exemplo
G
eradesignator
(Text)
AD
y
year
(Number)
1996
M
month in year
(Text&Number)
July & 07
d
day in month
(Number)
10
h
hour in am/pm (1~12)
(Number)
12
H
hour in day (0~23)
(Number)
0
m
minute in hour
(Number)
30
s
second in minute
(Number)
55
S
millisecond
(Number)
978
E
day in week
(Text)
Tuesday
D
day in year
(Number)
189
F
day of week in month
(Number)
2 (2nd Wed in July)
w
week in year
(Number)
27
W
week in month
(Number)
2
a
am/pmmarker
(Text)
PM
k
hour in day (1~24)
(Number)
24
K
hour in am/pm (0~11)
(Number)
0
z
time zone
(Text)
Pacific Standard Time

escape for text
(Delimiter)


singlequote
(Literal)


Manipulação
A classe DatePode retornar a data / hora do sistema operacional, mas é capaz de retornar também uma data específica.
Existem várias classes criadas para dividir a responsabilidade de manipular data.
      java.util.Date – relativa a um ponto específico no tempo.
      java. text.DateFormat e java.text.SimpleDateFormat – ambas permitindo converter datas em texto e vice versa.
      java.text.DateFormatSymbols – que permite traduzir os vários elementos de uma data (dia, mês, etc.).
Datas e seus símbolos
A classe java.text.DateFormatSymbols permite lidar, individualmente, com vários elementos de texto que fazem parte da composição de uma data, tais como: dias, meses, abreviações, etc.

As classes de Formatação
A classe java.text.DateFormat é uma classe abstrata de formatação (data para texto) e conversão (texto para data) independente do local. A classe java.text.SimpleDateFormat, é uma subclasse de implementação. Ambas trabalham com objetos do tipo Date.



Formatação Date
        
A  classe  SimpleDateFormat é uma classe concreta, subclasse de DateFormat e tem métodos concretos para formatar e fazer parse de data de forma sensitiva.
Para instanciar um objeto Date é muito simples:


Usando data convencional  (USA):
Precisamos apenas Importar a classe DATE que já é uma classe existente .
import java.util.Date;//Propiedade usada para usar a classe Date

Date dataConv=new Date();
         System.out.println("Data convencional  : " +dataConv);
         }
}

A saída de execução deste programa será:
Data convencional  : Wed May 14 18:44:32 BRT 2014



Exemplo  Prototipo :



Formatação de Mês e Dias da semana trazendo em formata (BR):
Deve criar um objeto para fazer a formatação e dando a saida junto com a date :
Para trabalhar  com  data existem várias informações como dia da semana(“EEEE”) (“MM”ou “MMM”), Messes.

      Exemplo formatando Messes “MM”:
Parametro:(“ dd/MM/yy” )

SimpleDateFormat M=new SimpleDateFormat("dd/MM/yyyy");
//MM= Mês como digito ex:01/05/14
Date data=new Date();
//Exibindo deve colocar o nome do objeto que ira ser usado
System.out.println("Mês exibido em digitos ->  " +M.format(data));




      Outro exemplo de formatação de Mês MMMM:
Parametro:(“dd/MMMM/yy” )

SimpleDateFormat MS=new SimpleDateFormat("dd/MMM/yyyy");//MMM= Mês como digito ex:01/maio/14
Date data=new Date();
//Exibindo deve colocar o nome do objeto que ira ser usado
System.out.println("Mês exibido em String pelo nome ->"+MS.format(data));


      Exemplo para formatação de dias da semana (“EEEE”)ou(“EE”)
Parametro:( “EEEE”)
SimpleDateFormat Dsemana=new SimpleDateFormat("EEEE");//EEEE= Dia da semana ex:Segunda-feira
SimpleDateFormat Dsemana=new SimpleDateFormat("EE");  //EE= Podendo ter a abreveação do nome ex:SEG
Date data=new Date();
System.out.println("Exibindo dias da semana -> "+Dsemana.format(data));






Formatação de Horas:
Podemos utilizar formatação de horas,minutos e segundos usamos os parâmetros: ("  HH:mm:ss")


SimpleDateFormat hora = new SimpleDateFormat("  HH:mm:ss");//formatando para exibição de horas,minutos e segundo
                   Date d=new Date();
                
                //Exibindo deve colocar o nome do objeto que ira ser usado

                   System.out.println("Hora registrada ->"+hora.format(d));



                                      Exercicios -


1)  (Resolvido).Com base nos conhecimentos adquiridos com o material acima , faça com que o programa mostre apenas a descrição do dia da semana , sem complementos ! 

 Resolução :


package fiap;
import java.util.Date;
public class Data {
       public static void main(String[] args) {
//Instanciar objeto "data".
             Date data = new Date();
//Atribuir a uma variavel "status" APENAS O DIA , que ja retorna da classe Date .
              int status = data.getDay();
//Estrututa de seleção necessária para exibir a descriçao do dia da semana , e não apenas um numero !
             if (status == 1){
                    System.out.println(" Hoje é Segunda ! ");
             }
             else if( status == 2){
                    System.out.println(" Hoe é Terça ! ");
             }
             else if( status == 3){
                    System.out.println(" Hoje é Quarta ! ");
             }
              else if( status == 4){
                    System.out.println(" Hoje é Quinta ! ");
             }
             else if( status == 5){
                    System.out.println(" Hoje é Sexta ! ");
             }
             else if( status == 6){
                    System.out.println(" Hoje é Sábado ! ");
             }
             else if( status == 7){
                    System.out.println("Hoje é Domingo ! ");
             }
       }     
}



2) Edite, compile, execute e explique o funcionamento do código abaixo:


detalhes hoje = new java.util.Date();  ...


println("Hoje é {data hoje}");  ...



                                      Referencias -

sites :



videos :




Grupo Fiapões

            Leonardo Zinanni
            Nathalia Ponce
            Rodrigo Santos

2014