4. oziel moreira neto – oziel.neto@gmail.com
Iniciando
• Objetivos do módulo
– Capacitar o aluno no desenvolvimento de aplicações
em Java usando as CORE APIs, bem como
manipulação de arquivos, dados, interfaces gráficas e
programação cliente-servidor.
• Habilidades adquiridas
– Codificar, compilar e executar aplicações em Java
6. oziel moreira neto – oziel.neto@gmail.com
Conceitos
Conceitos
– Distribuições da Tecnologia Java
– Tipos de Programas Java
– “Key Features” da Tecnologia Java
– Conceitos errados sobre Java
– Palavras Reservadas
– Entendendo a Portabilidade do Java
– Entendendo a Java Runtime Enviromnent
– Definição de Nomes
– Anatomia de uma Classe Java
– Aplicações Java Stand-Alone
– Operadores
– Controle de Fluxo
– Criando Classes
– Encapsulamento
9. oziel moreira neto – oziel.neto@gmail.com
Conceitos
“Key Features” da Tecnologia Java
• Simples • Portável
• Orientada a objetos • Interpretada
• Distribuída • Alto desempenho
• Robusta • Múltiplas linhas de
• Segura execução
• Neutra em relação à • Dinâmica
Plataforma
10. oziel moreira neto – oziel.neto@gmail.com
Conceitos
Conceitos errados sobre Java
• Java é uma extensão do HTML
• Java é apenas outra linguagem
• Todos os programas Java executam em páginas Web
• O Javascript é uma versão “Light” da linguagem Java
• Java é interpretado, muito lento para aplicações sérias
• Java é uma linguagem de programação fácil de
aprender
• Java é um ambiente fácil no qual programar
11. oziel moreira neto – oziel.neto@gmail.com
Conceitos
Palavras Reservadas
abstract double int strictfp **
boolean else interface super
break extends long switch
byte final native synchronized
case finally new this
catch float package throw
char for private throws
class goto * protected transient
const * if public try
continue implements return void
default import short volatile
do instanceof static while
12. oziel moreira neto – oziel.neto@gmail.com
Conceitos
Entendendo a Plataforma Java
• JVM – Java Virtual Machine
Máquina Virtual Java
JDK
JRE • JRE – Java Runtime Environmnent
Ambiente de execução de aplicativos Java
JVM
• JDK – Java Development Kit
Ambiente de desenvolvimento Java
Também chamado de J2SDK – Java 2 Software
Development Kit
13. oziel moreira neto – oziel.neto@gmail.com
Conceitos
Entendendo a Java Runtime Enviromnent
bytecode
Java Virtual Machine
Sistema Operacional
14. oziel moreira neto – oziel.neto@gmail.com
Conceitos
Entendendo a Portabilidade do Java
15. oziel moreira neto – oziel.neto@gmail.com
Conceitos
Definição de Nomes
• Um nome pode ser composto por letras (minúsculas
e/ou maiúsculas), dígitos e os símbolos _ e $.
• Um nome não pode ser iniciado por um dígito
(0 a 9).
• Letras maiúsculas são diferenciadas de letras
minúsculas. (Full Sensitive Case)
• Uma palavra-chave da linguagem Java não pode
ser um identificador.
16. oziel moreira neto – oziel.neto@gmail.com
Conceitos
Anatomia de uma Classe Java
17. oziel moreira neto – oziel.neto@gmail.com
Conceitos
Aplicações Java Stand-Alone
public static void main(String args[]) {
}
• Toda classe Java que possui o método acima, pode
ser iniciada numa JRE exclusiva, no modo Stand-
Alone
• Nem todas as classes Java necessitam ter esse
método
19. oziel moreira neto – oziel.neto@gmail.com
Conceitos
Operadores de bits
Deslocamento a esquerda <<
Deslocamento a direita >>
Deslocamento a direita (unsigned) >>>
Inversão de bits ~
Resto da Divisão %
Complemento (XOR) ^
20. oziel moreira neto – oziel.neto@gmail.com
Conceitos
Operadores de Comparação
Igualdade ==
Maioridade <
Menoridade >
Maior ou igual >=
Menor ou igual <=
Diferente !=
21. oziel moreira neto – oziel.neto@gmail.com
Conceitos
Estruturas de Repetição - FOR
sintaxe:
// antes de iniciar o laço, é executada a
// declaração
for ( declaracao; condicao booleana; expressao ) {
// bloco de código que sera repetido
// ate que a condição booleana seja false
// antes da execução iniciar o proximo laço
// sera a executada a expressao
}
22. oziel moreira neto – oziel.neto@gmail.com
Conceitos
Estruturas de Repetição - WHILE
sintaxe:
while (condicao booleana) {
// bloco de código que sera repetido
// ate que a condição booleana seja false
}
23. oziel moreira neto – oziel.neto@gmail.com
Conceitos
Estruturas de Repetição – DO WHILE-
sintaxe:
do {
// bloco de código que sera repetido
// ate que a condição booleana seja false
} while ( condicao booleana );
24. oziel moreira neto – oziel.neto@gmail.com
Conceitos
Estruturas de Seleção - IF
sintaxe:
if ( expressão booleana ) {
// bloco de código que será executado
// se a expressão booleana valer true.
} else {
// bloco de código que será executado
// se a expressão booleana valer false.
}
25. oziel moreira neto – oziel.neto@gmail.com
Conceitos
Estruturas de Seleção - SWITCH
sintaxe:
switch ( variavel ) {
case (inteiro):
// caso o valor da variavel seja igual
// ao do inteiro, inicia aqui
case (inteiro):
// caso o valor da variavel seja igual
// ao do inteiro, inicia aqui
default:
// caso não seja nenhum acima, inicia aqui
}
26. oziel moreira neto – oziel.neto@gmail.com
Conceitos
Controle de Fluxo
Uso do continue
for(int i = 0; i < 10; i++){
if (i == 5){
continue;
}
//....
}
27. oziel moreira neto – oziel.neto@gmail.com
Conceitos
Controle de Fluxo
Uso do break
for(int i = 0; i < 10; i++){
if (i == 5){
break;
}
//....
}
28. oziel moreira neto – oziel.neto@gmail.com
Conceitos
Controle de Fluxo Especiais
continue e break com label:
fora:
for(int i = 0; i < 10; i++){
for(int j = 0; j < 10; j++){
if (j == 5){
continue fora;
}
//....
}
29. oziel moreira neto – oziel.neto@gmail.com
Conceitos
Criando Classes em Java
• O que é abstração?
• O que são objetos?
• Do que eles são constituídos?
• O que são classes?
• Do que elas são constituídas?
• Qual a relação entre classe e objeto?
• Quais são os membros de uma classe?
• Atributos, métodos e construtores!
31. oziel moreira neto – oziel.neto@gmail.com
Conceitos
• Encapsulamento
Dessa forma, podemos alterar o código
dos métodos da classe Pedido sem pedido: Pedido
alterar a classe Cliente.
- pedidoID: String
- clienteID: String
não permitido - notaFiscal:String
- total: double
Atributos privados - ICMS: double
- produtos: List
Cliente
+ adcionarProduto(Produto)
+ removerProduto(produtoID)
+ recuperaProduto(produtoID)
Métodos públicos + calculaTotal(): double
permitido + calculaImpostos(): double
+ encerraPedido(): double
+ Pedido(pedidoID, clienteID)
32. oziel moreira neto – oziel.neto@gmail.com
Conceitos
Discussão
• O que se entende afinal pela Tecnologia e Plataformas
do Java?
• Sabendo que uma classe Java pode facilmente ser
modelada, então é fácil analisa-la e codifica-la?
• Programar em Java, não é só codificar? Exige um
entendimento prévio do problema?
34. oziel moreira neto – oziel.neto@gmail.com
Arrays
Agenda
– Java Arrays
– Definindo Arrays
– Cópia elementos
– Manipulando elementos
35. oziel moreira neto – oziel.neto@gmail.com
Arrays
Java Arrays
• Manipulação de conjunto de dados em
memória
• Possuem quantidade limitada de itens
• Podem ser usados com objetos ou primitivos
• Usamos para definir matrizes ou vetores
36. oziel moreira neto – oziel.neto@gmail.com
Arrays
Java Arrays
• Sintaxe
tipo identificador[] = new tipo[tamanho];
• Exemplos
int[] inteiros = new int[10];
String[] nomes = new String[10];
38. oziel moreira neto – oziel.neto@gmail.com
Arrays
Java Arrays
• Podem ter “n” dimensões formando matrizes
int[][] dados = new int[10][10];
dados[0][0] = 100;
39. oziel moreira neto – oziel.neto@gmail.com
Arrays
Definindo elementos
• Valores podem ser atribuídos na definição
int[] inteiros = {10,8,5,10,9};
• Tamanho pode ser obtido pela
propriedade length
System.out.print(inteiros.length);
40. oziel moreira neto – oziel.neto@gmail.com
Arrays
Copiando Elementos
int original[] = { 1, 2, 3, 4, 5, 6 };
int copia[] = new int[10];
System.arraycopy(original, 0, copia, 0, original.length);
41. oziel moreira neto – oziel.neto@gmail.com
Arrays
Manipulando elementos
String nomes[] = new String[10];
// preenchendo
for (int i=0; i < nomes.length; i++) {
nomes[i] = new String("Valor: "+i);
}
// imprimindo na tela
for (int i=0; i < nomes.length; i++) {
System.out.print( nomes[i]+ " " );
}
42. oziel moreira neto – oziel.neto@gmail.com
Arrays
Discussão
• Para que servem os Arrays nas linguagens de
programação?
• Vetores e matrizes são elementos complexos de
manipular, não existe nada mais fácil em Java para se
manipular objetos?
• Quando um objeto tiver uma relação múltipla com
outro, vamos definir usando arrays?
45. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Agenda
– Herança
– Generalização e Especialização
– Representação UML
– Objetos a partir de subclasses
– Codificando em Java
– Implementação das classes
– Formas de Herança
– Polimorfismo
– Overloading
– Overriding
– Benefícios do Polimorfismo
– Refinando a Hierarquia de Classes
– Uso de Classes, Métodos e Variáveis Final
– Uso de Classes e Métodos Abstratos
– Uso de Interfaces
– Pacotes
46. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Herança
• ferramenta mais valiosa das linguagens e modelos
baseados em OO;
• possibilita reutilizar uma grande quantidade de
código e componentes.
• facilita a criação de classes partir de superclasses.
• Definição: “capacidade de um objeto filho herdar
atributos e métodos do objeto pai, podendo
reescrever (alterar) as características herdadas se
necessário”.
47. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Herança Pessoa
A classe “cliente” é uma - nome: String
- nascimento: Data
subclasse da classe
+ getNome(): String
“pessoa”, e herda todos os + getDate() :Date
atributos e métodos da +Pessoa(nome)
classe “pessoa”.
Cliente é uma subclasse de Cliente
Pessoa. - clienteID: String
- CPF: String
Pessoa é uma superclasse de
+ getClienteID(): String
Cliente + getCPF() : String
+ Cliente(clienteID,CPF)
Construtores não são herdados
48. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Generalização: Bottom-Up
• Definição: Processo pelo qual
identificamos atributos comuns em
classes diferentes que são colocados
numa superclasse, menos específica e
mais genérica.
49. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Especialização: Top-Down
• Definição: Processo pelo qual
identificamos atributos incomuns em
classes diferentes que são colocados
nas subclasses de uma superclasse,
tornando-a mais específica e menos
genérica .
50. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Representação na UML
Define um modelo completo para
solucionar um problema
computacional.
51. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Objetos a partir de subclasses
Jose:Pessoa
Pessoa nome = Jose Silva
- nome: String nascimento: 10/01/1970
- nascimento: Data
+ getNome(): String
+ getDate() :Date
+Pessoa(nome) Joao:Pessoa
nome = Joao Souza
nascimento: 10/10/1980
Instancias de Pessoa: Jose e Joao
52. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Objetos a partir de subclasses
Pessoa
Mario:Cliente
- nome: String
- nascimento: Data
nome = Mario Silva Souza
+ getNome(): String nascimento: 01/05/1970
+ getDate() :Date clienteID = 0056
+Pessoa(nome)
CPF: 12345678-00
Instancias de Cliente: Mario e Oscar
Cliente
Oscar:Cliente
- clienteID: String
- CPF: String nome = Oscar Souza
+ getClienteID(): String nascimento: 02/02/1987
+ getCPF() : String clienteID = 0058
+ Cliente(clienteID,CPF) CPF: 87654321-00
53. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Codificando em Java
• Uma subclasse pode estender somente uma
superclasse diretamente. A herança em Java é
simples.
• A keyword extends na definição de classe,
define a relação de herança.
public class Pessoa {
// definição de classe
}
public class Cliente extends Pessoa {
// definição de classe
}
54. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Implementação das Classes
public class Produto {
// definição de classe
}
public class Livro extends Produto {
// definição de classe
}
public class CompactDisc
extends Produto {
// definição de classe
}
55. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Formas de Herança
• Extensão.
• Especificação.
• Combinação de Extensão com Especificação.
Durante a modelagem, devemos
aplicar a herança com critério!
56. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Polimorfismo
• POLIMORFISMO = Muitas Formas
Ou seja, para uma árvore de herança, temos muitas
formas de objetos e métodos a partir de uma
superclasse e suas subclasses.
• Princípio pelo qual modelamos e usamos
objetos construídos a partir de uma arvore de
herança.
57. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Polimorfismo
– Subclasses
– Sobrescrita de método
– Sobrecarga da método
58. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Polimorfismo
– Subclasses
• Quando especializamos uma superclasse e criamos um
subclasse criamos um nova forma para a superclasse e
conseqüentemente novas formas de objetos
Livro e CompactDisc são formas de
Produto.
59. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Overriding
– Sobrescrita de métodos
Definição: Esta utilidade da
orientação a objetos e das
linguagens orientada a
objetos nos permite escrever
numa subclasse um ou mais
métodos presentes numa das
superclasses da árvore de
herança podendo alterar o
comportamento da
superclasse
60. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Overriding
– Sobrescrita de métodos – Invocação Virtual de Métodos
Quando for chamado para execução
o método getDetalhes() da instancia
de Pessoa, o código executado será:
Pessoa.getDetalhes()
Quando for chamado para execução
o método getDetalhes() da instancia
de Cliente, o código executado será:
Cliente.getDetalhes()
Ou seja, quando chamarmos um
método de um objeto, o método
escolhido para ser executado será a
primeira ocorrência encontrada
daquele método num arvore de
herança (Invocação Virtual de
Métodos).
61. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Overloading
– Sobrecarga de métodos
O Polimorfismo ainda permite
que numa mesma classe
tenhamos métodos com o
mesmo nome, desde que o
número ou tipos de
parâmetros passados sejam
diferentes
62. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Benefícios do Polimorfismo
– Uso da Herança
Cadastro
- pessoas: Lista
+ adcionaPessoa(Pessoa)
+ removePessoa(indice)
+ listaPessoas(): Lista
+ Cadastro()
Vendo estas classes de objetos
podemos ver que o cadastro, pode
cadastrar (ele entende) qualquer
pessoa, inclusive os clientes,
devido a herança.
63. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Benefícios no Polimorfismo
– Maior facilidade de alteração do modelo;
– Maior facilidade de expansão de um modelo;
– Melhor garantia de que uma idéia presente na
“Descrição do Problema” será mantida;
65. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Refinando a Hierarquia de Classes
– Aplicação de Classes Final (Última forma);
– Aplicação de Classes Abstratas;
– Aplicação de Interfaces;
Processo pelo qual refinamos o modelo de
classes com o objetivo de melhor definir a
abrangência da solução referente ao
problema de negócio.
66. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Uso de Classes, Métodos ou Atributos Final (final)
Final Classes: Não podem ser especializadas, ou
seja, é a última forma do objeto.
public final class ContaEspecial
extends Conta {
...
}
67. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Uso de Classes, Métodos ou Atributos Final (final)
Final Methods: Não podem ser especializados,
ou seja, não podem ser reescritos na herança.
public class Poupanca extends Conta{
...
public final void credito(double valor) {
}
}
68. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Uso de Classes, Métodos ou Atributos Final (final)
Final Variables: Não podem ser alteradas depois
de inicializadas, ou seja, tornam-se constantes.
public class Conta {
...
public static final double CPMF = 0.0038;
}
As constantes geralmente são definidas como public static final,
para que qualquer classe tenha acesso a esse valor!
69. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Uso de Classes e Métodos Abstratos (abstract)
Abstract Classes: Não podem ser instanciadas,
ou seja, é a primeira forma do objeto, e devem ser
especializadas.
public abstract class Produto extends Object {
// metodo abstrato não possui corpo de implementacao.
public abstract String getDescricaoCompleta();
}
70. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Uso de Classes e Métodos Abstratos (abstract)
public abstract classs Produto extends Object{
...
public int getCodigo() {
return codigo;
}
public double getPreco() {
return preco;
}
public abstract String getDescricaoCompleta();
}
Uma classe abstrata, deve ter no mínimo um método abstrato.
Uma classe abstrata, pode ter métodos concretos (não abstratos).
Uma classe concreta, não pode ter métodos abstratos.
71. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Uso de Classes e Métodos Abstratos (abstract)
Nesse modelo, vemos que o
Produto é um tipo abstrato
manipulado pelo Catálogo!
Nesse caso, não podemos
vender ou manipular um
instância de Produto, somente
de Livro ou CD.
72. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Uso de Interfaces (interface)
Interfaces: Não podem ser instanciadas, e só
possuem métodos abstratos ou constantes.
public interface identificador [extends OutraInterface] {
// os métodos de uma interface não possuem corpo,
// somente definição.
[modificador] tipoRetorno identificador ([argumentos]);
}
73. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Uso de Interfaces (interface)
Usadas para definir apenas o nome de um
comportamento, e não sua implementação!
public interface Vendavel {
public double getValorVenda();
}
Uma classe, abstrata ou concreta, pode estender
somente uma classe, mas pode implementar múltiplas
interfaces.
74. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Uso de Interfaces (interface)
public class Livro extends Produto
implements Vendavel {
...
public double getValorVenda() {
return getPreco() * 1.2;
}
}
public class CompactDisc extends Produto
implements Vendavel {
...
public double getValorVenda() {
return getPreco() * 1.1;
}
}
Dessa forma, todas os objetos do modelo que quiserem ser vendavel,
implementam a interface Vendavel, dando um comportamento para o método
getValorVenda () de acordo com a necessidade de cada objeto.
75. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Uso de Interfaces (interface)
Nesse modelo, vemos que o
Vendavel é um tipo
extremamente abstrato
Dessa forma, Livro e CD, são
Produtos Vendaveis, com as
características herdadas de
produto, e uma
implementação de Vendavel.
76. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Uso de Interfaces (interface)
Dessa forma um
carrinho de compras,
manipula qualquer
objeto Vendavel,
inclusive Livro e CD.
Na evolução, esse
sistema pode usar o
Carrinho para qualquer
Vendavel, não somente
Produtos.
Enquanto o Catalogo
manipula Produtos, o
Carrinho manipula
Vendaveis
77. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Uso de Interfaces (interface)
public class Carrinho {
private Vendavel[] vendaveis;
private int counter;
...
public int adcionaVendavel(Vendavel vendavel) {
vendaveis[ counter++ ] = vendavel;
return counter;
}
public Vendavel getVendavel(int index) {
return vendaveis[ index ];
}
public double calculoCompras() {
double valor = 0;
for ( int i =0; i<vendaveis.length; i++ ) {
valor += vendaveis[i].getValorVenda();
}
return valor;
}
}
78. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Organizando as Classes em Pacotes (package)
Estrutura lógica, representada fisicamente em
diretórios e subdiretórios usada com o intuito de
organizar as classes de uma aplicação ou
sistema.
Notação da UML
79. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Organizando as Classes em Pacotes (package)
Codificação
Nas classes de um pacote package loja; package loja;
colocamos a definição de
public class Carrinho { public class Catalogo {
package .. ..
} }
import loja.*;
Nas classes de outro pacote
que necessitam usar as public class TestaProdutos {
classes acima, usamos a ..
definição de import }
80. oziel moreira neto – oziel.neto@gmail.com
Desenho Avançado de Classes
Discussão
• Resumindo. O que se entende por Herança?
• Quando devemos usar especialização e generalização?
• Sabemos que o polimorfismo nos fornece uma ferramenta
poderosa na adição de tipos de objetos, então quer dizer que ele
nos permite ter sistemas mais flexíveis e que tem menos impacto
nas mudanças?
• Qual a necessidade de usar Classes Abstratas?
• Qual a maior diferença de Classes Abstratas e Interfaces?
• Porque usamos os pacotes?
83. oziel moreira neto – oziel.neto@gmail.com
Manipulando Erros e Exceções
Agenda
– O que são Erros e Exceções?
– Hierarquia de Exceções
– Exceções mais conhecidas
– Capturando e tratando Exceções
– Estrutura try-catch-finally
– Usando o bloco try-catch
– Criando Exceções Customizadas
84. oziel moreira neto – oziel.neto@gmail.com
Manipulando Erros e Exceções
O que são erros e exceções?
São objetos e possuem classes para serem definidas.
Exceções estão associadas a condições não previstas
durante a execução de uma aplicação Java, e no caso de
acontecerem, a execução pode continuar, exemplo, uma
conversão numérica que falhou.
Tem o conceito de serem “arremessadas” ao chamador de
um método, e são filhas da classe java.lang.Exception
85. oziel moreira neto – oziel.neto@gmail.com
Manipulando Erros e Exceções
O que são erros e exceções?
São objetos e possuem classes para serem definidas.
Erros estão associados a condições não previstas durante a
execução de uma aplicação Java, e no caso de
acontecerem, a execução não pode continuar, exemplo,
falta de memória na JVM.
Tem o conceito de serem “arremessadas” ao chamador de
um método, e são filhas da classe java.lang.Error
86. oziel moreira neto – oziel.neto@gmail.com
Manipulando Erros e Exceções
Hierarquia da exceções
Todas as exceções e erros são subclasses de java.lang.Throwable
87. oziel moreira neto – oziel.neto@gmail.com
Manipulando Erros e Exceções
Exceções mais conhecidas
• java.lang.ArithmeticException - erro de aritmética;
• java.lang.NumberFormatException – erro de formatação
numérica;
• java.lang.ArrayIndexOutOfBoundsException – erro de
manipulação de posições em arrays;
• java.lang.NullPointerException – erro ao chamar um
membro de objeto nulo;
• java.io.IOException – erro de entrada e saída;
• java.lang.ClassNotFoundException – erro de carga de
classes;
88. oziel moreira neto – oziel.neto@gmail.com
Manipulando Erros e Exceções
Exceções mais conhecidas
• java.lang.RuntimeException - erro não previsto na
execução;
As exceções filhas de RuntimeException não
são obrigadas a serem tratadas, pois são consideradas
“Unchecked Exceptions”
As exceções filhas de Exception que não são de
RuntimeException são obrigadas a serem tratadas,
pois são consideradas “Checked Exceptions”
Todos os Erros, filhos de Error, devem ser tratados apesar
de não permitir que o programa continue.
89. oziel moreira neto – oziel.neto@gmail.com
Manipulando Erros e Exceções
Capturando e tratando exceções
Usamos em Java uma estrutura em bloco para
tratar execução de código que pode gerar uma
exceção: é o bloco try – catch – finally.
90. oziel moreira neto – oziel.neto@gmail.com
Manipulando Erros e Exceções
Estrutura try – catch - finally
try {
// código que inclui comandos/invocações de métodos
// que podem gerar uma situação de exceção.
} catch (Throwable t) {
// bloco de tratamento associado à condição de
// exceção derivada de Throwable ou a qualquer uma de suas
// subclasses, identificada aqui pelo objeto
// com referência t
} finally {
// bloco de código que sempre será executado após
// o bloco try, independentemente de sua conclusão
// ter ocorrido normalmente ou ter sido interrompida
// este bloco é opcional
}
91. oziel moreira neto – oziel.neto@gmail.com
Manipulando Erros e Exceções
Estrutura try – catch - finally
try { Se ocorrer uma IOException dentro do
a.method(); bloco try, será executado o bloco A.
b.method();
c.method(); Se ocorrer uma Exception que não é
filha de IOException dentro do bloco try,
} catch (IOException t) { será executado o bloco B.
// A
} catch (Exception t) { Se ocorrer um Error dentro do bloco try,
// B será executado o bloco C.
} catch (Throwable t) {
// C Independente do que aconteça o bloco
} finally { finally será executado.
}
92. oziel moreira neto – oziel.neto@gmail.com
Manipulando Erros e Exceções
Usando try – catch - finally
import java.io.*;
public class ConverteInteiro2 {
public String leLinha() {
byte[] lidos = new byte[20];
String texto = "";
try {
// le o buffer do teclado e pode gerar uma IOException
System.in.read(lidos);
texto = new String(lidos);
texto = texto.trim(); // retira os espacos em branco
} catch (IOException ioException) {
// se acontecer um erro na leitura
// imprime na tela o erro
ioException.printStackTrace();
}
return texto;
}
public int leInt() {
String linha = leLinha();
return Integer.parseInt(linha);
}
public static void main(String[] args) {
ConverteInteiro2 ci = new ConverteInteiro2();
System.out.print("Entre inteiro: ");
int valor = ci.leInt();
System.out.println("Valor lido foi: " + valor);
}
}
93. oziel moreira neto – oziel.neto@gmail.com
Manipulando Erros e Exceções
Criando exceções Customizadas
Geralmente em Java, quando queremos abortar a
execução de um método, internamente fazemos um
tratamento e geramos uma exceção ao invés de usar
testes de retorno.
public class Conta {
public boolean debito(double valor) {
if ( valor < 0 ) {
return false;
} else {
if ( saldo - valor < 0 ) {
return false;
} else {
saldo -= valor;
return true;
}
}
}
}
94. oziel moreira neto – oziel.neto@gmail.com
Manipulando Erros e Exceções
Criando exceções Customizadas
Dessa forma criamos uma exceção customizada!
95. oziel moreira neto – oziel.neto@gmail.com
Manipulando Erros e Exceções
Criando exceções Customizadas
public class SaldoInsuficienteException
extends Exception {
public SaldoInsuficienteException () {
super("Falta de saldo para esta operação!");
}
public SaldoInsuficienteException (String mensagem) {
super(mensagem);
}
}
Dessa forma criamos uma exceção customizada!
96. oziel moreira neto – oziel.neto@gmail.com
Manipulando Erros e Exceções
Arremessando exceções Customizadas
public class Conta2 {
private double saldo;
public void debito(double valor)
throws SaldoInsuficienteException {
if ( valor < 0 ) {
// unchecked exception não precisa ser declarada na clausula thorws
throw new IllegalArgumentException (“ Valor de debito deve ser maior que zero! ");
} else {
if ( saldo - valor < 0 ) {
// checked exceptio, deve ser declara na clausula throws
throw new SaldoInsuficienteException ("Saldo insuficiente! Atual: "+saldo);
} else {
saldo -= valor;
}
}
}
Dessa forma usamos uma exceção customizada!
97. oziel moreira neto – oziel.neto@gmail.com
Manipulando Erros e Exceções
Tratando exceções Customizadas
public class TesteConta2 {
public static void main(String args[]) {
Conta2 c2 = new Conta2();
try {
c2.credito(100);
System.out.println("Saldo: "+ c2.getSaldo() );
c2.debito(50);
System.out.println("Saldo: "+ c2.getSaldo() );
c2.debito(500);
System.out.println("Saldo: "+ c2.getSaldo() );
} catch (SaldoInsuficienteException e) {
// se acontecer uma SaldoInsuficienteException
// caira neste bloco
e.printStackTrace();
} catch (Exception e) {
// se acontecer qualquer outra Exception
// caira neste bloco
e.printStackTrace();
} finally {
System.out.println("Saldo: "+ c2.getSaldo() );
}
}
}
98. oziel moreira neto – oziel.neto@gmail.com
Manipulando Erros e Exceções
Discussão
• Já que as exceções em Java são objetos, então temos classes
para representá-las?
• Como identificar que um método lança uma exceção seu
chamador?
• Devemos então sempre definir exceções customizadas para
nossas aplicações?
• Qual a principal diferença entre CHECKED e UNCHECKED
Exceptions?
101. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Agenda
– Principais API’s
– Parâmetros em linha de comando
– Manipulando texto e cadeia de caracteres
– Entrada e saída de dados
– Java Streamers
– Java Readers e Writers
– Arquivos de Acesso Randômico
– Arquivos de Propriedades
– Serialização de Objetos
– Uso de Java Collectinons™
– Wrapper Classes
– Discussão
– Exercícios
102. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Principais API’s
A funcionalidades principais de uma linguagem inclui:
– manipulação de textos;
– manipulação de estruturas de dados;
– parâmetros em linha de comando para inicializar aplicativos;
– manipulação de arquivos de texto;
– manipulação de arquivos randômicos;
– manipulação de arquivos de configuração;
– formatação de dados;
Essas funcionalidades vão nos permitir implementar uma boa
parte das necessidades de qualquer tipo de sistema ou
aplicação.
103. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Principais API’s
Os principais pacotes que usaremos para escrever aplicações stand-
alone utilitárias sem interfaces gráficas são:
• java.lang – fornece as classes fundamentais de linguagem java;
• java.io – fornece classes para manipulação de arquivos;
• java.util – fornece as estruturas de dados e classes utilitárias;
• java.text – fornece as classes para formatação de dados;
• java.math – fornece as classes para manipular números grandes;
104. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Parâmetros em linha de comando
Usamos a passagem de dados como parâmetros em linha
de comando com o intuito de passar valores a uma
aplicação ou utilitário.
Esses valores podem ser:
diretórios, nomes de arquivos, valores, etc.
Ex: # java ClasseMain –a nomearquivo.txt
105. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Parâmetros em linha de comando
Capturando os parâmetros dentro da aplicação Java:
public class TesteParametros {
public static void main(String args[]) {
int tamanho = args.length;
System.out.println("Numero de Parâmetros: "+tamanho);
for(int i=0; i < tamanho; i++) {
System.out.println("Param: " + i + " Valor: "+ args[i] );
}
}
No método main, existe um array de String, args[],
} que representa os parâmetros passados.
# java TesteParametros parametro1 parametro2 “parametro 3”
106. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Manipulando textos e cadeia de caracteres
Manipulação de textos (cópia, pesquisa, conversões,
maiúsculas e minúsculas, carateres, etc.)
Conjunto de método presentes nas classes:
– java.lang.String – cadeia de caracteres
– java.lang.StringBuffer – buffer de caracteres
– java.lang.StringTokenizer – separador de textos
107. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Usos da Classe java.lang.String
public class TesteString {
public static void main(String args[]) {
String texto = “Oracle Java!";
int tamanho = texto.length();
System.out.println("Texto: "+texto);
System.out.println("Tamanho: "+tamanho);
String texto2 = texto.toUpperCase();
System.out.println("Texto2: "+texto2);
String texto3 = texto.toLowerCase();
System.out.println("Texto3: "+texto3);
String texto4 = texto3.replace( 'u', 'U' );
texto4 = texto4.replace( 'j', 'J' );
System.out.println("Texto4: "+texto4);
if ( texto3.equals( texto ) ) {
System.out.println(" texto3 e texto são iguais! ");
} else {
System.out.println(" texto3 e texto são diferentes! ");
}
if ( texto4.equals( texto ) ){
System.out.println(" texto4 e texto são iguais! ");
} else {
System.out.println(" texto4 e texto são diferentes! ");
}
}
}
108. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Usos da classe StringBuffer e StringTokenizer
import java.util.StringTokenizer;
public class TesteStringBuffer {
public static void main(String args[]) {
String texto = “Oracle Java! Java é aqui!";
StringTokenizer tokenizer = new StringTokenizer( texto, "!");
int numero = tokenizer.countTokens();
String[] tokens = new String[ numero ];
int count = 0;
while ( tokenizer.hasMoreTokens() ) {
tokens[count] = tokenizer.nextToken();
count++;
}
System.out.println("Texto: "+texto);
System.out.println("# Tokens: "+numero);
System.out.print("Tokens: ");
for ( int i = 0 ; i<tokens.length; i++) {
System.out.print( tokens[i] +",");
}
System.out.println();
StringBuffer buffer = new StringBuffer( texto );
StringBuffer invertido = buffer.reverse();
System.out.println("Texto: "+texto);
System.out.println("Invertido: "+invertido );
}
}
109. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Entrada e saída de dados.
Basicamente um aplicativo lida com:
• entrada de dados (via teclado, arquivos, mouse);
• processamento (execução de tarefas nesses dados);
• saída (via interface, arquivos e relatórios);
A entrada ou saída de dados usando teclado e arquivos,
em Java é feito usando:
• Streamers
• Readers
• Writers
110. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Java Streamers
Usados para manipular byte (ASCII) de forma
seqüencial (escrita ou leitura do arquivo todo).
Ligam uma fonte de dados (DataSource) até ao
aplicativo (Program)
Geralmente usados para troca de dados entre
aplicações Java e Non-Java.
111. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Java Streamers – java.io.InputStream
Streamers de entrada (do recurso para a aplicação)
112. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Java Streamers – java.io.OutputStream
Streamers de saída (da aplicação para o recurso)
113. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Readers e Writers
Usados para manipular char (UTF-16) de forma
seqüencial (escrita ou leitura do arquivo todo).
Ligam uma fonte de dados (DataSource) até ao
aplicativo (Program)
Geralmente usados para troca de dados entre
aplicações Java e Java.
Padrão para as aplicações WEB.
114. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Readers – java.io.Reader
Readers (entrada de dados do recurso para a aplicação)
115. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Writers – java.io.Writer
Writers (saída de dados da aplicação para o recurso)
116. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Categorias e uso
117. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Categorias e uso
118. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Exemplos
import java.io.*;
public class Copy {
public static void main(String[] args) {
try {
FileReader input = new FileReader(args[0]);
FileWriter output = new FileWriter(args[1]);
char[] buffer = new char[128];
int charsRead = 0;
charsRead = input.read(buffer);
while ( charsRead != -1 ) {
output.write(buffer, 0, charsRead);
charsRead = input.read(buffer);
}
input.close();
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
119. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Exemplos
import java.io.*;
public class LeTeclado {
public static void main (String args[]) {
String s = null;
InputStreamReader ir = new InputStreamReader(System.in);
BufferedReader in = new BufferedReader(ir);
System.out.println("Tecle Ctrl-Z para sair!");
try {
s = in.readLine();
while ( s != null ) {
System.out.println("Lido: " + s);
s = in.readLine();
}
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
120. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Exemplos
import java.io.*;
public class GravaArquivo {
public static void main (String[] args) {
File file = new File(args[0]);
try {
BufferedReader in = new BufferedReader( new
InputStreamReader( System.in ));
PrintWriter out = new PrintWriter( new
FileWriter(file));
String texto = null;
System.out.print("Digite o texto! ");
System.out.println("Ctrl+Z para gravar!");
while ( (texto = in.readLine() ) != null ) {
out.println(texto );
}
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
121. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Arquivos de Acesso Randômico
Usados para manipular arquivos de dados que de forma
randômica (escrita em leitura em qualquer parte do
arquivo).
Ligam uma fonte de dados (DataSource) até ao aplicativo
(Program)
Geralmente usados para troca de dados entre aplicações
Java e Non-Java.
Permite a implementação em Java do conceito de
Registro.
122. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Arquivos de Acesso Randômico
Classe: java.io.RandomAccessFile
O arquivo pode ser aberto num modo (Read, Write ou
ReadWrite)
Cada REGISTRO, tem um inicio e fim, com tamanho
definido.
A classe fornece principalmente métodos para:
lock (bloqueio), seek (pesquisa), read (leitura) e write
(gravação).
123. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Trabalho com Propriedades (Properties)
Uma propriedade (property) é um elemento da aplicação que
pode ser alterado em tempo de execução.
Sua existência permite a configuração do aplicativo (ex:
diretorio de dados, nomes de arquivos, dicionários, etc), e
essa configuração fica armazenada em arquivo.
Ainda podemos identificar elementos da JRE e do sistema
corrente (Windows, UNIX, etc)
Classe: java.util.Properties
124. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Trabalho com Propriedades (Properties)
Listando as propriedades do sistema
import java.util.*;
public class TestePropriedades {
public static void main(String args[]) {
Properties props = System.getProperties();
Enumeration prop_names = props.propertyNames();
while ( prop_names.hasMoreElements() ) {
String prop_name = (String) prop_names.nextElement();
String property = props.getProperty(prop_name);
System.out.println("property ’" + prop_name + "’ is ’" +
property + "’");
}
}
}
125. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Trabalho com Arquivos de Propriedades
Permite criar e manipular arquivos de configuração ou de
outra necessidade para as aplicações:
#nomes.properties
#tipo=papel Arquivos de texto simples, onde do
usuario=user lado esquerdo do igual temos a
administrador=admin propriedade e do lado direito seu
convidado=guest valor.
#aplicacao.ini
#arquivo de configuração
diretorioTemp=c:/temp
diretorioApp=d:/appl
126. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Trabalho com Arquivos de Propriedades
Lendo um arquivo de propriedades
// class CarregaPropriedades.java
import java.io.*;
import java.util.*;
public class CarregaPropriedades {
private Properties props;
public CarregaPropriedades(String nomeArquivo) {
try {
FileInputStream fis = new FileInputStream(
nomeArquivo );
props = new Properties();
props.load( fis );
} catch (Exception e) {
e.printStackTrace();
}
}
public String getProperty(String nome) {
return (String) props.get( nome );
}
}
127. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Trabalho com Arquivos de Propriedades
Obtendo as propriedades lidas:
// class TesteCarregaPropriedades.java
public class TesteCarregaPropriedades {
public static void main(String args[]) {
CarregaPropriedades carregador = null;
if ( args.length == 1 ) {
carregador = new CarregaPropriedades ( args[0] );
System.out.println("usuario="+
carregador.getProperty("usuario") );
System.out.println("convidado="+
carregador.getProperty("convidado") );
System.out.println("administrador="+
carregador.getProperty("administrador") );
} else {
System.out.println("Uso: java
TesteCarregaPropriedades arquivo.properties ");
}
}
}
128. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Serialização de Objetos
Mecanismo exclusivo da tecnologia Java
e usado para:
• Armazenar objetos em disco (manter o estado);
• Transmitir dados de objetos pela rede (comunicação);
• Permitir armazenar o estado das GUIs (SE e ME);
• Permitir a redundância em aplicações EE;
• Permitir armazenar dados em JavaCards™ (ME);
• Etc.
129. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Serialização de Objetos
Quando armazenamos um objeto (serializamos),
estamos gravando num Stream o estado como ele
se encontra (gravar atributos da memória no
recurso)
Quando lemos um objeto (deserializamos), estamos
lendo de um Stream o objeto no estado como ele se
encontrava (ler atributos do recurso para a memória)
130. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Serialização de Objetos
Para serializar um objeto, sua classe deve
implementar a interface java.io.Serializable
// Pessoa.java
public class Pessoa implements java.io.Serializable {
private String nome;
private java.util.Date nascimento;
public java.util.Date getNascimento() {
return nascimento;
}
public String getNome() {
return nome;
}
public void setNascimento(java.util.Date
nascimento) {
this.nascimento = nascimento;
}
public void setNome(String nome) {
this.nome = nome;
}
}
131. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Exemplos de Serialização de Objetos
// SerializadorPessoa.java
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class SerializadorPessoa {
public void gravaPessoa(String nomeArquivo, Pessoa pessoa)
throws IOException {
if ( pessoa != null && nomeArquivo != null ) {
FileOutputStream fos = new FileOutputStream( nomeArquivo );
ObjectOutputStream oos = new ObjectOutputStream ( fos );
oos.writeObject( pessoa );
oos.close();
}
}
public Pessoa recuperaPessoa(String nomeArquivo)
throws IOException, ClassNotFoundException {
Pessoa pessoa = null;
if ( nomeArquivo != null ){
FileInputStream fis = new FileInputStream( nomeArquivo );
ObjectInputStream ois = new ObjectInputStream( fis );
pessoa = (Pessoa) ois.readObject();
ois.close();
}
return pessoa;
}
}
132. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Exemplos de Serialização de Objetos
// classe TesteSerializadorPessoa.java
public class TesteSerializadorPessoa {
public static void main(String args[]) {
Pessoa pessoa = new Pessoa();
pessoa.setNome("Oziel Moreira Neto");
pessoa.setNascimento( new java.util.Date(75,9,23) );
try {
SerializadorPessoa serializador = new SerializadorPessoa();
serializador.gravaPessoa("oziel.obj", pessoa);
pessoa = null;
pessoa = serializador.recuperaPessoa("oziel.obj");
System.out.println( pessoa.getNome() );
System.out.println( pessoa.getNascimento() );
} catch (Exception e) {
e.printStackTrace();
}
}
}
133. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Serialização de Objetos
Quando serializamos um objeto, estamos
armazenando seus atributos de uma forma que o
Java entende!
134. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Coleções de Objetos – Java Collections™
Trabalhar mais facilmente com multiplicidade de
objetos sem os problemas dos arrays de
dimensionamento, pesquisa, etc.
Usamos uma Collection para:
• suportar relacionamentos múltiplos entre objetos;
• substituir o uso e manipulação de arrays;
• trabalhar com estruturas de dados em memória para
ordenação;
135. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Coleções de Objetos – Java Collections™
As Java Collections ™ fornecem uma interface de métodos
simples que manipulam qualquer objeto Java, pois seus
métodos manipulam referâncias da java.lang.Object.
As classes concretas da API de collection são divididas de
acordo com sua categoria de superclasse, e quando uma
subclasse implementa uma das interfaces abaixo temos:
• java.util.List – lista de objetos não ordenados, que permite
duplicados;
• java.util.Set – conjunto de objetos não ordenados, que não
permite duplicados;
•java.util.Map – estrutura em memória que armazena os objetos
de acordo com uma chave;
136. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Coleções de Objetos – Java Collections™
Como este framework é muito extenso, vamos estudar as três
principais estruturas de manipulação de coleções de objetos:
• java.util.ArrayList;
• java.util.HashMap
• java.util.HashSet.
Para o perfeito funcionamento das Collections, é
imprescindível que o os nossos objetos reescrevam os
seguintes métodos da java.lang.Object:
• public boolean equals(Object obj);
• public int hashCode();
137. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Coleções de Objetos – Java Collections™
Alterando a classe Pessoa
public class Pessoa implements java.io.Serializable {
private String nome;
private java.util.Date nascimento;
...
public boolean equals(Object obj) {
boolean flag = false;
if ( obj instanceof Pessoa ) {
Pessoa that = (Pessoa) obj;
flag = that.nome.equals( this.nome ) &&
that.nascimento.equals( this.nascimento );
}
return flag;
}
public int hashCode() {
return ( nome != null && nascimento != null) ?
nome.hashCode() ^ nascimento.hahsCode() : 0;
}
}
138. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Coleções de Objetos – Java Collections™
Testando as Collections com o objeto Pessoa:
• Explicar o ListaPessoas e executar o TesteListaPessoas;
• Explicar o MapaPessoas e executar o TesteMapaPessoas;
• Explicar o ConjuntoPessoas e executar o TesteConjuntoPessoas;
O que foi percebido?
139. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Wrapper Classes
Finalidade de converter:
• os tipos primitivos em tipos de referência;
• Strings (cadeias de números) em tipos primitivos;
140. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Wrapper Classes
Exemplos:
// convertendo um primitivo para String
int numero = 10;
Integer wrapperNumero = new Integer( numero );
String strNumero = wrapperNumero.toString();
// convertendo uma String para primitivo
String strNumero = “10”;
Integer wrapperNumero = new Integer( strNumero );
int numero = wrapperNumero.intValue();
141. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Discussão
• Vimos nesse capítulo uma série de conceitos que são usados em
aplicações de fato, ou seja, arquivos de configurações
(properties), coleções de objetos, manipulação de arquivos texto
e de arquivos de dados (Randômico).
• Necessariamente todas as aplicações usam esses recursos?
• Quais dos recursos nesse capítulo são mais fáceis de se
implementar?
• Podemos usar a serialização de objetos para armazenar nossos
objetos temporariamente e indefinidamente?
142. oziel moreira neto – oziel.neto@gmail.com
Desenvolvimento de Aplicações em Java
Exercícios
143. Linguagem de Programação I
Análise e Desenvolvimento de Sistemas
2º Semestre
Prof. Oziel Moreira Neto
oziel.neto@gmail.com
http://blog.oziel.com.br