Buscar

java Solutio DSC1

Prévia do material em texto

J AVA
francisco calaça
otávio calaça
Guia para iniciantes
2013 – Versão 1.2-beta
L I C E N Ç A
Esta apostila é disponibilizada sob os termos da licença Creative Commons - Attribution-
NonCommercial-NoDerivs 3.0 Unported.
Isto quer dizer que VOCÊ PODE:
• Copiar este material de forma não comercial;
• Redistribuir este material de forma não comercial;
• Imprimir este material de forma não comercial;
Esta licença também quer dizer que você VOCÊ NÃO PODE:
• Vender este material a terceiros;
• Alterar este material;
Qualquer uso indevido deste material, venda ou alteração estarão sugeitos às penas pre-
vistas na Lei Federal No 9.610, de 19 de fevereiro 1998.
Mais detalhes sobre esta licença bem como seu conteúdo original pode ser acessado em:
http://creativecommons.org/licenses/by-nc-nd/3.0/legalcode
Bons estudos. . .
iii
C O L A B O R E C O M E S TA A P O S T I L A
Precisamos de colaboradores para melhorar esta apostila. Se você deseja entrar para nosso
time, mande um email para apostila-java@googlegroups.com com o título:
DESEJO COLABORAR COM A APOSTILA DE JAVA.
Responderemos a você com informações sobre o que ainda é necessário fazer.
Nas próximas versões, você verá seu nome adicionado na lista de colaboradores e poderá
se gabar, mostrando isto ao seus amigos. Colabore !
Colaboradores
• Francisco Calaça Xavier
• Otávio Calaça Xavier
• Edicarlos Pimenta Gonçalves
• Deuslirio Junior
v
C O N T E Ú D O
1 introdução 1
1.1 Algoritmos 1
1.2 Lógica binária 1
1.3 Nascimento da ciência da computação 2
1.4 Java 2
2 preparação do ambiente de estudos 5
2.1 Padronização do ambiente de trabalho 5
2.2 Primeiros testes no ambiente de trabalho 6
2.3 Exercícios 7
3 lógica de programação em java 9
3.1 Fluxograma 9
3.2 Para entender os programas criados a partir de agora 10
3.2.1 Informações iniciais 10
3.3 Strings 11
3.4 Saída Formatada 12
3.5 Conceito de Variável 13
3.6 Palavras reservadas e identificadores 14
3.7 Tipos Primitivos 15
3.7.1 Tipos primitivos inteiros 15
3.7.2 Tipos primitivos de ponto flutuante 15
3.7.3 Tipo primitivo char 16
3.7.4 Tipo primitivo boolean 16
3.7.5 Conversões de variáveis 17
3.8 Operadores 17
3.8.1 Aritméticos 17
3.8.2 Atribuição 18
3.8.3 Incremento/Decremento 19
3.8.4 Relacionais 20
3.8.5 Lógicos 20
3.9 Estruturas de seleção 22
3.9.1 if . . . else 22
3.9.2 Operador condicional ou ternário 24
3.9.3 switch 25
3.10 Estruturas de Repetição 26
3.10.1 for 26
3.10.2 while 27
3.10.3 do . . . while 28
3.11 Exercícios 28
4 introdução à orientação a objetos 31
4.1 O conceitos Classe e Objeto 31
4.2 Elementos de uma classe 32
vii
Versão 1.2-beta conteúdo4.2.1 Atributos 32
4.2.2 Métodos 33
4.2.3 Métodos construtores 34
4.2.4 Padrões de nomenclatura 35
4.3 Atributos e métodos static 36
4.3.1 Import static 37
4.4 Tipos Wrapper 38
4.4.1 Auto-boxing e Auto-unboxing 38
4.5 Regras de escopo 39
4.6 Sobrecarga de métodos 40
4.7 Exercícios 41
5 arrays 43
5.1 O que são arrays 43
5.2 Declaração e inicialização de arrays 44
5.3 Método main 46
5.4 Laço for aprimorado 48
5.5 Passagem de parâmetros no Java 48
5.6 Arrays multidimensionais 51
5.7 Lista de parâmetros com comprimento variável 51
5.8 Exercícios 52
6 um pouco mais de orientação a objetos 53
6.1 Coletor de lixo 53
6.2 A palavra-chave this 54
6.3 Variáveis do tipo final 56
6.4 Encapsulamento 56
6.5 Enumerações 59
6.6 Pacotes 59
6.6.1 Como usar tipos dentro de outros pacotes 61
6.7 Herança 62
6.7.1 Um exemplo de Herança 62
6.7.2 Sobrescrita de métodos 64
6.7.3 A palavra-chave super 64
6.8 Alguns Modificadores de acesso 64
6.8.1 private 64
6.8.2 pacote 64
6.8.3 protected 65
6.8.4 public 65
6.9 Classe object 65
6.9.1 método equals() 65
6.9.2 método toString() 66
6.10 Polimorfismo 67
6.10.1 Abstração 67
6.10.2 Exemplo de Polimorfismo 68
6.11 Conversão e casting 71
6.11.1 A palavra-chave instanceof 72
6.12 Métodos e classe do tipo final 72
viii http://solutioin.com
Francisco Calaça, Otávio Calaça
Versão 1.2-beta conteúdo
6.13 Interfaces 73
6.13.1 Interfaces em Java 73
6.14 Exercícios 75
7 tratamento de exceções 77
7.1 O que são exceções 77
7.2 Como tratar exceções 77
7.2.1 O bloco try 77
7.2.2 O bloco catch 78
7.3 Exceções checadas e exceções não checadas 80
7.4 Como declarar novos tipos de exceções 80
7.5 Como lançar exceções 81
7.6 Hierarquia das exceções 82
7.7 Exercícios 83
8 fluxo de dados 85
8.1 A classe File 85
8.2 Como escrever em arquivos 85
8.3 Como ler arquivos 86
8.4 Um editor de texto simples 87
8.5 Serialização de objetos 89
8.6 Um trocador de mensagens simples 90
8.7 Exercícios 93
9 genéricos e coleções 95
9.1 o que são genéricos 95
9.2 Introdução a coleções 97
9.3 Listas 97
9.4 Conjuntos 99
9.5 Mapas 99
9.5.1 Properties 101
9.6 Pilhas 103
9.7 Filas 104
9.8 Ordenação de Listas 104
9.9 Exercícios 106
10 uml : unified modeling language 109
10.1 Diagrama de Classe 109
10.1.1 Classe 109
10.1.2 Associações de Classe 110
10.2 Diagrama de Caso de Uso 112
10.2.1 Caso de Uso 112
10.2.2 Ator 113
10.2.3 Descrição do Caso de Uso 113
10.3 Demais diagramas 113
11 threads 115
11.1 Processos e Threads 115
11.1.1 Processos 115
11.1.2 Threads 115
11.2 Criação de Threads 116
http://solutioin.com
Francisco Calaça, Otávio Calaça
ix
Versão 1.2-beta conteúdo
11.3 A classe Executors 117
11.4 Métodos sleep e yield 118
11.5 Sincronização 118
11.6 O verificador de primos 121
11.7 Exercícios 123
12 strings e datas 125
12.1 As classes Date e Calendar 125
12.2 Formatação de Datas 126
12.3 A classe String 127
12.4 A classe StringBuffer 127
12.5 Saída formatada 128
12.5.1 Caracteres de conversão 128
12.6 Exercícios 130
13 jdbc 133
13.1 Conexão com banco de dados 133
13.2 A linguagem SQL 135
13.2.1 SELECT 135
13.2.2 Cláusula WHERE 135
13.2.3 O Operador LIKE 135
13.2.4 INSERT 136
13.2.5 UPDATE 136
13.2.6 DELETE 136
13.3 Como executar instruções SQL e obter registros 136
13.3.1 PreparedStatement 138
13.4 Execução em Lote 138
13.5 Tabela de Clientes 140
13.6 Exercícios 143
14 java persistence api com hibernate 145
14.1 Mapeamento objeto relacional 145
14.2 Configurações iniciais 145
14.3 A criação do primeiro exemplo 146
14.4 O arquivo persistence.xml 148
14.5 O EntityManager 150
14.6 A inclusão de clientes com JPA 151
14.6.1 Persistindo entidades 151
14.6.2 Localizando entidades 152
14.6.3 Removendo entidades 152
14.6.4 Mesclando entidades 152
14.7 Relacionamento entre classes 152
14.8 Formas de obtenção de id’s 155
14.9 JPQL - A linguagem consulta da Jpa 156
14.9.1 Passagem de parâmetros 156
14.10Exercícios 157
15 aplicativos web 159
15.1 XML 159
15.2 HTML 160
x http://solutioin.com
Francisco Calaça, Otávio Calaça
Versão 1.2-beta conteúdo
15.2.1 A estrutura básica de um documento HTML 160
15.2.2 Outras tags HTML 161
15.3 JavaScript 162
15.4 CSS 163
15.5 Aplicativos Web com Java 165
15.5.1 Instalação do Tomcat 165
15.6 Exercícios 166
16 servlets 167
16.1 Estrutura de uma aplicação web Java 167
16.2 Construindo o primeiro Servlet 167
16.3 Como fazer no eclipse 169
16.4 Atendendo requisições com o método get 170
16.5 Atendendo requisições com o método post 176
16.6 Redirect 177
16.7 Forward 179
16.8 Escopo de objetos web 180
16.8.1 Request 180
16.8.2 Session 181
16.8.3 Application 181
16.9 Como distribuir uma aplicação web 181
16.10Exercícios 182
17 java server pages 183
17.1 Elementos do Jsp 183
17.1.1 Scriptlet 183
17.1.2 Expressões 184
17.1.3 Declarações 185
17.2 Diretivas 185
17.2.1 Diretiva include 185
17.2.2 Diretiva Page 186
17.3 Ações do JSP 188
17.4 Biblioteca de tags JSTL 188
17.4.1 EL - Expressão de Linguagem 189
17.5 MVC - Model View Control 190
17.5.1 O cadastro de clientes 190
17.6 Exercícios 19218 introdução ao javaserver faces 193
18.1 Fazendo JavaServer Faces funcionar 193
18.2 Managed bean 193
18.3 Tags básicas 197
18.3.1 Tags JSF para renderização de HTML 197
18.3.2 Tags Core do JSF 197
18.3.3 Exemplo de uso das Tags 197
18.4 Expressões de Ligação - EL 199
18.4.1 Ligações com atributos 200
18.4.2 Ligações com métodos 200
18.5 Configurar o Primefaces 201
http://solutioin.com
Francisco Calaça, Otávio Calaça
xi
Versão 1.2-beta conteúdo
18.6 Cadastro de Clientes 202
18.7 Cadastro de Produtos (com JPA) 205
18.8 Conversores 212
18.8.1 Conversores personalizados 212
18.9 Exercícios 215
19 padrões de projeto 217
19.1 Padrões GoF 217
19.2 Abstract Factory 218
19.2.1 Utilização 219
19.3 Factory Method 219
19.3.1 Utilização 219
19.3.2 Command 220
19.3.3 Problema 220
19.3.4 Aplicação 221
19.4 Data Access Object (DAO) 221
19.4.1 Vantagens 221
19.5 MVC 222
19.5.1 Componentes 222
19.5.2 Justificativa 222
a montagem do ambiente de trabalho 223
a.1 Obtenção e instalação do JDK 223
a.2 O que é a Máquina virtual Java 223
a.3 Obtenção e instalação do eclipse 223
b erros comuns enfrentados por iniciantes 225
b.1 Exceções que costumam serem vistas 225
b.1.1 ClassNotFoundException 225
b.1.2 NoSuchMethodError 225
b.1.3 LazyInitializationException 225
b.1.4 NoClassDefFoundError 225
b.1.5 NullPointerException 225
b.1.6 ClassCastException 225
b.2 Erros comuns do HTTP 225
xii http://solutioin.com
Francisco Calaça, Otávio Calaça
1
I N T R O D U Ç Ã O
A computação pode ser definida como a busca de uma solução para um problema, a partir
de entradas (inputs), e através de um algoritmo. É com isto que lida a teoria da computação,
subcampo da ciência da computação e da matemática. Durante milhares de anos, a com-
putação foi executada com caneta e papel, ou com giz e ardósia, ou mentalmente, por vezes
com o auxílio de tabelas, ou utensílios artesanais.
A primeira ferramenta conhecida para a computação foi o ábaco, inventado na Mesopotâmia
em torno de 2400 a.C. Sua versão original consistia em desenhar linhas na areia com rochas.
Os ábacos ainda são usadas como instrumento de cálculo hoje.
1.1. Algoritmos
O matemático indiano Brahmagupta foi o primeiro a descrever o sistema de numeração
hindu-arábico, no século VII. Nesta época, aparecem os primeiros relatos de utilização
do número 0. Por volta de 820, o matemático persa Al-Khwarizmi escreveu o livro Calcu-
lando com Numerais Hindus. Este matemático foi responsável pela difusão do sistema de
numeração hindu-arábico no Oriente Médio, e posteriormente na Europa. No século XII
começaram traduzir este livro para o latim: Algoritmi de numero Indorum. Tais livros
apresentaram novos conceitos para definir sequências de passos para completar tarefas
(definição de algorítimos), como aplicações de aritmética e álgebra. Por derivação do nome,
atualmente usa-se o termo algorítmo.
1.2. Lógica binária
O matemático indiano Pingala inventou o sistema de numeração binário por volta do século
III a.C. Este sistema de numeração ainda é utilizado atualmente no processamento de to-
dos computadores, o sistema estabelece que sequências de uns e zeros podem representar
qualquer número. Fisicamente estas sequências são substituidas pelos estados ligado e
desligado.
George Boole, em 1854, publicou a álgebra booleana com um sistema completo que per-
mitia a construção de modelos matemáticos para o processamento computacional. Em 1801
apareceu o tear controlado por cartão perfurado, invenção de Joseph Marie Jacquard. Neste
tear os buracos indicavam os uns, e áreas não furadas indicavam os zeros. O sistema ainda
não pode ser considerado um computador, mas demonstrou que as máquinas poderiam
ser controladas pelo sistema binário.
1
Versão 1.2-beta introdução
1.3. Nascimento da ciência da computação
Antes da década de 1920, computador era um termo associado a pessoas que realizavam
cálculos, geralmente físicos e matemáticos. Milhares de computadores, em sua maioria mul-
heres, eram empregados em projetos no comércio, governo e pesquisa. Após a década de
1920, a expressão máquina computacional começou a ser usada para referir-se a qualquer
máquina que realize o trabalho de um profissional computador.
No final da década de 1940 o termo máquina computacional perdeu espaço para o termo
computador. As máquinas digitais estavam cada vez mais difundidas. Alan Turing, um dos
pioneiros da Ciência da Computação, inventou a Máquina de Turing, que posteriormente
evoluiu para o computador moderno.
Em 1930 os engenheiros eletricistas já podiam construir circuitos eletrônicos para resolver
problemas lógicos e matemáticos, mas a maioria o fazia sem qualquer processo, de forma
particular, sem rigor teórico, ou qualquer estudo ou padronização. Isso mudou com a tese
de mestrado de Claude E. Shannon de 1937, A Symbolic Analysis of Relay and Switching
Circuits. Enquanto tomava aulas de Filosofia, Shannon foi exposto ao trabalho de George
Boole, e percebeu que tal conceito poderia ser aplicado em conjuntos eletro-mecânicos para
resolver problemas de lógica. Tal idéia, que utiliza propriedades de circuitos eletrônicos
para a lógica, é o conceito básico de todos os computadores digitais. Shannon desenvolveu
a teoria da informação no artigo de 1948 A Mathematical Theory of Communication, cujo
conteúdo serve como fundamento para áreas de estudo como compressão de dados e crip-
tografia.
1.4. Java
A linguagem de programação orientada a objetos Java foi criada em 1991 pelo engenheiro
James Gosling, da Sun, e anunciada em 1995. O projeto da sua criação surgiu num contexto
de um outro projeto, em que certos problemas da linguagem C++, como, por exemplo, a
falta de funcionalidades do ’garbage collection’, levaram a optar pela criação de uma nova
linguagem, então denominada Oak (palavra inglesa para as árvores da família Quercus,
como o carvalho) em "homenagem" à árvore que se encontrava plantada do lado de fora
do escritório de James Gosling.
Em 1994 esta linguagem foi renomeada para Java porque, após uma pesquisa de marcas,
foi descoberta que já existia uma linguagem de computador denominada Oak. Desta forma,
em 1996 o Java 1.0 foi finalmente apresentado à comunidade.
Em 2009, a Oracle adquire a Sun Microsystems e tornou-se a detentora dos direitos e da
marca Java.
As especificações da linguagem Java são mantidas uniformes através de um processo
comunitário gerido pela Sun Microsystems, o JCP (Java Community Process). Fazem parte
do JCP várias empresas como a Oracle, Google, IBM, Nokia dentre outras. Para mais infor-
mações sobre o JCP acesse o site http://jcp.org.
As características principais da linguagem Java são:
• é orientada a objetos;
2 http://solutioin.com
Francisco Calaça, Otávio Calaça
Versão 1.2-beta introdução
• é independente de plataforma;
• integra mecanismos e bibliotecas de funções para programação distribuída;
• foi projetada para executar código remotamente sem perda de segurança.
http://solutioin.com
Francisco Calaça, Otávio Calaça
3
2
P R E PA R A Ç Ã O D O A M B I E N T E D E
E S T U D O S
Neste capítulo você montrará seu ambiente de estudos Java. A sua principal ferramenta é
o JDK (Java Development Kit). Esta sigla significa: “Kit de Desenvolvimento Java”. O JDK
contém uma vasta quantidade de aplicativos necessários para resolver problemas do dia a
dia do desenvolvimento Java.
Outra ferramenta importante é a IDE (Integrated Development Environment). Esta sigla
significa: “Ambiente de desenvolvimento integrado”. Trata-se de uma ferramenta que con-
tém vários recursos, necessários para a construção eficiente de um software.
Hoje é possível encontrar diversas IDE’s para desenvolvimento em Java. Dentre elas
estão o Eclipse1 e o NetBeans2, que são ide’s Open Source e que contam com colabração de
grandes comunidades e empresas ao redor do mundo. Os exemplosdeste livro serão feitos
utilizando o Eclipse. Apesar disto, nada impede você de instalar o netbeans e também testar
estes exemplos nele.
2.1. Padronização do ambiente de trabalho
É muito importante ter um ambiente de trabalho organizado e padronizado para prossegui-
mento dos estudos. Esta padronização te ajudará a encontrar dependências, aplicativos e
exemplos e está ilustrada na Figura 2.1.
Onde em:
• Aplicativos: contém os aplicativos utilizados no desenvolvimento de software. Exem-
plo: JDK, eclipse, etc.
• Material: contém bibliotecas, tutoriais, etc
• Projetos: contém os seus projetos criados no decorrer da sua aprendizagem.
1 http://www.eclipse.org
2 http://www.netbeans.org
Figura 2.1: Padronização do ambiente de trabalho utilizada
5
Versão 1.2-beta preparação do ambiente de estudos
Se você quiser, pode baixar um arquivo compactado contendo esta estrutura já montada.
Este arquivo pode ser obtido no site http://solutioin.com/java. Após ter realizado o download
no seu computador, descompacte o arquivo em algum lugar de sua preferência e pronto!
Você já está apto para começar os estudos em Java. Bons estudos!
Dica:
Se você ficou curioso em como este ambiente foi montado, acesse o
Apêncie A que saberá como.
2.2. Primeiros testes no ambiente de trabalho
Primeiro, inicialize o eclipse. Isto pode ser feito executando o programa eclipse (Linux) ou
eclipse.exe (Windows) da pasta eclipse, dentro da pasta Aplicativos da estrutura baixada.
Com o eclipse inicializado, crie um novo projeto Java. Depois crie uma classe. Será a
primeira classe criada neste curso. O objetivo é que você entenda como funciona um pro-
grama bem simples em Java. O código deste exemplo inicial está apresentado na Listagem
2.1. Esta classe, após executada, gera a saída no console:
Veja como é fácil
Listagem 2.1: Exemplo do primeiro Programa
1 public class PrimeiroPrograma {
2 public static void main(String[] args) {
3 System.out.println("Veja como é fácil");
4 }
5 }
No momento, não se preocupe com as instruções desta classe. O que você deve entender
agora é que o comando da linha 3 imprime no console o texto que se encontra entre aspas.
Outra forma de apresentar texto para o usuário está ilustrada no código da Listagem
2.2. Observe, que após executar este código, a mensagem é apresentada em uma janela,
conforme ilustrado na Figura 2.2.
Listagem 2.2: Exemplo de apresentação de mensagem
1 import javax.swing.JOptionPane;
2
3 public class SegundoPrograma {
4 public static void main(String[] args) {
5 JOptionPane.showMessageDialog(null, "Olá, como vai ?");
6 }
7 }
Para um terceiro exemplo, será apresentado um código que faz a leitura de informações
teclado. Isto será bastante útil nesta primeira fase do curso, onde estamos estudando os
elementos iniciais da programação. A Listagem 2.3 exemplifica uma das formas de se obter
informações do usuário.
6 http://solutioin.com
Francisco Calaça, Otávio Calaça
Versão 1.2-beta preparação do ambiente de estudos
Figura 2.2: Saída apresentada pelo segundo programa
Listagem 2.3: Exemplo de apresentação de mensagem
1 import javax.swing.JOptionPane;
2
3 public class TerceiroPrograma {
4 public static void main(String[] args) {
5 String texto = JOptionPane.showInputDialog("Digite um texto:");
6 System.out.println("Texto digitado: " + texto);
7 }
8 }
Alguns dos códigos aqui descritos e mais informações sobre este
assunto pode ser obtido em: http://solutioin.com/java
Acesse e verifique!
2.3. Exercícios
1. Crie uma classe que apresente no console a seguinte mensagem: “Meu primeiro
código Java”.
2. Crie uma classe que apresente em uma janela a mensagem: “Estou ficando bom
nisto”.
3. Crie uma classe que solicite ao usuário as seguintes informações: nome, endereço e
telefone. Após o usuário ter digitado estas informações, apresente em uma janela.
http://solutioin.com
Francisco Calaça, Otávio Calaça
7
3
L Ó G I C A D E P R O G R A M A Ç Ã O E M J AVA
Todo programa é constituído por uma sequência lógica de passos que executará tarefas
necessárias para a solução do problema a que o programa se propõem.
Neste capítulo, serão apresentados os passos necessários para construção de um pro-
grama simples em Java.
3.1. Fluxograma
Fluxograma é uma representação esquemática do processo. Ilustra graficamente a transição
de informações ao longo da execução deste processo.
É útil para compreensão de controle de fluxo quando o algoritmo é complexo ou extenso.
A Figura 3.1 ilustra um fluxograma. Observe que cada ação é representada por um retân-
gulo. O losango representa uma tomada de decisão. As elípses representam o início e o fim
do processo.
Figura 3.1: Exemplo de fluxograma
9
Versão 1.2-beta lógica de programação em java
3.2. Para entender os programas criados a par-
tir de agora
3.2.1 Informações iniciais
Para que haja um completo entendimento inicial nos programas que faremos neste capítulo,
é importante apresentar alguns conceitos.
3.2.1.1 Pacote java.lang
Não é necessário importar o pacote java.lang, ou seja, todas as classes deste pacote estão
acessíveis sem a necessidade de que seja feito qualquer import. Algumas destas classes são:
System, String, Integer, Double, Character, etc.
3.2.1.2 Nomeclatura dos métodos e das classes
Java utiliza um padrão de escrita chamado CamelCase1.
• nomes de classes iniciam com letras maiúsculas e o restante das letras são minúsculas.
Exemplo: PrimeiraClasse, PessoaFisica, etc.
• nomes de métodos iniciam com letras minúsculas. Uma nova palavra no nome inicia
com letra maiúscula (sem o caracter sublinhado _). Exemplo: realizarAcao(), fazer-
Algo(), etc.
3.2.1.3 Método main
Todo aplicativo Java inicia sua execução pelo método main. A única forma de escrever esta
assinatura é:
public static void main(String [] args)
O significado de cada uma destas palavras será descrito posteriormente. É necessário que
o leitor apenas utilize esta assinatura como está.
3.2.1.4 Case sensitive
Em Java existe diferença entre letras maiúsculas e minúsculas. Assim, os identificadores
teste, Teste e TesTe são todos diferentes.
1 CamelCase é a denominação em inglês para a prática de escrever palavras compostas ou frases, onde cada
palavra é iniciada com Maiúsculas e unidas sem espaços. É um padrão largamente utilizado em diversas
linguagens de programação, como Java, Ruby, PHP e Python, principalmente nas definições de Classes e Ob-
jetos. Exemplo: iPod, GameCube, OpenOffice.org, CamelCase, dataNascimento, enderecoEntregaMercadoria,
ItemPedido.
10 http://solutioin.com
Francisco Calaça, Otávio Calaça
Versão 1.2-beta lógica de programação em java
3.2.1.5 Nome da classe é o nome do arquivo
Todo código Java deve ser escrito dentro de classes. O nome da classe deve ser o mesmo
nome do arquivo. Isto não é uma regra, mas evitará alguns problemas. Posteriormente será
apresentado mais detalhes sobre este assunto.
3.2.1.6 Outras observações
Após cada instrução deve ser colocado um ponto-vírgula (;).
Em Java as funções são chamadas de métodos. As variáveis declaradas fora dos métodos
são chamadas de atributos ou variáveis de classe.
3.2.1.7 Comentários
Existem três tipos de comentários em Java, conforme apresentado na Listagem 3.1.
Listagem 3.1: Exemplo de comentários
1 //Comentário de linha
2
3
4 /*
5 * Comentário
6 * de
7 * bloco
8 */
9
10
11 /**
12 * Exemplo de comentário
13 * de Javadoc.
14 *
15 */
3.3. Strings
Strings são cadeias de caracteres. Em java são representadas pela classe String e são expres-
sas entre aspas. Strings literais como “abcdef” também são instâncias desta classe.
É possível utilizar o operador + para concatenação de Strings:
‘‘Primeira String ’’ + ‘‘Segunda String’’
resulta em:
‘‘Primeira String Segunda String’’
Existemalguns caracteres que necessitam de alguns truques para serem expressos em
Strings. Eles estão descritos na tablela da figura 3.2.
A listagem 3.2 apresenta mais exemplos de sequências de escape. A saída deste exemplo
é:
http://solutioin.com
Francisco Calaça, Otávio Calaça
11
Versão 1.2-beta lógica de programação em java
Figura 3.2: Caracteres especiais e sua forma de representação em Strings
Como colocar "aspas" na String.
Exemplo
de
tabulação
c:\diretorio\arquivo
Observe que, para imprimir apenas uma barra, utiliza-se duas.
Listagem 3.2: Exemplos de sequência de escape
1
2 public class ExemploSequenciaEscape {
3
4 public static void main(String[] args) {
5 System.out.println("Como colocar \"aspas\" na String.");
6 System.out.println("Exemplo\n\tde\n\t\ttabulação");
7 System.out.println("c:\\diretorio\\arquivo");
8 }
9
10 }
3.4. Saída Formatada
O Java possui o recurso de saída formatada. Com este recurso é possível definir uma String
de formatação e após isto, passar parâmetros para a mesma. Isto evita concatenação ex-
cessiva de String e aumenta a legibilidade do código. A utilização destes caracteres está
descrita na Tabela 12.1. Para cada caractere de conversão existe um parâmetro que será
colocado no seu lugar:
("O aluno %s foi %s", "Marcos", "aprovado")
Neste caso palavra “Marcos” será colocada no lugar do primeiro %s e a palavra “aprovado”
será colocada no lugar do segundo %s resultando no seguinte:
"O aluno Marcos foi aprovado"
A listagem 12.4 apresenta exemplos de saída formatada.
12 http://solutioin.com
Francisco Calaça, Otávio Calaça
Versão 1.2-beta lógica de programação em java
Caracter Aplicado em
%s String
%d Inteiro
%f Ponto flutuante
Tabela 3.1: Caracteres de conversão utilizados na saída formatada
Listagem 3.3: Saída formatada
1 import javax.swing.JOptionPane;
2
3
4 public class ExemploSaidaFormatada {
5
6 public static void main(String[] args) {
7 String nome = JOptionPane.showInputDialog("Nome:");
8 String resultado = JOptionPane.showInputDialog("Resultado:");
9 System.out.printf("O aluno %s foi %s\n", nome, resultado);
10 System.out.printf("\nFormatação numérica:%.2f", 12.356);
11 }
12
13 }
3.5. Conceito de Variável
Para resolver problemas em programas de computador é necessário manipular vários da-
dos, sejam eles números ou caracteres. Se você precisa calcular o resultado de uma única
conta, provavelmente o melhor seria utilizar uma calculadora. A utilidade de se escrever
um programa aparece quando usamos várias variáveis. Estas possuem a capacidade de con-
ter valores. Desta forma, é possível então calcular o resultado de várias contas. As variáveis
são declaradas com um identificador e seu nome. Exemplo:
String nome;
int idade;
String endereco;
Também é possível passar valores para variáveis no momento de sua declaração:
String nome = "José Maria";
int idade = 5;
String endereco = "Rua 2 nr 3 Centro";
http://solutioin.com
Francisco Calaça, Otávio Calaça
13
Versão 1.2-beta lógica de programação em java
3.6. Palavras reservadas e identificadores
Palavras reservadas, são as palavras que não podem ser usadas como identificadores, ou
seja, não podem ser usadas como nome de variáveis, nome de classes, etc. Estas palavras
são assim definidas ou porque já têm uso na sintaxe da linguagem ou porque serão usadas
em algums momento, seja para manter compatibilidade com versões anteriores ou mesmo
com outras linguagens. No caso do Java, as palavras reservadas estão descritas na Tabela
3.2.
abstract continue for new switch
assert default goto package synchronized
boolean do if private this
break double implements protected throw
byte else import public throws
case enum instanceof return transient
catch extends int short try
char final interface static void
class finally long strictfp volatile
const float native super while
Tabela 3.2: As palavras reservadas do Java
De acordo com a Java Language Specification2, null, true e false são tecnicamente chama-
dos de valores literais, e não keywords. Se você tentar criar algum identificador com estes
valores, você também terá um erro de compilação.
Utilizamos, em Java, as seguintes regras para criação do identificador:
• não pode ser uma palavra reservada (Tabela 3.2);
• não pode ser true nem false - literais que representam os tipos lógicos (booleanos);
• não pode ser null - literal que represanta o tipo nulo;
• não pode conter espaços em brancos ou outros caracteres de formatação;
• deve ser a combinação de uma ou mais letras e dígitos (letras maíusculas, minúsculas,
números, sublinha (_) e cifrão ($)).
Os identificadores não podem começar com números. As letras maiúsculas e minúsculas
diferenciam os identificadores, ou seja, x é um identificador diferente de X, nome é diferente
de Nome, etc.
Exemplos:
X
2 http://docs.oracle.com/javase/specs/
14 http://solutioin.com
Francisco Calaça, Otávio Calaça
Versão 1.2-beta lógica de programação em java
Y_1
nome
Pessoa
j3
_teste
3.7. Tipos Primitivos
Tipos primitivos são tipos que não necessitam instanciação, ou seja, sua declaração já cria
a variável na memória não sendo necessário construtores.
Existem oito tipos primitivos em Java que são divididos em quatro grupos:
• inteiros
• ponto flutuante
• caractere
• booleano.
3.7.1 Tipos primitivos inteiros
Os quatro tipos primitivos inteiros são utilizados para armazenamento de números inteiros,
sem casas decimais. Eles estão descritos na Tabela 3.3.
Tipo Tamanho Intervalo
byte 1 byte −128 até +127
short 2 bytes −32.768 até +32, 767
int 4 bytes −2.147.483.648 até 2.147.483.647
long 8 bytes −9.223.372.036.854.775.808 até 9.223.372.036.854.775.807
Tabela 3.3: Tipos primitivos inteiros do Java
Por padrão, os tipos primitivos inteiros são do tipo int, ou seja, se apenas for escrito
o número 5, este será do tipo int. Para explicitar o tipo long deve-se acrescentar, após o
número, a letra L (maiúscula ou minúscula):
long numero = 45L;
3.7.2 Tipos primitivos de ponto flutuante
Existem dois tipos de ponto flutuante, conforme descrito na tabela da figura 3.4. Estes tipos
são utilizados para armazenamento de números com casas decimais. Utiliza-se o símbolo
ponto (.) para separação decimal:
http://solutioin.com
Francisco Calaça, Otávio Calaça
15
Versão 1.2-beta lógica de programação em java
1234.566
4343.1212
Tipo Tamanho Intervalo
float 4 byte +/− 3.4E− 38 até +/− 3.4E+ 38
double 8 bytes +/− 1.7E− 308 até +/− 1.7E+ 308
Tabela 3.4: Tipos primitivos de ponto flutuante do Java
Por padrão, os tipos primitivos com casas decimais são do tipo double, ou seja, se ape-
nas for escrito o número 3.5, este será do tipo double. Para explicitar o tipo float deve-se
acrescentar, após o número, a letra F (maiúscula ou minúscula):
float numero = 3.5F;
3.7.3 Tipo primitivo char
O tipo primitivo char é utilizado para representar caracteres. Ocupa dois bytes para ar-
mazenamento e o intervalo vai de 0 até 65535. Note que o tipo char não abrange números
negativos e possui dois bytes de armazenamento pois o Java suporta caracteres Unicode.
Dica:
O Unicode possui o objetivo explícito de transcender as limitações
de codificações de carácter tradicionais, como as definidas pelo
padrão ISO 8859, que possuem grande uso em vários países mas
que permanecem em sua maioria incompatíveis umas com as outras.
Várias codificações de carácter tradicionais compartilham um prob-
lema comum, ao permitirem processamento bilíngue (geralmente us-
ando caracteres romanos e a língua local), mas não processamento
multilíngue (processamento de línguas arbitrárias misturadas umas
com as outras).
3.7.4 Tipo primitivo boolean
O tipo primitivo boolean é utilizado para representar dois estados, verdadeiroou falso.
Exemplo:
boolean ativo = true;
boolean cancelado = false;
16 http://solutioin.com
Francisco Calaça, Otávio Calaça
Versão 1.2-beta lógica de programação em java
3.7.5 Conversões de variáveis
É possível realizar automáticamente conversões entre variáveis primitivas do Java seguindo
a figura 3.3. Segundo esta figura não é possível converter automaticamente tipos maiores
como long para tipos menores como byte. Neste caso é necessário realizar a operação cast:
long maior = 56L;
byte menor = (byte)maior;
Observe que para realizar a operação de cast basta colocar o tipo que se deseja converter
entre parêntesis na frente da variável a ser convertida.
O código da listagem 3.4 apresenta um exemplo do que acontece quando é feito um cast
de uma variável maior para uma menor. Existe o risco de truncamento do número. A saída
deste exemplo é:
Numero:300
Após truncamento:44
Isto ocorre porque 300 escrito em binário é: 100101100. Contando os primeiros oito bits
da direita para esquerda, temos: 00101100. Este valor em decimal vale 44. O restante do
número em binário fui truncado, ou seja, descartado.
Listagem 3.4: Exemplo de truncamento de números
1 public class ExemploTruncamento {
2
3 public static void main(String[] args) {
4 int numero = 300;
5 byte menor = (byte) numero;
6 System.out.printf("\nNumero:%d \nApós truncamento:%d", numero, menor);
7 }
8
9 }
3.8. Operadores
Quando o computador foi concebido ele era puramente uma máquina de cálculos. Ape-
sar de atualmente o computador estar associado a diversas atividades da vida cotidiana, o
mesmo ainda não passa de uma super máquina de fazer cálculos. Desta forma, a linguagem
Java possui vários operadores cujo objetivo é realizar este cálculos. Nesta seção serão apre-
sentados os operadores que irão nos auxiliar em operações matemáticas e lógicas.
3.8.1 Aritméticos
A aritmética do Java é realizada por meio dos cinco operadores. Eles são divididos em dois
grupos, os de maior prioridade, listados na Tabela 3.5 e os de menor prioridade, listados
http://solutioin.com
Francisco Calaça, Otávio Calaça
17
Versão 1.2-beta lógica de programação em java
Figura 3.3: Conversões automáticas de tipos primitivos
na Tabela 3.6. Os operadores de maior prioridade são executados antes dos operadores
de menor prioridade, ou seja, se em uma expressão matemática existirem os dois tipos
inicialmente realiza-se as operações de maior prioridade e somente após são executados os
operadores de menor prioridade. A expressão:
5 + 3 * 5
Resultará em 20. A operação 3 ∗ 5 será executada primeiro.
A ordem de execução do Java dá-se da esquerda para a direita, ou seja, o nosso sentido
de leitura. Existindo, na mesma expressão matemática, dois ou mais operadores de maior
prioridade será executado o que vier primeiro: 8/2 ∗ 3 resultará em 12 porque a divisão 8/2
veio primeiro.
É possível alterar a órdem de execução com parêntesis. Após a execução de:
x = (5 + 3) * 2
o valor da variável x será 16 pois a soma será feita primeiro devido aos parêntesis.
3.8.2 Atribuição
Em Java é utilizado o operador = para realizar a atribuição. Sua ordem de execução é da
direita para a esquerda, ou seja, os valores mais à direita são atribuídos às variáveis mais a
esquerda: x = 4 equivale a dizer que o valor 4 será atribuído à variável x e, após a execução
desta instrução a variável x passará a conter o valor 4.
18 http://solutioin.com
Francisco Calaça, Otávio Calaça
Versão 1.2-beta lógica de programação em java
Operador Operação realizada
* Multiplicação
/ Divisão
% Resto da divisão inteira
Tabela 3.5: Operadores com maior prioridade
Operador Operação realizada
+ Adição
- Subtração
Tabela 3.6: Operadores com menor prioridade
Em Java, é possível combinar o operador de atribuição (=) com os operadores de ar-
itmética. Desta forma são criados mais operadores de atribuição. Estes operadores estão
listados na Tabela 3.7.
Uma dica, para entender melhor estes operadores, é colocar o operador de aritmética
antes do operador de atribuição. Sendo assim, se for necessário realizar as operações de
soma e atribuição, primeiro escreva o operador de soma e depois o de atribuição: + =,
x += 3;
Após a execução desta instrução o valor da variável x será acrescido de 3.
Operador Exemplo Equivalente a
+= s += 7 s = s + 7
-= s -= 7 s = s - 7
*= m *= 7 m = s * 7
/= d /= 7 d = s / 7
%= r %= 7 r = s % 7
Tabela 3.7: Exemplos de operadores de atribuição
3.8.3 Incremento/Decremento
Os operadores de incremento e decremento são utilizados quando existe a necessidade de
somar ou subtrair em apenas uma unidade os valores contidos em uma variável utilizando
dois sinais de soma, para incremento e dois sinais de subtração para decremento: Assim,
x++ incrementará o valor de x e x−− decrementará o valor de x. Estes operadores se
dividem em dois grupos:
http://solutioin.com
Francisco Calaça, Otávio Calaça
19
Versão 1.2-beta lógica de programação em java
1. Pré-incremento/Pré-decremento: primeiro é incrementado/decrementado e somente
depois o valor é utilizado. O operador é colocado antes da variável:
x = 4;
y = ++x + 5;
O resultado de y após esta execução é 10. Inicialmente o valor de x é incrementado
passando a valer 5. Só após o incremento o valor da variável é utilizado na operação
de soma.
2. Pós-incremento/Pós-decremento: primeiro utiliza-se o valor e somente depois a var-
iável é incrementada/decrementada. O operador é colocado após a variável.
x = 4;
y = x++ + 5;
O resultado de y após esta execução é 9. Inicialmente o valor de x é somado, assim 4
+ 5 vale 9. O valor só é incrementado após as operações aritméticas.
3.8.4 Relacionais
São utilizados para comparar duas variáveis. O resultado da comparação é um valor
booleano. A relação de comparadores do Java pode ser vista na Tabela 3.8.
Operador Operação
== Igualdade
!= Diferença
> Maior que
>= Maior ou igual que
< Menor que
<= Menor ou igual que
Tabela 3.8: Operadores de comparação do Java
3.8.5 Lógicos
Existem quatro operações lógicas, cujos operadores estão ilustrados na Figura 3.9:
1. E, o resultado de uma operação lógica E só é verdadeiro se os dois operandos também
forem verdadeiros;
20 http://solutioin.com
Francisco Calaça, Otávio Calaça
Versão 1.2-beta lógica de programação em java
2. OU, o resultado de uma operação lógica OU só é falso se os dois operandos também
forem verdadeiros;
3. NAO, o resultado é a negação do operando, assim o que é verdadeiro se torna falso
e o que é falso se torna verdadeiro após esta operação;
4. OU EXCLUSIVO, o resultado de uma operação lógica OU EXCLUSIVO só é ver-
dadeiro se os dois operandos forem diferentes.
Operador Operação
|| OU curto-circuito
&& E curto-circuito
| OU lógico
& E lógico
ˆ OU exclusivo
! Não lógico
Tabela 3.9: Tabela de operadores lógicos
A tabela verdade do Operador E pode ser vista na figura 3.11, do Operador OU na figura
3.10 e a tabela do Operador OU EXCLUSIVO na figura 3.12.
Observe na Figura 3.9 que existem dois tipos de operadores para a operação OU: | (OU
simples) e || (OU curto-circuito) e dois tipos de operadores para a operação E: & (simples)
e && (E curto-circuito).
Basicamente o que diferem estes dois tipos de operadores são o seguinte. OU e E curto-
circuito (|| e &&) são utilizados apenas para operações condicionais. Em uma operação
condicional, já sendo possível a obtenção do resultado, analisando apenas o primeiro
operando, não é analisado o segundo operando. Neste caso a resposta já é retornada, daí o
nome curto circuito. Exemplo:
V || ? = V
F && ? = F
Note, no exemplo, que na operação de OU, independente do valor do segundo operando,
a resposta será sempre verdadeira se o primeiro operando também for. Na operação de E, a
respostaserá sempre falsa se o primeiro operando também for. Como você pode perceber,
não é necessário analisar o segundo operando para retornar as respostas nestes casos.
Já os operadores OU e E lógico (| e &) são utilizados em operações lógicas bit a bit. Por
exemplo:
410 = 1002
310 = 0112
410|310 ⇒ 1002|0112
Desta forma,
410|310 = 7, pois
1002|0112 = 1112
http://solutioin.com
Francisco Calaça, Otávio Calaça
21
Versão 1.2-beta lógica de programação em java
Entrada 1 Entrada 2 Saída
V V V
V F V
F V V
F F F
Tabela 3.10: Tabela verdade da operação OU
Entrada 1 Entrada 2 Saída
V V V
V F F
F V F
F F F
Tabela 3.11: Tabela verdade da operação E
3.9. Estruturas de seleção
Estrutura de seleção (expressão condicional ou ainda construção condicional) é uma es-
trutura de desvio do fluxo de controle que executa diferentes instruções dependendo se a
seleção (ou condição) é verdadeira ou falsa, em que a expressão é processada e transfor-
mada em um valor booleano.
3.9.1 if . . . else
A instrução if . . . else se comporta da seguinte maneira. Quando o teste do “if” for ver-
dadeiro, é executado o código que se encontra logo em seguida do if. No caso do teste ser
falso, é executado o código que se encontra logo em seguida do else. O bloco else não é
obrigatório. A figura 3.4 ilustra o fluxo da instrução if . . . else. Na listagem 3.5 pode ser
visto um exemplo de uso.
Sua sintaxe é:
Entrada 1 Entrada 2 Saída
V V F
V F V
F V V
F F F
Tabela 3.12: Tabela verdade da operação OU EXCLUSIVO
22 http://solutioin.com
Francisco Calaça, Otávio Calaça
Versão 1.2-beta lógica de programação em java
if(teste){
//executa somente se o teste for verdadeiro
}else{
//executa somente se o teste for falso
}
Figura 3.4: Fluxo de execução do if
Listagem 3.5: Exemplo de uso do if . . . else
1 import javax.swing.JOptionPane;
2
3 public class ExemploIf {
4 public static void main(String[] args) {
5 //Obtenção dos dados do usuário
6 String notaString = JOptionPane.showInputDialog("Digite a nota:");
7 //Conversão em int
8 int nota = Integer.parseInt(notaString);
9
10 if (nota >= 5) {
11 JOptionPane.showMessageDialog(null, "Aprovado");
12 } else {
13 JOptionPane.showMessageDialog(null, "Reprovado");
14 }
15 }
16 }
http://solutioin.com
Francisco Calaça, Otávio Calaça
23
Versão 1.2-beta lógica de programação em java
Dica:
Para converter String em int, utilize o código:
int nota = Integer.parseInt(notaString);
e para converter String em double:
double nota = Double.parseDouble(notaString);
3.9.2 Operador condicional ou ternário
O operador condicional pode ser utilizado como um if ... else. Este operador é conhecido
também como operador ternário porque ele possui três operandos:
(teste ? "quando teste verdadeiro" : "quando teste falso" ));
Um exemplo de uso deste operador está na Listagem 3.6.
Na listagem 3.7 pode ser visto outro exemplo de aplicação do operador condicional na
listagem 3.7;
Listagem 3.6: Exemplo de uso do operador condicional.
1 import javax.swing.JOptionPane;
2
3 public class ExemploCondicional {
4 public static void main(String[] args) {
5 String notaString = JOptionPane.showInputDialog("Digite a nota:");
6 int nota = Integer.parseInt(notaString);
7 String resultado = nota >= 5 ? "aprovado" : "reprovado";
8 String msg = "O aluno foi " + resultado;
9 JOptionPane.showMessageDialog(null, msg);
10 }
11 }
Listagem 3.7: Outro exemplo de uso do operador condicional.
1 import javax.swing.JOptionPane;
2
3 public class ImprimeMaior {
4 public static void main(String[] args) {
5 String primeiroNumero = JOptionPane.showInputDialog("Digite um número:");
6 String segundoNumero = JOptionPane.showInputDialog("Digite um número:");
7
8 int n1 = Integer.parseInt(primeiroNumero);
9 int n2 = Integer.parseInt(segundoNumero);
10
11 int maior = n1 > n2 ? n1 : n2;
12
13 JOptionPane.showMessageDialog(null, "O maior numero é: " + maior);
14 }
24 http://solutioin.com
Francisco Calaça, Otávio Calaça
Versão 1.2-beta lógica de programação em java
15 }
3.9.3 switch
Diferente das instruções if e if . . . else, a instrução switch permite um maior número de
possibilidades de caminhos de execução. A palavra chave switch pode ser utilizada somente
com o tipo primitivo int (byte, short, char por conversão automática e seus tipos Wrappers),
o tipo Enum e, a partir da versão 7 do Java, String.
Sua sintaxe é:
switch(tipo){
case a:
//instrucao;
case b:
//instrucao;
default:
//instrucao;
}
Na Listagem 3.8 está o código de exemplo da instrução switch.
É comum utilizar a instrução switch juntamente com o break para que apenas uma opção
seja executada.
Listagem 3.8: Exemplo de utilização do switch
1 import javax.swing.JOptionPane;
2
3 public class ExemploSwitch {
4 public static void main(String[] args) {
5 String numeroString =
6 JOptionPane.showInputDialog("Digite o número de um mês (1 a 12):");
7 int num = new Integer(numeroString);
8 String msg;
9 switch (num) {
10 case 1:
11 msg = "Janeiro";
12 break;
13 case 2:
14 msg = "Fevereiro";
15 break;
16 case 3:
17 msg = "Março";
18 break;
19 case 4:
20 msg = "Abril";
21 break;
22 case 5:
23 msg = "Maio";
24 break;
http://solutioin.com
Francisco Calaça, Otávio Calaça
25
Versão 1.2-beta lógica de programação em java
25 case 6:
26 msg = "Junho";
27 break;
28 case 7:
29 msg = "Julho";
30 break;
31 case 8:
32 msg = "Agosto";
33 break;
34 case 9:
35 msg = "Setembro";
36 break;
37 case 10:
38 msg = "Outubro";
39 break;
40 case 11:
41 msg = "Novembro";
42 break;
43 case 12:
44 msg = "Dezembro";
45 break;
46 default:
47 msg = "Número incorreto";
48 }
49 JOptionPane.showMessageDialog(null, msg);
50 }
51 }
3.10. Estruturas de Repetição
Estrutura de repetição é uma estrutura de desvio do fluxo de controle que realiza e repete
diferentes ações, dependendo se uma condição é verdadeira ou falsa, em que a expressão
é processada e transformada em um valor booleano. Estão associados a uma estrutura
de repetição uma condição (também chamada "expressão de controle" ou "condição de
parada") e um bloco de código: verifica-se a condição, e caso seja verdadeira, o bloco é
executado. Após o final da execução do bloco, a condição é verificada novamente, e caso
ela ainda seja verdadeira, o código é executado novamente.
3.10.1 for
A instrução for provê um caminho rápido para percorer uma faixa de valores. Com esta
instrução é possível repetir determinadas instruções enquanto a condição for verdadeira. A
sintaxe do for é a seguinte:
for (inicialização; condição; incremento) {
instruções(s)
}
26 http://solutioin.com
Francisco Calaça, Otávio Calaça
Versão 1.2-beta lógica de programação em java
É bom lembrar que:
• A inicialização é executada apenas quando o loop inicia;
• Quando a condição for false o loop terminará;
• O incremento é invocado depois de cada iteração, local adequado para incrementos e
decrementos de variáveis;
Veja na listagem 3.9 um exemplo de uso do laço for. Neste exemplo são impressas quinze
linhas no console.
Listagem 3.9: Exemplo de uso do laço for
1 public class ExemploFor {
2 public static void main(String[] args) {
3 for (int i = 0; i < 15; i++) {
4 System.out.printf("\nlinha: %d", i);
5 }
6 }
7 }
3.10.2 while
A instrução while executa um bloco de instruções enquanto uma condição particular for
verdadeira (true). Sua sintaxe é:
while (teste) {
statement(s)
}
A expressão while avalia o teste, que deve retornar um tipo booleano. Se a espressão
avaliada for verdadeira (true), o bloco while executa as instruções dentro do bloco.A ex-
pressão while continua testando o teste até que este seja falso (false). O código da listagem
3.10 calcula a soma de inteiros enquanto a opção de saída não é informada.
Listagem 3.10: Exemplo de utilização do laço while
1 import javax.swing.JOptionPane;
2
3 public class ExemploWhile {
4 public static void main(String[] args) {
5 int status = 0;
6
7 int qtd = 0;
8 double soma = 0;
9
10 while (status != 1) {
11 String numStr1 = JOptionPane.showInputDialog("Digite um inteiro");
12 int n1 = Integer.parseInt(numStr1);
13
http://solutioin.com
Francisco Calaça, Otávio Calaça
27
Versão 1.2-beta lógica de programação em java
14 soma += n1;
15 qtd++;
16
17 String msg = "Digite 1 para sair ou qualquer outro número para continuar";
18 String statusStr = JOptionPane.showInputDialog(msg);
19
20 status = Integer.parseInt(statusStr);
21
22 }
23
24 double media = soma / qtd;
25 JOptionPane.showMessageDialog(null, "Média: " + media);
26
27 }
28 }
3.10.3 do . . . while
A linguagem Java provê a instrução do . . . while que pode ser vista abaixo:
do {
statement(s)
} while (teste);
A principal diferença entre do . . . while e while é que while primeiro avalia o teste e somente
após executa o loop, enquanto do . . . while primeiro executa a instrução e somente após isto
é avaliado o teste. Em resumo, do . . . while garante pelo menos uma execução das instruções
do bloco.
3.11. Exercícios
1. Crie um código que executa a seguinte ação: solicita ao usuário uma idade. Se esta for
maior ou igual a 16, imprime: “Pode votar”. Se não for, imprime: “Não pode votar”.
2. Melhore o código do exercício anterior para imprimir também “Voto obrigatório” quando
a idade estiver entre 18 e 70 anos.
3. Crie um código que imprima o seguinte:
************
************
************
************
4. Crie um código que solicita ao usuário um número entre 1 e 7. Após isto, o sistema
imprime: Domingo se o número for 1, Segunda se o número for 2, Terça se o número
for 3, etc. . .
28 http://solutioin.com
Francisco Calaça, Otávio Calaça
Versão 1.2-beta lógica de programação em java
5. Altere o código da listagem 3.10 para utilizar do. . . while no lugar de while.
Alguns dos códigos aqui descritos e mais informações sobre este
assunto pode ser obtido em: http://solutioin.com/java
Acesse e verifique!
http://solutioin.com
Francisco Calaça, Otávio Calaça
29
4
I N T R O D U Ç Ã O À O R I E N TA Ç Ã O A
O B J E T O S
O Objetivo da orientação a objetos é facilitar o reuso de software. Hoje ao ir a uma loja
para comprar uma lâmpada, a única coisa que é necessário saber é a potência desta. O
fabricante da lâmpada, sem ter medido nada na sua sala, consegue fabricar uma lâmpada
que servirá para você. Hoje é fácil reutilizar lâmpadas por conta que estas seguem alguns
padrões que facilitam sua utilização. Não é necessário rever toda a fiação da sua residência
quando uma lâmpada queima, nem substituir nada. Basta tirar a lâmpada defeituosa e
colocar outra nova no seu lugar.
Desta forma, a orientação a objetos traz para o mundo do software as facilidades encon-
tradas no mundo real.
Neste capítulo você verá os conceitos inicias da orientação a objetos, tais como classes e
seus elementos.
Alguns dos códigos aqui descritos e mais informações sobre este
assunto pode ser obtido em: http://solutioin.com/java
Acesse e verifique!
4.1. O conceitos Classe e Objeto
Os conceitos iniciais de Orientação a Objetos são:
• Classe, significa grupo ou conjunto. Representa um tipo de dados que pode conter
atributos e métodos, como por exemplo, Carro. A classe Carro define todo o conjunto
de carros. A este conjunto é possível associar atributos como potência, número de
passageiros, etc. Mas lembre-se, trata-se de apenas um conjunto, este ainda pode
estar vazio.
• Objeto, representa um elemento do conjunto Carro, ou seja, o carro construído. Sabendo
o que é um carro (seus atributos) é possível construir quantos objetos do tipo carros
forem necessários.
Em resumo: Objeto é a instância de uma classe. Mas o que significa instância ?
Instância siginifica a concretização de algo, ou seja, a materizalização de um objeto.
Assim a frase: “Objeto é a instância de uma classe” pode ser traduzida como: “Objeto é
a concretização de uma classe”.
31
Versão 1.2-beta introdução à orientação a objetos
Assim uma classe é o arquivo, o código digitado, enquanto o objeto será construído pelo
programa, a partir da classe, e executado pelo computador.
Para declarar classes utiliza-se a palavra chave class:
class Carro {
//campos, construtores, e declaração de métodos
}
Para instanciar, ou criar, objetos a partir de uma classe utiliza-se o operador: new.
Carro seuCarro = new Carro();
Note que uma classe é também um tipo. Você acabou de criar um novo tipo de variáveis
no Java! O tipo Carro.
Antes de serem instanciadas, as variáveis objeto valem null. A palavra chave null é
utilizada para expressar a não existencia de uma instância de um objeto em determinada
variável, ou seja, representa o nulo. Esta forma, uma variável não instanciada possui o valor
null.
4.2. Elementos de uma classe
Uma classe possui atributos e métodos. Existe também um tipo especial de método: o método
construtor. Nesta seção serão apresentados estes elementos.
4.2.1 Atributos
Atributos de uma classe são as propriedades da mesma. No exemplo do Carro, atributos
poderiam ser: cor, dataDeFabricacao, potência, etc. Observe que atributos são substantivos que
descrevem a Classe e que são exclusivos de cada objeto, ou seja, apesar de todos os Carros
possuirem o atributo cor, cada Carro pode ter uma cor diferente. Na classe da listagem 4.1
existem os atributos cor e velocidade. Após a execução da classe da Listagem 4.2, você verá
a seguinte saída:
Cor: Branco - Velocidade:80.0
Listagem 4.1: Carro com seus atributos
1 public class Carro {
2 double velocidade;
3 String cor;
4 }
Listagem 4.2: Classe que cria um objeto do tipo Carro
1 public class CarroTeste {
2 public static void main(String[] args) {
3 Carro obj = new Carro();
32 http://solutioin.com
Francisco Calaça, Otávio Calaça
Versão 1.2-beta introdução à orientação a objetos
4 obj.cor = "Branco";
5 obj.velocidade = 80;
6
7 System.out.printf("Cor: %s - Velocidade:%s\n", obj.cor, obj.velocidade);
8 }
9 }
4.2.2 Métodos
Métodos são como funções. Possuem instruções que são executadas quando o método é
invocado. Em Orientação a Objetos os métodos descrevem ações realizadas pelos objetos.
Em Java os métodos devem possuir tipo de retorno:
int realizaAlgo(){
//instruções
return 5;
}
Neste caso é obrigatório explicitar o que o método retorna com a palavra chave return.
Se o método não retornar algo, o tipo de retorno utilizado é void (note que sempre deve
ser informado o tipo de retorno. Mesmo quando o método não retorna nada!):
void realizaAlgo(){
//instruções
}
Os métodos também podem receber parâmetros:
void realizaAlgo(int parametro){
//instruções
}
Havendo a necessidade de múltiplos parâmetros em um método utiliza-se vírgula para
separá-los:
void realizaAlgo(int parametro, double outroParametro){
//instruções
}
A Listagem 4.3 inclui métodos na classe Carro. Estes métodos são responsáveis por al-
terar a velocidade e parar o carro. A Listagem 4.4 apresenta um exemplo de execução destes
métodos. Após sua execução, você verá a seguinte saída:
Mudando a velocidade para 80,000000 Km/h
Velocidade atual: 80,000000 Km/h
Parando veículo. Velocidade 0 Km/h. Cor: Branco
Mudando a velocidade para 60,000000 Km/h
Velocidade atual: 60,000000 Km/h
Parando veículo. Velocidade 0 Km/h. Cor: Vermelho
http://solutioin.com
Francisco Calaça, Otávio Calaça
33
Versão1.2-beta introdução à orientação a objetos
Listagem 4.3: Carro com atributos e métodos
1 public class Carro {
2
3 double velocidade;
4 String cor;
5
6 void mudarVelocidade(double v) {
7 velocidade = v;
8 System.out.printf("\n\nMudando a velocidade para %f Km/h", velocidade)
;
9 }
10
11 void pararCarro() {
12 System.out.printf("\nVelocidade atual: %f Km/h", velocidade);
13 System.out.printf("\nParando veículo. Velocidade 0 Km/h. Cor: %s", cor
);
14 }
15 }
Listagem 4.4: Classe que cria um objeto do tipo Carro
1 public class CarroTesteMetodo {
2 public static void main(String[] args) {
3 Carro meuCarro = new Carro();
4 meuCarro.cor = "Branco";
5 meuCarro.mudarVelocidade(80);
6 meuCarro.pararCarro();
7
8 Carro carroDaEsposa = new Carro();
9 carroDaEsposa.cor = "Vermelho";
10 carroDaEsposa.mudarVelocidade(60);
11 carroDaEsposa.pararCarro();
12 }
13 }
4.2.3 Métodos construtores
Métodos construtores são um tipo especial de métodos. Eles são invocados quando objetos
são criados. A declaração de um construtor é similar a declaração de um método, exceto
o tipo de retorno: Construtores não possuem tipo de retorno. Nem void. Toda classe Java
possui um construtor. Se não for implementado um construtor o compilador criará um
automaticamente. Este construtor criado, é chamado de construtor padrão por não receber
parâmetros.
Dica:
Construtor padrão é aquele que não recebe parâmetros.
34 http://solutioin.com
Francisco Calaça, Otávio Calaça
Versão 1.2-beta introdução à orientação a objetos
É possível passar parâmetros para construtores conforme apresentado na listagem 4.5. É
uma forma de criar objetos e ao mesmo tempo ajustar os atributos iniciais. O código da
listagem 4.6 possui a seguinte saída:
Fabricando uma Motocicleta.
Cor: Azul, Potência: 125,000000 cilindradas
Fabricando uma Motocicleta.
Cor: Vermelho, Potência: 250,000000 cilindradas
Fabricando uma Motocicleta.
Cor: Prata, Potência: 400,000000 cilindradas
Listagem 4.5: Exemplo de construtor que recebe atributos
1 public class Motocicleta {
2 String cor;
3 double potencia;
4
5 public Motocicleta(String c, double p) {
6 cor = c;
7 potencia = p;
8 System.out.printf("\n\nFabricando uma Motocicleta."
9 + "\nCor: %s, Potência: %f cilindradas", cor, potencia);
10 }
11 }
Listagem 4.6: Criação de motocicletas
1 public class MotocicletaTeste {
2 public static void main(String[] args) {
3 Motocicleta moto1 = new Motocicleta("Azul", 125);
4 Motocicleta moto2 = new Motocicleta("Vermelho", 250);
5 Motocicleta moto3 = new Motocicleta("Prata", 400);
6 }
7 }
4.2.4 Padrões de nomenclatura
Os padrões de nomenclatura utilizados pelos programadores Java são:
• Os nomes das classes começam com letras maiúsculas;
• Os nomes dos métodos e variáveis começam com letras minúsculas;
• Não é utilizado o caracter _ para mudança de palavra e sim a colocacação da primeira
letra da palavra em maiúsculo.
• Variáveis constantes são escritas em maiúsculo.
http://solutioin.com
Francisco Calaça, Otávio Calaça
35
Versão 1.2-beta introdução à orientação a objetos
Dica:
Esta padronização, dentre outras da linguagem Java, estão descritas
no documento chamado: Code Conventions for the Java Program-
ming Language. Este documento pode ser acessado através do site:
http://www.oracle.com/technetwork/java/codeconv-138413.html
4.3. Atributos e métodos static
Até agora todos os atributos e métodos de uma classe só estavam acessíveis atravéz de suas
instâncias. Se você observar o campo out da classe System verá que é possível acessa-lo
diretamente da classe, sem qualquer instância.
Os campos podem ser da classe ou do objeto. Até agora todos os campos criados foram
de objetos, pois só são acessíveis a partir de objetos. Para que determinados atributos
possam ser compartilhados por todos os objetos de determinada classe, estes atributos
devem possuir o modificador static.
Na listagem 4.7 é apresentada uma classe com um atributo static. Observe que este
atributo é incrementado a cada nova instância desta classe. A classe da listagem 4.8 cria
três objetos do tipo ObjetoTeste e no final acessa a variável quantidadeInstancias para saber
este número. Note que é possível acessar elementos statics sem a necessidade de instanciar
a classe.
Listagem 4.7: Objeto para testes da palavra chave static
1
2 public class ObjetoTeste {
3
4 static int quantidadeInstancias;
5
6 public ObjetoTeste() {
7 quantidadeInstancias ++;
8 }
9
10 }
Listagem 4.8: Demonstração da palavra chave static
1
2 public class ExemploStatic {
3
4 public static void main(String[] args) {
5 ObjetoTeste obj1 = new ObjetoTeste();
6 ObjetoTeste obj2 = new ObjetoTeste();
7 ObjetoTeste obj3 = new ObjetoTeste();
8
9 System.out.printf("\nQuantidade de instâncias do Objeto" +
10 "Teste:%d", ObjetoTeste.quantidadeInstancias);
11 }
12
36 http://solutioin.com
Francisco Calaça, Otávio Calaça
Versão 1.2-beta introdução à orientação a objetos
13 }
4.3.1 Import static
Permite importar métodos e campos static de determinadas classes. Exemplo:
import static javax.swing.JOptionPane.*;
import static java.lang.Math.*;
Observe no código da listagem 4.9 a utilização de vários métodos do tipo static das
classes JOptionPane e Math. A cada utilização de um método destas classes como:
JOptionPane.showMessageDialog(...);
Um exemplo equivalente está no código da listagem 4.10. Nesta classe foi utilizado o
import static o que tornou desnecessário a referência das classes JOptionPane e Math:
showMessageDialog(...);
Listagem 4.9: Código sem import static
1 import javax.swing.JOptionPane;
2
3 public class ExemploSemImportStatic {
4 public static void main(String[] args) {
5 String numeroTexto = JOptionPane.showInputDialog("Digite um número:");
6 int numero = new Integer(numeroTexto);
7 double raizQuadrada = Math.sqrt(numero);
8 double cubo = Math.pow(numero, 3);
9 double seno = Math.sin(numero);
10
11 JOptionPane.showMessageDialog(null, "Numero:" + numero);
12 JOptionPane.showMessageDialog(null, "Raiz Quadrada:" + raizQuadrada);
13 JOptionPane.showMessageDialog(null, "Cubo:" + cubo);
14 JOptionPane.showMessageDialog(null, "Seno:" + seno);
15 }
16 }
Listagem 4.10: Código com import static
1
2 import static javax.swing.JOptionPane.*;
3 import static java.lang.Math.*;
4
5 public class ExemploImportStatic {
6 public static void main(String[] args) {
7 String numeroTexto = showInputDialog("Digite um número:");
8 int numero = new Integer(numeroTexto);
9 double raizQuadrada = sqrt(numero);
10 double cubo = pow(numero, 3);
11 double seno = sin(numero);
http://solutioin.com
Francisco Calaça, Otávio Calaça
37
Versão 1.2-beta introdução à orientação a objetos
12
13 showMessageDialog(null, "Numero:" + numero);
14 showMessageDialog(null, "Raiz Quadrada:" + raizQuadrada);
15 showMessageDialog(null, "Cubo:" + cubo);
16 showMessageDialog(null, "Seno:" + seno);
17 }
18
19 }
4.4. Tipos Wrapper
As classes wrappers tem o papel de encapsular os tipos primitivos para a possibilidade de
operações como: conversões, mudança de bases decimais, e algumas operação que somente
a objetos é permitido, como por exemplo, trabalhar com conjuntos.
Java possui oito tipos wrapper, que adicionam funcionalidades aos tipos primitivos:
1. Byte - byte
2. Short - short
3. Integer - int
4. Long - long
5. Float - float
6. Double - double
7. Character - char
8. Boolean - boolean
Basicamente os tipos wrapper possuem os mesmos nomes dos tipos primitivos, com a
primeira letra maiúscula, exceto para os tipos int que é Integer e char que é Character.
Algumas destas funcionalidades são: a conversão de tipoprimitivo para objeto, conver-
são para String, conversão à partir de String, etc.
4.4.1 Auto-boxing e Auto-unboxing
Este conceito permite converter automaticamente tipos primitivos em equivalentes objetos
utilizando a classe Wrapper respectiva. Isto economiza código e facilita o entendimento do
programa.
• Auto-boxing, conversão automática de um tipo primitivo para seu respectivo tipo
Wrapper;
• Auto-unboxing, conversão automática de um tipo Wrapper para seu respectivo tipo
primitivo;
38 http://solutioin.com
Francisco Calaça, Otávio Calaça
Versão 1.2-beta introdução à orientação a objetos
Veja na listagem 4.11 um exemplo de boxing e unboxing.
Listagem 4.11: Exemplo de auto boxing
1 public class ExemploAutoBoxing {
2 public static void main(String[] args) {
3 /*
4 * Exemplo de auto boxing. Observe o número 16, tipo int e primitivo, foi
5 * automaticamente convertido para o tipo Wrapper Integer.
6 */
7 Integer idade = 16;
8
9 /*
10 * Exemplo de auto unboxing. Observe a utilização da classe Integer para
11 * conversão da String 56 em tipo int.
12 */
13 int quantidade = new Integer("56");
14
15 }
16 }
4.5. Regras de escopo
Entenda por escopo área de atuação. Os escopos do Java são definidos por chaves. As var-
iáveis declaradas dentro de um escopo somente podem ser acessadas dentro deste mesmo
escopo.
Observe que os blocos if, while, for, métodos, etc. definem escopos. Seus códigos são
escritos entre chaves. Todas as variáveis declaradas dentro de um bloco if somente podem
ser acessadas dentro de um bloco if. Cada método define um novo escopo, por isto as
variáveis declaradas dentro de um método não podem ser acessadas por outro método, ou
seja, outro escopo.
Observe o código da listagem 4.12. Neste código existe um bloco for no método main.
Dentro do bloco for foi declarada as variáveis numero e i. Estas variáveis não podem ser
acessadas fora do bloco for.
Listagem 4.12: Exemplo de regras de escopo
1 public class ExemploEscopo {
2 public static void main(String[] args) {
3 for (int i = 0; i < 10; i++) {
4 int numero = i;
5 System.out.println("linha " + i);
6 }
7 }
8 }
http://solutioin.com
Francisco Calaça, Otávio Calaça
39
Versão 1.2-beta introdução à orientação a objetos
4.6. Sobrecarga de métodos
Java trabalha com o conceito da assinatura de métodos. A assinatura de um método consiste
no nome do mesmo juntamente com seus atributos de entrada. Assim o método:
void acao(String texto)
possui a assinatura acao(String), pois o método se chama acao e recebe uma String como
parâmetro de entrada.
Não entra no conceito de assinatura de um método o seu tipo de retorno, ou seja, dois
métodos:
void acao(String texto)
int acao(String texto)
possuem a mesma assinatura: acao(String) pois o tipo de retorno não é considerado na
definição da assinatura.
O código da listagem 4.13 apresenta um exemplo de sobrecarga de métodos. Neste
código todos os métodos se chamam metodoQualquer e diferem apenas na quantidade
e tipo de parâmetros. Observe que suas assinaturas são diferentes. O método main invoca
cada um destes métodos passando parâmetros diferentes. A JVM consegue descobrir o
método correto a ser executado em função da quantidade e tipo dos parâmetros informa-
dos.
Listagem 4.13: Exemplo de sobrecarga de métodos
1 public class ExemploSobrecarga {
2 static void metodoQualquer(int i){
3 System.out.printf("\nEste método recebe um INT: %d", i);
4 }
5 static void metodoQualquer(double d){
6 System.out.printf("\nEste método recebe um DOUBLE: %f", d);
7 }
8 static void metodoQualquer(String texto){
9 System.out.printf("\nEste método recebe um BYTE: %s", texto);
10 }
11 static void metodoQualquer(){
12 System.out.printf("\nEste método não recebe parâmetros");
13 }
14
15 public static void main(String[] args) {
16 metodoQualquer(1);
17 metodoQualquer(1.0);
18 metodoQualquer("teste");
19 metodoQualquer();
20 }
21 }
40 http://solutioin.com
Francisco Calaça, Otávio Calaça
Versão 1.2-beta introdução à orientação a objetos
Alguns dos códigos aqui descritos e mais informações sobre este
assunto pode ser obtido em: http://solutioin.com/java
Acesse e verifique!
4.7. Exercícios
1. Qual a diferença entre classe e objeto?
2. Quais são os elementos de uma classe?
3. O que são métodos construtores?
4. Para que serve a palavra chave static?
5. O que faz o import static?
6. O que é um escopo?
7. O que é sobrecarga de métodos?
8. O que são tipos wrappers ? Quais são eles ?
9. Crie uma classe java com atributos e métodos (à sua escolha). Crie outra classe que
instancia a primeira, seta seus atributos e invoca seus métodos.
10. Adicione um construtor na classe do exercício anterior.
http://solutioin.com
Francisco Calaça, Otávio Calaça
41
5
A R R AY S
Arrays são estruturas de dados que permitem o armazenamento de objetos o que fa-
cilita a manipulação e transporte destes. No mundo real são utilizadas caixas quando é
necessário agrupar ou transportar objetos. No mundo do Java uma das estruturas utilizadas
são Arrays. Para trabalhar adequadamente com Arrays é necessário que você saiba como
inicializa-los. O próprio método main recebe um array de strings quando é feito String []
args.
O Java 5 trouxe uma nova estrutura for, mais adequada para percorrer valores de arrays.
Esta estrutura é mais rápida e mais simples de implementar. Trata-se do for aprimorado.
5.1. O que são arrays
Um array é um objeto continer utilizado para armazenar outros objetos. Possui um tamanho
fixo. O tamanho de um array é estabelecido quando este é criado. Após sua criação não é
mais possível alterar este tamanho. Em capítulos posteriores será apresentado as coleções
que podem ter seus tamanhos alterados.
Cada item em um array é chamado de elemento e cada elemento pode ser acessado por
um índice numérico. Este índice é um inteiro e sempre se inicia com 0, ou seja, um array
com 10 elementos terá os índices de 0 até 9.
Um bom exemplo para ilustrar um array é a caixa de ovos. Pense em uma caixa de ovos
com 9 unidades. A caixa de ovos é um array com 9 elementos. Todos do tipo ovo. A figura
5.1 ilustra isto. Note que quando se cria um array este é uma caixa de ovos vazia mas com
um espaço pré-determinado, no caso 9. Este espaço é o tamanho do array. Somente após a
criação do array é possível “colocar” elementos nele.
Para acessar determinado elemento de um array é necessário utilizar colchetes:
int n = numeros[4];
Este exemplo acessa o quinto elemento do array (a numeração dos índices de um array
inicia com 0, por isto o indice 4 representa o quinto elemento).
Se ocorrer uma tentativa de acesso a um elemento não existente em um array ocorrerá
um erro. Por exemplo, ao tentar acessar o sexto elemento de um array com 3 elementos
será visto um erro:
int [] numeros = new int[3];
int n = numeros[5];
Ocasionará o erro: java.lang.ArrayIndexOutOfBoundsException
No capítulo sobre exceções será apresentado como tratar estes tipos de erros.
43
Versão 1.2-beta arrays
Figura 5.1: Um array pode ser comparado a um porta ovos, cada elemento do array pode ser com-
parado a um ovo
5.2. Declaração e inicialização de arrays
É possível declarar arrays da seguinte forma:
int [] primeiroArray;
Como nas declarações de variáveis de qualquer tipo no Java, a declaração possui duas
partes: o tipo e o nome da variável. Note que o tipo do array é escrito como tipo[], onde
tipo é o tipo de dados que será colocado no array.
Também é possível, ao declarar arrays, colocar os colchetes após a variável:
int primeiroArray [];
Mas esta forma é menos usual no Java.
Um array é inicializado utilizando o operador new porque este é um objeto:
primeiroArray = new int[10];
Este exemplo cria um array com capacidade de armazenamentode 10 elementos.
Esta operação apenas inicializa o array, mas não os elementos internos a este. Os elemen-
tos devem ser inicalizados um a um:
primeiroArray[0] = 2;
primeiroArray[1] = 3;
. . .
primeiroArray[8] = 4;
primeiroArray[9] = 5;
Outra forma de se inicializar um array e, ao mesmo tempo, inicializar os elementos de
um array é:
int [] primeiroArray = {1, 2, 3, 4, 5, 6, 7, 8, 9};
Observe neste exemplo que é, na mesma linha, declarado um array, inicializado com 10
elementos e, cada elemento, é inicializado com um determinado valor.
Uma observação importante, que costuma cair nas provas de certificação, é que quando o
array é de tipos primitivos todos os elementos deste são inicializados com 0 ou false, se for
44 http://solutioin.com
Francisco Calaça, Otávio Calaça
Versão 1.2-beta arrays
de tipo boolean. Em array de Objetos, os elementos não são inicializados, todos continuarão
valendo null.
Array possui um atributo chamado length. Este atributo possui a quantidade de elemen-
tos do array.
O código da listagem 5.1 apresenta um exemplo de declaração e inicialização de arrays.
Observe neste exemplo que foi declarado dois tipos de arrays: um array de int e um array
de String. Os elementos destes arrays não foram inicializados mas após a iteração entre
seus elementos é possível notar que os elementos do array de int valem 0 e os elementos
dos array de tipo String valem null.
A saída deste exemplo é a seguinte:
Array de tipo int
Posição [0] = 0
Posição [1] = 0
Posição [2] = 0
Posição [3] = 0
Posição [4] = 0
Posição [5] = 0
Posição [6] = 0
Posição [7] = 0
Posição [8] = 0
Posição [9] = 0
Array de tipo String
Posição [0] = null
Posição [1] = null
Posição [2] = null
Posição [3] = null
Posição [4] = null
Posição [5] = null
Posição [6] = null
Posição [7] = null
Posição [8] = null
Posição [9] = null
Listagem 5.1: Exemplo de declaração de arrays
1 public class DeclaracaoArray {
2 public static void main(String[] args) {
3 //Criando um array de tipo int
4 int [] numeros = new int[10];
5 //Criando um array de String
6 String [] textos = new String[10];
7
8 System.out.println("\nArray de tipo int");
9 for (int i = 0; i < numeros.length; i++) {
http://solutioin.com
Francisco Calaça, Otávio Calaça
45
Versão 1.2-beta arrays
10 System.out.printf("Posição [%d] = %d\n", i, numeros[i]);
11 }
12
13 System.out.println("\nArray de tipo String");
14 for (int i = 0; i < textos.length; i++) {
15 System.out.printf("Posição [%d] = %s\n", i, textos[i]);
16 }
17
18 }
19 }
5.3. Método main
Agora é possível explicar toda a assinatura do método main:
public static void main(String [] args){
. . .
}
Sempre deverá ser assim! Este método deve:
• Ser public pois deve ser acessado externamente;
• Ser static pois, como é o primeiro método a ser acessado em um programa Java, ainda
não é possível existir uma instância de um objeto, logo, é necessário um método static,
que pode ser acessado fora de qualquer instância de um objeto;
• Deve, sempre, receber um array de String como parâmetro. São os parâmetros para o
programa.
O código da listagem 5.2 ilustra como obter os parâmetros informados pela linha de
comando a um programa Java. Neste exemplo observe a utilização do atributo length no
laço for.
Para configurar o eclipse basta clicar no botão descrito na figura 5.2. Após isto crie
um novo Java Application, conforme ilustrado na figura 5.3. Clique na aba Arguments
e coloque os parâmetros no campo Program Arguments.
Para executar via linha de comandos basta acrescentar, após a classe, os parâmetros para
a aplicação, conforme ilustrado na figura 5.4.
Listagem 5.2: Obtenção dos parâmetros informados ao programa
1 public class ParametrosPrograma {
2 public static void main(String[] args) {
3 System.out.println("Os parâmetros digitados foram:");
4 for (int i = 0; i < args.length; i++) {
5 System.out.println(args[i]);
6 }
7 }
8 }
46 http://solutioin.com
Francisco Calaça, Otávio Calaça
Versão 1.2-beta arrays
Figura 5.2: Início das configurações de execução
Figura 5.3: Configuração do eclipse para passagem de parâmetros para a aplicação
Figura 5.4: Passagem de parâmetros para uma aplicação Java via linha de comando
http://solutioin.com
Francisco Calaça, Otávio Calaça
47
Versão 1.2-beta arrays
5.4. Laço for aprimorado
O Java 5 trouxe uma nova funcionalidade para iteração de arrays: o for aprimorado. Esta
nova forma de utilização do for permite iterações de coleções e arrays de forma compacta
e mais fácil de ser lida. Para demonstrar um exemplo, considere o exemplo da listagem 5.3.
Neste exemplo é utilizada a seguinte estrutura for:
for (String meioTransporte : transportes) {
. . .
}
Observe que este for necessita apenas de dois parâmetros: A variável que receberá cada
item do array e o array. Este for percorrerá todo o array transportes e coloca, cada elemento
deste, na variável meioTransporte.
Listagem 5.3: Exemplo de uso do for aprimorado
1 public class ForAprimorado {
2 public static void main(String[] args) {
3 String [] transportes = {"Terrestre", "Aquático", "Aéreo"};
4
5 for (String meioTransporte : transportes) {
6 System.out.printf("\nTransporte: %s", meioTransporte);
7 }
8 }
9 }
5.5. Passagem de parâmetros no Java
Em Java todos os parâmetros são passados por valor. Isto significa que o valor da variável
passado sempre será copiado para o valor da variável que está recebendo o parâmetro. Mas
isto provoca dois tipos de comportamentos diferentes:
• Quando a variável passada é primitiva (byte, short, int long, float, double, char e
boolean), o valor é copiado para a variável que está recebendo, ou seja, esta pode
sofer alterações que não serão replicadas no valor da variável passada.
• Quando é passado uma variável Objeto, o valor desta também é copiado. A diferença
é que o valor de uma variável Objeto é apenas a referência a este Objeto, por isto,
tem-se a impressão que ocorreu uma passagem por referência, mas ainda é por valor,
pois este foi copiado. Lembre-se o valor de uma variável Objeto é a referência a este
objeto. Se, neste caso, for alterada a variável passada, esta também sofre alterações na
origem.
Para poder entender melhor isto, veja o código da listagem 5.5. Esta classe utiliza a classe
Pessoa descrita na listagem 6.4.
48 http://solutioin.com
Francisco Calaça, Otávio Calaça
Versão 1.2-beta arrays
Observe, na classe da listagem 5.5, a existência de dois métodos chamados metodoQual-
quer. O primeiro método recebe um int, que é um tipo primitivo, e o segundo método
recebe uma Pessoa, que é um objeto.
Quando invocado o metodoQualquer pela primeira vez no método main, foi passado
como parâmetro a variável valor que é um tipo primitivo. Note que o valor desta variável
não mudou, antes e depois da execução do metodoQualquer continuou tendo 4 como valor.
Quando é invocado o metodoQualquer passando um objeto do tipo Pessoa, este teve
sua referência copiada. Assim quando alterado em metodoQualquer, esta alteração será
percebida no método main. Observe que, apesar de se ter a impressão que ocorreu uma
passagem por referência, não foi isto que ocorreu no Java. O que ocorreu foi uma passagem
por valor. Lembre-se que em Java as varáveis Objeto armazenam apenas a referência a um
objeto. Na passagem de parâmetros por valor, o valor (no caso a referência ao objeto do
tipo Pessoa) foi copiado para o método metodoQualquer.
A figura 5.5 ilustra a cópia de uma referência. Observe que, apesar de serem variáveis e
referência diferentes, o Objeto é o mesmo. Assim, uma alteração realizada pela referência
referencia 01 - variável 01 também será percebida pela referência referencia 02 - variável
02.
Um outro exemplo está no código da listagem

Continue navegando