Download - Apostila de JAVA.pdf
-
8/19/2019 Apostila de JAVA.pdf
1/147
CurtaTI - TecnologiaParceira da suaEmpresa
Autor: MarceloCosta Curta
[PROGRAMAÇÃOEM A!A" Uma introdução ao mundo da programação em Java.
-
8/19/2019 Apostila de JAVA.pdf
2/147
-
8/19/2019 Apostila de JAVA.pdf
3/147
© 2013, Marcelo Costa Curta - Todos os direitosreservados e protegidos pela Lei nº9.610, de
10/02/1998.Nenhuma parte deste livro poderá ser reproduzida, nemtransmitida, sem autorização prévia por escrito do autor.
-
8/19/2019 Apostila de JAVA.pdf
4/147
SOBRE O AUTOR
Marcelo Costa Curta – formado em Engenhariada Computação pela Universidade de Ribeirão Preto eMBA em Gestão de Projetos pela FGV, certificado emITIL V3, atua a 6 anos como desenvolvedor Java e a 4anos trabalha como consultor na empresa CurtaTI(www.curtati.com.br).
-
8/19/2019 Apostila de JAVA.pdf
5/147
-
8/19/2019 Apostila de JAVA.pdf
6/147
Lendo o arquivo gerado ___________________ 96
Scanner e PrintStream ____________________ 97
7. Serialização ________________________ 99
Transient e static _______________________ 104
Regras de Serialização __________________ 105
Externalizable __________________________ 106
Controle de Versão _____________________ 107
8. Reflexão __________________________ 109
9. Padrões de Projetos ________________ 115
Padrões estruturais _____________________ 117
Padrões comportamentais ________________ 117
Singleton (Padrão de Criação) _____________ 119
Factory Method (Padrão de Criação) ________ 122
Template Method (Padrão Comportamental) _ 128
Façade (Padrão Estrutural) _______________ 132
10. Referencias _______________________ 137
-
8/19/2019 Apostila de JAVA.pdf
7/147
Programação em Java
6 | w w w . b o r g e s r i n o l f i . c o m . b r
1. Introdução
A linguagem de programação Java é umalinguagem de alto nível, robusta e segura que tem comoprincipais características, a orientação a objetos e acapacidade de ser multiplataforma, lançada em 2005pela Sun Microsystems, e atualmente mantida pelaOracle.
Hoje é uma linguagem que conta com mais de 9milhões de desenvolvedores em todo o mundo1.
O grande diferencial do Java hoje é acaracterística de ser multiplataforma, ou seja, pode serexecutado em vários hardwares e SistemasOperacionais, através do conceito de Maquina Virtual
Java que veremos mais detalhes ainda nesse capitulo.
Por sua capacidade modularização e estruturabem definida, permite que seja implantado um ambiente
1 http://www.oracle.com/br/technologies/java/overview/index.html
-
8/19/2019 Apostila de JAVA.pdf
8/147
Programação em Java
7 | w w w . b o r g e s r i n o l f i . c o m . b r
altamente seguro e avançado para arquiteturascomplexas baseadas em rede.
Tecnologias JavaA tecnologia Java oferece meios para se
desenvolver aplicações robustas para com arquiteturasavançadas, programas desktop, sistemas embarcados(Embeddable ), para dispositivos móveis e interfaces
gráficas avançadas para seus aplicativos.Para fazer isso da melhor forma possível foidesenvolvida uma tecnologia para cada tipo deaplicação conforme segue abaixo:
Java EE – Java Platform, EnterpriseEdition
Com bibliotecas essenciais para odesenvolvimento de aplicações empresariais,permitindo desenvolver aplicações Web, comarquiteturas avançadas, e mais produtividade.
Java SE – Java Standard Edition
O JavaSE foi criado para o desenvolvimento
com bibliotecas padrões para um desenvolvimento deaplicações segura, e de alto desempenho.
Oracle Embeddable Java
Embeddable é um pacote criado paradesenvolvimento para dispositivos com recursosrestritos, tendo alto desempenho para acessar os
-
8/19/2019 Apostila de JAVA.pdf
9/147
Programação em Java
8 | w w w . b o r g e s r i n o l f i . c o m . b r
recursos do aparelho, dentro desta categoria podemoslistar JavaCard utilizado para desenvolvimento em
cartões inteligentes (crachás, bilhete eletrônico, etc) eJava TV para desenvolvimento de aplicações paraTV´s.
Java ME – Java Platform, Micro Edition
Possui ferramentas exclusivas paradesenvolvimento de aplicações para celulares, podendo
fazer acessos a funções específicas dos aparelhos devárias marcas e modelos.
JavaFX
JavaFX é uma plataforma criada paradesenvolvimento de interfaces visuais avançadas paraaplicações, reduzindo a complexidade dodesenvolvimento.
Estrutura da linguagem Java
A linguagem Java é composta basicamente dedois componentes centrais:
• Java Virtual Machine (JVM) – é umaferramenta capaz de executar instruçõesgeradas pelo compilador java. Este é capaz deexecutar um programa java.
-
8/19/2019 Apostila de JAVA.pdf
10/147
Programação em Java
9 | w w w . b o r g e s r i n o l f i . c o m . b r
• Java Development Kit (JDK) – trata-se de umkit de ferramentas essenciais para o
desenvolvimento, consistindo de classesessenciais, compilador Java, e a Máquina VirtualJava, entre outros.
Para iniciar o desenvolvimento Java,primeiramente todo código fonte é escrito em arquivostexto simples, com o seu editor de texto preferido, e
salvo com a extensão ‘.java ’.
Figura 1: MeuPrograma.java
Esse código fonte é compilado utilizando o
programa ‘ javac.exe ’ que vem junto com o Kit deDesenvolvimento (JDK).
Figura 2: MeuPrama.java passa por um compilador
Depois de compilado é gerado um arquivo como mesmo nome e com extensão ‘.class ’, este arquivocontém instruções independentes do computador quefoi compilado, ele contem informações de bytecodes ,que a Máquina Virtual Java (JVM) é capaz de executaresse programa.
-
8/19/2019 Apostila de JAVA.pdf
11/147
Programação em Java
10 | w w w . b o r g e s r i n o l f i . c o m . b r
Figura 3: Esquema de compilação Java
É exatamente essa estrutura de compilação quefaz o Java ter capacidade de ser multiplataforma, pois aJVM pode ser implementada para qualquer sistemaoperacional, inclusive podendo ter várias para a mesmaplataforma, fazendo com que sua aplicação execute em
várias plataformas, conforme ilustrado no desenhoabaixo:
MeuPrograma.java
Compilador• Converto o arquivo
'.java' em bytecode
MeuPrograma.class
Java irtual Mac!ine
• tradu" o arquivo'.class' embinario e e#ecutao programa
-
8/19/2019 Apostila de JAVA.pdf
12/147
Programação em Java
11 | w w w . b o r g e s r i n o l f i . c o m . b r
Figura 4: Funcionamento multiplataforma Java
Devido a execução de um programa Javapassar por uma camada a mais, a JVM, ela tende a sermais lenta do que as demais linguagens.
Para isso foi criado um conceito de Just-In-Time (JIT) Compiler, trata-se de um componenteagregado a JVM , que converte todos os bytecodes emlinguagem nativa da máquina somente quando oprograma Java é iniciado. O resultado é uma melhoraconsiderável no código que é interpretado pela JVM .
Chegou a hora do ‘Hello World’Para criar o nosso primeiro programa
precisaremos ter a JDK devidamente instalado, umeditor de texto a sua escolha, podendo facilmente serutilizado o Notepad que vem incluso no Windows.
-
8/19/2019 Apostila de JAVA.pdf
13/147
Programação em Java
12 | w w w . b o r g e s r i n o l f i . c o m . b r
Criar o código fonte
Utilizando o seu editor de texto preferido escrevao código fonte abaixo, e salve o arquivo, ele deve ter aextensão ‘.java ’ daremos o nome no arquivo de‘OlaMundo.java ’, como exemplo iremos salvar em umapasta no caminho ‘C:\primeiroPrograma ’.
class OlaMundo{
public static void main(String[] args) {
System.out.println("Hello World!");}
}
Código 1: Fonte da classe OlaMundo.java
ATENÇÃO: o código é ‘case sensitive ’, ou seja,ele é sensível a letras maiúsculas e minúsculas,
identificando como palavras diferentes, portanto ocódigo acima deve ser digitado exatamente comoexibido.
Compilando o Código Fonte
O Kit de Desenvolvimento JDK, traz asferramentas necessárias para compilar e executar o
programa java, e para utilizar eles iremos utilizar oPrompt de comando do Windows (Iniciar > Todos osProgramas > Acessórios > Prompt de Comando )
-
8/19/2019 Apostila de JAVA.pdf
14/147
Programação em Java
13 | w w w . b o r g e s r i n o l f i . c o m . b r
Figura 5: Prompt de comando do Windows
ATENÇÃO : Garanta que você esteja dentro dodiretório que contem o arquivo que criamos‘C:\primeiroPrograma ’ para fazer isso execute oscomando como mostrado na tela abaixo:
Figura 6: Verifique o diretório onde se localiza o arquivo
Agora estamos prontos para compilar o nossoprimeiro programa, utilizaremos um programa chamado
-
8/19/2019 Apostila de JAVA.pdf
15/147
Programação em Java
14 | w w w . b o r g e s r i n o l f i . c o m . b r
‘javac.exe’ que acompanha a JDK, e para isso bastaexecutar o comando abaixo:
javac OlaMundo.java
Código 2: Compilando a classe OlaMundo.java
Será criado um arquivo com o mesmo nome ecom extensão ‘.class’ trata-se do bytecode gerado quecontém instruções que a Máquina Virtual Java é capaz
de executar.
Figura 7: Arquivo compilado .class e código fonte .java
Executando o programa
Agora que já temos o bytecode (.class ) gerado enão tivemos nenhuma erro, podemos executar o nossoprimeiro programa feito em java. Para isso basta utilizaro comando ‘ java.exe ’ que também é instalado junto coma JDK.
-
8/19/2019 Apostila de JAVA.pdf
16/147
-
8/19/2019 Apostila de JAVA.pdf
17/147
Programação em Java
16 | w w w . b o r g e s r i n o l f i . c o m . b r
Variáveis e Controle de Fluxo
Todo programa de computador é elaborado pararesolver alguns problemas, ou automatizar operaçõesdo dia-a-dia. E isso sempre é feito manipulando dados através de instruções ou comandos.
Dados
Tipos primitivos de dadosTipos primitivos de dados é um conjunto de tipos
básicos de dados definido na linguagem java.
Tipo Tamanho(bits)
Descrição ValorPadrão(Default
)Byte 8 Valor mínimo de -128 emáximo de 127 (inclusive).Pode ser utilizado paraeconomizar memoria,podendo substituir o tipoint só que com valoreslimitados
0
Short 16 Valor mínimo de -32.768 evalor máximo de 32.767(inclusive) pode ser usadotambém para economizarmemória.
0
Int 32
Valor mínimo de -2.147.483.648 e máximode 2.147.483.647
0
-
8/19/2019 Apostila de JAVA.pdf
18/147
Programação em Java
17 | w w w . b o r g e s r i n o l f i . c o m . b r
(inclusive). Escolhido paravalores do tipo inteiro,
positivos e negativos.Long 6
4Valor mínimo de -9.223.372.036.854.775.808 e máximo de9.223.372.036.854.775.807 (inclusive). Usadoquando há a necessidadede um espaço de valores
maiores do que o int.
0L
Float 32 (754pontosflutuantes)
Utilizado para valoresdecimais positivos enegativos. Não érecomendado o seu usopara valores muitosprecisos como moedas,para isso é melhor utilizar
objetos como java.math.BigDecimal.
0.0f
Double 64 (754pontosflutuantes)
Utilizado para valoresdecimais positivos enegativos com umaabrangência maior do queo float . Também não érecomendado o seu uso
para valores muitosprecisos como moedas,para isso é melhor utilizarobjetos como
java.math.BigDecimal .
0.0d
Boolean
1 Tipo de dados comsomente dois valores
False
-
8/19/2019 Apostila de JAVA.pdf
19/147
Programação em Java
18 | w w w . b o r g e s r i n o l f i . c o m . b r
possíveis True ou False (verdadeiro ou falso).
Char 16
Utilizado para representarcaracteres Unicode. Ovalor mínimo é ‘\u0000’(ou 0) e o máximo é ‘\uffff’(ou 65.535 inclusive)
‘\u0000’
Tabela 1: Tipos primitivos existentes em Java
O tipo de dados utilizado no Java para
representar uma string (cadeia de caractere), é a classe java.lang.String , a cada vez que você coloca oscaracteres entre aspas duplas, automaticamente écriado um objeto da classe String.
Por exemplo, String s = “string de teste” . String não é um tipo primitivo de dados, é uma classe comsuporte especial pela linguagem Java, fazendo com que
pareça ser um tipo primitivo.Variáveis
No Java as variáveis precisam ser declaradasantes de serem utilizadas e podem ser divida em quatrotipos:
• Instancia de Variáveis (Campos Não estático) – espaços de memória para armazenar valoresnão estáticos e que pode ser diferente para cadainstância.
• Variáveis de Classe (Campos Estáticos) – équalquer campo declarado com o modificadorstatic , que define um valor único para todas asinstancias da classe.
-
8/19/2019 Apostila de JAVA.pdf
20/147
Programação em Java
19 | w w w . b o r g e s r i n o l f i . c o m . b r
• Variáveis Locais – A sintaxe para criação davariável é a mesma utilizada para os outros
tipos, porém ela é criada dentro de um método eé valida somente dentro dele, sendo visíveltambém somente dentro do método e não sendoacessível para o resto da classe.
• Parâmetros – São variáveis utilizadas parapassagem de parâmetros entre os objetos.
Para criar variáveis elas devem seguir algumasregras como, por exemplo:
• Os nomes são ‘case sensitive’ , ou seja, fazdiferença escrever uma variável com letrasminúsculas e maiúsculas.
• O primeiro nome tem que ser uma letra• Não pode utilizar caracteres especiais (por
exemplo: $@&)• Não pode possuir espaços em branco• Não pode ser palavra reservada para uso da
linguagem Java, para consultar as palavrasreservadas do Java consulte o linkhttp://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
No Java a sintaxe para se declarar uma variávelsegue a seguinte forma:
tipoDeDado nomeDaVariavel
Código 4: Forma de declaração de variável
Como os exemplos abaixo:
-
8/19/2019 Apostila de JAVA.pdf
21/147
Programação em Java
20 | w w w . b o r g e s r i n o l f i . c o m . b r
float valor;
int numero;
Código 5: Exemplo de declaração de variável
Constantes
Constantes são similares a variável, com umadiferença, não é possível alterar o seu valor durante aexecução do código, o seu valor é imutável.
As constantes são muito utilizadas para lembrar-
se de algum número muito grande ou um valor quepode ser identificado pelo nome da constante.Para declarar uma constante em java, deve-se
adicionar a palavra static antes do tipo de dado,conforme exemplo abaixo:
final float PI = 3.14159265f;
Código 6: Declaração de constantes
Atribuição de valores
Para poder utilizar a variável após a suadeclaração você pode atribuir valores a essas variáveis.Isso pode ser feito de varias formas, segue algumasdelas:
Atribuição de valor na mesma linha dadeclaração da variável, nesse caso a variável já écriada com um valor inicial.
int numero = 10;
Código 7: Atribuindo valores
-
8/19/2019 Apostila de JAVA.pdf
22/147
Programação em Java
21 | w w w . b o r g e s r i n o l f i . c o m . b r
Atribuir valor em qualquer momento após adeclaração da variável, após a sua declaração o valor
padrão é atribuída a variável, até que esse valor sejaalterado.
int numero; //nesse momento valor da variável
é 0
numero = 10;
Código 8: Atribuição de valor em um segundo momento
CastingAlguns tipos de dados quando declarados não
podem assumir posições de valores com menorcapacidade, como por exemplo:
long valor = 1000;
int numero = valor;
Código 9: Erro por tipos de dados incompativeis
Isso causaria um erro de compilação, pois,embora o número 1000, de certo em uma variável dotipo inteiro, a variável ‘valor’ é de um tipo de dado quesuporta pontos flutuantes e o inteiro não e com issovocê pode estar perdendo informação. Se realmentequisermos fazer essa operação, temos que converter ovalor da variável para inteiro, ou seja, fazer um ‘casting’
conforme código abaixo:
long valor = 1000;
int numero = (int) valor;
Código 10: Casting de tipo de dados
Mais alguns tipos de casting :
char a = 'a';
-
8/19/2019 Apostila de JAVA.pdf
23/147
Programação em Java
22 | w w w . b o r g e s r i n o l f i . c o m . b r
int b = (int) 5.1987;
float c = (float) 5.0;
int d = (char ) (a + 5);char e = (char ) 110.5;
Código 11: Outros tipos de casting de variaveis
Nem todos os tipos de dados são possíveisconverter, para isso segue abaixo uma tabela dos tipospossíveis de casting:
DE \PARA Byte short char int long float double
byte Implícito char Implícito Implícito Implícito Implícito
short byte char Implícito Implícito Implícito Implícito
char byte short Implícito Implícito Implícito Implícito
int byte short char Implícito Implícito Implícito
long byte short char int Implícito Implícito
float byte short char int long Implícitodouble byte short char int long float
Tabela 2: Tipos de Casting possíveis
Instruções ou Comandos
Operadores Aritméticos
Os operadores aritméticos são utilizados parafazer operações matemáticas, manipulando os dados(variáveis) criados no código. Segue abaixo algunsexemplos de operadores aritméticos:
int soma = 1 + 1; //resultado igual a 2
int subtracao = 2 - 1; //resultado igual a 1
-
8/19/2019 Apostila de JAVA.pdf
24/147
Programação em Java
23 | w w w . b o r g e s r i n o l f i . c o m . b r
int multiplicacao = 3 * 3; //resultado igual
a 6
int divisao = 6 / 2; //resultado igual a 3int modulo = 6 % 2; //resultado igual a 0
Código 12: Operadores aritméticos em Java
O operador aritmético módulo (%) retorna oresta da divisão entre os dois números, no exemploacima (6 / 2), tem o resto da divisão igual a ‘0’. Essetipo de operar é muito utilizado para identificar se um
número é par ou impar.
ATENÇÃO : Os operadores seguem as mesmasregras de precedência da matemática, podendo serlimitada por parênteses, obedecendo sempre a regramatemática.
Operadores de AtribuiçãoOs operadores de atribuição são utilizados para
atribuir um determinado valor a variável, sem perceber já vimos o operador ‘=’, que atribui valor a variável, alémdele temos outros operadores como segue abaixo:
Operador Descrição Exemplo
+= Operadorincremental - somavalor da variável eatribui valor.
int numero = 1;numero += 2; //o valor3 é atribuído avariável ‘numero’
-= OperadorDecremental -subtrai valor da
int numero = 2;
numero -= 2; //o valor0 é atribuído avariável ’numero’
-
8/19/2019 Apostila de JAVA.pdf
25/147
Programação em Java
24 | w w w . b o r g e s r i n o l f i . c o m . b r
variável e atribuivalor.
*= OperadorMultiplicador –multiplica valor davariável e atribuivalor.
int numero = 2;
numero *= 3; //o valor6 é atribuído avariável ‘numero’
/= Operador Divisor –divide valor da
variável e atribuivalor.
int numero = 6;
numero /= 2; //o valor
3 é atribuído avariável ‘numero’
%= Operador Módulo –divide valor avariável e atribuivalor.do resto dadivisão a variável
int numero = 4;
numero %= 3; //ovalor 1 é atribuído avariável ‘numero’
Tabela 3: Operadores de Atribuição
Todas essas operações poderiam ser feitas comos operadores aritméticos, porém como pudemosperceber, com essa sintaxe, economizamos código edeixamos o código fonte mais legível.
Além desses operadores de atribuição, temos
também alguns operadores de incremento edecremento de um em um, também com códigoreduzido.
Ao invés de escrevermos um código como:
int numero = 6;
-
8/19/2019 Apostila de JAVA.pdf
26/147
Programação em Java
25 | w w w . b o r g e s r i n o l f i . c o m . b r
int incrementado = numero + 1; //o valor 7 é
atribuído a variável incrementado
Código 13: Incrementando um número
Podemos escrever da seguinte forma:
int numero = 6;
int incrementado = numero++; //o valor 6 é
atribuído a variável ‘incrementado’, e a
variável ‘numero’ passa a valer 7
Código 14: Incrementando um numero de forma mais limpa no
código Essa forma chamada de PÓS-INCREMENTO,
primeiro atribui o valor a variável, para depois fazer oincremento, por isso a variável ‘numero’ , primeiro foiatribuído o seu valor a variável ‘incrementado’ e depoisa variável ‘numero’ foi adicionado ‘1’ a ela, fazendo comque ela passasse a valer ‘7’ .
No PRÉ-INCREMENTO o valor atribuído avariável ‘incrementado’ , já vem com valor da variável‘numero’ somado, conforme exemplo abaixo:
int numero = 6;
int incrementado = ++numero; //A variável
numero passa a valer 7, e este valor é
atribuído a variável ‘incrementado’.
Código 15: Utilizando pós-incremento em java
Operadores Relacionais
Todo programa é feito de tomada dedecisões com respostas podendo ser, verdadeira oufalsa e mais nada, não permitindo redundância ou
-
8/19/2019 Apostila de JAVA.pdf
27/147
Programação em Java
26 | w w w . b o r g e s r i n o l f i . c o m . b r
duvidas nas decisões. Para essas comparaçõesutilizamos os operadores relacionais, seguem
abaixo quais são os operadores:
Operador Descrição Exemplo
== Igualdade – verificase o primeiro valor éIGUAL ao segundo
int numero = 1;
boolean resultado;
resultado = (numero== 2); //o valor ‘false’é atribuído a variável
‘resultado’
!= Diferença – verificase o primeiro valor éDIFERENTE aosegundo
int numero = 1;
boolean resultado;
resultado = (numero
!= 2); //o valor ‘true’ é
atribuído a variável
‘resultado’
< Menor – verifica se oprimeiro valor éMENOR ao segundo
int numero = 1;
boolean resultado;
resultado = (numero <
2); //o valor ‘true’ é
atribuído a variável
‘resultado’
2); //o valor ‘false’ é
-
8/19/2019 Apostila de JAVA.pdf
28/147
Programação em Java
27 | w w w . b o r g e s r i n o l f i . c o m . b r
atribuído a variável
‘resultado’
>= Maior ou igual –verifica se o primeirovalor é MAIOR OUIGUAL ao segundo
int numero = 1;boolean resultado;
resultado = (numero
== 2); //o valor ‘false’
é atribuído a variável
‘resultado’
Tabela 4: Operadores Relacionais em Java
Operadores LógicosAs decisões aprendidas no tópico anterior
podem ser feitas em conjunto com duas ou maisdecisões, trazendo para o programa apenas umresultado ‘true’ ou ‘false’ , para isso é utilizado osoperadores lógicos ‘E ’ ou ‘OU’ , segue abaixo:
Operador Descrição Exemplo
&& Condição ‘E ’ – faz averificação e asduas condiçõesdevem serverdadeiras paraque seja retornado‘true ’
int numero = 1;
boolean resultado;
resultado = (numero >0 && numero < 3 ); //ovalor ‘true’ é atribuídoa variável ‘resultado’
|| Condição ‘OU’ – faza verificação e umadas duas condiçõesdeve ser verdadeirapara que sejaretornado ‘true ’
int numero = 1;boolean resultado;
resultado = (numero
== 2 || numero > 10 );
//o valor ‘false’ é
atribuído a variável
‘resultado’
Tabela 5: Operadores Lógicos em Java
-
8/19/2019 Apostila de JAVA.pdf
29/147
Programação em Java
28 | w w w . b o r g e s r i n o l f i . c o m . b r
Estruturas de Controle
O fluxo de um sistema desenvolvido pode terseu rumo alterado conforme o valor inserido (Decisão),ou tem-se a necessidade de repetir algum trecho decódigo por algum período seja ele fixo, ou por algumacondição de parada (Repetição). Para isso temosalguns recursos para controle do fluxo do programa,vamos ver quais são e como funciona cada um deles.
Decisão
IF-Else
Este é um dos comandos mais comuns paracontrole de fluxo. Com as tomadas de decisõestrazendo respostas booleanas , ou seja, verdadeiras oufalsas, pode ser que eu queira tomar alguma ação se
for verdadeira e outra completamente diferente se forfalsa, e para esse tipo de controle usamos o If-Else, quepode facilmente ser traduzido para ‘Se-Senão’, paraessas tomadas de decisões utilizamos os operadores
lógicos , =.
Por exemplo, para verificar se o valor digitado
não é negativo, para o caso de validação de um sistemade pagamento de uma conta, por exemplo:
if ( valor < 0) {
System.out.println ("O valor não pode ser
negativo ");
} else {
-
8/19/2019 Apostila de JAVA.pdf
30/147
Programação em Java
29 | w w w . b o r g e s r i n o l f i . c o m . b r
System.out.println ("O valor esta correto.
");
}Código 16: Estrutura if-else
O bloco ‘else’ é opcional, caso você queira quealgo aconteça.
O comando ‘if-else’ pode ser aninhado comvárias sequencias de decisões, e a sequencia dasdecisões são seguidas, caso a primeira seja satisfeita,
nenhuma mais será testada, conforme o exemploabaixo:
if ( nota >= 9) {
System.out.println ("Você passou com
louvor!");
} else if ( nota >= 8) {
System.out.println ("Você passou!");
} else if ( nota >= 7) {System.out.println ("Você passou raspando!");
} else if ( nota >= 6) {
System.out.println ("Você não passou pois a
média é 7, tente novamente!");
} else {
System.out.println ("Você precisa estudar
mais!");
}
Código 17: Estrutura if-else aninhada
Switch
O Comando ‘switch’ pode ter vários caminhos deexecução possíveis, conforme exemplo abaixo:
int numero = 8;
-
8/19/2019 Apostila de JAVA.pdf
31/147
Programação em Java
30 | w w w . b o r g e s r i n o l f i . c o m . b r
String colocacao;
switch (numero) {
case 1: colocacao = "Primeiro";break;
case 2: colocacao = "Segundo";
break;
case 3: colocacao = "Terceiro";
break;
case 4: colocacao = "Quarto";
break;
case 5: colocacao = "Quinto";
break;case 6: colocacao = "Sexto";
break;
case 7: colocacao = "Sétimo";
break;
case 8: colocacao = "Oitavo";
break;
case 9: colocacao = "Nono";
break;
case 10: colocacao = "Décimo";
break;
default: colocacao = "Acima do
décimo";
break;
}
System.out.println(colocacao);
Código 18: Estrutura do comando switch
Neste código a variável ‘numero’ representa acolocação do candidato e deve ser impressa na tela acolocação por extenso até a 10ª posição, acima destaposição deve aparecer a mensagem "Acima dodécimo", como a variável número é ‘8’, deve serimpresso na tela a mensagem "Oitavo".
-
8/19/2019 Apostila de JAVA.pdf
32/147
Programação em Java
31 | w w w . b o r g e s r i n o l f i . c o m . b r
ATENÇÃO: No bloco do ‘switch’ eu posso terquantos ‘case’ for necessário, a instrução ‘break ’ é
necessário para o comando parar de ser executadoapós ter encontrado a opção correta, caso contráriotodos os ‘case’ abaixo da opção escolhida, tambémserá executado.
Repetição
Estruturas de repetição são utilizadas para
executar um trecho de código algumas vezes, ou umnúmero de vezes fico ou definindo uma condição deparada.
While e Do-While
O comando WHILE executa um trecho de códigoenquanto a condição permanecer verdadeira.
Por exemplo, o código abaixo imprime númerosde 1 a 100.
int contador = 1;
while (contador
-
8/19/2019 Apostila de JAVA.pdf
33/147
Programação em Java
32 | w w w . b o r g e s r i n o l f i . c o m . b r
ATENÇÃO : É importante definir uma condição de
parada, pois caso não seja bem definido teremos o quechamamos de um laço infinito, o que quer dizer que só iraterminar quando o programa for encerrado.
Na repetição DO-WHILE a única diferença é que averificação da condição é feito no final, ou seja, sempre seráexecutado pelo menos uma vez o bloco de código desejado.Veja o mesmo exemplo acima, feito com DO-WHILE:
int contador = 1;
do{
System.out.println("Número " +
contador);
contador++;
}while(contador
-
8/19/2019 Apostila de JAVA.pdf
34/147
Programação em Java
33 | w w w . b o r g e s r i n o l f i . c o m . b r
vezes que o laço irá percorrer, como no exemploabaixo:
int[] numeros = {1, 2, 3, 4, 5};
for (int cont : numeros) {
System.out.println("Número: " +
cont);
}
Código 22: Estrutura do For-each
Esse laço ira percorrer as 5 posições do array chamado ‘numeros’ , e guardar a posição atual navariável ‘cont’ para que possa ser utilizado dentro dolaço.
-
8/19/2019 Apostila de JAVA.pdf
35/147
Programação em Java
34 | w w w . b o r g e s r i n o l f i . c o m . b r
2. Orientação a Objetos
A programação Orientada a Objetos foidesenvolvida para resolver alguns problemas daprogramação procedural como, por exemplo:
• Muita linha de código• Difícil manutenção• Difícil avaliar impacto de mudanças•
Não modularizadoBasicamente a orientação objetos consiste emtrazer a programação o mais próximo possível domundo real. Ou seja, no mundo real o que temos sãoobjetos interagindo um com outro, através de troca demensagens.
-
8/19/2019 Apostila de JAVA.pdf
36/147
Programação em Java
35 | w w w . b o r g e s r i n o l f i . c o m . b r
Como no exemplo ilustrado abaixo:
Figura 9: Troca de mensagem, principio básico daOrientação a Objetos
A orientação a objetos consiste em consideraruma coleção de objetos que interagem de maneiraorganizada.
Pode parecer complicado, mas veremos comotraduzir isso para o mundo computacional.
A responsabilidade do programador éespecificar quais serão as mensagens que cada objetopode receber e também qual ação o objeto deve fazerao receber a mensagem.
Por exemplo, vamos imaginar um caso real,temos que desenvolver um software para uma locadoraque tem diversos clientes.
Objeto: Paulo
Ação: Falar
Objeto: Rafaela
Ação: Ouvir
Mensagem:“Oi tudo bem?”
-
8/19/2019 Apostila de JAVA.pdf
37/147
Programação em Java
36 | w w w . b o r g e s r i n o l f i . c o m . b r
Figura 10: Representação de objetos do mundo real
1. O objeto cliente escolhe o filme e passa umamensagem para o objeto atendente com umparâmetro, que é o nome do filme que o clientedeseja.
2. O Atendente ao receber essa mensagem
reserva o filme, enviando uma mensagem aoobjeto Filme.
3. O Filme ao receber essa mensagem, é colocadoem um status de alugar, através da ação‘serAlugado’ .
Esses objetos são estruturas de programação
que contêm informações e os comportamentos querepresentam um objeto dentro do sistema.
ClassesUma classe é uma estrutura criada para criação
de objetos.
Objeto: Cliente1
Ação: EscolherFilme
Objeto: Atendente
Ação: ReservarFilme
EscolherFilme(nomeDoFilme)
Objeto: FilmeAção: serAlugado
serAlugado()
-
8/19/2019 Apostila de JAVA.pdf
38/147
Programação em Java
37 | w w w . b o r g e s r i n o l f i . c o m . b r
Vimos que um objeto representa algo do mundoreal, e podemos ter vários objetos do mesmo tipo, por
exemplo, pessoas são bilhões de pessoas no mundocom as mesmas características, e para isso criarmosuma estrutura única que pode representar váriosobjetos. Como no modelo abaixo:
Figura 11: Classe é estrutura que se pode gerar vários objetos
É como se a Classe fosse uma receita de umbolo, a receita em si ela não é física e não ocupa umespaço, não tem cheiro, porém através dela podemoscriar um bolo real que tem cheiro, e é físico. A receita
Classe$ Pessoa
Atri#utos$
%ome
&dade
e#o
A$%o$
(alar)*
O#&eto$ Pessoa+
Atri#utos$
%ome$ João
&dade$ +,
e#o$ Masculino
A$%o$
(alar)*
O#&eto$ Pessoa-
Atri#utos$
%ome$ Maria
&dade$ -
e#o$ /eminino
A$%o$
(alar)*
-
8/19/2019 Apostila de JAVA.pdf
39/147
Programação em Java
38 | w w w . b o r g e s r i n o l f i . c o m . b r
seria a Classe e a partir dela posso criar vários bolos,ou melhor, objetos.
Agora que já sabemos o que é uma classevejamos como criar a classe Pessoa, definida acima,em Java.
Criamos um arquivo chamado ‘Pessoa.java ’contendo o seguinte código:
public class Pessoa {
//Variáveis (Atributos)
public String nome;
public int idade;
public String sexo;
//Métodos (ações)
public void falar (){
System.out.println("Oi, Tudo bem?");
//comando para exibir ‘Oi, Tudo bem?’ na tela
}
}
Código 23: Código da classe Pessoa.java
Atributos
As variáveis (atributos) da classe pessoa são nome,idade e sexo, todas elas são declaradas da seguinte forma:
Código 24: Estrutura de declaração de varivaies
Onde os modificadores de acesso podem ser:
-
8/19/2019 Apostila de JAVA.pdf
40/147
Programação em Java
39 | w w w . b o r g e s r i n o l f i . c o m . b r
• public – Todas as outras classes tem acesso a essavariável
•
private – Somente a própria classe pode acessar asvariáveis (no caso a classe Pessoa)• protected – As classes do mesmo pacote ou
subclasses, podem acessar as variáveis.
Veremos mais detalhes sobre os modificadoresno próximo capitulo.
MétodosMétodos são procedimentos ou funções, que
tem a capacidade de manipular os atributos paraexecutar alguma ação atribuída a classe, por exemplo anossa classe Pessoa, tem a responsabilidade de falar, epor isso foi especificado um método chamado ‘falar ’com um código para exibir uma frase na tela.
Todos os métodos são compostos de:
()
Código 25: Estrutura básica de um método
Onde:• Modificadores de acesso - são os mesmos que
vimos para as variáveis.• Tipo de Retorno – trata-se do valor que será
retornado após a execução do método, pode serutilizado todos os tipos de dados já conhecidos.
• Nome do Método – deve ser um nome coerentecom a ação que ele faz, inicia-se com letraminúscula por convenção.
-
8/19/2019 Apostila de JAVA.pdf
41/147
Programação em Java
40 | w w w . b o r g e s r i n o l f i . c o m . b r
• Parâmetros – são variáveis que o métodorecebe para poder manipular e auxiliar a ação
que será feita.
Chamamos essa definição do método, deassinatura do método, ou seja, não sabemos ainda asua implementação, mas já podemos entender o queela deve fazer, os parâmetros que recebe e o tipo deretorno.
Sobrecarga de métodos
Em java podemos ter dois métodos com omesmo nome, desde que tenham parâmetrosdiferentes, chamamos isso de sobrecarga de métodos.
Por exemplo:
//Métodos (ações)
public void falar (){
System.out.println("Oi, Tudo
bem?");//comando para exibir ‘Oi, Tudo bem?’
na tela
}
public void falar (String frase){
System.out.println(frase);//comando
para exibir o conteúdo da variável 'frase' natela
}
Código 26: Dois métodos podem ter o mesmo nomedesde que tenham parâmetros diferentes
Objetos
-
8/19/2019 Apostila de JAVA.pdf
42/147
Programação em Java
41 | w w w . b o r g e s r i n o l f i . c o m . b r
Como vimos até agora a linguagem java temtoda sua estrutura baseada em objetos interagindo
entre si através de passagem de parâmetros utilizandométodos.
Veremos agora como criar, na prática, algunsobjetos, aproveitando ainda o exemplo de pessoas.Criaremos uma nova classe chamada‘ExemploObjetos.java ’.
1 public class ExemploObjetos {2 public static void main(String[] args)
{
3 Pessoa pessoa1; //a variável
'pessoa1' é do tipo Pessoa
4
5 pessoa1 = new Pessoa();
//'pessoa1' foi alocado na memória tendo
todos atributos de Pessoa
6
7 //atribuindo valor para os
atributos do objeto
8 pessoa1.nome = "João";
9 pessoa1.idade = 18;
10 pessoa1.sexo = "Masculino";
11 }
12 }
Código 27: : Criação de objetos e atribuição de valoresa seus atributos
Na linha 3 apenas declaramos que a variável‘pessoa1’ é uma variável do tipo ‘Pessoa’, ou seja, elaterá todas as características de pessoas.
-
8/19/2019 Apostila de JAVA.pdf
43/147
Programação em Java
42 | w w w . b o r g e s r i n o l f i . c o m . b r
Na linha 5 é onde efetivamente criamos (oucomo dizemos instanciamos), a palavra reservada new é
quem tem a capacidade de criar o objeto, a frente dapalavra new , esta o construtor, que inicializa o objeto,veremos mais detalhes do construtor no próximocapítulo.
Após a criação do objeto já temos alocado namemória o valor padrão de cada atributo da classe
Pessoa, conforme vemos abaixo:
• Variável: pessoa1• Tipo: Pessoa.java• Atributos:
• String nome = null;• int idade = 0;•
String sexo = null;
Das linhas 8 a 10 alteramos os valores dessesatributos.
Já que temos agora o objeto pronto com osvalores iniciados podemos fazer a chamada ao seumétodo da seguinte forma:
pessoa1.falar();Desta forma estamos chamando o método
falar(), que pelo código dele escreve na tela amensagem ‘Oi, Tudo bem? ’.
-
8/19/2019 Apostila de JAVA.pdf
44/147
Programação em Java
43 | w w w . b o r g e s r i n o l f i . c o m . b r
Para entendermos melhor a importância dosmétodos e dos atributos, vamos alterar o código do
método ‘falar()’ da classe Pessoa para o código abaixo:
public void falar (){
System.out.println("Oi, Tudo bem? Meu
nome é: " + this.nome);//comando para exibir
‘Oi, Tudo bem? Meu nome é: ’ + valor da
variável ‘nome’ na tela
}
Código 28: Imprimindo uma mensagem na tela
Agora vamos modificar a classe‘ExemploObjetos.java’ para o código abaixo:
public class ExemploObjetos { public static void main(String[] args) {
Pessoa pessoa1; //a variável
'pessoa1' é do tipo Pessoa
pessoa1 = new Pessoa(); //'pessoa1'
foi alocado na memória tendo todos atributos
de Pessoa
//atribuinto valor para os atributos
do objeto
pessoa1.nome = "João";
pessoa1.idade = 18;
pessoa1.sexo = "Masculino";
pessoa1.falar();
Pessoa pessoa2;
pessoa2 = new Pessoa(); //'pessoa2'
foi alocado na memória tendo todos atributos
de Pessoa
-
8/19/2019 Apostila de JAVA.pdf
45/147
Programação em Java
44 | w w w . b o r g e s r i n o l f i . c o m . b r
//atribuinto valor para os atributos
do objeto pessoa2.nome = "Maria";
pessoa2.idade = 25;
pessoa2.sexo = "Feminino";
pessoa2.falar();
}
}
Código 29: Criação de dois objetos e chamada de
método
Temos agora dois objetos criados (pessoa1 epessoa2) com base na classe Pessoa, e chamamos ométodo falar() dos dois objetos. O resultado final quedevemos ver na tela é o seguinte:
Oi, Tudo bem? Meu nome é: João
Oi, Tudo bem? Meu nome é: Maria
Construtores
Como pudemos ver no código da classe‘ExemploObjetos.java’ primeiro instanciamos o objeto(new) e depois nas linhas 8 a 10 e 19 a 21, atribuímos
valores aos atributos do objeto.
O construtor é um método que é chamado nomomento da inicialização do objeto. Ele deve ter onome idêntico ao da classe, e não tem um tipo deretorno.
-
8/19/2019 Apostila de JAVA.pdf
46/147
Programação em Java
45 | w w w . b o r g e s r i n o l f i . c o m . b r
Para criar um construtor para a classe‘Pessoa.java ’ utilizaremos o código abaixo:
//Construtor para inicializar as
variváveis
public Pessoa(String nome, int idade,
String sexo) {
this.nome = nome;
this.idade = idade;
this.sexo = sexo;
}
Código 30: Construtor da classe Pessoa.java
Após essa alteração, temos que alterar a classe‘ExemploObjetos.java ’, conforme o código abaixo:
public class ExemploObjetos { public static void main(String[] args) {
Pessoa pessoa1;
pessoa1 = new
Pessoa("João",18,"Masculino");
pessoa1.falar();
Pessoa pessoa2;
pessoa2 = new Pessoa("Maria", 25,
"Feminino");
pessoa2.falar();
}
}
Código 31: Criação de objetos utilizando construtorespara inicializar os atributos
Agora ao instanciarmos um objeto da classePessoa , o método inicializador, ou seja, o construtor jáatribuiu os valores para seus atributos, e nãoprecisamos atribuir um a um.
-
8/19/2019 Apostila de JAVA.pdf
47/147
Programação em Java
46 | w w w . b o r g e s r i n o l f i . c o m . b r
Anteriormente conseguimos instanciar a classe
Pessoa, sem ter definido explicitamente um construtorpadrão, de padrão a classe já tem um construtor quenão recebe parâmetro nenhum, porém devemos tomarcuidado, pois os atributos vão assumir o valor padrãode acordo com o tipo de dados.
Para garantirmos que todos os atributos
essenciais sejam preenchidos com valores reais, énecessário especificar um construtor.
ATENÇÃO: como o construtor é um método,podemos também fazer sobrecarga dele.
Pacotes e importaçõesCom a orientação a objetos, cada classe é um
arquivo, além do arquivo principal, e de muitos outrosque são criados nesse tipo de projeto. Para issoprecisamos organizar muito bem os códigos, para o java se aproveita de uma estrutura já conhecida quesão as pastas e dentro dessas pastas colocamos
nossos arquivos.A diferença é que no Java chamamos essaspastas de pacotes (packages).
Após incluir o arquivo ‘. java’ no diretóriodesejado, é feita uma declaração desse pacote naprimeira linha do arquivo, conforme código abaixo:
-
8/19/2019 Apostila de JAVA.pdf
48/147
-
8/19/2019 Apostila de JAVA.pdf
49/147
Programação em Java
48 | w w w . b o r g e s r i n o l f i . c o m . b r
public class Motor {
}
package primeiroexemplo;
public class Carro {
private Motor motor ;
}
Código 34: Duas classes no mesmo pacote seconhecem facilmente
Porém se dividirmos as duas classes cada umaem um pacote diferente, precisaremos usar o comandoimport do java para podermos dizer onde se localiza aclasse desejada, conforme o código abaixo:
package primeiroexemplo;
import primeiroexemplo.pecas.Motor;
public class Carro {
private Motor motor ;
}
Código 35: Classes em pacotes diferentes necessitamde um import
Modificadores de acesso
As classes, métodos e atributos são declaradospodendo ser especificado um modificador de acesso, ouseja, quem são as classes que poderão ter acesso aessa informação.
-
8/19/2019 Apostila de JAVA.pdf
50/147
Programação em Java
49 | w w w . b o r g e s r i n o l f i . c o m . b r
No java existem quatro tipos de modificadoresde acesso, publico (public), privado (private) e protegido
(protected).
• public – é visível por todas as classes doprojeto.
• private – somente a própria classe tem acessoa ele mesmo.
• protected – todas as classes que estão no
mesmo pacote (package) pode tem acesso, etambém as suas subclasses, mesmo que estejaem outro pacote (ver mais em Herança).
Dica: seja o mais restritivo possível com suasvariáveis e métodos, se você não tiver um bom motivouse private .
HerançaImagine o seguinte cenário em nossos sistemas
temos duas classes uma representando os Clientes eoutra representando os Funcionários, conforme odesenho abaixo:
-
8/19/2019 Apostila de JAVA.pdf
51/147
Programação em Java
50 | w w w . b o r g e s r i n o l f i . c o m . b r
Figura 12: Classes Funcionario.java e Cliente.java tem
atributo iguais
Podemos observar que os atributos ‘nome’ e‘CPF’ são comuns as duas classes, com isso podemoscriar uma categoria maior para classifica-los, com seusatributos em comuns, conforme diagrama abaixo:
Figura 13: Herança, unificando as característicascomuns na superclasse Pessoa.java
-
8/19/2019 Apostila de JAVA.pdf
52/147
Programação em Java
51 | w w w . b o r g e s r i n o l f i . c o m . b r
As classes ‘Funcionário’ e ‘Cliente’, ficaram comos atributos específicos deles e a classe ‘Pessoa’ foi
criada com os atributos em comuns entre eles.
Dizemos que a classe ‘Funcionario’ HERDA ascapacidades da classe ‘Pessoa’, ou seja, todos osatributos e métodos públicos (public) e protegidos(protected) existentes na classe ‘Pessoa’ podem seracessados pela classe ‘Funcionario’.
A classe ‘Funcionario’ é chamada de ‘classefilha’ ou ‘subclasse’ e a classe ‘Pessoa’ é chamaa de‘superclasse’ ou ‘classe pai’.
A herança é um conceito simples, mas muitoimportante para orientação a objetos, é com ela que
podemos reutilizar códigos e atributos já escritos, semter que reescrever, apenas herdando as suascapacidades, chamamos isso de reusabilidade decódigo.
Em Java a herança é expressa pela palavrareservada ‘extends’ , o código das classes ilustradasacima ficaria da seguinte forma:
public class Pessoa {
//atributos
public Integer CPF ;
public String nome;
//outros códigos da classe
-
8/19/2019 Apostila de JAVA.pdf
53/147
Programação em Java
52 | w w w . b o r g e s r i n o l f i . c o m . b r
}
Código 36: Superclasse, ou classe pai, Pessoa.java
public class Cliente extends Pessoa {
//atributos
public String classificacao;
//outros códigos da classe
}
Código 37: Subclasse, ou classe filha, Cliente.java
public class Funcionario extends Pessoa {
//atributos
public Integer CTPS;
public double salario;
//outros códigos da classe
}
Código 38: Subclasse, ou classe filha, Funcionario.java
Casting
Para criar um objeto da classe Funcionario ,podemos utilizar o código abaixo:
Funcionario func1 = new Funcionario();
Código 39: Criação do objeto Funcionario
A variável func1 é do tipo Funcionario , porémcomo a classe Funcionario estende (ou seja, herda) ascaracterísticas da classe Pessoa , podemos tambémescrever:
-
8/19/2019 Apostila de JAVA.pdf
54/147
Programação em Java
53 | w w w . b o r g e s r i n o l f i . c o m . b r
Pessoa pessoa = new Funcionario();
Código 40: Tratar o objeto funcionario como Pessoa,afinal, pela herança o Funcionario é uma Pessoa
Com isso estaremos criando um objetoFuncionario ( new Funcionario()), mas sabemos que eleé uma Pessoa , e podemos trata-lo como tal. Porém setentarmos fazer o inverso:
Pessoa pessoa = new Pessoa();
Funcionario func1 = pessoa;
Código 41: Não tem como o compilador saber sePessoa é um Funcionario
Como a variável ‘pessoa’ é do tipo ‘Pessoa’ , não temcomo o compilador saber se objeto vem de um ‘Funcionario’ ou de um ‘Cliente’ , causando um erro. Por isso podemos
especificar para o compilador que tipo de objetos ele é, e issochama-se CASTING .
Funcionario func1 = (Funcionario) pessoa;
Código 42: Fazendo casting de Pessoa paraFuncionario
Caso você também não saiba o tipo do objetopessoa, você pode utilizar o código abaixo paraverificar:
if (pessoa instanceof Funcionario) {
Funcionario func1 = (Funcionario)
pessoa;
}
Código 43: Utilizando INSTANCEOF para saber qual ainstancia do objeto
-
8/19/2019 Apostila de JAVA.pdf
55/147
Programação em Java
54 | w w w . b o r g e s r i n o l f i . c o m . b r
É como se fizéssemos a seguinte pergunta “Oobjeto pessoa é instanciado pela classe Funcionário?” .
Polimorfismo
É a capacidade de trabalhar com objetosreferenciados de várias formas, agrupando os objetos.
Por exemplo, no exemplo utilizado acimatínhamos polimorfismo sendo utilizado na seguintelinha:
Pessoa pessoa = new Funcionario();
Código 44: Polimorfismo é tratar um objeto como, outraclasse (uma classe pai, ou uma interface)
Ou seja, temos um objeto Funcionário sendocriado (new Funcionario()), porém ele esta sendotratado como Pessoa (Pessoa pessoa), somente poderáexecutar os métodos disponíveis na classe Pessoa.
ATENÇÃO: Isso não quer dizer que o objetoFuncionário se transformou em Pessoa, toda e qualquercódigo escrito na classe Funcionário, será executada,pois é assim que o objeto foi criado na memória.
Para esclarecer melhor a utilidade dopolimorfismo voltemos ao exemplo acima, com oseguinte modelo:
-
8/19/2019 Apostila de JAVA.pdf
56/147
Programação em Java
55 | w w w . b o r g e s r i n o l f i . c o m . b r
Figura 14: Herança de Pessoa, Funcionario e Cliente
Imagine que agora temos a necessidade de criaruma classe de mala direta responsável por imprimiretiquetas para todas as Pessoas da empresa,
independente de ser Funcionario ou Cliente, porém,caso seja um funcionário, deve ser impressa nessaetiqueta o número CTPS do funcionário.
Para isso podemos criar uma classe chamada‘MalaDireta’ com um método chamado‘imprimirEtiquetas’ , conforme modelo abaixo:
public class MalaDireta {
public void imprimirEtiquetas(Funcionario
funcionario){
System.out.println("Nome: " +
this.nome);
System.out.println("CTPS: " +
this.CTPS);
-
8/19/2019 Apostila de JAVA.pdf
57/147
Programação em Java
56 | w w w . b o r g e s r i n o l f i . c o m . b r
}
public void imprimirEtiquetas(Clientecliente){
System.out.println("Nome: " +
this.nome);
}
}
Código 45: Desta forma teremos um método para cadaobjeto, se tivermos mais um objeto, teremos que escrever mais
um método
A classe acima funcionaria perfeitamente para oproblema proposto, porém, caso o sistema tenha maisuma classe que estenda as capacidades de Pessoa, oualguma das classes existentes (Funcionario ou Cliente)seja removida, somos obrigados a alterar a classeMalaDireta, adicionando ou removendo métodos nela, oque dificultaria e muito a manutenção desse código.
Para resolvermos esse problema poderíamosutilizar o modelo abaixo:
Figura 15: Herança com a distribuição do método imprimir
-
8/19/2019 Apostila de JAVA.pdf
58/147
Programação em Java
57 | w w w . b o r g e s r i n o l f i . c o m . b r
Onde temos os métodos imprimir com os dados
das etiquetas dentro de cada entidade Cliente com umaimplementação padrão que todas as suas filhas irãoutilizar, porém no caso de Funcionário ele terá umaimplementação própria, a instrução @Override acimada implementação deste método indica que estamosfazendo uma Sobrescrita de Métodos, e na classeMalaDireta podemos criar um único método chamado
imprimirEtiquetas(Pessoa pessoa) , recebendo comoparâmetro um objeto da classe Pessoa, podendo serFuncionario ou Cliente (pois uma vez que elesestendem a classe Pessoa, elas são uma Pessoa). Vejaabaixo como ficaria o código desse modelo:
public class MalaDireta { public void
imprimirEtiquetas(Pessoa pessoa){
System.out.println(pessoa.imprimir ());
}
}
Código 46: Classe MalaDireta.java com o método unicoque recebe Pessoa.java
public class Pessoa {
//atributos
public Integer CPF ;
public String nome;
//Método para imprimir etiquetas
public String imprimir (){
return "Nome: " + this.nome;
-
8/19/2019 Apostila de JAVA.pdf
59/147
Programação em Java
58 | w w w . b o r g e s r i n o l f i . c o m . b r
}
}
Código 47: Classe Pessoa.java com a implementaçãobásica do método imprimir()
public class Cliente extends Pessoa {
//atributos
public String classificacao;
//outros códigos da classe
}
Código 48: Classe Cliente.java, ira utilizar aimplementação da superclasse, ou seja, Pessoa.java
Classe Funcionario.java
public class Funcionario extends Pessoa {
//atributos
public Integer CTPS;
public double salario;
//Método para imprimir etiquetas.
Sobrescrito da classe Pai, Pessoa, pois tem
características próprias.
@Override
public String imprimir () {
return "Nome: " + this.nome +
"Carteira de trabalho: " + this.CTPS;
}}
Código 49: Classe Funcionario.java, sobrescreve ométodo imprimir() e tem a sua própria implementação
Com isso podemos utilizar o código abaixo emuma classe com método main , ou seja, no programaprincipal:
-
8/19/2019 Apostila de JAVA.pdf
60/147
Programação em Java
59 | w w w . b o r g e s r i n o l f i . c o m . b r
public static void main(String[] args) {
MalaDireta malaDireta = new MalaDireta();
Funcionario func1 = new
Funcionario();
func1.nome = "Fucnionario 1";
func1.CPF = 123456;
Cliente cl1 = new Cliente();
cl1.nome = "Cliente 1";
malaDireta.imprimirEtiquetas(cl1);
malaDireta.imprimirEtiquetas(func1);
}
Código 50: Classe principal, para ver o funcionamentodo polimorfismo em métodos.
Para concluir, independente do objeto passado
como parâmetro para o método imprimirEtiquetas,desde que ele seja uma classe filha de Pessoa ele seráaceito no método.
Classes e Métodos Abstratos
Ainda no problema acima imagine que não há
implementações padrões, cada classe filha (Funcionarioe Cliente) deve, obrigatoriamente, ter a suaimplementação do método imprimir, e este não seriamais escrito na classe Pai (Pessoa.java). Para esse tipode problema utilizamos métodos abstratos, ou seja, semimplementação. A classe Pessoa passaria a ter oseguinte código:
-
8/19/2019 Apostila de JAVA.pdf
61/147
Programação em Java
60 | w w w . b o r g e s r i n o l f i . c o m . b r
public abstract class Pessoa {
public Integer CPF ;
public String nome;
public abstract String imprimir ();
}
Código 51: Estrutura de uma classe Abstrata
Com essa alteração também precisamos fazerum ajuste na classe Cliente, que não tem umaimplementação explicita do método imprimir que agoraé obrigatório, a classe Cliente ficaria da seguinte forma:
public class Cliente extends Pessoa{
public String classificacao;
@Override
public String imprimir () {
return "Nome: " + this.nome;
}
}
Código 52: Implementando uma classe abstrata
No método principal main , não precisa de
alteração ele continua funcionando normalmente com omesmo resultado.
ATENÇÃO: Só podemos ter métodos abstratosem classes abstratas, ao torna-la uma classe abstrataNÃO podemos mais instanciar a classe diretamente, ou
-
8/19/2019 Apostila de JAVA.pdf
62/147
Programação em Java
61 | w w w . b o r g e s r i n o l f i . c o m . b r
seja, não podemos dar new direto na classe abstrata,apenas em suas filhas.
Caso seja necessário podemos ter outrosmétodos, sem ser abstratos nesta classe, ou seja,implementado explicitamente em uma classe abstrata.
InterfaceInterface é como um contrato estabelecido você
cria uma classe apenas com a assinatura dos métodosque deseja que sejam implementados e as classes queimplementar essa interface devem escrever todo ocódigo dos métodos. Veja o mesmo exemplo acimautilizando Interface, para geração de etiquetas.
-
8/19/2019 Apostila de JAVA.pdf
63/147
Programação em Java
62 | w w w . b o r g e s r i n o l f i . c o m . b r
Figura 16: Modelagem UML da interfaceGeraEtiquetas.java
Imagine o exemplo acima reformulado, agoraqueremos que além da herança, caso alguma classetenha que gerar etiquetas, ela deve implementar ainterface GeraEtiquetas. É como se o contrato fosse:
“- Você quer ter a capacidade de geraretiqueta?
- SIM
- Então implemente a classe
GeraEtiqueta, e com isso você será
obrigado a implementar o método
imprimir(), e estará apto a ser um objeto
capaz de gerar etiquetas.”
-
8/19/2019 Apostila de JAVA.pdf
64/147
Programação em Java
63 | w w w . b o r g e s r i n o l f i . c o m . b r
A programação dessas classes ficaria da
seguinte forma:
public interface GeraEtiquetas { public String imprimir ();
}
Classe MalaDireta.java
public class MalaDireta {
public void imprimirEtiquetas(GeraEtiquetas etiqueta) {
System.out.println(etiqueta.imprimir());
}
}
Código 53: Estrutura da interface GeraEtiquetas.java
public class Pessoa {
public Integer CPF ;
public String nome;
}
Código 54: Classe Pessoa.java
public class Funcionario extends Pessoa
implements GeraEtiquetas{
public Integer CTPS;
public double salario;
@Override
public String imprimir () {
return "Nome: " + this.nome +
"Carteira de trabalho: " + this.CTPS;
}
-
8/19/2019 Apostila de JAVA.pdf
65/147
Programação em Java
64 | w w w . b o r g e s r i n o l f i . c o m . b r
}
Código 55: Classe Funcionario.java estendendo as
capacidades de Pessoa e implementando a interfaceGeraEtiquetas
public class Cliente extends Pessoa
implements GeraEtiquetas{
public String classificacao;
public String imprimir () {
return "Nome: " + this.nome;
}}
Código 56: Classe Cliente.java também estende ascapacidades de Pessoa e implementa a classe GeraEtiquetas
A vantagem de se ter interfaces é que podemosagora imprimir etiquetas de outras classes e nãoapenas daquelas que herdam de Pessoa, como por
exemplo de um produto. Veja como ficaria o modelo:
-
8/19/2019 Apostila de JAVA.pdf
66/147
Programação em Java
65 | w w w . b o r g e s r i n o l f i . c o m . b r
Figura 17: Podemos agora incluir no modelo mais umaclasse para gerar etiquetas, independente da herança
Como a classe Produto “assinou contrato” paraser um objeto capaz de imprimir etiquetas ele podeutilizar o método da classe MalaDiretaimprimirEtiquetas(GeraEtiquetas etiqueta) .
-
8/19/2019 Apostila de JAVA.pdf
67/147
Programação em Java
66 | w w w . b o r g e s r i n o l f i . c o m . b r
4. Exceções
Exceções são eventos acontecem fora do fluxono normal do programa, previstos ou não, e quedevemos tratar de alguma forma, seja para sugerir aousuário como corrigir, ou para informar que algoaconteceu de errado, enviando uma mensagemamigável para o usuário do sistema.
Existem três tipos de exceções:
• Checked Exceptions – condições especiaisque podem ser previstas ou recuperadas, comopor exemplo, na leitura de arquivo texto, caso oarquivo apontado não exista pode ser lançadouma exceção ( java.io.FileNotFoundException ) eser tratada apresentando uma mensagem para ousuário corrigir o caminho do arquivo.
• Unchecked Exceptions – as uncheckedsexceptions se divide em dois grupos:
o Error – define erros normalmenteexterno a aplicação, são impossíveis de
-
8/19/2019 Apostila de JAVA.pdf
68/147
Programação em Java
67 | w w w . b o r g e s r i n o l f i . c o m . b r
prever e de recuperar, pois são errosgraves que torna impossível a
continuação do código. Talvez vocêdeseje capturar esse tipo de evento,apenas para gravar um log, ou imprimir apilha de erros, para analise.
o RuntimeExceptions – condiçõesinternas da aplicação, porém tão graves
que não é possível prever nem recuperaro programa. Normalmente trata-se de umbug na aplicação ou de mal uso dealguma implementação.
ATENÇÃO: Apenas as Checked Exceptions podem ter seus erros capturados por try-catch que
vamos ver abaixo.
Capturando e manipulando umaexceção
Tome como exemplo o código abaixo, que temum vetor de 10 posições e insere o número 0 em todaselas.
public static void main(String[] args) {
int[] vetor = new int[10];
for (int i = 0; i < 15; i++) {
-
8/19/2019 Apostila de JAVA.pdf
69/147
Programação em Java
68 | w w w . b o r g e s r i n o l f i . c o m . b r
vetor[i] = 0;
System.out.println("Inserido na
posição: " + i);}
}
Código 57: O número de posições excede o permitidocausando uma exceção
Porém no laço for, vamos até a posição 15, ouseja, ao tentar inserir na posição 11, teremos um erro,uma Exception(java.lang.ArrayIndexOutOfBoundsException) , conformemostrado abaixo:
Exception in thread "main"
java.lang.ArrayIndexOutOfBoundsException: 10
at
javaapplication1.JavaApplication1.main(JavaAp
plication1.java:17)
Java Result: 1
Para capturarmos essa exceção e darmos umtratamento amigável a ela, podemos alterar o códigoconforme abaixo:
public static void main(String[] args) {
try {
int[] vetor = new int[10];
for (int i = 0; i < 15; i++) {
vetor[i] = 0;
System.out.println("Inserido
na posição: " + i);
}
} catch
(ArrayIndexOutOfBoundsException e) {
-
8/19/2019 Apostila de JAVA.pdf
70/147
Programação em Java
69 | w w w . b o r g e s r i n o l f i . c o m . b r
System.err .println("Você excedeu
o limite de posições do vetor!");
}}
Código 58: Tratamento de exceção utilizando try-catch
Com isso dizemos o seguinte, tente (try)executar o trecho de código, se em algum momentodeste bloco, alguém lançar uma exceção do tipoArrayIndexOutOfBoundsException , capture (catch) esse
erro e execute o trecho de código do catch, no nossocaso imprime na tela a mensagem "Você excedeu olimite de posições do vetor!".
Poderíamos incluir instruções para tentarrecuperar o sistema ou para fechar conexão, entreoutros.
Podemos capturar todo o tipo de exceção, casotivermos conhecimento que ela exista, caso nãosoubermos qual é a exceção que pode ser lançada ouquisermos tomar a mesma ação para qualquer tipo deexceção, podemos capturar a exceção Exception, que éa classe pai de todas as exceções.
FICA A DICA: A partir do Java 7 podemoscapturar (catch) várias exceções, e dar o mesmotratamento para elas, como no exemplo abaixo, ondecapturamos três exceções possíveis(ClassNotFoundException, IllegalAccessException,InstantiationException ) e imprimimos na tela a mesmamensagem para todos:
-
8/19/2019 Apostila de JAVA.pdf
71/147
Programação em Java
70 | w w w . b o r g e s r i n o l f i . c o m . b r
public static void main(String[] args) {
try {
Class clazz =Class.forName("java.lang.String");
Object objeto =
clazz.newInstance();
System.out.println(objeto.getClass());
} catch (ClassNotFoundException
|IllegalAccessException |
InstantiationException ex) {
System.err .println("Erro ao criaro objeto: " + ex.getMessage());
}
}
Código 59: JAVA 7 - podemos tratar varias exceçõescom o mesmo algoritmo
Lançando sua própria exceção
Além das exceções lançadas por algum eventoconforme vimos, podemos criar métodos que lancem aexceção que desejarmos.
Vamos alterar o exemplo do vetor para validar otamanho do vetor antes de executar o código, caso seja
invalido será capturada uma exceção já existentechamada EmptyStackException. Essa exceção serálançada manualmente através da instrução throw nométodo validaTamanho( int tamanho), a instrução throws na assinatura do método indica a quem for utilizar essemétodo que é necessário tratar uma exceção lançada,no caso EmptyStackException .
-
8/19/2019 Apostila de JAVA.pdf
72/147
Programação em Java
71 | w w w . b o r g e s r i n o l f i . c o m . b r
public static void main(String[] args) {
int[] vetor = new int[10];int tamanho = 15;
try {
validaTamanho(tamanho);
for (int i = 0; i < tamanho; i++)
{
vetor[i] = 0;
System.out.println("Inserido
na posição: " + i);}
} catch
(ArrayIndexOutOfBoundsException e) {
System.out.println("Você excedeu
o limite de posições do vetor");
}catch (EmptyStackException e){
System.out.println("Tamanho
invalido de vetor!");
}}
private static void validaTamanho (int
tamanho) throws EmptyStackException {
if (tamanho > 10){
throw new EmptyStackException();
}
}
Código 60: Utilizando método para lançar manualmenteuma exceção
Criando sua própria Exceção
No exemplo anterior usamos uma exceção jáexistente, mas temos ainda opção de criar a nossaprópria exceção, mantendo um código melhor euniformizando as mensagens.
-
8/19/2019 Apostila de JAVA.pdf
73/147
Programação em Java
72 | w w w . b o r g e s r i n o l f i . c o m . b r
Para isso criamos uma classe chamada
ValidaTamanhoVetorException.java que extends aclasse Exception , e sobrescrevemos o métodogetMessage() para que retorne a mensagem que nósdesejamos, veja o código abaixo:
public class ValidaTamanhoVetorException
extends Exception{
@Override public String getMessage() {
return "Tamanho invalido de vetor!";
}
}
Código 61: Criando uma classe de exceção, ela podeser utilizada em todo o sistema, padronizando as mensagens de
erros inesperados.
E com isso podemos fazer uma pequenaalteração no código principal, conforme exemplo abaixo:
public static void main(String[] args) {
int[] vetor = new int[10];
int tamanho = 15;
try {
validaTamanho(tamanho);
for (int i = 0; i < tamanho; i++){
vetor[i] = 0;
System.out.println("Inserido
na posição: " + i);
}
} catch
(ArrayIndexOutOfBoundsException e) {
-
8/19/2019 Apostila de JAVA.pdf
74/147
Programação em Java
73 | w w w . b o r g e s r i n o l f i . c o m . b r
System.out.println("Você excedeu
o limite de posições do vetor");
}catch (ValidaTamanhoVetorExceptione){
System.out.println(e.getMessage());
}
}
private static void validaTamanho (int
tamanho) throws ValidaTamanhoVetorException{
if (tamanho > 10){throw new
ValidaTamanhoVetorException();
}
}
Código 62: Código lançando nossa própria exception.
Instrução Finally
Ainda dentro do bloco de instrução de capturade exceções, podemos utilizar o bloco finally paraexecutar alguma ação após o bloco try ou após algumcatch, independente de ter dado certo ou não eletentara executar o trecho de código do finally. Estainstrução é muito utilizada para fechar arquivos ouconexões, que devem ser fechadas independe de ter
dado certo o comando ou não. Deve ser utilizadoconforme exemplo:
try {
// bloco try
} catch (IOException ex) {
// bloco catch
} finally {
-
8/19/2019 Apostila de JAVA.pdf
75/147
Programação em Java
74 | w w w . b o r g e s r i n o l f i . c o m . b r
// bloco que será sempre
executado, independente
// de ter dado erro ou não }
Código 63: Finally é executado sempre, ao final do tryou da exceção causada, desde que a exceção não seja critica
que deixe o sistema inoperante.
Try-with-resources no Java 7Na versão 7 do Java foi lançado um recurso,
para reduzir e tornar mais legível o código do try-catch ,trata-se de um recurso chamado de try-with- resources .
O problemaAo tentar, por exemplo, ler um arquivo o primeiro
passo é abrir o arquivo, caso der algum erro será
lançado uma exceção, porém, se der algum erro naleitura de um arquivo já aberto, você deve tratar o erro efechar o arquivo sempre (normalmente incluído no blocofinally ), o que pode causar outro erro (outra exceção), ecom isso o código fica mais complicado e de difícilentendimento, veja o exemplo abaixo:
public String lerPrimeiraLinha(String
path) {
BufferedReader br = null;
try {
br = new BufferedReader(new
FileReader(path));
return br.readLine();
} catch (IOException ex) {
-
8/19/2019 Apostila de JAVA.pdf
76/147
Programação em Java
75 | w w w . b o r g e s r i n o l f i . c o m . b r
System.out.println("Falha ao ler
arquivo: " + ex.getMessage());
} finally {if (br != null) {
try {
br.close();
} catch (IOException ex) {
System.out.println("Falha
ao fechar buffer: " + ex.getMessage());
}
}
}return null;
}
Código 64: Código necessário para ler arquivo antes doJava 7
A soluçãoNo Java 7 podemos incluir o recurso como um
parâmetro na instrução try , e ele será fechadoautomaticamente após a execução do bloco try . Veja ocódigo abaixo, utilizando try-with-resources :
public String lerPrimeiraLinha(String
path) {
try (BufferedReader br = new
BufferedReader(new FileReader(path))) {
return br.readLine();
} catch (IOException ex) {
System.out.println("Falha ao ler
arquivo: " + ex.getMessage());
}
return null;
}
Código 65: Código mais limpo, utilizando novosrecurso do Java 7
-
8/19/2019 Apostila de JAVA.pdf
77/147
Programação em Java
76 | w w w . b o r g e s r i n o l f i . c o m . b r
Temos um código bem mais limpo e fácil deentender.
IMPORTANTE: Isso só é possível, pois orecurso que é utilizado como parâmetro no try deveimplementar asclasses java.lang.AutoCloseable ou java.io.Closeable ,no nosso caso a classe BufferedReader , na versãoJava 7 já implementa a classe AutoCloseable .
-
8/19/2019 Apostila de JAVA.pdf
78/147
Programação em Java
77 | w w w . b o r g e s r i n o l f i . c o m . b r
5. Coleções
Também conhecidos como Collections , sãoclasses responsáveis por auxiliar a manipulação degrandes quantidades de dados.
Os arrays são utilizados para armazenar váriosobjetos, porém existe uma série de dificuldades emtrabalhar com array , por exemplo, eles têm tamanhofixo, e caso seja necessário aumentar o tamanho, épreciso criar um novo vetor e transferir os dados de umpara o outro, ou se precisarmos inserir um elementonomeio do vetor, ou remover algum.
Para resolver essas complexidades e nãoprecisarmos reescrever códigos para resolver
problemas comuns, o Java criou o CollectionsFramework, composto de interfaces, implementações, ealgoritmos, todos preparados para as funcionalidadesbásicas de grandes volumes de dados.
Interfaces
-
8/19/2019 Apostila de JAVA.pdf
79/147
Programação em Java
78 | w w w . b o r g e s r i n o l f i . c o m . b r
Existe um conjunto de interfaces que define osmétodos essenciais para se trabalhar com coleções
para vários propósitos, segue abaixo um desenho decomo funciona as interfaces de coleções:
Figura 18: Classes que compõe o CollectionFramework do Java
Figura 19: Embora o Map, faça parte do CollectionFramework, ele não herda as capacidades da classe Collection,é uma estrutura independente.
• Collection – é um interface que definecaracterísticas em comum a todas as suas
Collection
et
ortedet
0ist 1ueue
Map
ortedMap
-
8/19/2019 Apostila de JAVA.pdf
80/147
Programação em Java
79 | w w w . b o r g e s r i n o l f i . c o m . b r
classes filhas, não há implementação diretadesta classe, somente de suas subclasses.
o Set – é uma coleção que não contemelementos duplicados. Asimplementações mais comuns destainterface são, HashSet, LinkedHashSet eTreeSet, veremos os detalhes de cadaimplementação mais a frente.
SortedSet – Um conjunto Set que
mantem os registros ordenadoso List – Uma lista ordenada, que permite
objetos duplicados, utilizada onde énecessário o controle da localização doobjeto, pois é possível acessá-loreferenciando a posição do mesmo. Asimplementações de List são ArrayList e
LinkedList.o Queue – Uma coleção que implementa o
conceito de FIFO (First in – First out),utilizando para manter registros antes dealgum processo, utiliza as operaçõesbásicas de inclusão e remoção de itens.
• Map - Uma lista que armazena dois objetos um
para a chave e outro para o valor, não permitechaves duplicadas.o SortedMap – Um conjunto Map que
mantem os registros ordenados
Implementações
-
8/19/2019 Apostila de JAVA.pdf
81/147
Programação em Java
80 | w w w . b o r g e s r i n o l f i . c o m . b r
List
Com as implementações de lista é possívelrecuperar um objeto pela posição em que ele foiinserido (get(int)), buscar o objeto e recuperar a posiçãoem que ele esta, listar todos os objetos na sequenciaem que foi inserido.
Segue abaixo as diferenças entre duas dasprincipais implementações da interface List :
• LinkedList – é uma implementação mais rápidapara inserir e remover itens, porém maisdemorada para percorrer os objetos da lista.
• ArrayList – é mais rápido para percorrer osobjetos da lista, e para acessar aleatoriamenteum objeto, a busca pode ser feita diretamentepelo índice. É mais lento para inserir e remover
objetos.
Para instanciar uma a implementação ArrayListfazemos da seguinte forma:
List listaFuncionarios = new
ArrayList();
Código 66: Criando uma lista de Funcionarios
Veja que a instrução , é umafuncionalidade chamada Generics , utilizada a partir doJava 5, onde especificamos qual tipo de objeto vamosutilizar dentro da lista, ou seja, eu não posso inserir umaString nessa lista, pois esta especificado o tipoFuncionario .
-
8/19/2019 Apostila de JAVA.pdf
82/147
Programação em Java
81 | w w w . b o r g e s r i n o l f i . c o m . b r
Em seguida criamos os objetos da classe
Funcionario, que serão adicionados na lista:Funcionario func1 = new
Funcionario();
func1.nome = "Bianca";
Funcionario func2 = new
Funcionario();
func2.nome = "Adolfo";
Código 67: Criação de objetos para inserir na lista
Agora vamos adicionar os objetos func1 e func2na lista, podemos fazer isso de duas formas, uma éespecificando o índice que devera ser inserido o objeto,conforme abaixo:
listaFuncionarios.add(0, func1);
Código 68: Inserindo o objeto na lista, determinando aposição dele
Ou simplesmente inserindo o objeto e ele vaiinserir na próxima posição livre da lista:
listaFuncionarios.add(func2);
Código 69: Adicionando o objeto na lista sem fazerreferencia a posição dele
Para percorrermos os itens da lista e imprimir osnomes dos funcionários, podemos fazer de duasformas, a primeira é utilizando o comando for e ométodo get para recuperar os objetos, conforme abaixo:
-
8/19/2019 Apostila de JAVA.pdf
83/147
Programação em Java
82 | w w w . b o r g e s r i n o l f i . c o m . b r
for (int i = 0; i < 10; i++) {
Funcionario funcionario =
listaFuncionarios.get(i);System.out.println("Nome do
Funcionario: " + funcionario.nome);
}
Código 70: Percorrendo todos os objetos da lista, deforma tradicional
Porém este método além de pouco pratico, é maislento do que utilizando o comando foreach , muito utilizado
para percorrer Collections em geral, por ser mais rápido, vejaabaixo como ficaria o mesmo código:
for (Funcionario funcionario :
listaFuncionarios) {
System.out.println("Nome do
Funcionario: " + funcionario.nome);
}
Código 71: Percorrendo utilizando Foreach, a melhorforma de percorrer uma lista de objetos
PROCURE: Pesquise mais sobre a classe Iterator ,para entender por que o foreach é mais rápido para percorrercollections .
Se quisermos remover os itens da lista podemosutilizar também pelo índice ou direto pelo objeto, conforme ocódigo abaixo:
listaFuncionarios.remove(1);
Funcionario excluir =
listaFuncionarios.get(0);
-
8/19/2019 Apostila de JAVA.pdf
84/147
Programação em Java
83 | w w w . b o r g e s r i n o l f i . c o m . b r
listaFuncionarios.remove(excluir);
Código 72: Removendo objetos da lista por indice ou
diretamente
Com isso excluímos todos os itens da nossa lista,para podermos checar se realmente todos os itens foramexcluídos, podemos checar o tamanho da lista utilizando ométodo size():
System.out.println("Tamanho da lista: " +listaFuncionarios.size());
Código 73: Imprimindo o tamanho da lista
Confira o código completo da implementação de listaabaixo:
public static void main(String[] args) {
//Instancia uma lista daimplementação ArrayList
List listaFuncionarios =
new ArrayList();
//Criação dos objetos que vão ser
inseridos na lista
Funcionario func1 = new
Funcionario();
func1.nome = "Bianca";
Funcionario func2 = new
Funcionario();
func2.nome = "Adolfo";
//adiciona os objetos na lista
listaFuncionarios.add(0, func1);
listaFuncionarios.add(func2);
-
8/19/2019 Apostila de JAVA.pdf
85/147
Programação em Java
84 | w w w . b o r g e s r i n o l f i . c o m . b r
//percorre todos os itens da lista
for (Funcionario funcionario :listaFuncionarios) {
//imprime o nome de cada
funcionario da lista
System.out.println("Nome do
Funcionario: " + funcionario.nome);
}
//Remove o item na posição 1 da lista
listaFuncionarios.remove(1);
//Recupera o objeto que esta na
posição 0 da lista
Funcionario excluir =
listaFuncionarios.get(0);
//remove o objeto recuperado da lista
listaFuncionarios.remove(excluir);
//imprime o tamanho atual da lista na
tela
System.out.println("Tamanho da lista:
" + listaFuncionarios.size());
}
Código 74: Código completo da implementação dejava.util.List
SETSet é um tipo de Collections que não permite
itens duplicados, as principais implementações são:• HashSet – é um tipo de implementação que
armazena os dados em uma tabela hash, trata-se de uma das implementações mais rápidas,porém não tem garantia da ordem de inserção
-
8/19/2019 Apostila de JAVA.pdf
86/147
Programação em Java
85 | w w w . b o r g e s r i n o l f i . c o m . b r
dos objetos, no momento de exibir os itens elesapareceram em qualquer ordem.
• LinkedHashSet – armazena os objetos em umatabela hash, porém mantem uma listaencadeada, que garantem a ordem que osobjetos foram inseridos.
• TreeSet – armazena os objetos na estrutura deárvore, ordenando os objetos pelos valores.Devido a ordenação é mais lento que o
HashSet.
Segue abaixo o código do exemplo anterioragora implementado com HashSet , porém como nãosabemos as posições dos objetos, não podemosrecuperar (get), nem remover (remove) objetos pelaposição, afinal essa é a característica de Set.
public static void main(String[] args) {
//Instancia um SET da implementação
HashSet
Set setFuncionarios =
new HashSet();
//Criação dos objetos que vão ser
inseridos no Set
Funcionario func1 = new Funcionario();
func1.nome = "Bianca";
Funcionario func2 = new
Funcionario();
func2.nome = "Adolfo";
//adiciona os objetos no Set
-
8/19/2019 Apostila de JAVA.pdf
87/147
Programação em Java
86 | w w w . b o r g e s r i n o l f i . c o m . b r
setFuncionarios.add(func1);
setFuncionarios.add(func2);
//percorre todos os itens do Set
for (Funcionario funcionario :
setFuncionarios) {
//imprime o nome de cada
funcionario da lista
System.out.println("Nome do
Funcionario: " + funcionario.nome);
}
//Remove o item na posição 1 do Set
setFuncionarios.remove(func1);
//remove o objeto recuperado do Set
setFuncionarios.remove(func2);
//imprime o tamanho atual do Set
System.out.println("Tamanho do Set: "
+ setFuncionarios.size());
}
Código 75: Principais operações utilizando Set
Map
Mapas são coleções onde podem ser definidoschave e valor, onde a chave não pode ser duplicada.
As principais implementações para Mapas são
HashMap, o TreeMap e o Hashtable, que tem as
mesmas diferenças das classes HashSet, TreeSet,and LinkedHashSet que vimos junto com asimplementações SET.
-
8/19/2019 Apostila de JAVA.pdf
88/147
Programação em Java
87 | w w w . b o r g e s r i n o l f i . c o m . b r
Segue abaixo o código com as principaisoperações com Mapas comentado:
public static void main(String[] args) {
//instanciando a classe HashMap
Map semana = new
HashMap();
//adicionando os dias da semana e
suas chaves
semana.put(1, "Domingo");
semana.put(2, "Segunda-Feira");
semana.put(3, "Terça-Feira");
semana.put(4, "Quarta-Feira");
semana.put(5, "Quinta-Feira");
semana.put(6, "Sexta-Feira");
semana.put(7, "Sábado");
//recuperando um item do mapa pela
chave
String sabado = semana.get(7);System.out.println("O 7º dia da
semana é: "+ sabado);
//removendo do mapa um item pela
chave
semana.remove(1);
//percorrendo o mapa por valor, desta
forma não é possível recuperar a chave doconteúdo
//recuperado
for (String string : semana.values())
{
System.out.println("Dia da
semana: " + string);
}
-
8/19/2019 Apostila de JAVA.pdf
89/147
Programação em Java
88 | w w w . b o r g e s r i n o l f i . c o m . b r
//percorrendo o mapa pela chave,
assim podemos recuperar a chave e o valor
for (Integer indice :semana.keySet()) {
String dia = semana.get(indice);
System.out.println("O "+indice+"º
dia da semana é: "+ dia);
}
}
Código 76: Principais operações com a classe Map
Ordenação
Além de toda implementação de coleção, aCollections Framework, ainda traz algunsimplementações prontas para busca, ordenação, entreoutras operações que podem ser realizadas comcoleções.
Porém para ordenarmos objetos do tipoFuncionario por ordem alfabética, precisamos primeirodefinir o critério de busca, pois o compilado nãoconhece esse tipo de objeto.
Precisamos que a classe Funcionario
implemente a classe Comparable , e sobrescreva ométodo compareTo esse método retorna um inteiroque funciona da seguinte maneira:
• Negativo se o objeto comparado for MENOR •