Upload
natanael-fonseca
View
201
Download
2
Embed Size (px)
Citation preview
Java BásicoAula 04
Natanael Fonseca - Arquiteto de Software
Ementa
• Pacotes, tratamento de erros;
• Classes utilitárias: String, Wrappers, Date e Calendar;
Pra que servem os pacotes ?Imagine um projeto com 100 ou mais classes, como organizar isso tudo ? Pois bem, a linguagem Java oferece uma maneira bem interessante de arrumar o projeto, separando as classes em diretórios específicos chamados de pacotes.
De fato, a própria API do java está organizada dessa forma, conforme pode ser visto na JavaDoc API (http://docs.oracle.com/javase/8/docs/api/):
Pacotes, tratamento de erros 3
Analisando o arquivo rt.jarNo diretório %JAVA_HOME%\jre\lib\rt.jar é possível encontrar o jar que contem as classes da API do Java, podemos abrir e analisa-lo.
Pacotes, tratamento de erros 4
Declarando o pacote das classesA primeira instrução de um arquivo .java é a declaração de pacote, desta forma podemos declarar o pacote a qual uma determinada classe pertence usando a palavra reservada package.
Exemplo:
******************************
package br.com.treinamento;
public class Pessoa{
//Codigo da classe
}Pacotes, tratamento de erros 5
Incluir a classe no diretório br/com/treinamento
ConvençãoConvenciona-se declarar o nome de pacotes utilizando uma URLinvertida: normalmente a URL do “proprietario” da classe como,por exemplo, o site comercial da empresa.
Exemplo:
Se o site da empresa for:
www.tabajara.com.br
O pacote deve ser:
br.com.tabajara
Pacotes, tratamento de erros 6
Compilando classes que estão em pacotes
Apesar de no código fonte nos referirmos ao pacote utilizandoponto, na hora de compilar devemos seguir o padrão do sistemaoperacional.
Exemplo (Windows):
c:\java> javac br\com\treinamento\Pessoa.java
E para executar a classe:
c:\java> java br.com.treinamento.Pessoa
Pacotes, tratamento de erros 7
Utilizando classes de outro pacoteUma classe não tem automaticamente acesso a classes de outros pacotes. Para utilizar uma classe que esta em outro pacote e, consequentemente, em outro diretório há duas opções:
1- Utilizar o nome completo da classe (fully qualified name), que inclui também o nome do pacote (Ex: br.com.treinamento.Exemplo)
2- importar a classe através da instrução import. Desta forma, não é necessário utilizar o nome completo da classe no código.
Exemplo:
import java.útil.ArrayList;
Pacotes, tratamento de erros 8
Dicas
• Para melhorar a legibilidade do código, é conveniente declararexplicitamente o import individual das classes;
• Caso seu código necessite utilizar duas classes com mesmonome mas pacotes diferentes, você precisará referenciar asclasses utilizando seu nome totalmente qualificado.
• Além das classes do próprio pacote, as únicas classes quepodem ser utilizadas diretamente no código sem anecessidade de importação são aquelas do pacote java.lang.Neste pacote estão as classes consideradas fundamentais dalinguagem, como a classe System e String, entre outras.
Pacotes, tratamento de erros 9
Importação estáticaAté antes do Java 5, quando o programador queria acessar um atributo estativo de uma classe, ele era obrigado a incluir o nome da classe antes do atributo estático. Ex: Pessoa.STATUS.
Mas a partir do Java 5 foi incluído o suporte a importação de elementos estáticos de uma classe, melhorando a legibilidade do código fonte.
Sintaxe para importação estática
Import static nomeCompletoDaClasse.nomeMembro
ou
Import static nomeCompletoDaClasse.*;
Pacotes, tratamento de erros 10
Java ArchiveO software desenvolvido em Java pode ser um aplicativo ou uma bibliotecautilitária, que deve ser instalado ou distribuído para ser utilizado em outroscomputadores. Existe um padrão de empacotamento das classes em umúnico arquivo chamado JAR (Java Archive).
Existe um utilitário do próprio JDK chamado jar que facilita a criação destesarquivos.
Comando para criar um jar simples:
jar –cvf nomeDoJar.jar raizDoPacote
Onde as opções cvf significam create, verbose e file, respectivamente.
vale lembrar que o arquivo jar possui o mesmo formato de um arquivo zipqualquer, portanto, podemos abrir este tipo de arquivo no winrar, 7zip ouquaisquer outros utilitários que trabalhem com o formato zip.
Pacotes, tratamento de erros 11
Criação de um Jar executavelPara criar um JAR executável é necessário indicar no arquivoMANIFEST.MF o nome da classe, cujo método main, deverá serexecutado em decorrência da chamada ao JAR.
Exemplo:
******************************
Manifest-Version: 1.0
Created-By: Criador do Arquivo
Main-Class: Nome totalmente qualificado da classe que queremos executar.
******************************
Pacotes, tratamento de erros 12
Executando um Arquivo JarPara executar um arquivo JAR usa-se o utilitário java, passando –jar como argumento, assim como nome do arquivo que se quer executar.
Sintaxe
java –jar nomeJar.jar
E caso o arquivo jar possua como dependências outras bibliotecas devemos informar no classpath os jars necessários para a execução.
Exemplo:
java –classpath commons-logging.jar –jar meujarexecutavel.jar
Pacotes, tratamento de erros 13
Tratamento de ErrosCaracterística fundamental para sistemas de software, porque é praticamenteimpossível criar uma aplicação totalmente livre de erros.
Erros não são necessariamente causados por falhas no desenvolvimento.
Alguns exemplos:
• Um servidor de banco de dados pode estar fora do ar;
• Um arquivo de configuração pode ter sido removido acidentalmente;
• O usuário pode ter digitado um valor não aceitável.
Importante dar atenção ao tratamento de erros em aplicações. Por isso, éimportante reforçar aqui a necessidade do planejamento no tratamento deerros.
Pacotes, tratamento de erros 14
ExceçõesUma exceção é a indicação de que algum problema ocorreu durante aexecução do programa. Chama-se de tratamento de exceções ou tratamentode erros o mecanismo de sinalização de erros na plataforma Java.
Java define um conjunto de classes que representam erros. O pacote java.io,por exemplo, possui uma família de classes de exceção derivadas deIOException e o pacote java.sql contém uma família derivada deSQLException.
Através da extensibilidade oferecida pela linguagem é possível criar tipospróprios de exceções e para isso basta estender a classe java.lang.Exception.
Pacotes, tratamento de erros 15
Hierarquia Existe uma super classe de Exception denominada Throwable que, como diz opróprio nome, representa algo que pode ser lançado, interrompendo aexceção de um método.
Error – representa condições anormais
Graves e geralmente irrecuperáveis;
Runtime Exception – representa erros
do próprio programador (unchecked).
Exception – representa erros que fogem
ao controle do programador (checked).
Pacotes, tratamento de erros 16
Tratamento de ExceçõesAo estudar a linguagem no que tange os aspectos de tratamento de exceções é importante entender : como criar, como lançar e por último como trata-las.
1) Criando exceptions: Estendendo a classe Exception;
Class MyException extends Exception{} Instanciando a classe criada;
MyException ex = new MyException();
2) Lançando exceptions: Indicando que o método irá lançar a exception
public void metodoQueLancaException() throws Exception{} Utilizando a instrução throw
throw ex;
3) Tratando exceptions: Utiliza-se a instrução try-catch
Try{obj.metodoquelancaexception();
}catch( MyException ex){//codigo que faz alguma coisa.
}
Pacotes, tratamento de erros 17
Métodos uteis da classe throwableA classe throwable define alguns métodos herdados pela classe Exception, que são uteis no tratamento de exceções.
Método printStackTrace()
Fornece uma visão detalhada do erro, indicando qual o o método que originou a exceção, assim como, cada um dos métodos que a chamaram, além de mostrar a localização da linha responsável pelo lançamento da exceção. Essa informação é impressa no console, chamada de stack trace.
Método getMessage()
Recupera a mensagem da exceção que é definida no momento da construçãoda Exception, utilizando o construtor que recebe uma String como parâmetro.
Pacotes, tratamento de erros 18
Instrução FinallyUsualmente, este bloco é utilizado para códigos clean-up. Operações comofechar um arquivo ou uma conexão com o servidor são exemplos deoperações de clean-up.
Sintaxe :
try{
//instruções que podem gerar/lançar exceções
}catch(TipoException e){
//codigo que devera ser executado caso uma excecao seja lancada
}finally{
//liberação de recursos, log, etc.
}
O bloco finally é sempre executado !
Pacotes, tratamento de erros 19
Capturando múltiplas exceçõesEm muitos casos cada tipo de erro terá um tratamento diferente. Para conseguir estetratamento diferenciado são utilizadas diversas instruções catch, uma para cada exceção.
Sintaxe para captura de múltiplas exceçõestry{
//instruções que podem gerar/lançar exceptions}catch(TipoDaExcecao1 e){
//logs, codigo}catch(TipoDaExcecao2 e){
//logs, codigo}finally{
//liberação de recursos, log, etc....}
Não é permitido colocar instruções catch para checked expcetions que não tempossibilidade de serem lançadas, ou seja, não foram declaradas por nenhum método;
Declaram-se primeiramente as exceções mais especificas, isto é, as classes filhas e,depois, as mais genericas.
20Pacotes, tratamento de erros
Exercício
Crie um pacote chamado br.com.<<seunome>>e inclua uma classe chamada Principal commétodo main que ao ser executado, exibe pormeio de um JOptionpane uma mensagem deboas vindas. Tente criar um Jar executável doprograma criado, por meio de um pen drive,passe o jar para o colega ao lado para que eleteste o seu programa.
21Pacotes, tratamento de erros
Wrapper ClassesForam projetadas para encapsular valores de tipo primitivodentro de suas instancias. Existe uma wrapper class para cadatipo primitivo, conforme podemos ver na tabela a seguir:
22Classes utilitárias: String, Wrappers, Date e
Calendar
Tipo Primitivo Wrapper Class
boolean java.lang.Boolean
char java.lang.Character
byte java.lang.Byte
short java.lang.Short
int java.lang.Integer
long java.lang.Long
float java.lang.Float
double java.lang.Double
Características comuns as Wrapper Classes
Todas as wrapper classes que representam tipos primitivosnuméricos são sub-classes de java.lang.Number.
Todas as wrapper classes tem um construtor que recebe comoparâmetro um valor do tipo primitivo correspondente.
Exemplo:
Double d = new Double(10.8);
Integer i = new Integer(20);
Float f = new Float(4.2F);
23Classes utilitárias: String, Wrappers, Date e
Calendar
Classe Date
Classe utilizada para representar o tempo, que écomposto por ano, mês, dia atual, minuto, entreoutras propriedades.
Hoje a maioria dos métodos da classe Dateestão classificados como deprecated, ou seja,são métodos que não são mais utilizados, porisso essa classe foi substituída pela classeCalendar, para haver suporte correto ainternacionalização do sistema de datas.
24Classes utilitárias: String, Wrappers, Date e
Calendar
Testando a Classe Date
import java.util.Date;
public class TestDate{
public static void main(String[] args){
Date data = new Date();
Sytem.out.println(“Data agora:” + data );
}
}
25Classes utilitárias: String, Wrappers, Date e
Calendar
Classe Calendar
Classe mais completa e pode produzir valores detodos os campos de calendário necessários paraimplementar a formatação de data e hora, parauma determinada língua e estilo de calendário.Por exemplo, japonês, americano, italiano,brasileiro entre outros.
Por ser uma classe abstrata, para obter umcalendário é necessário chamar o métodoestático getInstance().
26Classes utilitárias: String, Wrappers, Date e
Calendar
Testando a Classe Calendar
import java.util.Calendar;
public class TestCalendar{
public static void main(String[] args){
Calendar c = Calendar.getInstance();
System.out.println(“Data e hora atual” + c.getTime());
}
}
27Classes utilitárias: String, Wrappers, Date e
Calendar
Classe DateFormat
Permite converter informações do tipo Stringpara data do tipo Date, permitindo seguir umformato. Consegue-se trabalhar ao contrário,convertendo um dado do tipo Date para umaString.
Como acontece com Calendar, está classetambém é abstrata, ou seja, para obter umainstancia dela o programador deve chamar ométodo estático getDateInstance().
28Classes utilitárias: String, Wrappers, Date e
Calendar
Utilizando DateFormatimport java.util.Calendar;
import java.util.DateFormat;
Import java.util.Date;
public class TestDateFormat{
public static void main(String[] args){
Calendar c = Calendar.getInstance();
Date data = c.getTime();
DateFormat formataData = DateFormat.getDateInstance();
System.out.println( formataData.format( data ) );
}
}29
Classes utilitárias: String, Wrappers, Date e Calendar
Fim da Quarta Aula
Obrigado.