Você está na página 1de 161

Apostila

Linguagem Java

Java OO

www.3way.com.br
Linguagem
Linguagem de
de Programação
Programação Java
Java

Sumário//atribuindo valor a variável referência


Carro carro1 = new Carro();
1 Introdução à Linguagem Java 67
carro1.ano = "2001";
1.1 O que é a Tecnologia Java ? 67
carro1.modelo= "fusca";
1.1.1 JSE - Java Standard=Edition
carro1.cor "prata"; 67
1.1.2 JEE - Java Enterprise Edition 67
1.1.3 JME - Java Micro Edition 67
1.1.4 Java Card 78
1.2 Quanto tempo é necessário para aprender Java ? 78
1.3 O curso 10
8
1.3.1 Convenções de Código 10
8
1.3.2 Sobre os exercícios 10
8
1.4 Fazer Laboratório 0 10
8
2 Bases da Programação em Java 11
9
2.1 Classes 11
9
2.1.1 Declarando Membros: Variáveis e Métodos 12
10
2.2 Objetos 12
10
2.2.1 Instância de Classes Figura 2.4 – Layout Memória após inicialização 12
10
2.2.2 Referência de novo
//criando Objetosalias 14
11
2.3 Membros
Carro de Instância
carro2 = carro1; 15
12
2.3.1 Invocação de Métodos 15
12
2.3.1.1 Chamando Métodos de Objeto 16
13
2.3.2 Envio de Argumentos para Métodos 16
13
2.3.2.1 Passagem de Parâmetros por valor 16
13
2.3.2.2 Passagem de Parâmetros por referência 18
14
2.4 Membros Estáticos 19
15
2.5 Herança - Relacionamentos do tipo "é-um" 20
16
2.6 Agregação - Relacionamentos do tipo "tem-um" 22
17
2.7 Princípios de Programação Com Java 23
18
2.8 Estrutura de Arquivos Fontes em Java 23
18
2.9 O método main() 24
19
2.10 Fazer Laboratório 1 24
19
2.11 Exercícios 24
19
3 Identificadores, Palavras-chave e Tipos 19
24
3.1 Comentários Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto 19
24
3.2 Ponto-e-Vírgula, Blocos e Espaço 20
23
3.3 Identificadores 20
23
3.4 Palavras Reservadas
2.3 Membros de Instância 20
23
3.5 Variáveis, Declarações e Atribuição 21
26
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis21
3.5.1 Declarando e inicializando Variáveis 26
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
3.5.2 Exibindo o valor de uma Variável 22
28
objeto. Isto
3.5.3 é importante,
Variáveis pois edenota
de Referência de Valorque um método pertence a cada objeto da o seu estado. 22
28
classe. Porém não devemos confundir isto com a implementação do método, que
3.6 Tipos Básicos em Java Dois objetos distintos têm
23
29
é compartilhada
3.6.1 por todas as instâncias da classe.
Literais Java o mesmo estado se suas2329
3.6.2 Tipos Dados Primitivos 23
29
2.3.1 Invocação
3.6.2.1 de Métodos
Lógico – boolean
variáveis membro têm os23
29
3.6.2.2 Textual – char and String pela troca de mensagens, isto significa que um
Objetos se comunicam mesmos valores. 23 29
3.6.2.3
objeto pode ter queshort,
Inteiro – byte, int e long
mostrar um comportamento particular invocando uma 24
30
3.6.2.4
operação apropriada que foie double
Ponto Flutuante – float definida no objeto. Em Java, isto é feito pela 24
30
3.6.2.5
chamadaExemplos de declarações
de um método em um e atribuições
objeto usando o operador binário "." (ponto), 25
31
3.7 Conversões 26
32
devendo especificar a mensagem completa: o objeto que é o recebedor da
3.7.1 Casting de Tipos Primitivos 26
32
mensagem,
3.7.2 o método
Literais numéricosa ser invocado Numérica
e Promoção e os argumentos para o método (se houver). 26
32
O
3.8método Classes Wrapper (Empacotadoras) também enviar informações de volta ao
invocado no recebedor pode 27
33
objeto
3.8.1 chamador
Construtores através
Wrapperde um valor de retorno. O método chamado deve ser 28
34
um que esteja
3.8.2 Método definido
valueOfpelo objeto. 28
34
3.8.3 Conversões 28
34
Todos os direitos reservados a 3Way Networks
Seja
Seja um
um Profissional
Profissional Aprendendo
Aprendendo com
www.3way.com.br
com Profissionais
Profissionais 2121
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

3.9 AutoBoxing 35
29
3.9.1 Boxing e Unboxing Automático para Tipos Primitivos 29
35
//atribuindo valor a variável referência
3.9.2 Ocorrência de Boxing e Unboxing automático 29
35
Carro carro1 = new Carro();
3.10 Fazer Laboratório 2 30
36
carro1.ano = "2001";
3.11 Exercícios 30
36
carro1.modelo= "fusca";
4 Operadores
carro1.cor = "prata"; 30
36
4.1 Operadores Aritméticos 30
36
4.2 Operadores de Incremento e Decremento 31
37
4.3 Operadores Relacionais 32
38
4.4 Operadores Lógicos 33
39
4.4.1 && (e lógico) e & (e binário) 34
40
4.4.2 || ( ou lógico) e | ( ou binário) 35
42
4.4.3 ^ (ou exclusivo binário) 43
36
4.4.4 ! (negação) 43
36
4.4.5 Operador Condicional ( ?: ) 44
37
4.5 Precedência de Operadores 44
37
4.6 Exercícios 45
38
5 Estruturas de controle 45
38
5.1 Estruturas de decisão if - else 45
38
Figura 2.4 – Layout Memória após inicialização
5.2 Declaração switch 47
40
5.3 //criando
Iterações (Laços) novo alias 48
41
5.3.1 Carro
while carro2 = carro1; 48
41
5.3.2 do-while 49
42
5.3.3 Declaração for 50
43
5.4 Declarações de Interrupção e Desvio 51
44
5.4.1 Declaração break 51
44
5.4.1.1 Declaração unlabeled break 44
51
5.4.1.2 Declaração labeled break 44
51
5.4.2 Declaração continue 45
52
5.4.2.1 Declaração unlabeled continue 45
52
5.4.2.2 Declaração labeled continue 45
52
5.4.3 Declaração return 46
54
5.5 Fazer Laboratório 3 46
54
5.6 Exercícios 46
54
6 Array 46
54
6.1 Declarando Array 46
54
6.2 Acessando um elemento do Array
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto 47
55
6.3 Tamanho de Array 48
56
6.4 Arrays Multidimensionais 49
57
6.5 Copiando Arrays 50
2.3 Membros
6.6
de Instância
Percorrendo Arrays com Enhaced-for
58
50
58
6.7 Cada objeto
Manipulando criado
Arrays deverá ter sua própria instância de variáveis
com java.util.Arrays Os valores das variáveis
51
59
(atributos)
6.8 Fazerdefinidas
Laboratóriopela
4 classe. Os métodos definem o comportamento de um em um objeto constituem
52
60
objeto. Isto
6.9 é importante, pois denota que um método pertence a cada objeto da
Exercícios o seu estado. 5260
7classe. Porém
Programação Orientadaconfundir
não devemos a Objetos isto com a implementação do método, que 52
60têm
7.1 Classes e Objetos Dois objetos distintos52
é compartilhada por todas as instâncias da classe. 60
7.1.1 Definindo Classes o mesmo estado se 52 suas
60
7.1.2 Definindo Métodos
2.3.1 Invocação de Métodos variáveis membro têm 61 os
53
7.1.2.1 Definindo Métodos na Classe mesmos valores.6254
7.1.3 ObjetosdeseInstância
Métodos comunicam pela troca
e a Referência this de mensagens, isto significa que um 55
63
objeto pode
7.1.4 ter de
Sobrecarga que mostrar
Métodos um comportamento particular invocando uma
(Overloading) 56
64
operaçãoConstrutores
7.1.5 apropriada que foi definida no objeto. Em Java, isto é feito pela 57
65
chamadaConstrutor
7.1.6 de um método em um objeto usando o operador binário "." (ponto),
Padrão (default) 57
65
7.1.7 Overloading de Construtores
devendo especificar a mensagem completa: o objeto que é o recebedor da 58
66
7.1.8
mensagem,Usando Construtores
o método a ser invocado e os argumentos para o método (se houver). 58
66
7.1.9 Utilizando o Construtor this( ) 59
67
O
7.2
método invocado no
Fazer Laboratório 5
recebedor pode também enviar informações de volta ao 60
objeto chamador através de um valor de retorno. O método chamado deve ser 69
7.3 Herança 60
69
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 2
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 312
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

7.3.1 Definindo Superclasses e Subclasses 69


60
7.3.2 Chamando Construtor super() e Referência super 63
72
//atribuindo valor a variável referência
7.3.3 Modificador de Classe final 63
72
Carro carro1 = new Carro();
7.4 Polimorfismo 64
73
carro1.ano = "2001";
7.4.1 Coleções Heterogêneas de Objetos 65
74
carro1.modelo= "fusca";
7.4.2 Determinando a Classe
carro1.cor de um Objeto
= "prata"; 65
74
7.4.3 Casting de Referências de Objetos 66
75
7.4.4 Operações Polimórficas por Sobreposição de Métodos 68
77
7.4.4.1 Invocando Métodos Sobrepostos 69
78
7.4.4.2 Regras sobre Sobreposição de Métodos 70
79
7.4.5 Modificador de Método final 71
80
7.5 Encapsulamento 71
80
7.5.1 Pacotes 71
80
7.5.1.1 Criando pacotes 71
80
7.5.1.2 Importando Pacotes 72
81
7.5.1.3 Localização de Classes e CLASSPATH 73
83
7.5.1.4 Importação Estática 74
84
7.5.2 Modificadores de Acesso 75
85
7.5.2.1 Público - public Figura 2.4 – Layout Memória após inicialização 75
85
7.5.2.2 Protegido – protected 86
76
7.5.2.3 //criando
Padrão ou Pacotenovo alias 87
77
7.5.2.4 Privado - private = carro1;
Carro carro2 88
78
7.6 Métodos de Configuração e Captura 88
78
7.6.1 Métodos Getter 88
78
7.6.2 Métodos Setter 89
79
7.6.3 Aplicando Encapsulando no Exemplo Funcionario/Gerente 89
79
7.7 Fazer Laboratório 6 91
81
7.8 O operador == comparado ao Método equals 91
81
7.9 Classses Abstratas 93
83
7.10 Interfaces 97
86
7.10.1 Porque utilizar Interfaces? 86
97
7.10.2 Interface vs. Classe Abstrata 87
98
7.10.3 Criando Interfaces 87
98
7.10.4 Relacionamento de uma Interface para uma Classe 89
100
7.10.5 Herança entre Interfaces 89
100
7.10.6 Interface vs. Classe 90
101
7.11 Classes Aninhadas Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto 90
101
7.11.1 Classe Aninhada 91
102
7.11.2 Classes aninhadas estáticas 91
102
7.11.3 Classes internas locais 92
103
2.3 Membros
7.11.4
de Instância
Classes internas anônimas 93
104
7.11.5 Cada objetode criado
Modificadores acesso deverá ter sua própria instância de variáveis Os valores das variáveis
93
104
(atributos)
7.12 Tiposdefinidas pela classe. Os métodos definem o comportamento de um
Enumerados em um objeto constituem
95
106
objeto. Isto
7.13 FazeréLaboratório
importante,7 pois denota que um método pertence a cada objeto da o seu estado. 97
108
7.14 Exercícios
classe. Porém não devemos confundir isto com a implementação do método, que 97
108
8é compartilhada
Exceções por todas as instâncias da classe. Dois objetos distintos
97têm
108
8.1 Manipulando Exceções o mesmo estado se108suas
97
8.2 Categorias de Exceções
2.3.1 Invocação de Métodos variáveis membro têm 99 os
111
8.2.1 Exceções Verificadas e Não-verificadas mesmos valores. 100
112
8.3 Objetos Exceções
Lançando se comunicam pela troca de mensagens, isto significa que um 100
112
objeto pode
8.3.1 ter quethrow
A palavra-chave mostrar um comportamento particular invocando uma 100
112
operaçãoDesviando
8.3.2 apropriada que foi definida no objeto. Em Java, isto é feito pela
Exceções 101
113
chamadaCriando
8.4 de um método em um objeto usando o operador binário "." (ponto),
Exceções 102
114
8.5 Sobrescrita
devendo especificar de Métodos e Exceções
a mensagem completa: o objeto que é o recebedor da 103
115
8.6 Fazer Laboratório 8
mensagem, o método a ser invocado e os argumentos para o método (se houver). 105
117
8.7 Exercício 105
117
9
O método invocado no recebedor pode também enviar informações de volta ao
Tipos Genéricos 105
117
objeto
9.1 chamador através de um valor de retorno. O método chamado deve ser
Por que Generics? 105
117
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 3
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 412
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

9.2 Declarando uma Classe Utilizando Generics 118


106
9.2.1 Limitação "Primitiva" 107
119
//atribuindo valor a variável referência
9.2.2 Limitando Genéricos 107
119
Carro carro1 = new Carro();
9.3 Declarando Métodos Genéricos 108
120
carro1.ano = "2001";
9.4 Subtipagem 109
121
carro1.modelo= "fusca";
9.5 Usando o Coringa <?>
carro1.cor = "prata"; 111
123
9.6 Fazer Laboratório 9 113
125
9.7 Exercício 113
125
10 Java Collections 113
125
10.1 Hierarquia Das Interfaces 113
125
10.2 Generics e Coleções Java 114
126
10.3 Percorrendo Collections 116
129
10.3.1 Laço for-each 116
129
10.3.2 Interface Iterator 116
129
10.4 Usando Listas – Interface List 117
130
10.4.1 LinkedList 117
130
10.5 ArrayList 118
131
10.5.1 Teste de Desempenho 119
132
10.6 Usando Conjuntos – Interface Set Figura 2.4 – Layout Memória após inicialização 120
133
10.6.1 HashSet 120
133
10.6.2 //criando
TreeSet novo alias 120
133
10.7 Carro carro2 = carro1;
Usando Mapas – Interface Map 120
133
10.7.1 HashMap 121
134
10.8 Classificando Coleções: Collections.sort 121
134
10.9 Fazer Laboratório 10 123
136
10.10 Exercício 123
136
11 Construindo Interfaces Graficas com AWT/Swing 136
123
11.1 AWT (Abstract Window Toolkit) vs. Swing 136
123
11.2 Componentes GUI AWT 137
124
11.2.1 Fundamental Window Classes 137
124
11.2.2 Graphics 138
125
11.2.3 Mais Componentes AWT 127
140
11.3 Gerenciadores de Layout 128
141
11.3.1 O Gerenciador FlowLayout 128
141
11.3.2 O Gerenciador BorderLayout 129
142
11.3.3 O gerenciador GridLayout 130
143
11.3.4 Painéis e Layouts Complexos Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto 131
144
11.4 Componentes GUI Swing 132
147
11.4.1 Configurando Containers JFrame e JApplet 133
147
11.5 Manipulação de Eventos 148
134
2.3 Membros
11.5.1
de Instância
Registrando Classes Ouvintes (Listeners) 149
135
11.5.2 Cada Event
Classes objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
149
135
(atributos)
11.5.3 definidas
Listeners pela classe. Os métodos definem o comportamento de um
de Evento 150
em um objeto constituem
136
objeto. Isto
11.5.3.1 Métodoé importante, pois denota que um método pertence a cada objeto da
de ActionListener 150
136
o seu estado.150
11.5.3.2 Métodos
classe. Porém nãode devemos
MouseListener
confundir isto com a implementação do método, que 136
11.5.3.3 Métodos de MouseMotionListener Dois objetos distintos
151têm
137
é compartilhada por todas as instâncias da classe.
11.5.3.4 Métodos WindowListener o mesmo estado se137suas
151
11.5.3.5 Roteiro para criação de Aplicações Gráficas com tratamento de eventos
2.3.1 Invocação de Métodos variáveis membro têm151 os
137
11.5.4 Implementando Manipuladores de Eventos com Anonymous inner class mesmos valores. 139
153
11.6 Objetos
Classes se comunicam pela troca de mensagens, isto significa que um
Adaptadoras 140
154
objeto pode
11.7 ter que mostrar
Fazer Laboratório 11 um comportamento particular invocando uma 143
157
operaçãoExercício
11.8 apropriada que foi definida no objeto. Em Java, isto é feito pela 143
157
chamadaInternacionalização
12 de um métododo em um objeto usando o operador binário "." (ponto),
código 143
157
12.1 Formatação
devendo especificar a mensagem completa: o objeto que é o recebedor da 143
157
12.2
mensagem,ResourceBoundle
o método a ser invocado e os argumentos para o método (se houver). 144
158
12.3 Menssages Formatadas 144
158
O
12.4
método invocado no recebedor pode também enviar informações de volta ao
Fazer Laboratório 12 145
159
objeto
12.5 chamador
Exercícios através de um valor de retorno. O método chamado deve ser 145
159
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 4
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 512
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

13 Exportação de Aplicação 159


145
13.1 Jar executável 145
159
//atribuindo valor a variável referência
13.2 Java Web Start 145
159
Carro carro1 = new Carro();
13.3 Fazer Laboratório 13 146
160
carro1.ano = "2001";
13.4 Exercícios 146
160
carro1.modelo= "fusca";
carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização

//criando novo alias


Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância


Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
o mesmo estado se suas
2.3.1 Invocação de Métodos variáveis membro têm os
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
objeto pode ter que mostrar um comportamento particular invocando uma
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da
mensagem, o método a ser invocado e os argumentos para o método (se houver).
O método invocado no recebedor pode também enviar informações de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 5
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 612
www.3way.com.br
Linguagem
Linguagem de
de Programação
Programação Java
Java

1 Introdução à Linguagem Java


1.1 //atribuindo valor a variável referência
O que é a Tecnologia Java?
Carro carro1 = new Carro();
Talvez não
carro1.ano seja = "2001";vez que você ouve falar em Java, Java 5, Java 6, JRE, Máquina Virtual, J2SE,
a primeira
J2EE, JSP, EJB
carro1.modelo= a"fusca";
e etc. Bom, resposta é muito longa e pouco proveitosa neste momento. Você não vai encontrar
neste material todas as explicações para tantas siglas e nomes que estão relacionados com a tecnologia Java.
carro1.cor = "prata";
De forma bastante simplificada podemos dizer que a tecnologia Java
é composta por uma gama de produtos pensados para utilizar o melhor das
redes de computadores e capaz de serem executados (rodar) em diferentes
máquinas, sistemas operacionais e dispositivos. Por diferentes dispositivos Os programas feitos em Java
entendemos: PCs, servidores, notebooks, handhelds, PDAs (Palm), celulares, rodam em diferentes
TV, geladeiras e tudo que for possível instalar e executar uma JVM. ambientes graças a JVM (Java
Os programas feitos em Java rodam em diferentes ambientes graças Virtual Machine).
a um componente da plataforma chamado JVM (Java Virtual Machine) – que
é um tipo de tradutor de código Java para instruções específicas de cada
sistema operacional e/ou dispositivo.
A tecnologia Java foi lançada em 1995 e desde então tem crescido
Figura 2.4 – Layout Memória após inicialização
em popularidade e se tornado uma plataforma muito estável e madura.
//criando novo alias
A Plataforma Java pode ser subdividida nos seguintes grupos:
Carro carro2 = carro1;

- JSE (Java Standard Edition)


- JEE (Java Enterprise Edition)
- JME (Java Micro Edition)
- Java Card

1.1.1 JSE - Java Standard Edition


A JSE é uma rica plataforma que oferece um completo ambiente para o desenvolvimento de aplicações
para clientes e servidores. A JSE é também a base da tecnologia JEE e está dividida em dois grupos conceituais:
Core Java e Desktop Java.
Empresas como Sun, IBM, BEA, entre outras, distribuem a JSE na forma de um SDK (Software
Development Kit), em conjunto com uma JRE (Java Runtime Environment).
O pacote do SDK da JSE vem com ferramentas para: compilação, debugging, geração de documentação
(javadoc), empacotador de componentes (jar)
Figura 2.5 – Layout e a JRE,
Memória que contém
duas variáveis JVM
referênciaapara e outros
o mesmo objetocomponentes necessários para
rodar aplicações Java.
O JDK (SDK Java) é usado para compilar e depurar programas, sendo utilizados pelos desenvolvedores de
2.3 Membros de Instância
sistemas.
A JRE éobjeto
Cada o ambiente
criadodedeverá
execução, tersendo
sua utilizado
própria por qualquer
instância de um que deseje executar
variáveis umdas
Os valores programa que
variáveis
tenha sido compilado
(atributos) como
definidas pela byte code
classe. Java. definem o comportamento de um
Os métodos em um objeto constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
1.1.2 Porém
classe. JEE - Java
nãoEnterprise Edition isto com a implementação do método, que
devemos confundir
Dois objetos distintos têm
A tecnologia
é compartilhada JEE não
por todas é um produto,
as instâncias mas sim uma especificação definida por grandes empresas, através do
da classe.
JCP (Java Community Process). Simplifica o desenvolvimento de aplicações empresariais e multi-camadas. É
o mesmo estado se suas
baseado nos componentes
2.3.1 Invocação de Métodos padronizados, modulares e reusáveis, como os EJB (Enterprise variáveis membro
JavaBeans). têm um
Oferece os
conjuntoObjetos
completose de serviços para
comunicam pela estes
trocacomponentes.
de mensagens, Define muitos comportamentos
isto significa que um mesmos
da valores.
aplicação. Você não
precisa reaprender a programar pois você vai utilizar os
objeto pode ter que mostrar um comportamento particular invocando uma mesmo recursos do Java SE . Necessita de servidores de
aplicaçõesapropriada
operação JEE. A tecnologia JEE definida
que foi não está no noescopo
objeto.deste
Em curso.
Java, isto é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
1.1.3 JME
devendo - Java Micro
especificar Edition completa: o objeto que é o recebedor da
a mensagem
A tecnologia JME
mensagem, o método a seréinvocado voltada para aplicações que
e os argumentos pararodam
o métodoem pequenos
(se houver).dispositivos como celulares, PDAs,
Osmart cards
método e etc. Ela
invocado no possui umapode
recebedor API bastante
também completa para o desenvolvimento
enviar informações de volta ao de aplicações de dispositivos
móveis.chamador
objeto A tecnologia J2MEde
através nãoum está no escopo
valor desteOcurso.
de retorno. método chamado deve ser
um que esteja definido pelo objeto.

SejaTodos os direitos reservados


um Profissional Aprendendoa 3Way
comNetworks
Profissionais 6
Seja um Profissional Aprendendo com Profissionais
www.3way.com.br 712
www.3way.com.br
Linguagem
Linguagemde
deProgramação
ProgramaçãoJava
Java

1.1.4 Java Card


Java Card é umavalor
//atribuindo tecnologia que permite
a variável pequenos aplicativos (applets)
referência
baseadosCarro
em plataforma
carro1 Java
= newsejam executados com segurança em smart cards e
Carro();
Não se preocupe com o
dispositivos similares com=limitações
carro1.ano "2001";de processamento e armazenamento, como
carro1.modelo= "fusca";
o Java Ring. É muito utilizado em cartões SIM (usados em celulares GSM) e em quanto tempo, mas com o
carro1.cor
caixas eletrônicos.
= "prata"; que devo aprender para
Os produtos Java Card são baseados nas especificações da plataforma programar em Java.
Java Card desenvolvida pela Sun Microsystems, e suas principais características Mais importante que
são portabilidade e segurança. aprender a linguagem
Java é aprender a
1.2 Quanto tempo é necessário para aprender Java? programar no paradigma
Podemos dizer que muito tempo, basicamente o que será apresentado de orientação a objetos.
neste material. Como já dissemos e você vai perceber, Java é muito mais que uma
linguagem de programação, é um conjunto de ferramentas e bibliotecas de apoio
ao desenvolvimento de sistemas em diversas áreas de tecnologia de software.
Porém, mais importante que aprender a linguagem é aprender a programar no
paradigma de orientação a objetos. Figura 2.4 – Layout Memória após inicialização

O texto abaixo
//criando novoé uma
aliastradução do artigo de autoria de Peter Norvig
Carro carro2 = carro1;
(http://norvig.com/21-days.html, para ver original ou busque na internet "Aprenda
a programar em dez anos"), os conselhos apresentados servem para todos os que
desejam ou necessitam aprender programar.

Abaixo está a receita de Peter Norvig para sucesso na programação:

 Aprenda inglês. Leia o texto original. Essa tradução só está aqui para exercitar o meu inglês, não o seu.
(Nota do tradutor)
 Se interesse por programação e programe porque você acha legal. Tenha certeza que isso continue a
ser legal para você dedicar dez anos nisso.
 Converse com outros programadores; leia outros programas. Isso é mais importante do que qualquer
livro ou curso de treinamento.
 Programe. O melhor tipo de aprendizado é aprender fazendo. Colocando de uma forma mais técnica,
"o nível máximo de performance individual em um domínio não é alcançado automaticamente em
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
função de uma experiência estendida, mas sim aumentado, mesmo por indivíduos extremamente
experientes, por um esforço deliberativo de melhorar." (p. 366) e "o aprendizado mais efetivo requer
uma tarefa bem definida com uma dificuldade apropriada para o indivíduo em particular, dado que
2.3 Membros de Instância
exista um retorno sobre a experiência e oportunidades de repetição e correções de erros." (p. 20-21)
Cada objeto criado deverá ter sua própria instância de variáveis
do livro Cognition in Practice: Mind, Mathematics, and Culture in Everyday Os valores
Life, das variáveis
que é uma referência
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
interessante deste ponto de vista.
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
 Se você quiser, gaste quatro anos em uma universidade (ou mais em uma pós-graduação). Isso lhe dará
classe. Porém não devemos confundir isto com a implementação do método, que
acesso a alguns empregos que requerem alguma formação e um grande entendimento Dois objetos distintos
do campotêm de
é compartilhada por todas as instâncias da classe.
trabalho, mas se você não gosta muito de ir para escola, você pode (com alguma o mesmo estadoconseguir
dedicação) se suas
alguma experiência similar sobre esse tipo de trabalho. Em qualquer caso,variáveis apenas ler livros não
membro têmserá
os
2.3.1 Invocação de Métodos
suficiente. "Educação em ciências da computação não faz de ninguém um gênio em programação
mesmos valores.
Objetos se comunicam pela troca de mensagens, isto significa que um
tanto quanto estudar pincéis e pigmentos não fazem um bom pintor." diz Eric Raymond, autor de
objeto pode ter que mostrar um comportamento particular invocando uma
The New Hacker’s Dictionary. Um dos melhores programadores que eu já contratei tinha apenas o
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
segundo grau, e ele produziu vários softwares incríveis, tem seu próprio grupo de discussão, e fez
chamada de um método em um objeto usando o operador binário "." (ponto),
dinheiro suficiente em ações para comprar seu próprio clube noturno.
devendo especificar a mensagem completa: o objeto que é o recebedor da
 Trabalhe em projetos com outros programadores. Seja o melhor programador em alguns projetos, seja
mensagem, o método a ser invocado e os argumentos para o método (se houver).
o pior em outros. Quando você é o melhor você testa suas habilidades para liderar um projeto e para
O método invocado no outros
inspirar os recebedor
com pode
a sua também enviar você
visão. Quando informações
for o pior deaprenderá
volta ao o que os mestres ensinam e o
objeto chamador através de um valor de retorno. O método chamado
que eles não gostam de fazer (porque eles fazem você fazer por eles). deve ser
um que esteja definido pelo objeto.
 Trabalhe em projetos após outros programadores. Esteja envolvido em entender um programa escrito

Todos
Seja um os direitos reservados
Profissional Aprendendoa 3Way
comNetworks
Profissionais 7
Seja um Profissional Aprendendo com Profissionais
www.3way.com.br 812
www.3way.com.br
Linguagem de Programação Java

//atribuindo valor a variável referência


Carro carro1 = new Carro();
carro1.ano = "2001";
carro1.modelo= "fusca";
carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização

//criando novo alias


Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância


Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
o mesmo estado se suas
2.3.1 Invocação de Métodos variáveis membro têm os
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
objeto pode ter que mostrar um comportamento particular invocando uma
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da
mensagem, o método a ser invocado e os argumentos para o método (se houver).
O método invocado no recebedor pode também enviar informações de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.

Todos os direitos reservados a 3Way Networks


Seja um Profissional Aprendendo com Profissionais 912
www.3way.com.br
Linguagem
Linguagemde
deProgramação
ProgramaçãoJava
Java

por outro. Veja o que é preciso para entender e consertar quando o programador original não está por
perto. Pense valor
//atribuindo em comoa desenvolver
variável seus programas para que seja fácil mantê-los, se não for você.
referência
 Aprenda
Carro carro1 pelo
= menos meia dúzia de linguagens de programação. Inclua na lista uma linguagem
new Carro();
carro1.ano = "2001";
orientada a objetos (como Java ou C++), uma que seja de abstração funcional (como Lisp ou ML),
carro1.modelo= "fusca";
uma que suporte abstração sintática (como Lisp), uma que suporte especificação declarativa (como
carro1.cor = "prata";
Prolog ou C++ com templates), uma que suporte co-rotinas (como Icon ou Scheme), e uma que
suporte paralelismo (como Sisal).
 Lembre-se que há um "computador" em "ciência da computação". Saiba quanto tempo leva para o seu
computador computar uma instrução, carregar uma palavra até a memória (com e sem cache), ler
palavras consecutivas do disco rígido, procurar por uma nova posição no disco.
 Se envolva no esforço de padronização de uma linguagem. Pode ser o comité ANSI C++, ou na
padronização de programação na sua empresa, se utilizaram edentação com 2 ou 4 espaços. Em
qualquer caso, você aprende o que outras pessoas gostam em uma linguagem, o quanto elas gostam e
talvez um pouco do porque elas gostam.
 Tenha o bom senso de cair fora desse processo de padronização tão rápido quanto possível.

1.3 O curso Figura 2.4 – Layout Memória após inicialização

Este curso énovo


//criando abordado de forma bastante prática, ou seja, construindo programas com a linguagem de
alias
Carro carro2 = carro1;
programação o máximo possível durante o treinamento.
Você tem um material com a teoria necessária e um conjunto de atividades práticas, denominadas
laboratórios. Todo o conteúdo corresponde ao que já definimos como JSE.
O material não é e não deve ser adotado como sua única referência para estudos da linguagem, a
aquisição de livros ou leitura do tutorial oficial da Sun é recomendado.
Seu material está ordenado numa seqüência didática que consideramos a mais adequada para o seu
aprendizado. A cada exemplo ou exercício apresentado em um capítulo tentamos não utilizar recursos da
linguagem que ainda não tenham sido apresentados no capítulo corrente ou anterior. No entanto, sempre que
possível nós introduzimos vários destes recursos em exemplos de códigos com o objetivo de apresentá-lo
deliberadamente para você ou simplesmente para simplificar o código exemplo. Assim vamos apresentado algumas
bibliotecas da linguagem, sem entrar em detalhes, para que você vá se familiarizando com uso das mesmas.

1.3.1 Convenções de Código


Os códigos e exemplos apresentados neste material seguem as convenções de código-fonte Java, sempre
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
que possível, mas podem sofrer adaptações para melhorar a impressão.
Você deve se familiarizar com essa convenção veja em
http://www.oracle.com/technetwork/java/codeconv-138413.html
2.3 Membros de Instância
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
1.3.2 Sobre os exercícios
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
No curso Java e Orientação a Objetos, é recomendado estudar em casa aquilo que foi visto durante a aula,
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
fazendo os exercícios que não foram feitos ou refazendo os que já foram feitos em sala.
classe. Porém não devemos confundir isto com a implementação do método, que
Os laboratórios deverão ser resolvidos durante o treinamento com objetivo de Dois objetosa distintos
exercitar linguagemtêmde
é compartilhada por todas as instâncias da classe.
programação e não a sua capacidade de programar. Contudo eles apresentam uma pequena o mesmo estado que
aplicação se suas
será
completada ao final de todos os laboratórios. variáveis membro têm os
2.3.1 Invocação de Métodos
Durante a execução de um laboratório o mesmo pode necessitar de listagem demesmos códigos que já foram
valores.
Objetos se comunicam pela troca de mensagens, isto significa que um
construídos nos laboratórios anteriores, portanto não deixe de fazer o exercício do laboratório, especialmente as
objeto que
tarefas podeforem
ter que mostrar
indicadas paraum
vocêcomportamento particular
fazer. Os laboratórios invocando
possuem uma estimada e o instrutor deverá
uma duração
operação apropriada que foi definida no objeto. Em Java, isto é
segui-la a fim de concluir os laboratórios com sucesso. Não atrase o andamentofeito pela do curso, se sentir dificuldade
chamada de um
chame o instrutor. método em um objeto usando o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da
mensagem,
1.4 Fazer o método a ser invocado
Laboratório 0 e os argumentos para o método (se houver).
O método Siga instruções do Laboratório 0também
invocado no recebedor pode enviar informações
e tome cuidado com o tempo dedevolta ao
execução, sempre recorra ao instrutor
objeto chamador através de um valor de retorno.
em caso de dúvida, nunca deixe uma dúvida sem reposta. O método chamado deve ser
um que esteja definido pelo objeto.

Seja Todos os direitos reservados


um Profissional Aprendendoa 3Way
comNetworks
Profissionais 8
Seja um Profissional Aprendendo com Profissionais
www.3way.com.br 12
10
www.3way.com.br
Linguagem
Linguagem de
deProgramação
ProgramaçãoJava
Java

2 Bases da Programação em Java


//atribuindo valor nossa
Antes de começarmos a variável
jornada referência
no mundo da programação em
Carro carro1 = new Carro();
Java, é importante compreendermos a terminologia básica e os conceitos em
carro1.ano = "2001"; A essência da
programação orientada a objetos.
carro1.modelo= Neste capítulo veremos os princípios básicos
"fusca";
da programação em Java= sem aprofundamento dos temas, que serão revistos Programação Orientada a
carro1.cor "prata";
com maior profundidade nos capítulos subseqüentes. Objetos (POO) consiste
em modelar as abstrações
2.1 Classes usando Classes e Objetos.
Abstrações são o fundamento utilizado por nós, seres humanos, a fim de
lidar com a complexidade. Uma abstração demonstra o comportamento e
propriedades essenciais de um objeto, que o diferencia de outro objeto qualquer.
Por exemplo, ao utilizar um carro, você não pensa nele como um conjunto de
dezenas de milhares de peças individuais. Pensamos em um carro como um único
objeto sobre qual podemos realizar um determinado conjunto de operações. Essa
abstração permite que as pessoas utilizem um carro sem nenhum conhecimento
sobre mecânica de automóveis. Podemos ignorar os detalhes do motor como:
Figura 2.4 – Layout Memória após inicialização
sistema de injeção de combustíveis, transmissão, sistema de freios funcionam
//criando
individualmente novo
ou em aliasAo invés disso, utilizamos o objeto automóvel como um elemento único.
conjunto.
Carro carro2 = carro1;
A essência da Programação Orientada a Objetos (POO) consiste modelar
as abstrações usando Classes e Objetos. A parte difícil deste trabalho é encontrar a
Um Objeto é qualquer abstração mais correta. Uma Classe modela uma abstração pela definição das
coisa criada a partir dessa propriedades e comportamentos dos objetos representados pela abstração. Uma
Classe, então, especifica a categoria dos Objetos e funciona como uma "planta
Classe, algo contendo as
baixa" na criação desses objetos. Um Objeto é qualquer coisa criada a partir dessa
propriedades e
Classe, algo contendo as propriedades e comportamentos definidos na Classe.
comportamentos Voltando ao exemplo do carro, um grupo de engenheiros mecânicos criam o
definidos na Classe. projeto de um carro (a Classe) e a partir deste projeto são reproduzidos milhares
de automóveis (os Objetos), praticamente idênticos entre si.
Propriedades de um Objeto da Classe são chamados de atributos e são
definidos usando variáveis em Java, também denominado Campos da Classe. O
comportamento de um Objeto, também conhecido por operações, são definidos
Figura 2.5 – Layoutmétodos
usando-se Memória duasemvariáveis
Java. referência
Variáveis parae ométodos utilizados na definição da classe
mesmo objeto
são, juntos, denominados de Membros da Classe.
Usando notação de Classe da UML (Unified Modeling Language),
2.3 Membros de Instância podemos descrever graficamente o exemplo de uma classe Carro, ver Figura 2.1.
Ambos ter
Cada objeto criado deverá atributos (variáveis)
sua própria e métodos
instância são mostrados na forma expandida na
de variáveis Os valores das variáveis
Figura 2.1.
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
o mesmo estado se suas
2.3.1 Invocação de Métodos variáveis membro têm os
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
objeto pode ter que mostrar um comportamento particular invocando uma
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da
mensagem, o método a ser invocado e os argumentos para o método (se houver).
O método invocado no recebedor pode também enviar informações de volta ao
Figura 2.1 Notação UML para Classe
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.

Seja Todos
um Profissional Aprendendo
os direitos reservados comNetworks
a 3Way Profissionais 9
www.3way.com.br 12
Seja um Profissional Aprendendo com Profissionais 11
www.3way.com.br
Linguagem
Linguagem de
de Programação
Programação Java
Java

2.1.1 Declarando Membros: Variáveis e Métodos


Na Listagem 2.1valor
//atribuindo mostraa avariável
implementação em Java da definição da classe mostrada na Figura 2.1. O
referência
exemplo, apesarcarro1
Carro de não se
= preocupar com a utilidade desta implementação, mostra as principais características da
new Carro();
definição de uma classe em
carro1.ano Java.
= "2001";
carro1.modelo= "fusca";
carro1.cor
public class =Carro
"prata";
{ // nome da classe

// Variaveis
private String cor;
private String ano;
private String modelo;
private String nome;

// Constructor
public Carro() {
modelo = "2000";
}
// Métodos
public String acelerar()
Figura 2.4 – {
Layout Memória após inicialização
return "acelerando !";
//criando
} novo alias
Carro carro2
public =String
carro1;
frear() {
return "freando !";
}
public String abrirPorta() {
return "abre porta !";
}
}
Listagem 2.1 – Elementos Básicos da Definição de uma Classe

A classe possui quatro variáveis, toda variável em Java deve ter um tipo, neste caso todas são do tipo String
(linhas 4 a 7), possui três métodos (linhas 13 a 15) representado as operações disponíveis aos objetos da classe e
um método especial (linha 10) com o mesmo nome da classe, este método é denominado construtor e seu
propósito é inicializar o objeto quando este é criado a partir da classe.
String é uma classe em Java, ela armazena um conjunto de caracteres.
Figura
Como2.5 – Layout Memória
estamos duas variáveis referência
aprendendo o que éparauma
o mesmo objetodetalharemos a classe String
classe,
Um Objeto é instância de posteriormente.
uma Classe.
2.3 Membros de Instância2.2 Objetos
Cada objeto criado deverá ter Umsua própria
objeto é umainstância
instância de variáveis
de uma classe. EleOs valores dasusando-se
é construído variáveisa
(atributos) definidas pela classe.classe,
Os métodos definem o comportamento
da mesma maneira que usamos uma "planta emde um um para
baixa" objeto constituem
construir uma
objeto. Isto é importante, pois denota
casa, éque
umaum métodoreal
entidade pertence a cadaque
da abstração objeto da representa;
a classe usando
o seu o exemplo
estado.
classe. Porém não devemos confundir isto com
do carro, uma ainstância
implementação do método,
representa que criado a partir do projeto dos
um veículo Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
engenheiros mecânicos. Um objeto deve ser explicitamente criadoestado
a partirse
desuas
uma
o mesmo
classe antes que possa ser utilizado em um
2.3.1 Invocação de Métodos programa. variáveis membro têm os
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos da
O propósito valores.
chamada
objeto
2.2.1 pode ter de
Instância que mostrar um comportamento particular invocando uma
Classes ao construtor é inicializar
operação Em apropriada que são
Java, objetos foi manipulados
definida no através
objeto. de
Emreferências
Java, istodeé objetos
feito pela
(ou o objeto que está sendo
chamada de um método em um objeto usando o operador
simplesmente referência). O processo de criação de um objeto normalmentebinário "." (ponto), criado.
devendo
envolve osespecificar a mensagem completa: o objeto que é o recebedor da
seguintes passos:
mensagem, o métododea ser
Declaração umainvocado
variávele de
os argumentos paracorresponde
referência: isto o método (sea houver).
declarar
O método umainvocado
variávelnoderecebedor
uma classepode também para
apropriada enviararmazenar
informações de volta ao
a referência ao
objeto chamador através
objeto criado. de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.

SejaTodos
um Profissional Aprendendo
os direitos reservados com
a 3Way Profissionais
Networks 10
www.3way.com.br 12
Seja um Profissional Aprendendo com Profissionais 12
www.3way.com.br
Linguagem de Programação Java

//atribuindo valor a variável referência


Carro carro1 = new Carro();
carro1.ano = "2001";
carro1.modelo= "fusca";
carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização

//criando novo alias


Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância


Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
o mesmo estado se suas
2.3.1 Invocação de Métodos variáveis membro têm os
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
objeto pode ter que mostrar um comportamento particular invocando uma
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da
mensagem, o método a ser invocado e os argumentos para o método (se houver).
O método invocado no recebedor pode também enviar informações de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.

Todos os direitos reservados a 3Way Networks


Seja um Profissional Aprendendo com Profissionais 12
13
www.3way.com.br
Linguagem
Linguagem de
de Programação
Programação Java
Java

//declaracao de duas variaveis referência que denota dois


//objetos distintos, nomeando dois objetos carro respectivamente
//atribuindo valor a variável referência
Carro
Carro carro1,
carro1 =carro2;
new Carro();
carro1.ano = "2001";
Criação do Objeto:"fusca";
carro1.modelo= para criar o objeto fazemos uso do operador new, juntamente com a chamada do
construtor da classe, assim criamos uma instância da classe.
carro1.cor = "prata";

//criacao de dois Objetos distintos


carro1 = new Carro();
carro2 = new Carro();

O operador new retorna a referência da nova instância de uma classe Carro. Esta referência pode ser
atribuída a uma variável de referência da classe apropriada. Cada objeto tem uma identidade única e sua própria
cópia das variáveis (atributos) declarados na definição da classe, ou seja, os dois objetos carro, referenciados por
carro1 e carro2 têm sua própria cópia das variáveis: cor, ano, modelo, nome.
A declaração e instanciação também podem ser combinadas:

Figura 2.4 – Layout Memória após inicialização


Carro carro1 = new Carro(),
carro2 = new
//criando Carro();
novo alias
Carro carro2 = carro1;

Figura 2.2 – Instâncias da Classe em UML

A Figura 2.2 mostra a notação UML para classe e objetos. A representação gráfica de um objeto é muito
parecida com a de um classe. Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.2.2 Referência de Objetos


Com já foi observado,
2.3 Membros de Instância uma referência nos permite manipular objetos que foram criados e armazenados na
memória Cada
do computador. Em Java,
objeto criado deverá objetos
tersósua
podem ser utilizados
própria instânciaa partir de uma referência que está armazenada
de variáveis Os valores das variáveis
em uma variável.
(atributos) Um
definidas objeto
pela pode
classe. ter váriasdefinem
Os métodos referências, também chamadas
o comportamento de um de aliases. O objeto pode ser
em um objeto constituem
manipulado por qualquer um desses aliases.
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
//declaracao Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
Carro carro1; o mesmo estado se suas
2.3.1 Invocação de Métodos variáveis membro têm os
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
objeto pode ter que mostrar um comportamento particular invocando uma
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da
mensagem, o método a ser invocado e os argumentos para o método (se houver).
O método invocado no recebedor pode também enviar informações de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto. Figura 2.3 – Layout Memória após declaração

Todos os direitos reservados a 3Way Networks


Seja
Seja um
um Profissional
Profissional Aprendendo
Aprendendo com
com Profissionais 11
12
www.3way.com.br
Profissionais 14
www.3way.com.br
Linguagem
Linguagem de
de Programação Java
Programação Java

//atribuindo
//atribuindo valor
valor a
a variável
variável referência
referência
Carro
Carro carro1
carro1 = new Carro();
= new Carro();
carro1.ano
carro1.ano =
= "2001";
"2001";
carro1.modelo=
carro1.modelo= "fusca";
"fusca";
carro1.cor
carro1.cor =
= "prata";
"prata";

Figura
Figura 2.4
2.4 –– Layout
Layout Memória
Memória após
após inicialização
inicialização
//criando
//criando novo
novo alias
alias
Carro
Carro carro2
carro2 =
= carro1;
carro1;

Figura
Figura 2.5
2.5 –– Layout
Layout Memória
Memória duas
duas variáveis
variáveis referência
referência para
para o
o mesmo
mesmo objeto
objeto

2.3
2.3 Membros de
Membros de Instância
Instância
Cada
Cada objeto
objeto criado
criado deverá
deverá ter
ter sua
sua própria
própria instância
instância de
de variáveis
variáveis Os
Os valores
valores das
das variáveis
variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento
(atributos) definidas pela classe. Os métodos definem o comportamento de de um
um em um objeto constituem
em um objeto constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o
objeto. Isto é importante, pois denota que um método pertence a cada objeto da
classe. Porém
Porém nãonão devemos
devemos confundir
confundir isto
isto com
com aa implementação
implementação do do método,
método, que
que o seu
seu estado.
estado.
classe. Dois objetos distintos têm
têm
éé compartilhada
compartilhada porpor todas
todas as
as instâncias
instâncias da
da classe.
classe. Dois objetos distintos
o
o mesmo
mesmo estado
estado se
se suas
suas
2.3.1 Invocação
Invocação dede Métodos
Métodos variáveis
variáveis membro têm os
membro têm os
2.3.1
Objetos sese comunicam
comunicam pelapela troca
troca de
de mensagens,
mensagens, isto
isto significa
significa que
que umum mesmos valores.
mesmos valores.
Objetos
objeto pode ter que mostrar um comportamento particular
objeto pode ter que mostrar um comportamento particular invocando uma invocando uma
operação apropriada
operação apropriada queque foi
foi definida
definida no
no objeto.
objeto. Em
Em Java,
Java, isto
isto éé feito
feito pela
pela
chamada de um método em um objeto usando o operador binário
chamada de um método em um objeto usando o operador binário "." (ponto), "." (ponto),
devendo especificar
devendo especificar aa mensagem
mensagem completa:
completa: oo objeto
objeto que
que éé o o recebedor
recebedor da da
mensagem, o método a ser invocado e os argumentos para o método
mensagem, o método a ser invocado e os argumentos para o método (se houver).(se houver).
O método
O método invocado
invocado no no recebedor
recebedor pode
pode também
também enviar
enviar informações
informações de de volta
volta ao
ao
objeto chamador
objeto chamador através
através de
de um valor de
um valor de retorno.
retorno. O
O método
método chamado
chamado devedeve ser
ser
um que esteja definido pelo objeto.
um que esteja definido pelo objeto.

Todos os direitos reservados a 3Way Networks


Seja
Seja um
um Profissional
Profissional Aprendendo
Aprendendo com
com Profissionais 12
12
www.3way.com.br
Profissionais 15
www.3way.com.br
Linguagem
Linguagem de
de Programação
Programação Java
Java

//declaracao
Carro carro = new Carro();
//atribuindo valor a variável referência Em Java a chamada
Carro carro1 = new Carro();
//invocando método
carro1.ano = "2001"; de um método é feito
String retorno=carro.acelerar(); usando o operador
carro1.modelo= "fusca";
carro1.cor = "prata";
//A sentença a baixo causa erro compilação, binário "." (ponto).
//método não está definido no obejeto invocador
carro.print();

2.3.1.1 Chamando Métodos de Objeto


Para ilustrar como chamar os métodos, utilizaremos como exemplo a classe
String. Pode-se usar a documentação da API Java para conhecer todos os atributos e
métodos disponíveis na classe String. Posteriormente, iremos criar nossos próprios
métodos.
Para chamar um método a partir de um objeto, escrevemos o seguinte:

nomeDoObjeto.nomeDoMétodo([argumentos]);
Figura 2.4 – Layout Memória após inicialização

//criando novo alias


Vamos pegar dois métodos encontrados na classe String como exemplo:
Carro carro2 = carro1;

Declaração do método Definição


Retorna o caractere especificado no índice. Um
índice vai de 0 até length() - 1. O primeiro
public char charAt(int index) caractere da seqüência está no índice 0, o seguinte,
no índice 1, e assim sucessivamente por todo o
array.
Compara o conteúdo de duas Strings, ignorando
maiúsculas e minúsculas. Duas strings são
public boolean equalsIgnoreCase (String outraString) consideradas iguais quando elas têm o mesmo
tamanho e os caracteres das duas strings são iguais,
sem considerar caixa alta ou baixa.
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
Tabela 4: Exemplos de Métodos da classe String

Usando os métodos:
2.3 Membros de Instância
Stringcriado
Cada objeto str1 deverá
= "Hello";
ter sua própria instância de variáveis
char x = str1.charAt(0); Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um
// retornará o caracter H e o armazenará no atributo xem um objeto constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos
String confundir
str2 isto com a implementação do método, que
= "hello";
Dois objetos distintos têm
é compartilhada// poraqui
todas será retornado
as instâncias o valor booleano true
da classe.
boolean result = str1.equalsIgnoreCase(str2); Há duas formas
o mesmo estadopara se
se suas
enviar argumentos
variáveis paraos
membro têm
2.3.1 Invocação de Métodos
2.3.2 Envio de Argumentos
Objetos para
se comunicam Métodos
pela troca de mensagens, isto significa que um um método,
mesmos valores. é
o primeiro
Em exemplos
objeto pode anteriores,
ter que mostrar enviamos atributos
um comportamento para invocando
particular os métodos.
uma envio por valor e o
operação apropriada que foi definida no objeto. Em Java, isto de
Entretanto, não fizemos nenhuma distinção entre os diferentes tipos é atributos
feito pela segundo é envio por
que podem
chamada deser
umenviados
métodocomo argumento
em um para os ométodos.
objeto usando operador binário "." (ponto), referência.
devendo especificar a mensagem completa: o objeto que é o recebedor da
2.3.2.1 Passagem
mensagem, o métododeaParâmetros
ser invocadopor valor
e os argumentos para o método (se houver).
O método invocado no recebedor pode por
Quando ocorre uma passagem valor,enviar
também a chamada do método
informações ao cópia do valor do atributo e o
faz uma
de volta
envia como argumento. O método chamado não modifica o valor original
objeto chamador através de um valor de retorno. O método chamado deve ser do argumento mesmo que estes valores
sejam modificados durante operações
um que esteja definido pelo objeto. de cálculo implementadas pelo método.
Por exemplo:
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 13
Seja um Profissional Aprendendo com Profissionais
www.3way.com.br
12
16
www.3way.com.br
Linguagem de Programação Java

//atribuindo valor a variável referência


Carro carro1 = new Carro();
carro1.ano = "2001";
carro1.modelo= "fusca";
carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização

//criando novo alias


Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância


Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
o mesmo estado se suas
2.3.1 Invocação de Métodos variáveis membro têm os
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
objeto pode ter que mostrar um comportamento particular invocando uma
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da
mensagem, o método a ser invocado e os argumentos para o método (se houver).
O método invocado no recebedor pode também enviar informações de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.

Todos os direitos reservados a 3Way Networks


Seja um Profissional Aprendendo com Profissionais 12
17
www.3way.com.br
Linguagem de
Linguagem de Programação
Programação Java
Java

PassagemPorValor
public classvalor
//atribuindo {
a variável referência
Carro carro1 = new Carro();
public =
carro1.ano static void main(String[] args) {
"2001";
int i = 10;
carro1.modelo= "fusca";
carro1.cor //= exibe o valor de i
"prata";
System.out.println(i);
// chama o método teste
// envia i para o método teste
teste(i);---------------------------------------+
// exibe o valor de i não modificado |
+---------->System.out.println(i); |
| } |
| public static void teste(int j) { <------------------+
| // muda o valor do argumento
+---------j = 33;
}
}
FiguraListagem 2.2 –Memória
2.4 – Layout Passagem porinicialização
após valor

//criando novo alias


No exemplo
Carro dado,
carro2 método teste() foi chamado e o valor de i foi enviado como argumento. O valor de i é
= ocarro1;
copiado para o atributo j do método. Já que j é o atributo modificado no método teste(), não afetará o valor do
atributo i, o que significa uma cópia diferente do atributo.
Como padrão, todo tipo primitivo, quando enviado para um método, utiliza a forma de envio por valor.

2.3.2.2 Passagem de Parâmetros por referência


Quando ocorre um envio por referência, a referência de um objeto é enviada para o método chamado. Isto
significa que o método faz uma cópia da referência do objeto enviado. Entretanto, diferentemente do que ocorre
no envio por valor, o método pode modificar o objeto para o qual a referência está apontando. Mesmo que
diferentes referências sejam usadas nos métodos, a localização do dado para o qual ela aponta é a mesma. Veja
próximo exemplo, Listagem 2.3:

public class PassagemPorReferencia {

public static Figuravoid


2.5 – Layout Memória duas variáveis
main(String[] referência
args) { para o mesmo objeto
// criar um array de inteiros
int[] idades = { 10, 11, 12 };
2.3 Membros de // exibir os valores do array
Instância
for (int i = 0; i < idades.length; i++) {
Cada objeto criado deverá ter sua própria instância de variáveis
System.out.println(idades[i]); Os valores das variáveis
(atributos) definidas pela} classe. Os métodos definem o comportamento de um em um objeto constituem
objeto. Isto é importante,//pois denotao que
chamar um método
método testepertence
e enviar a cadaa objeto da
o seu estado.
classe. Porém não devemos // referência
confundir isto paracom a oimplementação
array do método, que
+----------teste(idades); Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
| // exibir os valores do array o mesmo estado se suas
| for (int i = 0; i < idades.length; i++) {
2.3.1 Invocação de Métodos variáveis membro têm os
| System.out.println(idades[i]);<----------------------+
Objetos
| se comunicam}pela troca de mensagens, isto significa que um mesmos
| valores.
| }
objeto pode ter que mostrar um comportamento particular invocando uma |
+---->public static void teste(int[] arr) { |
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
// mudar os valores do array |
chamada de um método for um objeto
em(int i = 0; usando
i < oarr.length;
operador binário i++) "." {(ponto), |
devendo especificar a mensagem arr[i]completa:
= i +o 50;-------------------------------+
objeto que é o recebedor da
mensagem, o método a }ser invocado e os argumentos para o método (se houver).
O método invocado} no recebedor pode também enviar informações de volta ao
}
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto. Listagem 2.3 – Passagem por "referência"

Todos os direitos reservados a 3Way Networks


Seja um Profissional Aprendendo com Profissionais 14
12
Seja um Profissional Aprendendo com Profissionais
www.3way.com.br 18
www.3way.com.br
Linguagem
Linguagem de
de Programação
Programação Java
Java

A Figura 2.3 ilustra o resultado da execução do código na Listagem 2.3:


//atribuindo valor a variável referência
Carro carro1 = new Carro();
carro1.ano = "2001";
carro1.modelo= "fusca";
carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização

//criando novo alias


Carro carro2 = carro1;

Figura 2.6 - Exemplo de Envio por referência

2.4 Membros Estáticos


Há casos em que você precisará que alguns atributos sejam compartilhados por todos os objetos de uma
classe em particular, ou seja, esses atributos devem pertencer somente à Classe e não aos objetos criados a partir
dessa classe. Por exemplo, imagine que você queira manter um controle de quantos objetos de uma classe foram
criados e permitir que cada objetos consiga recuperar esta informação. Definir um contador como uma variável de
instância na definição da classe não resolveria o problema, pois já sabemos que são criadas cópias desta variável
para cada objeto criado a partir da definição de uma classe. Então como resolver o problema? A solução é usar
variáveis estáticas - usar a palavra chave static antes da declaração da variável. Uma variável estática é inicializada
quando a classe é carregada em tempo de execução. De forma similar, os métodos também podem ser estáticos.
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância


Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
o mesmo estado se suas
2.3.1 Invocação de Métodos variáveis membro têm os
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
objeto pode ter que mostrar um comportamento particular invocando uma
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamada de um método em um objeto
Figura usando
2.7 – Diagrama o mostrando
Classe operadordefinição
binário "." (ponto),
de membros estáticos
devendo especificar a mensagem completa: o objeto que é o recebedor da
mensagem, o método a ser invocado e os argumentos para o método (se houver).
A Figura 2.7 mostra a redefinição da classe Carro que foi acrescentado dois membros estáticos, ou
O método invocado no recebedor pode também enviar informações de volta ao
membros da classe, marcado sublinhado abaixo do nome, conforme notação definida na UML. Em sua
objeto chamador através de um valor de retorno. O método chamado deve ser
implementação usamos a palavra reservada static como mostrado na Listagem 2.4 abaixo:
um que esteja definido pelo objeto.

Seja Todos os direitos reservados a 3Way Networks


um Profissional Aprendendo com Profissionais 15
Seja um Profissional Aprendendo com Profissionais
www.3way.com.br 12
19
www.3way.com.br
Linguagem
Linguagemde
deProgramação
ProgramaçãoJava
Java

public class Carro {


// Variáveis de Instância
//atribuindo valor a variável referência
String modelo;
Carro carro1 = new Carro();
String cor;
carro1.ano = "2001";
String ano;
carro1.modelo= "fusca";
// declaração variável estática
carro1.cor = "prata";
static int contador; // 1

// construtor modificado para incrementar o contador


// para cada objeto criado
public Carro() { // 2
contador = contador + 1;
}
Temos acesso aos
// Métodos de Instância membros estáticos de
public String acelerar() {
return "acelerando !"; uma classe usando
} diretamente o nome da
classe seguido do
public String frear()
Figura{2.4 – Layout Memória após inicialização
return "freando !";
operador ponto (.), não
//criando
} novo alias precisamos de uma
Carro carro2 = carro1;
instância.
public String abrirPorta() {
return "abre porta !";
}

// Método Estático //3


static int getContadorInstancia() {
return contador;
}
}
Listagem 2.4 – Exemplo de membros de classe

A variável estática contador é declarada em (1, linha 7), ela será alocada e inicializada por padrão com o
valor 0 (zero) quando a classe for carregada. Toda vez que um objeto Carro for criado o construtor da classe em (2,
linha 10) será executado. Figura O construtor incrementa
2.5 – Layout Memória explicitamente
duas variáveis o contador
referência para o mesmo objeto da classe. O método
getContadorInstancia() em (3, linha 18) é estático e é um método da classe, ele retorna o valor do contador quando
for invocado.
O código seguinte
2.3 Membros invoca o método getContadorInstancia() da classe Carro:
de Instância
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
//Nome da classe invoca método estatico
(atributos) definidas pela classe. Os métodos definem
int retorno = Carro.getContadorInstancia(); o comportamento de um em um objeto constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que da classe:
Membros estáticos também podem ser acessados via referência para objetos Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
o mesmo estado se suas
//Referencia de objeto invoca método estatico
2.3.1 Invocação
Carro de Métodos
carro1 = new Carro(); variáveis membro têm os
int retorno = carro1.getContadorInstancia();
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
objeto pode ter que mostrar um comportamento particular invocando uma
operaçãoNote que membros
apropriada que foide classe podem
definida no ser acessados
objeto. tantoisto
Em Java, peloénome
feitodapela
classe quanto pela referência de
objetos da classe, porém membros de instância só são acessíveis
chamada de um método em um objeto usando o operador binário "." (ponto),via referência de objetos da classe.
devendo especificar a mensagem completa: o objeto que é o recebedor da
2.5 Herança
mensagem, - Relacionamentos
o método a ser invocado e osdo tipo "é-um"
argumentos para o método (se houver).
O método Você dispõem
invocado no de dois mecanismos
recebedor pode também fundamentais afim de se de
enviar informações construir
volta aonovas classes a partir de classes
existentes: herançaatravés
objeto chamador e agregação.
de umFaz todo
valor desentido
retorno.construir nossa
O método classe Carro
chamado deveherdando
ser todas as características de
uma classe Veículo que já exista,
um que esteja definido pelo objeto. uma vez que um Carro é um Veículo. Mas um Veículo é constituído de diversas

Seja um Profissional
Todos Aprendendo
os direitos reservados comNetworks
a 3Way Profissionais 16
www.3way.com.br 12
Seja um Profissional Aprendendo com Profissionais 20
www.3way.com.br
Linguagem de Programação Java

//atribuindo valor a variável referência


Carro carro1 = new Carro();
carro1.ano = "2001";
carro1.modelo= "fusca";
carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização

//criando novo alias


Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância


Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
o mesmo estado se suas
2.3.1 Invocação de Métodos variáveis membro têm os
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
objeto pode ter que mostrar um comportamento particular invocando uma
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da
mensagem, o método a ser invocado e os argumentos para o método (se houver).
O método invocado no recebedor pode também enviar informações de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.

Todos os direitos reservados a 3Way Networks


Seja um Profissional Aprendendo com Profissionais 12
21
www.3way.com.br
Linguagem
Linguagem de
de Programação
Programação Java
Java

partes, então poderíamos construir nossa classe Veículo pela agregação de outros objetos que constituem um
veículo, //atribuindo
assim podemos dizer queaumvariável
valor Veículo tem um Motor, tem um Chassi e tem uma Carroceria.
referência
A Figura
Carro 2.7 mostra
carro1 a relação
= new entre as classes Veículo e Carro, ela mostra que um Carro É-UM Veículo, a
Carro();
carro1.ano
classe Veículo = "2001";
é denominada Superclasse enquanto a classe Carro é chamada de Subclasse. A classe Veículo é uma
carro1.modelo= "fusca";
generalização para todo Carro (neste caso veículos motorizados), enquanto a classe Carro representa a
carro1.cor = "prata";
especialização da classe Veículo, ou seja um tipo particular de veículo.

Figura 2.8 – Diagrama de Classe descrevendo a relação de Herança

Figura 2.4 – Layout Memória após inicialização


Em Java, essa relação é representada pela palavra-chave extends. Uma subclasse só pode estender
(herdar)//criando
somente uma novo alias
única superclasse. A listagem 2.4 de código demonstra o uso de extends para criar a
Carro carro2 = carro1;
subclasse Carro a partir da superclasse Veículo.

class Veiculo { // nome da classe

// (1)Variaveis
private String cor;
private String ano;
private String modelo;
private String nome;

// (2) Constructor
public Veiculo() { modelo="2000" };

// (3) Métodos
public String acelerar() { return "acelerando !"; }
public String
Figurafrear() { return
2.5 – Layout Memória "freando
duas variáveis !";
referência para } objeto
o mesmo
public String abrirPorta() { return "abre porta !"; }
}

2.3 Membros
class de Instância
Carro extends Veiculo {
// declaração
Cada objeto criado deverá de Variáveis e Métodos
ter sua própria da nova
instância classe
de variáveis Os valores das variáveis
}
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
objeto. Isto é importante, pois denota que umListagem
método
2.5 –pertence a cada objeto da
Exemplo Herança
o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
Dois objetos distintos têm
é compartilhada por todasmuito
Não se preocupe as instâncias da classe.em compreender qual relação deverá ser utilizada para criar suas
neste momento o mesmo estado se suas
classes, foque na terminologia e nas palavras-chave que estão sendo apresentadas. variáveis membro têm os
2.3.1 Invocação de Métodos
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
2.6 Agregação - Relacionamentos do tipo "tem-um"
objeto pode ter que
Você pode mostrar
construir umclasses
novas comportamento particular
de objetos por invocando
agregação umajá existentes, o objeto agregado é
de objetos
operação apropriada que
constituído de outros objetos.foi definida no objeto. Em Java, isto é feito pela
chamadaJava
de um método em um objeto usando o operador binário "." (ponto),
implementa o conceito de agregação de objetos pelo uso da referência. Objetos em Java não podem
devendo
conter especificar
outros objetos aexplicitamente.
mensagem completa: o objetopoderão
Objetos somente que é conter
o recebedor
variáveisdade tipos primitivos e referências a
mensagem, o
outros objetos.método a ser invocado e os argumentos para o método (se houver).
O método invocado no recebedor pode também enviar informações de
Uma relação de agregação é demonstrada na Figura 2.8, este diagrama volta ao
UML informa que objetos da classe
objeto chamador através de um valor de retorno.
Veículo TEM-UM objeto da classe Motor associado a ela. O método chamado deve ser
um que esteja definido pelo objeto.

Todos os direitos reservados a 3Way Networks


Seja um Profissional Aprendendo com Profissionais 17
Seja um Profissional Aprendendo com Profissionais
www.3way.com.br
12
22
www.3way.com.br
Linguagem
Linguagem de
de Programação
Programação Java
Java

//atribuindo valor a variável referência


Carro carro1 = new Carro();
carro1.ano = "2001";
Figura 2.9 – Diagrama de Classe descrevendo Agregação
carro1.modelo= "fusca";
carro1.cor = "prata";
A listagem mostra a implementação da relação TEM-UM mostrada na Figura 2.9.

class Veiculo // nome da classe


{
// Agregação
Motor motor1 = new Motor();
}

2.7 Princípios de Programação Com Java


 Tudo em Java deve ser colocado dentro de uma classe;
Figura 2.4 – Layout Memória após inicialização
 Há dois tipos de valores em Java: valores atômicos de tipos primitivos e valores de referência;
 //criando novo alias
Referências indicam objetos que são criados a partir de uma classe;
 Objetos só podem=ser
Carro carro2 carro1;
manipulados via referência;
 Objetos em Java não podem conter outros Objetos, ele somente tem referências para outros objetos;
 Remoção de objetos é gerida pelo sistema de tempo de execução (runtime). Este processo é conhecido
como Garbage Collection.
 Java faz distinção entre nomes em MAIÚSCULAS e minúsculas, ou seja, é CASE SENSITIVE.

2.8 Estrutura de Arquivos Fontes em Java


Em Java, um arquivo de código-fonte tem os elementos especificados na seguinte ordem:
 A definição opcional de package para especificar o nome do pacote da classe. As classes e interfaces
definidas em um arquivo fonte tornam-se parte deste pacote. Se omitida, as definições pertencem ao
pacote default. Veremos mais sobre pacotes posteriormente.
 Zero ou mais usos da sentença import. A sentença import será discutida em detalhes posteriormente.
 Qualquer número de definições de classes e interfaces. Tecnicamente um arquivo de código-fonte em
Java não precisaFigura
conter
2.5 –qualquer definição,
Layout Memória masreferência
duas variáveis ele seria
para oinútil.
mesmoExperimente
objeto compilar um arquivo
fonte sem nenhuma definição. As classes e interfaces podem ser definidas em qualquer ordem. O
compilador Java impõe a restrição de somente uma classe com modificador public por arquivo, sendo
2.3 Membros que sede esta existir o nome do arquivo de código-fonte deve ser nomeado obrigatoriamente com o
Instância
Cada objeto criadopública.
nome da classe deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
Vejaé Figura
objeto. Isto 2.10 na
importante, próxima
pois denotapágina,
que um demonstração
método pertence da estrutura
a cada de um arquivo
objeto da de código-fonte válido.
o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
// Nome do Arquivo: Aplicacao.java Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
o mesmo estado se suas
//PARTE 1: (Opcional)
2.3.1 Invocação de Métodos
//Nome Pacote variáveis membro têm os
package com.nomeempresa.projeto.nomepacote;
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
objeto pode ter que mostrar um comportamento particular invocando uma
//PARTE 2: (Zero ou Mais)
operação apropriada que foi
//Pacotes definida no objeto. Em Java, isto é feito pela
usados
chamada de um método em um objeto usando o operador binário "." (ponto),
devendo especificar
importa mensagem
java.util.*;completa: o objeto que é o recebedor da
import
mensagem, o método a serjavax.swing.JOptionPane;
invocado e os argumentos para o método (se houver).
O método invocado no recebedor pode também enviar informações de volta ao
//PATE 3: (Zero ou Mais)
objeto chamador//através de um valor
Definições de retorno.
de classes O método chamado
e interfaces deve ser ordem)
(em qualquer
um que esteja definido pelo objeto.
public class Aplicacao {}
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 18
Seja um Profissional Aprendendo com Profissionais
www.3way.com.br
12
23
www.3way.com.br
Linguagem de
Linguagem de Programação
Programação Java
Java

class C1{}
interface I1{}
//atribuindo valor a variável referência
Carro carro1
// ...= new Carro();
carro1.ano = "2001";
class Cn{}
carro1.modelo= "fusca";
interface In{}
carro1.cor = "prata";
//fim arquivo
Figura 2.10 – Estrutura do arquivo de código-fonte

2.9 O método main()


O interpretador Java executa uma chamada ao main() na classe especificada na linha de comando. Este é o
meio padrão pelo qual aplicações standalone são invocadas. O método main() tem a seguinte assinatura:

public static void main(String [] args)

O comando java AlgumaClasse, resulta em uma chamada para o método AlgumaClasse.main(). Assim
qualquer classe pode ter um método main() mas somente a classe especificada ao interpretador será executada.
Figura 2.4 – Layout Memória após inicialização

2.10 //criando
Fazer Laboratório 1
novo alias
Carro carro2 =docarro1;
Siga instruções Laboratório 1 e tome cuidado com o tempo de execução, sempre recorra ao instrutor
em caso de dúvida, nunca deixe uma dúvida sem reposta.

2.11 Exercícios
Escreva, compile e execute todas as listagens de código apresentadas neste capítulo.

3 Identificadores, Palavras-chave e Tipos


Assim como outras linguagens, a linguagem de programação Java é definida por uma regra gramatical, que
especifica como construções sintaticamente legais podem ser formadas usando os elementos da linguagem, e por
uma definição semântica que especifica o significado das construções sintaticamente corretas.

3.1 Comentários
Um programa deve ser documentado com comentários e notas em lugares relevantes. Comentários tem
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
como propósito a documentação, eles são ignorados pelo compilador.
Para fazer um comentário em Java, você pode usar o // para comentar
uma linha simples até o final, tudo após o // será ignorado pelo
2.3 Membros
Um programa deser
deve Instância compilador:
Cada objeto
documentado pelacriado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela
inserção de comentários. classe. Os métodos
//isto definem
comenta o comportamento
até o fim da de um
linha em um objeto constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir istooucom então usar o /* */ do
a implementação para comentar
método, que
Dois objetos distintos
Comentários têm
Javadoc são
múltiplas
é compartilhada por todas as instâncias dalinhas,
classe.tudo o que estiver entre eles será
ignorado pelo compilador. o mesmo estado se
usados para gerar umasuas
2.3.1 Invocação de Métodos variáveis membroHTML
documentação têm os
Objetos se comunicam /* pela troca de mensagens, isto significa que um paramesmos valores. em
seus programas
Um comentário
objeto pode ter que mostrar umcom comportamento particular invocando uma Java.
varias linhas
operação apropriada que foi definida */ no objeto. Em Java, isto é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da
mensagem,Você o método
pode a criar
ser invocado e os argumentos
comentários para o métodocom
Javadoc começando-os (se houver).
/** e
O terminando-os
método invocado comno recebedor
*/, funciona podecomo também enviar informações
o exemplo anterior só de que
volta ao
ao
objeto chamador através de um valor de retorno. O método
adicionarmos tags apropriadas (como @tag valor) podemos colocar mais chamado deve ser
um que estejaem
informação definido
nossospelo objeto. Por exemplo:
comentários.
Seja um Profissional Aprendendo com Profissionais 19
Todos os direitos reservados a 3Way Networks
www.3way.com.br
Seja um Profissional Aprendendo com Profissionais 12
24
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

/**
//atribuindo
Este valor
e um exemplo deacomentários
variável referência
especiais para documentação usado por
Carro carro1 = new Carro();
java para gerar uma documentação em html. Este usa tags como:
carro1.ano
@author Carlos= Eduardo
"2001";
carro1.modelo=
@version 1.2 "fusca";
carro1.cor
@see <a = "prata";
href="http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/javadoc.html">Javadoc
Tutorial</a>
*/

3.2 Ponto-e-Vírgula, Blocos e Espaço


Uma sentença é constituída de uma ou mais linhas de código terminadas por ponto-e-vírgula ( ; ). Uma
exemplo de sentença simples é:

System.out.println("Hello");

Um bloco é uma ou mais sentenças cercadas por chaves ({) de abertura e outra (}) de fechamento. Blocos
de sentenças podem ser aninhados indefinidamente. Qualquer
Figura 2.4 – Layout Memóriaquantidade de espaços são permitidos. Um exemplo
após inicialização
de bloco://criando novo alias
Carro carro2 = carro1;
public static void main( String[] args ){

System.out.println("Hello");

System.out.println("world");

}
Listagem 3.1 – Blocos e sentenças

3.3 Identificadores
Identificadores são tokens, elementos básicos que constitui a linguagem,
representa nomes de variáveis, métodos, classes, etc. Exemplos de identificadores
Identificadores em Java
são: Hello, main, System, out, println.
Com isto, significa queFigura 2.5 – Layout Memória
o identificador: MaInduas
nãovariáveis referência que
é o mesmo mesmo objeto são case-sensitive, ou
para omain.
Identificadores devem começar com uma letra, ou um caractere sublinha "_", ou seja, é feito distinção de
um caractere dólar "$". Letras podem ser maiúsculas ou minúsculas. Os caracteres caracteres maiúsculos e
2.3 Membros
subsequentes podemde Instância
usar números de 0 a 9. minúsculos.
Os identificadores criados por você não podem
Cada objeto criado deverá ter sua própria instância de variáveis ser iguais aos Os valores das variáveis
identificadores reservados
(atributos) definidas pela gramática
pela classe. Os métodos da linguagem
definem o (palavras
comportamentoreservadas)
de um em um objeto constituem
objeto.class,
como: Isto épublic, void, etc.
importante, pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
Exemplospor de todas
identificadores válidos: Dois objetos distintos têm
é compartilhada as instâncias da classe.
numero, número, var0001, a_com_b, _var01_, $$_100. o mesmo estado se suas
2.3.1 Invocação de Métodos variáveis membro têm os
Exemplos de identificadores inválidos:
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
n^mero, 0001var, a-com-b, var/01, $$..100 .
objeto pode ter que mostrar um comportamento particular invocando uma
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
3.4 Palavras
devendo Reservadas
especificar a mensagem completa: o objeto que é o recebedor da
mensagem,São oidentificadores
método a ser reservados
invocado epela linguagem epara
os argumentos que onão devem(se
método serhouver).
utilizados como outra finalidade. Seu
uso de forma incorreta gerará um erro de compilação.
O método invocado no recebedor pode também enviar informações de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 20
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
25
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

abstract assert boolean break byte


//atribuindo
case valor
catch a variável
char referência
class continue
Carro carro1 = new Carro();
const
carro1.ano =default
"2001"; do double else
carro1.modelo=
enum "fusca"; false
extends float final
carro1.cor = "prata";
finally for goto if implements
import instanceof int interface long
native new null package private
protected public return short static
strictfp super switch synchronized this
throw throws transient true try
void volatile while
Figura 3.1 – Palavras Reservadas

Figura 2.4 – Layout Memória após inicialização


Os identificadores const e goto não são utilizados atualmente em Java, mas é palavra reservada porque em
//criando novo alias
versões anteriores eles tinham utilidade e foi depreciado o seu uso. Já null, true e false são literais reservados.
Carro carro2 = carro1;

3.5 Variáveis, Declarações e Atribuição


Variáveis em Java podem ser de:
 Instância: é um espaço na memória usado para armazenar o estado de Variáveis em Java
um objeto. podem ser de instância,
 Estática ou de classe: que pertencem à classe e não a uma instância de estática e local.
um objeto. Devem ser declaradas e
 Local: também chamadas de variáveis de método, que são declaradas inicializadas antes de
em blocos ou métodos e são alocadas para cada invocação de método serem utilizadas.
ou bloco.

A variável armazena valores de um tipo de dado. Uma variável deve ter um


nome, um tipo, um tamanho particular e um valor associado a ela.
O tipo da variável indica o tipo
Figura de dado
2.5 – Layout queduas
Memória ela variáveis
pode conter.
referênciaOpara
nome dasobjeto
o mesmo
variáveis deve seguir as mesmas regras de nomenclatura que os identificadores.

3.5.1 Declarando e inicializando Variáveis


2.3 Membros de Instância
A seguir, vemos como é feita a declaração de uma variável:
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela classe. Os métodos
<tipo do dado> <nome> [= valor inicial];
definem o comportamento de um em um objeto constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
Dois
Os valores colocados entre < > são obrigatórios, enquanto que os valores contidos objetos
entre [ ] sãodistintos
opcionais.têm
é compartilhada
Exemplos por todas
de declarações as instânciasválidas:
e inicializações da classe.
o mesmo estado se suas
2.3.1 char
Invocação de Métodos variáveis membro têm os
caracter;
Objetos se comunicam pela troca de mensagens, isto significa que um
double area; mesmos valores.
pode ter flag;
objeto boolean que mostrar um comportamento particular invocando uma
int idade = 10;
operação apropriada
float areaMesa que foi definida no objeto. Em Java, isto é feito pela
= 4.5f;
chamada de um método em um objeto usando o operador binário "." (ponto),
devendobyte
especificar
b1=2, a mensagem
b2=4; completa: o objeto que é o recebedor da
mensagem, o método a ser invocado e os argumentos para o método (se houver).
int i=10;
O método invocado no recebedor pode também enviar informações de volta ao
int j=i;
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 21
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
26
www.3way.com.br
Siga-nos também no Twitter!
twitter.com/3waynet
Linguagem de Programação
Linguagem JavaJava
de Programação

JAVA é muito exigente com relação ao tipo de dado, é uma linguagem fortemente tipada. O compilador
não permitirá que você use
//atribuindo o operador
valor de atribuição
a variável (=) para inserir uma referência de objeto de uma classe
referência
Elefante em uma carro1
Carro variável referência do tipo da classe Coelho, nem permitirá que se atribua um valor do tipo float a
= new Carro();
uma variável do tipo int: = "2001";
carro1.ano
carro1.modelo= "fusca";
carro1.cor = "prata";
Coelho coelho = new Elefante(); //erro
int i = 3.4f; //erro

Abaixo vemos um exemplo de programa que declara e inicializa algumas variáveis:

public class ExemploVariaveis {

public static void main( String[] args ){

//declara uma variável com nome result e tipo boolean


boolean result;

//declara uma variável com nome option e tipo char


char option;
Figura 2.4 – Layout Memória após inicialização

//criando novo alias


// atribui o símbolo C para a variável
Carro carro2 = carro1;
option = 'C';

//declara uma variável com nome grade e tipo double


// e a inicializa com o valor 0.0
double grade = 0.0;

}
}
Listagem 3.2 – Declaração de variáveis

3.5.2 Exibindo o valor de uma Variável


Para exibirmos em qualquer dispositivo de saída o valor de uma variável, podemos fazer uso dos seguintes
comandos:

System.out.println() ou System.out.print()
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

Aqui está um simples programa como exemplo:

2.3 Membros de Instância


public class ImprimeVariavel {
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
public static void main(String[] args) {
(atributos) definidas pela classe. Os métodos definem o comportamento de umem um objeto constituem
objeto. Isto é importante, poisint
denota que =um10;
value método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir
char x;isto com a implementação do método, que
x = 'A';da classe.
Dois objetos distintos têm
é compartilhada por todas as instâncias
System.out.println(value); o mesmo estado se suas
System.out.println("O valor de x = " + x); variáveis membro têm os
2.3.1 Invocação de Métodos
}
Objetos
} se comunicam pela troca de mensagens, isto significa que um mesmos valores.
objeto pode ter que mostrar um comportamento particular
Listagem 3.3 – Imprimindo invocando uma
valor de variáveis
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
3.5.3 Variáveis de Referência e de Valor
devendo especificar a mensagem completa: o objeto que é o recebedor da
Java suporta duas classes de variáveis, elas podem ser: de referência ou de valor.
mensagem, o método a ser invocado e os argumentos para o método (se houver).
As variáveis de valor (ou primitivas) são aquelas que armazenam dados no exato espaço de memória onde
O método invocado no recebedor pode também enviar informações de volta ao
a variável está.
objeto chamador através
As variáveis de um valor
de referência são de retorno.
aquelas queOarmazenam
método chamado deve de
o endereço ser memória onde o dado está
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 22
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
28
www.3way.com.br
Linguagem de de
Linguagem Programação JavaJava
Programação

armazenado. Ao declarar uma variável do tipo de uma certa classe, se declara uma variável que referencia um
objeto daquela classe.
//atribuindo valor a variável referência
Por exemplo,
Carro carro1 vamos suporCarro();
= new que se tenha estas duas variáveis do tipo int e da classe String.
carro1.ano = "2001";
int num = 10; "fusca";
carro1.modelo=
String nome == "Hello";
carro1.cor "prata";

Suponha que o quadro abaixo represente a memória do computador, com seus endereços de memória, o
nome das variáveis e os tipos de dados que ele pode suportar.

Endereço Identificador Valor

0x10001 num 10
: : :
0x20002 nome 0x30001
: Figura: 2.4 – Layout Memória
: após inicialização
//criando novo 0x30001
alias "Hello"
Carro carro2 = carro1;
Figura 3.2 – Memória após inicialização de variáveis.

A variável num (do tipo int) o valor é o atual valor contido por ela e a variável referência nome (do tipo
String) somente é armazenado o endereço de memória que contém o valor da variável.

3.6 Tipos Básicos em Java


3.6.1 Literais Java Para usar um literal de
Um literal é um valor constante, este valor pode ser numérico (inteiros e caracter devemos
ponto-flutuantes), caracteres, booleanos ou cadeia de caracteres (String). Há ainda cercar o caractere entre
o literal null que representa uma referência nula (sem destino). delimitadores de aspas
simples. Por exemplo, a
3.6.2 Tipos Dados Primitivos
3.6.2.1 Lógico – boolean
letra A, é representada
O tipo booleano tem dois
Figuravalores literais
2.5 – Layout true
Memória duas false, ele
e variáveis podepara
referência representar
o mesmo objeto como o 'A'.
dois estados: true (verdadeiro) ou false (falso). No exemplo abaixo é declarada a
variável verdade do tipo boolean e é atribuída a esta o valor true.
2.3 Membros de Instância
boolean verdade = true;
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um
3.6.2.2 Textual – char and String em um objeto constituem
objeto. Isto é importante,
O tipo pois denota
de dado caracter que um
representa ummétodo pertence
CARACTER a cada
UNICODE, objeto de
conjunto da o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
caracteres de 16 bits sem sinal, em substituição ao conjunto de caracter ASCII de 8 Dois objetos distintos têm
ébits.
compartilhada por todas
Unicode permite o uso as
deinstâncias
símbolos edacaracteres
classe. especiais das línguas.
o mesmo estado se suas
Para usar um literal de caracter devemos cercar o caractere entre delimitadores de aspasmembro
variáveis simples.têm
Por os
2.3.1 Invocação
exemplo, a letra A,deéMétodos
representada como o 'A'. Ou podemos ainda usar o código hexadecimal do caractere
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
UNICODE, por exemplo '\u0041', esta é a representação hexadecimal do caractere unicode 'A'.
objeto pode ter caracteres
Para usar que mostrar um comportamento
especiais, particular
tais como um caractere de invocando uma contra-barra é usada seguida
nova-linha, uma
operação
pelo códigoapropriada
do caracter.que foi definida
Por exemplo, no objeto.
'\n' para EmdeJava,
o caracter isto é '\r'
nova-linha, feito
parapela
o retorno de "carro-do-carro", o
chamada de um método
'\b' para o "backspace". em um objeto usando o operador binário "." (ponto),
devendoOespecificar
tipo String,a que
mensagem
não é um completa: o objeto
tipo primitivo mas que
uma éclasse,
o recebedor da representar sequencias de
é usado para
mensagem, o método
caracteres. Por exemplo:a ser invocado e os argumentos para o método (se houver).
O método invocado no recebedor pode também enviar informações de volta ao
"Um literal
objeto chamador String
através de umpode
valorconter caracter
de retorno. de escape
O método chamado\n". deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 23
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
29
www.3way.com.br
Linguagem de de
Linguagem Programação JavaJava
Programação

Alguns exemplos de declarações e inicializações de variáveis do tipo char e do tipo String:


//atribuindo valor a variável referência
Carro carro1 = new Carro();
// declara e inicializa
carro1.ano = "2001"; uma variável char
char ch = 'A';
carro1.modelo= "fusca";
carro1.cor = "prata";
Literais do tipo String
// declara e inicializa duas variáveis char são seqüências de
char ch1,ch2;
ch1='\U0020';
caracteres que devem
ch2='B; estar cercadas por
aspas-duplas ("") e
// declara duas variáveis String e as inicializa devem começar e
String deseja = "Bom dia !! \n";
String lembre = "Strings são imutáveis !"; terminar na mesma
linha.
// declara duas variáveis String
String str1,str2;

3.6.2.3 Inteiro – byte, short, int e long Figura 2.4 – Layout Memória após inicialização
Há quatro tipos
//criando novointeiros em Java, representados pelas palavras chaves byte,
alias
short, int e long.carro2
Carro Os literais
= integrais
carro1;podem ser escritos de três formas diferentes:
decimal (base 10), hexadecimal (base 16) e octal (base 8). Para números decimais
basta escrevê-lo como ele é exemplo: 2010.
Para usar os outros literais inteiros em Java você pode seguir algumas notações especiais. Para números
hexadecimais devemos utilizar o prefixo "0x" (zero xis minúsculo) ou "0X" (zero xis maiúsculo). Para números em
octal ele deve ser precedido de "0" (zero).
Por exemplo, considere o número 12 (em decimal):

int valDecimal = 12;


int valHexadecimal = 0xC;
int valOctal = 014;

Os literais inteiros são, por padrão, do tipo de dados int (32-bit com sinal). Em alguns casos pode-se
desejar forçar o literal inteiro para o tipo long (64-bit com sinal), isso pode ser feito usando o caractere "l" ou "L"
como sufixo do literal.
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

Tamanho (bits) Tipo Faixa


2.3 Membros de Instância
Cada objeto criado
8 deverá ter sua -27 a 2de
byte própria instância 7
- 1 variáveis Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
16 short -215 a 215 - 1
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos 32 confundir isto com
int a implementação
-231do
a 2método,
31
-1 que
Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
64 long -263 a 263 - 1 o mesmo estado se suas
2.3.1 Invocação de Métodos variáveis membro têm os
Tabela 3.1: Tipos e faixa de valores dos Tipos Integrais
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
objeto pode ter que mostrar um comportamento particular invocando uma
operação apropriada
3.6.2.4 Ponto que– float
Flutuante foi definida
e double no objeto. Em Java, isto é feito pela
chamadaOsdeliterais
um método em um objeto
de ponto flutuante podemusando o operador
ser expressos notação"."
em binário (ponto),
padrão ou científica. Por exemplo, 123.4
devendo especificar
está na notação a enquanto
padrão, mensagem123.4e2
completa:está na o notação
objeto que é o recebedor
científica. da tipos fracionários são do tipo
Os literais dos
mensagem, o método
de dados double a ser64-bit)
(um valor invocado
porepadrão.
os argumentos para ouma
Para inicializar método (se houver).
variável com o tipo de dados float (32-bit), de
O método
menor invocado
precisão, no recebedor
adicione o caracterepode
"f" outambém enviar
"F" ao literal: informações de volta ao
3.1415F.
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 24
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
30
www.3way.com.br
Linguagem de de
Linguagem Programação JavaJava
Programação

double d1 = 123.4;
double d2 = 1.234e2; // mesmo valor de d1, mas em notação científica
//atribuindo
float valor a variável referência
f1 = 123.4f;
Carro carro1 = new Carro();
carro1.ano = "2001";
Tamanho (bits) Tipo
carro1.modelo= Faixa
"fusca"; Os literais dos tipos
carro1.cor =float
"prata";31 31 fracionários são do tipo
32 -2 a 2 - 1
de dados double e do
64 double
63
-2 a 2 - 1
63
tipo float.
Tabela 3.2: Tipos e faixa de valores dos Número Fracionários

3.6.2.5 Exemplos de declarações e atribuições


O seguinte programa demonstra como declarar e atribuir valores para
variáveis dos tipos int, float, boolean, char e String:

public class Atribui {


Figura 2.4 – Layout Memória após inicialização
public static void main (String args []) {
//criando novo alias
Carro carro2//= declara
carro1;variavel integer
int x, y;

// declara variavel ponto-flutuante


float z = 3.414f;

// declare e atribui double


double w = 3.1415;

// declare e atribui boolean


boolean verdadeiro = true;

// declare variavel caracter


char c;

// declare variavel String


StringFigura
str;
2.5 – Layout Memória duas variáveis referência para o mesmo objeto
// declare e atribui variavel String
String str1 = "bye";
// atribui valor para variavel char
2.3 Membros decInstância = 'A';
// atribui valor a variavel String
Cada objeto str
criado deverá ter declaracoes!";
= "Pratique sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela
// classe.
atribui Os valor
métodosa definem
variaveis o comportamento
inteiras de um em um objeto constituem
objeto. Isto é importante,
x =pois
6; denota que um método pertence a cada objeto da
o seu estado.
y = 1000;
classe. Porém não devemos confundir isto com a implementação do método, que
//atribuições não permitidas Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
// y = 3.1415926; // 3.1415926 não e inteiro o mesmo estado se suas
// requer casting e decimal será
2.3.1 Invocação de Métodos // truncado.
variáveis membro têm os
Objetos se comunicam pela troca de//mensagens,
//w = 175,000; A vírgulaisto (,) significa
não pode que umaparecer, mesmos valores.
//em ponto-flutuante
objeto pode ter que mostrar um comportamento particular invocando uma use (.);
//verdadeiro = 1; // confusão comum feita por
operação apropriada que foi definida no objeto. Em Java, isto é C/C++
// ex-programadores feito pela
chamada de um método em um objeto
//z = 3.14156; usando o operador binário
// Não pode atribuir double "." (ponto),dentro de um
devendo especificar a mensagem completa: o objeto que é o recebedor
// float; Isto requer da
conversão.
}
mensagem, o método a ser invocado e os argumentos para o método (se houver).
}
O método invocado no recebedor pode também enviar informações de volta ao
Listagem 3.4 O
objeto chamador através de um valor de retorno. – Exemplo
método atribuições
chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 25
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
31
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

3.7 Conversões
Já dissemos que ovalor
//atribuindo Java é bastante
a variávelrigoroso quanto aos tipos das variáveis, tudo tem haver com o tamanho
referência
de cada Carro
tipo, ou carro1
com quantidade
= new de bits que cada tipo exige para representar o dado a ser armazenado na variável.
Carro();
Enquanto um número fracionário
carro1.ano costuma ser armazenado em uma variável do tipo double (64 bits), tentar atribui-
= "2001";
lo a umacarro1.modelo= "fusca";
variável do tipo int (32 bits) não funciona pois é um código que diz: "i deve receber tudo que está em d",
mas nãocarro1.cor = "prata";
se sabe se d realmente é um número inteiro ou não, ou seja, Java não consegue antecipar se o valor
armazenado em d vai caber em i.

double d = 3.1415;
int i = d; // não compila

O mesmo ocorre no seguinte trecho:

int i = 3.14;

O mais interessante, é que nem mesmo o seguinte código compila:

Figura 2.4pode
double d = 5; // ok, o double – Layoutconter
Memória após
um inicialização
número inteiro
int i = d;
//criando // alias
novo não compila
Carro carro2 = carro1;
Apesar de 5 ser um bom valor para um int, o compilador não tem como saber que valor estará dentro
desse double no momento da execução, mesmo que você esteja lendo o valor literal de d no seu código fonte, o
compilador não tem como garantir que essa atribuição ocorra sem perda de valores. É como colocar uma xícara de
café grande numa xícara pequena, alguma coisa vai derramar. Já no caso a seguir é o contrário:

int i = 5;
double d2 = i;

O código acima compila sem problemas, já que um double pode guardar um número com ou sem ponto
flutuante. Todos os inteiros representados por uma variável do tipo int podem ser guardados em uma variável
double, então não haverá problemas com o código acima.

3.7.1 Casting de Tipos Primitivos


Às vezes, precisamos que um número quebrado seja arredondado e armazenado em um número inteiro.
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
Para fazer isso sem que haja o erro de compilação, é preciso ordenar que o número quebrado seja moldado (cast)
como um número inteiro. Esse processo recebe o nome de casting.

2.3 Membros
double d3 de
= Instância
3.14;
Cadai objeto
int criado
= (int) d3; deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
O casting
objeto. Isto foi feito pois
é importante, para denota
moldar que
a variável d3 como
um método um int.aOcada
pertence de i agora
valorobjeto da é 3. O mesmo ocorre entre
o seu estado.
valores int e long.
classe. Porém não devemos confundir isto com a implementação do método, que
Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
long x = 10000; o mesmo estado se suas
variáveis membro têm os
int i = x; // não compila, pois pode estar perdendo informação
2.3.1 Invocação de Métodos
Objetos se comunicam mesmos valores.
E, se quisermos realmentepela
fazertroca de mensagens,
isso, fazemos isto significa que um
o casting:
objeto pode ter que mostrar um comportamento particular invocando uma
operaçãolong
apropriada que foi definida no objeto. Em Java, isto é feito pela
x = 10000;
chamadaint i =método
de um (int) em x; um objeto usando o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da
3.7.2 Literais
mensagem, numéricos
o método e Promoção
a ser invocado eNumérica
os argumentos para o método (se houver).
O métodoAlguns castings
invocado no aparecem
recebedortambém quando atribuímos
pode também valores literais
enviar informações numéricos,
de volta ao por exemplo:
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 26
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
32
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

float x = 0.0;
//atribuindo valor a variável referência
O código
Carro acima não
carro1 compila
= new pois todos os literais ponto flutuante são considerados double pelo Java. E
Carro();
float não pode receber
carro1.ano um double
= "2001"; sem perda de informação, para fazer isso funcionar podemos escrever o
seguinte:carro1.modelo= "fusca";
carro1.cor = "prata";
float x = 0.0f;

Como já vimos a letra f, que pode ser maiúscula ou minúscula, indica que
aquele literal deve ser tratado como float.
Para converter um tipo
long l = 0.0L; primitivo para o tipo
wrapper associado,
A letra L, que também pode ser maiúscula ou minúscula, indica que basta usar o construtor
aquele literal deve ser tratado como long. da classe wrapper, uma
Outro caso, que é mais comum: vez que toda classe
wrapper possui um
double d = 5;
float f = 3;
Figura 2.4 – Layout Memória após inicialização construtor que recebe
//criando
float x = novo alias
(float) d + f; seu tipo primitivo
Carro carro2 = carro1; correspondente.
Você precisa do casting porque o Java faz as contas e vai promovendo o
resultado intermediário sempre para o maior tipo que apareceu durante as
operações, no caso o double. Em caso de tipos menores como byte e short o Java
os promove para int na hora de fazer as contas.
Até casting com variáveis do tipo char podem ocorrer. O único tipo
primitivo que não pode ser atribuído a nenhum outro tipo é o boolean.

3.8 Classes Wrapper (Empacotadoras)


As classes wrapper que representam valores numéricos são subclasses da classe Number.
O objetivo das classes wrapper é empacotar (boxing) tipos primitivos em objetos onde for necessário. Por
exemplo:

public class TesteWrapper {


Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
public static void main(String[] args) {

Float f1 = new Float("1.1f"); // compila, não considera double:


2.3 Membros de Instância
Float f2 = new Float("1.1");
Cada objeto criado
Doubledeverá
d = newter Double("1.2");
sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela
//classe.
retornaOs métodos
erro: definem o comportamento de um em um objeto constituem
objeto. Isto é importante,
//pois denota que
Character c =umnew
método pertence a cada objeto da
Character("e");
o seu estado.
Boolean b1 = new Boolean("false");
classe. Porém não devemos confundir isto com a implementação do método, que
Boolean b2 = new Boolean("True"); Dois objetos distintos têm
é compartilhada por todas
// as instâncias não
compila, da classe.
há diferenciação de maiúsculas: o mesmo estado se suas
Boolean b3 = new Boolean("FaLsE");
2.3.1 Invocação
} de Métodos variáveis membro têm os
}Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
objeto pode ter que mostrar um comportamento particular
Listagem 3.5 – Empacotando invocando uma
variáveis
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamadaVejamos método situações
de um algumas em um objeto
onde a usando o operador
classe wrapper binário "." (ponto),
é exigida:
devendo especificar
As classesawrapper
mensagem completa:emo estruturas
são essenciais objeto que é o recebedor
de dados chamadas dedacoleções;
mensagem, oMétodos
método quea serretornam
invocadoo etipo
os genérico
argumentos para
Object ; o método (se houver).
O método invocado no recebedor
Outro objetivo pode
é facilitar também enviar
a conversão de/parainformações
o tipo Stringdee/ou
volta ao numéricas diferentes (octal,
bases
objeto chamador através de um valor
binário, hexadecimal, etc); de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 27
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
33
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

Por outro lado, o tipo


//atribuindo primitivo
valor é exigido em:
a variável referência
Carro
 Incrementos
carro1 = e decrementos;
new Carro();
 Fórmulas matemáticas;
carro1.ano = "2001";
carro1.modelo= "fusca";
carro1.cor = "prata";
Assim o uso do valor primitivo ou da classe wrapper vai depender da necessidade, neste sentido vários
métodos de conversão de um tipo para outro foram criados.

3.8.1 Construtores Wrapper


Para converter um tipo primitivo para o tipo wrapper associado, basta usar o Além do construtor que
construtor da classe wrapper, uma vez que toda classe wrapper possui um construtor recebe o tipo primitivo
que recebe seu tipo primitivo correspondente como argumento: associado, todo tipo
Float f = new Float(1.1f);
wrapper possui um
Double d = new Double(1.2); construtor que recebe
Character c = new Character('e'); uma String.
Boolean b = new Boolean(false);
Figura 2.4 – Layout Memória após inicialização
A classe wrapper de Character é a única exceção que o construtor da classe
//criando novo alias
permite receber
Carro um char, não
carro2 permitindo receber uma String.
= carro1;
Float f2 = new Float("1.1");
Double d = new Double("1.2");

retorna erro:

Character c = new Character("e");

Note no exemplo anterior que a classe Boolean recebe um construtor de String que não difere de
maiúsculas ou minúsculas.

3.8.2 Método valueOf


Outra forma de embrulhar tipos primitivos é usando o método estático valueOf(), que recebe um valor
String como parâmetro. Veja o exemplo:
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
public class TesteValueOf {

public static void main(String[] args) {


2.3 Membros de Instância
Cada objeto Float
criado f1deverá ter sua própria instância //deok,
= Float.valueOf("1.1f"); variáveis Os valores
não considera comodas variáveis
double:
(atributos) definidas pela classe.
Float f2 Os métodos definem o comportamento de um
= Float.valueOf("1.1");
em um objeto constituem
Double
objeto. Isto é importante, d = Double.valueOf("1.2");
pois denota que um método pertence a cada //objeto
retorna
da erro: o seu estado.
classe. Porém não devemos confundir isto
c =com a implementação do método, que
// Character Character.valueOf("e"); Dois objetos distintos têm
é compartilhada por todas as instâncias
Boolean da classe.
b1 = Boolean.valueOf("false");
Boolean b2 = Boolean.valueOf("True"); // Ok, não é sensível ao caso
o mesmo estado se suas
Boolean b3 = Boolean.valueOf("FaLsE");
2.3.1 Invocação de Métodos variáveis membro têm os
}
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
}
objeto pode ter que mostrar um comportamento particular invocando uma
Listagem 3.6 – Método valueOf()
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
3.8.3 Conversões
chamada de um método em um objeto usando o operador binário "." (ponto),
Para transformar
devendo especificar uma String
a mensagem em número
completa: utilizamos
o objeto que éaso classes Wrappers
recebedor da para os tipos primitivos
correspondentes. Por exemplo, para transformar a String em um
mensagem, o método a ser invocado e os argumentos para o método (se houver). número inteiro utilizamos o método estático
parseInt() da classe Integer:
O método invocado no recebedor pode também enviar informações de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 28
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
34
www.3way.com.br
Linguagem
Linguagemde
deProgramação
ProgramaçãoJava
Java

String s = "101";
int i = Integer.parseInt(s);
//atribuindo valor a variável referência
Carro carro1 = new Carro();
As classes Double,
carro1.ano
Short, Long, Float, etc contêm os mesmos métodos, como parseDouble() e
= "2001";
parseFloat() que retornam um
carro1.modelo= "fusca"; double e float respectivamente, parse<ClasseWrapper>() onde <ClasseWrapper>
seja igual o nome da classe
carro1.cor Wrapper correspondente, com exceção das classes Character e Boolean.
= "prata";

3.9 AutoBoxing
Esse processo de wrapping e unwrapping é entediante. O Java 5.0 traz um recurso chamado de
autoboxing, que faz isso sozinho para você, porém o preço a se pagar é a perda de legibilidade do código:

Integer x = 5;
int y = x;
O boxing automático e
No Java 1.4 esse mesmo código é inválido. No Java 5.0 ele compila as conversões unboxing
perfeitamente. É importante ressaltar que isso não quer dizer que tipos primitivos aliviam nosso trabalho
e referências agora são a mesma coisa, isso é simplesmente um artifício para de converter valores de
facilitar a codificação. Figura 2.4 – Layout Memória após inicialização tipos primitivos em
Agora vocênovo
//criando pode fazer
aliastodos os tipos de operações matemáticas com as objetos das classes
wrappers,
classesCarro porém= você
carro2 corre o risco de seu programa retornar um exceção
carro1; wrappers
do tipo NullPointerException. correspondentes e vice-
O autoboxing também pode ser feito diretamente para Object: versa.
Object o = 5;

Isto seria útil, por exemplo, se você precisar passar o valor de um tipo
primitivo para um método que espera receber um Object como argumento.

3.9.1 Boxing e Unboxing Automático para Tipos Primitivos

int i = 10;
Autoboxing ou
autounboxing ocorre Integer iRef = new Integer(i); // Boxing Explicito
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
sempre que houver a int j = iRef.intValue(); // Unboxing Explicit
necessidade de
conversão de tipos iRef = i; // Boxing Automatico
2.3 Membros de
primitivos em objetos Instância
Cada objeto criadoj deverá = iRef;ter sua própria instância // Unboxing de variáveis
AutomaticoOs valores das variáveis
wrappers e vice-versa.
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
objeto. Isto é importante, pois denotaAque conversão
um método do Boxing
pertence converte
a cada valores
objeto da primitivos em objetos da classe
o seu estado.
wrappers isto
classe. Porém não devemos confundir do tipo
comdea dado correspondente.
implementação que do Unboxing converte objetos
A conversão
do método,
Dois objetos distintos têm
é compartilhada por todas as wrappers
instâncias para tipo de dado primitivo correspondente.
da classe.
o mesmo estado se suas
2.3.1 Invocação de Métodos variáveis membro têm os
3.9.2 Ocorrência de Boxing e Unboxing automático mesmos valores.
Objetos se comunicam pela troca de mensagens, isto significa que um
Se aplica em várias situações: comparação, atribuição, em estruturas de
objeto pode ter que mostrar um comportamento particular invocando uma
repetição, etc.
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
Comparações podem ser realizadas através do operador == (igualdade) ou
chamada de um método em um objeto usando o operador binário "." (ponto),
pelo método equals(); o primeiro, quando é aplicado entre objetos, compara se as variáveis referenciam o mesmo
devendo especificarque
objeto, enquanto a mensagem
o segundo avaliacompleta:
se os o objetopossuem
objetos que é oo valores
recebedor da
significativamente iguais. Veremos no
mensagem, o método a ser invocado e os argumentos para o método (se houver).
código-fonte do exemplo a seguir, que as comparações entre tipos diferentes podem ser realizadas:
O método invocado no recebedor pode também enviar informações de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 29
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
35
www.3way.com.br
Linguagem de de
Linguagem Programação JavaJava
Programação

public class AutoBoxing {


//atribuindo valor avoid
public static variável referência
main(String[] args) {
Carro carro1 = new Carro();
carro1.ano Integer
= "2001";
a = new Integer(2);
carro1.modelo= "fusca";
Integer b = new Integer(2);
carro1.cor int= "prata";
c = 2;

// compara se a e b referenciam o mesmo objeto:


if (a == b)
System.out.println("1:a e b são os mesmos objetos");
else
System.out.println("1:a e b não os mesmos objetos");

// compara se a e b possuem o mesmo valor:


if (a.equals(b))
System.out.println("2: a e b tem valores iguais");

// a é convertido para tipo primitivo


// os dois valores são comparados como tipos primitivos
if (a == c) Figura 2.4 – Layout Memória após inicialização
System.out.println("3: a e c tem valores iguais");
//criando novo alias
Carro carro2 = carro1;
// c é convertido para objeto
// os dois valores são comparados como objetos
if (a.equals(c))
System.out.println("4: a e c tem valores iguais");
}
}
Listagem 3.7 – Boxing e Unboxing implícitos

3.10 Fazer Laboratório 2


Siga instruções do laboratório 2 e tome cuidado com o tempo de execução, sempre recorra ao instrutor
em caso de dúvida, nunca deixe uma dúvida sem reposta.

3.11 Exercícios
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
Escreva, compile e execute todas listagens de código apresentadas neste capítulo.

4 Operadores
2.3 Membros de Instância
Em Java temos diferentes tipos de operadores. Existem operadores aritméticos, operadores relacionais,
Cada objeto criado deverá ter sua própria instância de variáveis Osprecedência
valores daspara
variáveis
operadores lógicos e operadores condicionais. Estes operadores obedecem a uma ordem de que
(atributos) definidas pela classe. Os métodos definem o comportamento de um
o compilador saiba qual operação executar primeiro, no caso de uma sentença possuir grande em variedade
um objetodestes.
constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
4.1 Operadores Aritméticos Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
Aqui temos a lista dos operadores aritméticos que podem ser utilizados nao criação mesmode estado se suas
expressões
matemáticas: variáveis membro têm os
2.3.1 Invocação de Métodos
Objetos se comunicam pela troca de mensagens, istoDescrição
significa que um mesmos valores.
Operador Uso
objeto pode ter que mostrar um comportamento particular invocando uma
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
* op1 * op2
chamada de um método em um objeto usando Multiplica
o operador op1 por op2
binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da
/ op1 / op2 Divide op1 por op2
mensagem, o método a ser invocado e os argumentos para o método (se houver).
O método invocado no recebedor
% pode
op1 % também
op2 enviar
Resto da informações
divisão de op1 de
porvolta
op2 ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 30
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
36
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

- op1 - op2 Subtrai op2 de op1


//atribuindo valor a variável referência
Carro carro1 = new Carro();
+ op1 + op2 Soma op1 e op2
carro1.ano = "2001";
carro1.modelo= "fusca";
carro1.cor = "prata";Tabela 4.1 - Operadores aritméticos e suas funções

Aqui temos um programa que exemplifica o uso destes operadores:

public class Aritimetica {

public static void main(String[] args) {

// alguns numeros
int i = 37, j = 42;
double x = 27.475, y = 7.22;
System.out.println(" Valor Variavel... ");
System.out.println(
Figura 2.4 –"i = Memória
Layout " + i após
);inicialização
System.out.println( "j = " + j );
//criando novo alias
System.out.println( "x = " + x );
Carro carro2 = carro1;
System.out.println( "y = " + y );

// adição dos números


System.out.println( " Adicao... ");
System.out.println( " i + j = " + (i + j) );
System.out.println( " x + y = " + (x + y) );

// subtração dos números


System.out.println( " Subtracao... ");
System.out.println( " i - j = " + (i – j) );
System.out.println( " x - y = " + (x – y) );

// multiplicação dos números


System.out.println( " Multipicacao... ");
System.out.println( " i * j = " + (i * j) );
System.out.println( " x * y = " + (x * y) );
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
// divisão dos números
System.out.println( " Divisao... ");
System.out.println( " i/j = " + (i / j) );
2.3 Membros deSystem.out.println(
Instância " x/y = " + (x / y) );
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
// resto da divisão
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
System.out.println( " Resto da Divisao... ");
objeto. Isto é importante, pois denota que um método
System.out.println( " i%j pertence
= " a+cada
(i objeto
% j) );da o seu estado.
classe. Porém não devemos confundir isto com a implementação
System.out.println( " x%y = " + (x % y) );do método, que
Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
// misturando operações o mesmo estado se suas
System.out.println(" Tudo Junto... ");
2.3.1 Invocação de Métodos variáveis membro têm os
System.out.println(" j + y = " + (j + y) );
Objetos se comunicam pela troca de mensagens,
System.out.println(" i * x = "isto
+ significa
(i * x)que);um
mesmos valores.
objeto pode ter
} que mostrar um comportamento particular invocando uma
operação} apropriada que foi definida no objeto. Em Java, isto é feito pela
Listagem 4.1 – Operadores aritméticos
chamada de um método em um objeto usando o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da
4.2 Operadores
mensagem, o métodode Incremento
a ser invocado e e osDecremento
argumentos para o método (se houver).
O métodoAlém dos operadores
invocado aritméticos
no recebedor básicos, Java
pode também enviardá informações
suporte ao operador
de volta unário
ao de incremento (++) e ao
operador
objeto chamador decremento
unário deatravés de um(--). Operadores
valor de retorno.++ ouO --, respectivamente
método chamado deve aumentam
ser ou diminuem em 1 o valor
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 31
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
37
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

da variável. Por exemplo, a expressão:


//atribuindo valor a variável referência
count carro1
Carro = count=+ new
1; // incrementa o valor de count em 1
Carro();
carro1.ano = "2001";
é equivalente a, count++;
carro1.modelo= "fusca";
carro1.cor = "prata";

Operador Uso Descrição

++ op++ Incrementa op em 1; avalia a


expressão antes do valor ser acrescido

++ ++op Incrementa op em 1; incrementa o valor antes da expressão ser


avaliada
Decrementa op em 1; Avalia a expressão antes do valor ser
-- op--
decrescido

-- Decrementa op em 1; decrementa op em 1 antes da expressão ser


--op
avaliada Figura 2.4 – Layout Memória após inicialização
//criando novo alias Tabela 4.2- Operadores de incremento e decremento
Carro carro2 = carro1;

Como visto na tabela acima, os operadores de incremento e decremento podem ser usados tanto antes
como após o operando. E sua utilização dependerá disso. Quando usado antes do operando, provoca acréscimo ou
decréscimo de seu valor antes da avaliação da expressão em que ele aparece. Por exemplo:

int i = 10;
int j = 3;
int k = 0;
k = ++j + i; // resultará em k = 4+10 = 14

Quando utilizado depois do operando, provoca, na variável, acréscimo ou decréscimo do seu valor após a
avaliação da expressão na qual ele aparece. Por exemplo:

int i = 10;
int j = 3; Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
int k = 0;
k = j++ + i; // resultará em k = 3+10 = 13

2.3 Membros de Instância


4.3 Operadores
Cada objetoRelacionais
criado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos)
Os definidas
operadorespela classe. Os
relacionais sãométodos
usados para comparar
definem dois valores ede
o comportamento um
determinar o relacionamento
em entre
um objeto constituem
eles. A saída
objeto. Isto édesta avaliaçãopois
importante, serádenota
fornecida
quecom
umum valor lógico:
método trueaou
pertence cada objeto da
false.
o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
Dois objetos distintos têm
é compartilhada por todas as instâncias da Uso
Operador classe. Descrição
o mesmo estado se suas
> op1 > op2 op1 é maior do que op2 variáveis membro têm os
2.3.1 Invocação de Métodos
>= op1 >= op2
Objetos se comunicam pela troca de mensagens, op1 é maior ou igual aque
isto significa op2 um mesmos valores.
< op1 <
objeto pode ter que mostrar um comportamento op1op2 particular
é menor do invocando
que op2 uma
operação apropriada que <= foi definidaop1 no<=objeto.
op2 Em Java, isto
op1 é menor ou igual é feito
a op2pela
chamada de um método em um objeto usando o operador binário "." (ponto),
== op1 == op2 op1 que
é igualé aoop2
devendo especificar a mensagem completa: o objeto recebedor da
mensagem, o método a ser!= invocado e os op1argumentos
!= op2 paranão
op1 o método
igual a op2 (se houver).
O método invocado no recebedor pode também enviar informações de volta ao
Tabela 4.3 - Operadores relacionais
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 32
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
38
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

O programa a seguir,
//atribuindo valormostra a utilização destes
a variável operadores:
referência
Carro carro1 = new Carro();
public class OperadoresRelationais
carro1.ano = "2001"; {
carro1.modelo= "fusca";
public static
carro1.cor void main(String[] args) {
= "prata";

// declara números
int i = 37, j = 42, k = 42;
System.out.println("Variaveis...");
System.out.println("i =" + i);
System.out.println("j =" + j);
System.out.println("k =" + k);

// maior que
System.out.println("maior que...");
System.out.println("i >j =" + (i > j)); // false
System.out.println("j >i =" + (j > i)); // true
System.out.println("k >j =" + (k > j)); // false
Figura 2.4 – Layout Memória após inicialização
// maior ou igual a
//criando novo alias
System.out.println("maior ou igual a...");
Carro carro2 = carro1;
System.out.println("i >=j =" + (i >= j)); // false
System.out.println("j >=i =" + (j >= i)); // true
System.out.println("k >=j =" + (k >= j)); // true

// menor que
System.out.println("menor que...");
System.out.println("i <j =" + (i < j)); // true
System.out.println("j <i =" + (j < i)); // false
System.out.println("k <j =" + (k < j)); // false

// menor ou igual a
System.out.println("menor ou igual a...");
System.out.println("i <= j = " + (i <= j)); // true
System.out.println("j <= i = " + (j <= i)); // false
System.out.println("k <= j = " + (k <= j)); // true

// igual
Figuraentre variaveis
2.5 – Layout Memória duas de tipo
variáveis primitivo
referência para o mesmo objeto
System.out.println("igual a...");
System.out.println("i==j=" + (i == j)); // false
System.out.println("k==j=" + (k == j)); // true
2.3 Membros de Instância
Cada objeto // diferente
criado deverá ter sua própria instância de variáveis Os valores das variáveis
System.out.println("diferente...");
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
System.out.println("i != j = " + (i != j)); // true
objeto. Isto é importante, pois denota que um método
System.out.println("k != jpertence
= " + a(kcada
!= objeto
j)); da
//false o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
Dois objetos distintos têm
é compartilhada} por todas as instâncias da classe.
} o mesmo estado se suas
2.3.1 Invocação de Métodos Listagem 4.2 – Operadores Relacionais variáveis membro têm os
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
objeto pode ter que mostrar um comportamento particular invocando uma
4.4 Operadores
operação apropriada Lógicos
que foi definida no objeto. Em Java, isto é feito pela
chamadaOperadores lógicosem
de um método avaliam um ouusando
um objeto mais operandos
o operador lógicos que"."
binário geram um único valor final true ou false
(ponto),
como resultado da expressão. São seis os operadores lógicos:
devendo especificar a mensagem completa: o objeto que é o recebedor da
mensagem, E lógico,a ser invocado e os argumentos para o método (se houver).
&& o método
& E
O método invocado binário,
no recebedor pode também enviar informações de volta ao
||
objeto chamador OUatravés
lógico, de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 33
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
39
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

| OU binário,
^ OU exclusivo
//atribuindo binário
valor a ,variável referência
!
Carro negação.
carro1 = new Carro();
carro1.ano = "2001";
A operação básica para
carro1.modelo= um operador lógico é:
"fusca";
carro1.cor = "prata";
x1 op x2

Onde x1 e x2 podem ser expressões, variáveis ou constantes lógicas, e op pode tanto ser &&, &,||,| ou ^.

4.4.1 && (e lógico) e & (e binário)

x1 x2 Resultado
true true true
true false false
false true false
Figura 2.4 – Layout Memória após inicialização
false false false
//criando novo alias
Carro carro2 = carro1; Tabela 4.4 - Tabela para && e &

A diferença básica do operador && para & é que o && suporta uma avaliação de curto-circuito (ou
avaliação parcial), enquanto que o & não. O que isso significa?
Dado o exemplo:

exp1 && exp2

o operador E irá avaliar a expressão exp1, e, imediatamente, retornará um valor false se aexpressão exp1
forfalsa.Seaexpressãoexp1 resultar em um valorfalse ooperador nunca avaliará a expressão exp2, pois o valor de
toda a expressão será falsa mesmo que o resultado isolado de exp2 seja verdadeiro. Já o operador & sempre
avalia as duas partes da expressão, mesmo que a primeira tenha o valor false.
O programa a seguir, mostra a utilização destes operadores:

Figura 2.5{– Layout Memória duas variáveis referência para o mesmo objeto
public class TesteAnd

public static void main(String[] args) {


int i = 0;
2.3 Membros deintInstância
j = 10;
Cada objeto boolean
criado deverá
test =terfalse;
sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
// usando
objeto. Isto é importante, o operador
pois denota && empertence
que um método curto circuito
a cada objeto da
test = (i > 10) && (j++ > 9); o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
System.out.println(i); Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
System.out.println(j);
System.out.println(test);
o mesmo estado se suas
2.3.1 Invocação de Métodos variáveis membro têm os
// usando o operador &
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
test = (i > 10) & (j++ > 9);
objeto pode ter que System.out.println(i);
mostrar um comportamento particular invocando uma
operação apropriada System.out.println(j);
que foi definida no objeto. Em Java, isto é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
System.out.println(test);
devendo especificar a mensagem completa: o objeto que é o recebedor da
}
mensagem,
} o método a ser invocado e os argumentos para o método (se houver).
O método invocado no recebedor pode também enviar informações de volta ao
Listagem 4.3 – Operador E
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 34
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
40
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

Note que o comando


//atribuindo valorj++,anavariável
linha 8 contendo &&, nunca será executado, pois o operador não o avalia,
referência
visto queCarro
a primeira parte da
carro1 = expressão (i>10) retorna um valor booleano false.
new Carro();
carro1.ano = "2001";
4.4.2 || ( ou lógico) e | ( ou"fusca";
carro1.modelo= binário)
carro1.cor = "prata";

x1 x2 Resultado
true true true
true false true
false true true
false false false

Tabela 4.5 - Tabela para || e |

A diferença básica entre os operadores ||–eLayout


Figura 2.4 |, é Memória
que, semelhante ao operador &&, o || também suporta a
após inicialização
avaliação parcial. O que isso significa?
//criando novo alias
Dada a expressão,
Carro carro2 = carro1;
exp1 || exp2

O operador OU lógico irá avaliar a expressão exp1, imediatamente retornará um valor lógico true para
toda a expressão se a primeira parte for avaliada como verdadeira. Se a expressão exp1 resultar em verdadeira a
segunda parte exp2 nunca será avaliada, pois o valor final da expressão será true independentemente do resultado
da segunda expressão.
O programa a seguir, mostra a utilização destes operadores:

public class TesteOr {

public static void main(String[] args) {

int i = 0;
int j Figura
= 10; 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
boolean test = false;

// uso do operador ||
2.3 Membros detest
Instância
= (i < 10) || (j++ > 9);
System.out.println(i);
Cada objeto System.out.println(j);
criado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um
System.out.println(test); em um objeto constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos
// uso confundir isto com|a implementação do método, que
do operador
test = (i < 10) | (j++ > 9); Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
System.out.println(i); o mesmo estado se suas
System.out.println(j);
2.3.1 Invocação de Métodos
System.out.println(test);
variáveis membro têm os
Objetos se comunicam pela troca de mensagens, isto significa que um
} mesmos valores.
objeto pode ter que mostrar um comportamento particular invocando uma
}
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
Listagem 4.4 – Operador OU
chamada de um método em um objeto usando o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da
mensagem,Noteo que
método a ser invocado
a expressão e os argumentos
j++, nas linhas 9 e 15, nunca para
seráo avaliada
método (se houver). que usa o operador ||, pois a
na instrução
primeira
O método parte da expressão
invocado (i<10) já retorna
no recebedor true como
pode também valorinformações
enviar final da expressão.
de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 35
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
42
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

4.4.3 ^ (ou exclusivo binário)


//atribuindo valor a variável referência
Carro carro1 = new Carro();
x1 x2 Resultado
carro1.ano = "2001";
true
carro1.modelo= "fusca"; true false
carro1.cor = "prata";
true false true
false true true
false false false

Tabela 4.6 - Tabela para o operador ^

O resultado de uma expressão usando o operador ou exclusivo binário terá um valor true somente se uma
das expressões for verdadeira e a outra falsa. Note que ambos os operandos são necessariamente avaliados pelo
operador ^.
O programa a seguir, mostra a utilização deste operador:
Figura 2.4 – Layout Memória após inicialização
public class TesteXOR {
//criando novo alias
Carro public
carro2 static void main(String[] args) {
= carro1;

boolean val1 = true;


boolean val2 = true;
System.out.println(val1 ^ val2);

val1 = false;
val2 = true;
System.out.println(val1 ^ val2);

val1 = false;
val2 = false;
System.out.println(val1 ^ val2);

val1 = true;
val2 = false;
System.out.println(val1 ^ val2);
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
}
}
Listagem 4.5 – Operador OU exclusivo
2.3 Membros de Instância
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos)
4.4.4 definidas pela classe. Os métodos definem o comportamento de um
! (negação) em um objeto constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
Dois objetos distintos têm
é compartilhada por todas as instânciasx1da classe. Resultado o mesmo estado se suas
2.3.1 Invocação de Métodos
true false variáveis membro têm os
Objetos se comunicam pela false troca de mensagens, istotrue significa que um mesmos valores.
objeto pode ter que mostrar um comportamento particular invocando uma
operação apropriada que foi definida no Tabela 4.7 - Tabela
objeto. EmparaJava,
o operador
isto! é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
devendoOespecificar
operador deanegação
mensagem completa:
inverte o resultado o objeto
lógico de queuma é expressão,
o recebedor da ou constante, ou seja, o que
variável
mensagem,
era o método
verdadeiro será falsoa eser invocado e os argumentos para o método (se houver).
vice-versa.
O método O programa
invocado anoseguir, mostrapode
recebedor a utilização
também deste operador:
enviar informações de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 36
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
43
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

public class TesteNOT {


//atribuindo valor void
public static a variável referência
main(String[] args) {
Carro carro1 = new Carro();
carro1.ano boolean
= "2001";
val1 = true;
carro1.modelo= "fusca";
boolean val2 = false;
carro1.cor = "prata";
System.out.println(!val1);
System.out.println(!val2);
}
}
Listagem 4.6 – Operador de Negação

4.4.5 Operador Condicional ( ?: )


O operador condicional é também chamado de operador ternário. Isto significa que ele tem três
argumentos que juntos formam uma única expressão condicional. A estrutura de uma expressão utilizando um
operador condicional é a seguinte:
Figura 2.4 – Layout Memória após inicialização
exp1?exp2:exp3
//criando novo alias
Carro carro2 = carro1;
Onde exp1 é uma expressão lógica que deve retornar true ou false. Se o valor de exp1 for verdadeiro,
então, o resultado será a expressão exp2, caso contrário, o resultado será exp3.
O programa a seguir, mostra a utilização deste operador:

public class OperadorCondicional {

public static void main(String[] args) {

String status = "";


int pontuacao = 80;

// status do aluno
status = (pontuacao >= 60) ? "Aprovado" : "Reprovado";

// print status
System.out.println(status);
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
}

}
2.3 Membros de Instância Listagem 4.7 – Operador condicional (ou ternário)
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
4.5 Precedência de Operadores
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
A precedência serve para indicar a ordem na qual o compilador interpretará os diferentes tipos de
classe. Porém não devemos confundir isto com a implementação do método, que
operadores, para que ele sempre tenha como saída um resultado coerente e não ambíguo.Dois objetos
Na tabela distintos têm
os operadores
é compartilhada por todas as instâncias da classe.
na mesma linha possuem mesma precedência, a coluna ordem define a precedência do maioro mesmo
(1) para estado
o menorse suas
(15)
2.3.1 Invocação de Métodos variáveis membro têm os
ObjetosOrdem
se comunicam pela troca de mensagens, isto significa que Associativo
um mesmos valores.
Operador
objeto pode ter que mostrar um comportamento particular invocando uma
1 ( ) ,[], posfix ++, posfix -- Esquerda
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
2
chamada de um método unário(+,-),
em um objetoprefix ++, prefix --,
usando o ~operador
,! Direita
binário "." (ponto),
devendo especificar
3 a mensagem
(tipo), new completa: o objeto que é o recebedor da
Esquerda
mensagem, o método4
a ser invocado e os argumentos
* (mult), / (div), % (mod)
para o método (se houver).
esquerda
O método invocado no recebedor pode também enviar informações de volta ao
5
objeto chamador através + (adição),
de um valor– (subtração)
de retorno. O método chamado deve esquerda
ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 37
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
44
www.3way.com.br
Linguagem de de
Linguagem Programação JavaJava
Programação

Ordem Operador Associativo


//atribuindo
6 valor
<< a variável referência
, >>, >>> esquerda
Carro carro1 = new Carro();
7
carro1.ano <,
= <=,>,>=,
"2001"; instanceof
carro1.modelo=
8 != , "fusca";
==
carro1.cor = "prata";
9 & (binário) esquerda
10 ^ (OU exclusivo binário) esquerda
11 | (binário) esquerda
12 && esquerda
13 || esquerda
14 ?: condicional esquerda
15 =, +=, -=, *=, /=, %=, <<=, >>=, >>>=, &=, |=, ^= direita
Tabela 4.7: Precedência de operadores

Figura 2.4 – Layout Memória após inicialização

No caso de novo
//criando dois operadores
alias com mesmo nível de precedência, terá prioridade o que estiver mais à
esquerda da expressão. Vejacarro1;
Carro carro2 = exemplo de uma expressão complexa:

int x = 7, y = 3,resultado=0;
resultado = ++y%2*5 + ++x/2+8*y-- + -10;

Podemos alterar a precedência pelo uso de parênteses, veja nova expressão:

int x = 7, y = 3,resultado=0;
resultado = (++y)%2*5 + (++x)/2+8*(y--) + -10;

A propósito, o resultado das expressões são respectivamente 26 e 0.

4.6 Exercícios
Escreva, compile e execute todas as listagens de código apresentadas neste capítulo.
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

5 Estruturas de controle
Estruturas de controle de decisão são instruções em linguagem Java que permite que blocos específicos de
2.3 sejam
código Membros de Instância
escolhidos para serem executados, redirecionando determinadas partes do fluxo do programa.
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela classe.
5.1 Estruturas de decisão if - else Os métodos definem o comportamento de um em um objeto constituem
objeto. Isto é importante,
A declaração pois denota
if especifica que instrução
que uma um método pertence
ou bloco a cada objeto
de instruções da
seja executado se, eosomente
seu estado.
se, uma
classe. Porém
expressão lógicanão
fordevemos
verdadeira.confundir isto com a implementação do método, que
Dois objetos distintos têm
é compartilhada por todas
A declaração as instâncias
if possui a seguinteda classe.
forma: o mesmo estado se suas
2.3.1 Invocação de Métodos
if (<expressão_lógica>) variáveis membro têm os
<sentença>
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
ou:
objeto pode ter que mostrar um comportamento particular invocando uma
if (<expressão_lógica>) {
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
<sentença 1>
chamada de um<sentença
método em2>um objeto usando o operador binário "." (ponto),
devendo} especificar a mensagem completa: o objeto que é o recebedor da
mensagem, o método a ser invocado e os argumentos para o método (se houver).
Oonde,
método invocado norepresenta
expressão_lógica recebedoruma expressão
pode também ouenviar
variável lógica (que retorna
informações ao ou true). Por exemplo, dado o
de voltafalse
trecho de
objeto código: através de um valor de retorno. O método chamado deve ser
chamador
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 38
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
45
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

int nota = 68;


//atribuindo
if (nota > 60)valor a variável referência
Carro carro1 = new Carro();
System.out.println("Parabéns!");
carro1.ano = "2001";
ou:
carro1.modelo= "fusca";
int nota = 68;
carro1.cor = "prata";
if (nota > 60) {
System.out.println("Parabéns!");
System.out.println("Você passou!");
}

A declaração if-else é usada quando queremos executar determinado conjunto de instruções se a condição
for verdadeira e outro conjunto se a condição for falsa.
Possui a seguinte forma:

if (<expressão lógica>) Em uma expressão “if -


<sentença 1> else if - else”, se a
else primeira condição é
<sentença 2> Figura 2.4 – Layout Memória após inicialização falsa, o fluxo de
//criando novoescrevê-la
Também podemos alias na forma abaixo: controle segue para a
Carro carro2 = carro1; análise da segunda
if (<expressão lógica>) { condição.
<sentença 1>
<sentença 2>
} else {
<sentença 3>
<sentença 4>
}

Por exemplo, dado o trecho de código:

int nota = 68;


if (nota > 60)
System.out.println("Parabéns! Você passou!");
else
System.out.println("Lamento ! Reprovado");
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

ou:
int nota = 68;
2.3 Membros
if (nota > de Instância
60) {
Cada objeto criado deverá ter sua própria instância de variáveis
System.out.println("Parabéns!"); Os valores das variáveis
System.out.println("Você
(atributos) definidas pela classe. Os métodos passou!");
definem o comportamento de um
} else { em um objeto constituem
objeto. Isto éSystem.out.println("Lamento
importante, pois denota que um método
!"); pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir isto com
System.out.println("Reprovado"); a implementação do método, que
Dois objetos distintos têm
é compartilhada
} por todas as instâncias da classe.
o mesmo estado se suas
A declaração
2.3.1 Invocação deelse
Métodos variáveis
pode conter outra estrutura if-else. Este aninhamento de estruturas membro
permite têm os
ter decisões
lógicas muito mais se
Objetos complexas.
comunicam pela troca de mensagens, isto significa que um mesmos valores.
A declaração
objeto pode ter que if-else-if
mostrarpossui
uma seguinte forma: particular invocando uma
comportamento
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
if (<expressão_lógica>)
chamada de um método em um objeto usando o operador binário "." (ponto),
<sentença 1>
devendoelse
especificar a mensagem completa: o objeto que é o recebedor da
if (<expressão_lógica>)
mensagem, o método
<sentença a ser 2>
invocado e os argumentos para o método (se houver).
O métodoelse
invocado no recebedor pode também enviar informações de volta ao
objeto chamador<sentença
através de3>um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 39
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
46
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

Podemos ter várias


//atribuindo estruturas
valor else-if depois
a variável de uma declaração if. A estrutura else é opcional e pode ser
referência
omitida.Carro
No exemplo mostrado
carro1 = newacima, se a primeira condição é verdadeira, o programa executa a <sentença 1> e
Carro();
salta as outras instruções. =
carro1.ano Caso contrário, se a condição é falsa, o fluxo de controle segue para a análise da segunda
"2001";
condição. Se esta for verdadeira,
carro1.modelo= o programa executa a <sentença 2> e salta a <sentença 3>. Caso contrário, se a
"fusca";
segundacarro1.cor = "prata";
condição é falsa, então a <sentença 3> é executada.
Observe um exemplo da declaração if-else-if no seguinte trecho de código:

public class TesteIfElse {

public static void main(String[] args) {

int mesDoAno = 13;

if (mesDoAno == 12 || mesDoAno == 1 || mesDoAno == 2) {


System.out.println("Verão");
} else if (mesDoAno == 3 || mesDoAno == 4 || mesDoAno == 5) {
System.out.println("Outono");
} else if (mesDoAno
Figura 2.4 –== 6 Memória
Layout || mesDoAno == 7 || mesDoAno == 8) {
após inicialização
System.out.println("Inverno");
//criando novo alias
} else if (mesDoAno == 9 || mesDoAno == 10 || mesDoAno == 11) {
Carro carro2 = carro1;
System.out.println("Primavera");
} else {
System.out.println("Mês não é válido: " + mesDoAno);
}
}
}
Listagem 5.1 – Testando IF-ELSE

5.2 Declaração switch


Outra maneira de indicar uma condição é através de uma declaração switch. A construção switch permite
que uma única variável tenha múltiplas possibilidades de avaliação. O switch trabalha sobre os tipos primitivos byte,
short, char e int, ele também pode operar sobre tipos enumerados (a serem vistos posteriormente) sobre classes
empacotadoras Characater, Byte, Short e Integer.
A declaração switch possui a seguinte forma:
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto O programa executa
switch (<variável_do_tipo_permitido>) { todas instruções a
case <valor 1>:
[instrução1;] partir do primeiro case,
2.3 Membros de[instrução2;]
Instância até encontrar uma
Cada objeto [...
criado ]deverá ter sua própria instância de variáveis Os valores
instrução das variáveis
break, que
(atributos) definidas pela classe. Os métodos definem o comportamento de um
[break;]
eminterromperá
um objeto constituem
a
case <valor
objeto. Isto é importante, pois 2>:
denota que um método pertence a cada objeto da
[instrução1;] execução doestado.
o seu switch,
classe. Porém não devemos
[instrução2;]isto com a implementação do método, que
confundir nada
Dois após o break
objetos serátêm
distintos
é compartilhada por todas
[...]as instâncias da classe. executado.
[break;]
o mesmo estado se suas
2.3.1 Invocação de <valor
case Métodosn>: variáveis membro têm os
[instrução1;]
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
[instrução2;]
objeto pode ter que [...]mostrar um comportamento particular invocando uma
operação apropriada [break;]
que foi definida no objeto. Em Java, isto é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
default:
devendo especificar a[instrução1;]
mensagem completa: o objeto que é o recebedor da
[instrução2;]
mensagem, o método a[...] ser invocado e os argumentos para o método (se houver).
O método invocado no[break;]
recebedor pode também enviar informações de volta ao
objeto chamador
} através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 40
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
47
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

onde, <variável_do_tipo_permitido>
//atribuindo valor a variável compreende os tipos de dados citados anteriormente e <valor n> são
referência
constantes literais
Carro dos tipos= de
carro1 dados
new citados.
Carro();
Quando a declaração
carro1.ano = "2001"; switch é encontrada, o fluxo de controle avalia inicialmente a
<variável_do_tipo_permitido>
carro1.modelo= "fusca"; e segue para o case que possui o valor igual ao da variável. O programa executa
todas ascarro1.cor
instruções a partir= deste
"prata";
ponto, mesmo as dos próximos case, até encontrar uma instrução break, que
interromperá a execução do switch, nada após o break será executado.
Se nenhum dos valores case for satisfeito, o bloco default será executado. Este é um bloco opcional. O
bloco default não é obrigatório na declaração switch.
Exemplo para switch:

public class TesteSwitch {

public static void main(String[] args) {

int mesDoAno = 11;

switch (mesDoAno) {
case 12: Figura 2.4 – Layout Memória após inicialização

//criando 1:
case novo alias
Carro case 2: = carro1;
carro2
System.out.println("Verão");
break;
case 3:
case 4:
case 5:
System.out.println("Outono");
break;
case 6:
case 7:
case 8:
System.out.println("Inverno");
break;
case 9:
case 10:
case 11:
System.out.println("Primavera");
break;Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
default:
System.out.println("Mês não é válido: " + mesDoAno);
break;
2.3 Membros
} de Instância
}Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um
} Asem
instruções contidas
um objeto constituem
objeto. Isto é importante, Listagem
pois denota que um
5.2 – Testando método pertence a cada objeto da dentro do bloco
Switch-Case o seu while são
estado.
classe. Porém não devemos confundir isto com a implementação do método, que executadas repetidas
Dois objetos distintos têm
é compartilhada
Note quepor
paratodas as de
o caso instâncias
intervalos dadeclasse.
valores a declaração if-else-if é mais vezes enquanto o valor de
o mesmo estado se suas
indicada, veja exemplo if-else-if. expressão_lógica for
2.3.1 Invocação de Métodos variáveis membro têm os
verdadeiro.
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
5.3 Iterações (Laços)
objeto pode ter que
Estruturas mostrardeum
de controle comportamento
repetição são comandos particular invocando
em linguagem Javauma
que permitem executar partes específicas do código determinada quantidade depela
operação apropriada que foi definida no objeto. Em Java, isto é feito
chamada
vezes. Existem trêsmétodo
de um tipos de em um objeto
estruturas usandogerais:
de iteração o operador binárioe"."
while, do-while for.(ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da
mensagem,
5.3.1 whileo método a ser invocado e os argumentos para o método (se houver).
O método invocado nowhile
A declaração recebedor
executapode também
repetidas enviar
vezes um informações de volta ao
bloco de instruções
objeto chamador através de um valor de retorno.
enquanto a expressão lógica (condição) resultar em true (boolean). O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 41
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
48
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

A declaração while possui a seguinte forma:


//atribuindo valor a variável referência
while (expressão_lógica)
Carro {
carro1 = new Carro();
carro1.ano = "2001";
instrução1;
carro1.modelo= "fusca";
instrução2;
carro1.cor = "prata";
}

Por exemplo, dado o trecho de código:

int i = 4;
while (i > 0){
System.out.print(i);
i--;
}
A diferença entre uma declaração
Abaixo, temos outros exemplos de declarações while:
while e do-while é que, no laço while,
Exemplo 1: Figura 2.4 – Layout Memória após inicialização
a avaliação é feita antes de se
int x = 0; executarem as instruções enquanto
//criando novo
{ alias
while (x<10)
Carro carro2 = carro1; que, no laço do-while, primeiro se
System.out.println(x);
x++;
executam as instruções e depois
} realiza-se a avaliação.

Exemplo 2:
// laço infinito
while (true)
System.out.println("hello");

Exemplo 3:
// a instrução do laço não será executada
while (false)
System.out.println("hello");

5.3.2 do-while Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
A declaração do-while é similar ao while. As instruções dentro do laço do-while serão executadas pelo
menos uma vez.
2.3 Membros
A declaraçãode Instância
do-while possui a seguinte forma:
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
do {
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
objeto. Isto é importante,
instrução1;pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não
nstrução2; confundir isto com a implementação do método, que
devemos
Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
...
o mesmo estado se suas
} while (expressão_lógica);
2.3.1 Invocação de Métodos variáveis membro têm os
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
Inicialmente, as instruções dentro do laço do-while são executadas. Então, a condição na expressão_lógica
objeto pode terverdadeira,
é avaliada. Se for que mostrar um comportamento
as instruções dentro do laço particular invocando uma
do-while serão executadas novamente.
operaçãoA diferença
apropriada que foi definida no objeto. Em Java, isto
entre uma declaração while e do-while é que, no laço é feito
while,pela
a avaliação da expressão lógica é
chamada de um método em um objeto usando o operador binário
feita antes de se executarem as instruções nele contidas enquanto que, no laço "." (ponto),
do-while, primeiro se executam as
devendo especificar
instruções a mensagem
e depois realiza-se completa:
a avaliação o objeto
da expressão lógica,que é o asrecebedor
ou seja, instruçõesdadentro em um laço do-while são
mensagem, o método a ser
executadas pelo menos uma vez. invocado e os argumentos para o método (se houver).
O método invocado
Abaixo, temosnoalguns
recebedor pode
exemplos quetambém enviar informações
usam a declaração do-while: de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 42
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
49
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

Exemplo 1:
int x = 0;
//atribuindo
do { valor a variável referência
Carro carro1 = new Carro();
System.out.println(x);
carro1.ano
x++; = "2001";
carro1.modelo=
} while (x<10); "fusca";
carro1.cor = "prata";
Exemplo 2:
// laço infinito
do {
System.out.println("hello");
} while(true);

Exemplo 3:
// Um laço executado uma vez
do
System.out.println("hello");
while (false);

Figura 2.4 – Layout Memória após inicialização


5.3.3 Declaração for
//criando novo
A declaração for, alias
como nas declarações anteriores, permite a execução do mesmo código uma quantidade
Carro carro2
determinada de vezes. = carro1;
A declaração for possui a seguinte forma:

for ([declaração]; [expressão]; [incremento]) {


instrução1;
instrução2;
...
}

onde:
1. [declaração] – seção de declaração e inicialização das variáveis locais para o laço, executada um única
vez na primeira iteração
2. [expressão] – executada a cada passo do laço, é utilizada como condição de parada quando a
expressão resultar em false as iterações terminam.
3. [incremento] – normalmente usada para incrementar um contador para o laço, mas qualquer
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
declaração válida em Java poderá ser executada. É executado após a execução do bloco interno ao
laço.

2.3 Membros
Um exemplode
paraInstância
a declaração for:
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos)
fordefinidas
(int i pela
= 0;classe.
i < Os10;métodos
i++) { definem o comportamento de um em um objeto constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da
System.out.print(i);
o seu estado.
}
classe. Porém não devemos confundir isto com a implementação do método, que
Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
o mesmo
Neste exemplo, uma variável i, do tipo int, é inicializada com o valor zero. A expressão lógicaestado se suas
"i é menor
que 10" é avaliada. Se for verdadeira, então a instrução dentro do laço é executada. Apósvariáveis membroi terá
isso, a expressão têm os
2.3.1 Invocação de Métodos
seu valor adicionado em 1 e, novamente, a condição lógica será avaliada. Este processo continuarámesmos valores.a
até que
Objetos se comunicam pela troca de mensagens, isto significa que um
condição lógica resulte no valor false.
objeto pode ter que mostrar um comportamento particular invocando uma
Este mesmo exemplo, utilizando a declaração while, é mostrado abaixo:
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamadaint de ium= método
0; em um objeto usando o operador binário "." (ponto),
devendowhile
especificar
(i < a10)mensagem
{ completa: o objeto que é o recebedor da
mensagem, oSystem.out.print(i);
método a ser invocado e os argumentos para o método (se houver).
i++; no recebedor pode também enviar informações de volta ao
O método invocado
}
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 43
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
50
www.3way.com.br
Linguagem de de
Linguagem Programação JavaJava
Programação

5.4 Declarações
//atribuindode valor
Interrupção e Desvio
a variável referência
Declarações
Carro de interrupção
carro1 permitem que redirecionemos o fluxo de controle do programa. A linguagem
= new Carro();
Java possui três declarações
carro1.ano de desvio do fluxo de processamento ou sua interrupção. São elas: break, continue,
= "2001";
carro1.modelo=
return (há "fusca";
ainda try-catch-finally que será visto no capítulo que trata de exceções).
carro1.cor = "prata";
5.4.1 Declaração break
A declaração break possui duas formas: unlabeled (não identificada - vimos esta forma com a declaração
switch) e labeled (identificada).

5.4.1.1 Declaração unlabeled break


A forma unlabeled de uma declaração break encerra a execução de um switch e o fluxo de controle é
transferido imediatamente para o final deste. Podemos também utilizar a forma para terminar declarações for,
while ou do-while. Por exemplo:

public class UnlabeledBreak {


Figura 2.4 – Layout Memória
public static void main(String[] args)após {
inicialização

//criando novo alias


String =soletrar
Carro carro2 carro1;= "Pneumoultramicroscopicossilicovulcanoconiótico";
int tamanho = soletrar.length();
int i;
boolean encontrou = false;
char procurarpor = 'ó';

for (i = 0; i < tamanho; i++) {


if (soletrar.charAt(i) == procurarpor) {
encontrou = true;
break;
}
}

if (encontrou) {
System.out.println("Encontrei a letra " + procurarpor
+ " na posição " + i + "");
} else {
Figura 2.5 – Layout Memória duas variáveis
System.out.println("A referência
letra " + paraprocurarpor
o mesmo objeto
+ " não está na maior palavra do Português");
}
}
2.3 Membros
} de Instância
Cada objeto criado deverá terListagem sua 5.3própria instância
– Iterador FOR com LABELde variáveis Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
Neste não
classe. Porém exemplo, se oconfundir
devemos "ó" com
caracter isto for encontrado,
a implementação a declaração for será
do método, queinterrompida e o controle do
Dois objetos distintos têm
éprograma será transferido
compartilhada por todaspara a próximada
as instâncias classe. abaixo da declaração for.
instrução
o mesmo estado se suas
5.4.1.2 Declaração labeled break
2.3.1 Invocação de Métodos variáveis membro têm os
A forma labeled de uma declaração break encerra o processamento de um laço que é mesmos
identificado por um
valores.
Objetos se comunicam pela troca de mensagens, isto significa que um
label especificado na declaração break.
objeto pode ter que mostrar um comportamento particular invocando uma
Um label, em linguagem Java, é definido colocando-se um nome seguido de dois-pontos, como por
operação
exemplo:
apropriada que foi definida no objeto. Em Java, isto é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
devendo teste:
especificar a mensagem completa: o objeto que é o recebedor da
mensagem, o método a ser invocado e os argumentos para o método (se houver).
O método invocado
esta no recebedor
linha indica pode
que temos um também
label com o enviar informações de volta ao
nome teste.
objeto chamador através de um valor de retorno. O método
O programa a seguir possui dois laços while aninhados, chamado devecom
o laço ser rotulo (externo) executaria
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 44
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
51
www.3way.com.br
Linguagem de de
Linguagem Programação JavaJava
Programação

infinitamente se não houvesse uma declaração break externo, na linha 15. Quando a condição na linha 13 for
o labeled break valor
satisfeita//atribuindo terminará
a avariável
execução do laço externo indo direto para linha 21, assim a linha 18 nunca
referência
será executada.
Carro carro1 = new Carro();
carro1.ano = "2001";
public class LabeledBreak
carro1.modelo= "fusca"; {
carro1.cor = "prata";
public static void main(String[] args) {

int i = 0;
externo: while (true) { //infinito
System.out.println("Dentro Laço (while) externo");
while (true) {
i++;
System.out.println("i = " + i);
if (i == 3) {
System.out.println("break (laço interno) i="+i);
break;
}
if (i == 2) {
System.out.println("break externo i="+i);
Figura 2.4 – Layout Memória após inicialização
break externo;
//criando novo alias
}
Carro carro2 }= carro1;

System.out.println("fora laço (while) interno i="+i);


}

System.out.println("Fora laço (while) externo i="+i);


}
}
Listagem 5.4 – Iterador While com Label

5.4.2 Declaração continue


A declaração continue tem duas formas: unlabeled e labeled. Utilizamos uma declaração continue para
saltar a repetição atual de declarações for, while ou do-while.

5.4.2.1 Declaração unlabeledFigura


continue
2.5 – Layout Memória duas variáveis referência para o mesmo objeto
A forma unlabeled salta as instruções restantes de um laço e avalia novamente a expressão lógica que o
controla.
2.3 Membros de Instância
5.4.2.2 Cada
Declaração labeled
objeto continue
criado deverá ter sua própria instância de variáveis Os valores das variáveis
A forma labeled da declaração continue interrompe a repetição atual de um laço e salta para a repetição
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
exterior marcada com o label indicado.
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
public class TesteContinue { Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
public static void main(String[] args) {
o mesmo estado se suas
2.3.1 Invocação de Métodos variáveis membro têm os
int i = 0;
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
outer: while (true) {
objeto pode ter que mostrarSystem.out.println("laço
um comportamento particular invocando uma
Outer");
operação apropriada que foiwhile
definida no objeto.
(true) { Em Java, isto é feito pela
chamada de um método em um objeto i++;usando o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o= recebedor
System.out.println("i " + i); da
if (i == 1) {
mensagem, o método a ser invocado e os argumentos para o método (se houver).
System.out.println("continue");
O método invocado no recebedor pode também enviar informações de volta ao
continue;
objeto chamador através de um valor} de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 45
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
52
www.3way.com.br
Linguagem de de
Linguagem Programação JavaJava
Programação

if (i == 3) {
System.out.println("continue outer");
//atribuindo valor a variávelcontinue
referência
outer;
Carro carro1 = new Carro();
}
carro1.ano = "2001"; if (i == 5) {
carro1.modelo= "fusca"; System.out.println("break");
carro1.cor = "prata"; break;
}
if (i == 7) {
System.out.println("break outer");
break outer;
}
}
}
}
}
Listagem 5.5 – Interrompendo Iteradores com CONTINUE LABEL

5.4.3 Declaração return Figura 2.4 – Layout Memória após inicialização


returnalias
A declaração novo
//criando é utilizada para sair de um método. O fluxo de controle retorna para a declaração que
segue a Carro
chamadacarro2
do método original. A declaração de retorno possui dois modos: o que retorna um valor e o que
= carro1;
não retorna nada.
Para retornar um valor, escreva o valor (ou uma expressão que calcula este valor) depois da palavra chave
return. Por exemplo:

return ++count;

ou

return "Hello";

Abordaremos as declarações return nas próximas lições, quando falarmos sobre métodos.

5.5 Fazer Laboratório 3


Siga instruções do laboratório
Figura 2.5 –eLayout
tomeMemória
cuidado
duascom o tempo
variáveis depara
referência execução, sempre recorra ao instrutor em
o mesmo objeto
caso de dúvida, nunca deixe uma dúvida sem reposta.

5.6
2.3 Exercícios de Instância
Membros
Escreva, compile e execute Um array armazena
Cada objeto criado deverátodas
ter as
sualistagens
própriadeinstância
código apresentadas
de variáveis Os valores das variáveis
neste capítulo.
(atributos) definidas pela classe. Os métodos definem o comportamento de um múltiplos itens de um
em umtipo
mesmo objeto constituem
de dado em
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
6 Porém
classe. Arraynão devemos confundir isto com a implementação do método, que um bloco contínuo de
Dois objetos
memória. distintosdetêm
O tamanho
é compartilhada
Um arraypor todasestrutura
é uma as instâncias da classe.
de dados que define uma coleção ordenada de
o mesmo estado se suas
um array é fixo e não
elementos homogêneos e de tamanho fixo. Um array armazena múltiplos itens de
um mesmo
2.3.1 tipo dededado
Invocação em um bloco contínuo de memória. O tamanho de um
Métodos variáveis
pode membro
ser alterado têm os
depois
array é fixo e não pode ser
Objetos se comunicam alterado depois
pela trocadede
suamensagens,
criação. isto significa que um demesmos valores.
sua criação.
objeto pode ter que mostrar um comportamentoé como
Se imaginarmos que uma variável em Java uma invocando
particular xícara de café
uma
só se toma café) um array
operação apropriada que foi definida no objeto. Em Java, isto équantidade
(onde seria uma bandeja contendo uma feito pela
definida dedexícaras.
chamada um método em um objeto usando o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da
6.1 Declarando
mensagem, o métodoArray
a ser invocado e os argumentos para o método (se houver).
O método Independentemente
invocado no recebedor de array
do tipopode com oenviar
também qual você esteja trabalhando,
informações de volta ao
o identificador
objeto chamador array é, de
do através na verdade,
um valoruma referênciaOpara
de retorno. métodoum objeto
chamado real deve
que foi
ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 46
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
54
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

criado na pilha. Este é o objeto que guarda as referências para os outros objetos ou valores de tipos primitivos,
pode ser//atribuindo
criado tanto implicitamente da sintaxe de inicialização do array, como explicitamente, com o
como parte referência
valor a variável
operadorCarro
new . Uma parte=donew
carro1 objeto array (de fato, o único campo ou método acessível) é o atributo length (ele só
Carro();
está disponível para leitura),
carro1.ano = que informa a você quantos elementos podem ser armazenados naquele objeto array.
"2001";
Array precisa ser declarados
carro1.modelo= "fusca"; como qualquer variável. Ao declarar um array, defina o tipo de dados deste
seguido carro1.cor = "prata";
por colchetes [] e pelo nome que o identifica. Por exemplo:

int [] idades;

ou colocando os colchetes depois do identificador. Por exemplo:

int idades[];

Depois da declaração, precisamos criar o array e especificar seu tamanho. Este processo é chamado de
construção (a palavra, em orientação a objetos, para a criação de objetos). Para se construir um objeto, precisamos
utilizar um construtor. Por exemplo:

// declaração Figura 2.4 – Layout Memória após inicialização


int idades[];
//criando novo alias
// construindo
Carro carro2 = carro1;
idades = new int[100];

ou, pode ser escrito como:

// declarar e construir
int idades[] = new int[100];

No exemplo, a declaração diz ao compilador Java que o identificador idades será usado como um nome de
um array contendo valores do tipo int, e que o novo array contém 100 elementos.
Ou invés de utilizar uma nova linha de instrução para construir um array, também é possível
automaticamente declarar, construir e adicionar um valor uma única vez.
Exemplos:

// criando um array de valores lógicos em uma variável


// resultados. Este
Figuraarray contém
2.5 – Layout Memória 4 elementos
duas queparasão
variáveis referência o mesmo objeto
// inicializados com os valores {true, false, true, false}
boolean resultados[] ={ true, false, true, false };

2.3 Membros deumInstância


// criando array de 4 variáveis double inicializados Um índice é atribuído
//
Cada objeto criado deverá 90,
com os valores {100, 80, própria
ter sua 75}; instância de variáveis
double [] notas = {100, 90, 80, 75};
Os valores
para das variáveis
cada membro de
(atributos) definidas pela classe. Os métodos definem o comportamento de um em
um um objeto
array, constituem
permitindo
objeto. Isto
// écriando
importante,
um pois
array denota que um método
de Strings pertence a cadadias
com identificador objetoe da o seu estado.
ao programador
classe. Porém não devemos
// também confundir isto com
já inicializado. Estea array
implementação
contém do método, que
7 elementos
String por
dias[]
Dois objetos
acessar distintos têm
os valores
é compartilhada todas =as instâncias da classe.
{"Seg","Ter","Qua","Qui","Sex","Sab","Dom"}; individualmente
o mesmo estado se suas
quando necessário
variáveis membro têm os
2.3.1 Invocação de Métodos
Uma vez que tenha sido inicializado, o tamanho de um array não pode ser
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos. valores.
modificado, pois é armazenado em um bloco contínuo de memória.
objeto pode ter que mostrar um comportamento particular invocando uma
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
6.2 Acessando um elemento do Array
chamada de um método em um objeto usando o operador binário "." (ponto),
Para acessar um elemento do array, ou parte de um array, utiliza-se um
devendo especificar a mensagem completa: o objeto que é o recebedor da
número inteiro chamado de índice. Os números dos índices são sempre inteiros. Eles
mensagem, o método a ser invocado e os argumentos para o método (se houver).
começam com zero e progridem seqüencialmente por todas as posições até o fim do
O método invocado no recebedor pode também enviar informações de volta ao
array. Lembre-se que os elementos dentro do array possuem índice de 0 a length - 1.
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 47
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
55
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

Por exemplo, dado o array idades que declaramos anteriormente, temos:


//atribuindo valor a variável referência
// atribuir
Carro carro110= ao
newprimeiro
Carro();elemento do array
idades[0]
carro1.ano = 10;
= "2001";
// imprimir o último elemento do array
carro1.modelo= "fusca";
System.out.print(idades[99]);
carro1.cor = "prata";

Lembre-se que o array, uma vez declarado e construído, terá o valor de cada membro inicializado
automaticamente, usando o valor default para cada tipo de dado primitivo.
Entretanto, tipos de dados por referência, como as variáveis do tipo String, não serão inicializados com
caracteres em branco ou com uma String vazia "", serão inicializados com o valor null. Deste modo, o ideal é
preencher os elementos do arrays de forma explícita antes de utilizá-los. A manipulação de objetos com referência
null causará a desagradável surpresa de uma exceção do tipo NullPointerException, por exemplo, ao tentar
executar algum método da classe String, conforme o exemplo a seguir:

public class ExemploArray {


public static void main(String[] args) {
String[] nulls = new String[2];
Figura 2.4 – Layout Memória//
System.out.print(nulls[0]); apósLinha
inicialização
correta, mostra null
System.out.print(nulls[1].trim());
//criando novo alias // Causa erro
Carro }carro2 = carro1;
}
Listagem 6.1 – Referênciando Array

O código abaixo utiliza uma declaração for para mostrar todos os elementos de um array.

public class PercorrendoArray {


public static void main(String[] args) {
int[] idades = new int[100];

for (int i = 0; i < 100; i++) {


System.out.print(idades[i]);
}
}
}
Listagem 6.2 – Iterando sobre Array
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

6.3 Tamanho de Array


O atributo length de um array retorna seu tamanho, ou seja, a quantidade de
2.3 Membros
elementos, deéInstância
ou seja ele uma constante já que o array depois de criado não sofrerá
alteraçãoCada objeto É criado
de tamanho. utilizadodeverá
como noter sua abaixo:
código própria instância de variáveis Para se obter
Os valores o número
das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um de elementos de um
em um objeto constituem
objeto. nomeArray.length
Isto é importante, pois denota que um método pertence a cada objeto da array,opode-se utilizar
seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que o atributo
Dois objetoslength. O têm
distintos
Por exemplo,
é compartilhada dado as
por todas o código anterior,
instâncias podemos reescrevê-lo como:
da classe. atributo length de um
o mesmo estado se suas
array retorna seu
public class TamanhoArray {
2.3.1 Invocação de Métodos variáveis membro têm os
public static void main(String[] args) { tamanho.
Objetos se comunicam pela troca de int[100];
mensagens, isto significa que um mesmos valores.
int[] idades = new .
objeto pode ter que formostrar
(intum i =comportamento particular invocando
0; i < idades.length; i++) { uma
operação apropriada que foiSystem.out.print(idades[i]);
definida no objeto. Em Java, isto é feito pela
chamada de um método } em um objeto usando o operador binário "." (ponto),
}
devendo} especificar a mensagem completa: o objeto que é o recebedor da
mensagem, o método a ser invocado e os argumentos para o método (se houver).
Listagem 6.3 – Tamanho do Array
O método invocado no recebedor pode também enviar informações de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 48
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
56
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

6.4 Arrays Multidimensionais


Arrays multidimensionais
//atribuindo valor asão implementados
variável como arrays dentro de arrays. São declarados ao atribuir
referência
um novoCarro
conjunto de colchetes
carro1 = new depois do nome do array. Por exemplo:
Carro();
carro1.ano = "2001";
carro1.modelo= "fusca";
// array inteiro de 512 x 128 elementos
carro1.cor = =
int [][] doisD "prata";
new int[512][128];

// array de caracteres de 8 x 16 x 24
char [][][] tresD = new char[8][16][24];

// array de String de 4 linhas x 2 colunas


String [][] bixoComX = {{"mamífero", "baleia"},
{"carnívoro", "Leão"},
{"pássaro", "galinha"},
{"réptil", "Brontossauro"}};

Acessar um elemento em um array multidimensional é semelhante a acessar elementos em um array de uma


dimensão. Por exemplo, para acessar o primeiro elemento da primeira linha do array bixoComX, escreve-se:
Figura 2.4 – Layout Memória após inicialização
System.out.print(bixoComX[0][0]);
//criando novo alias
Carro carro2 = carro1;
Isso mostrará a String "terry" na saída padrão. Caso queira mostrar todos os elementos deste array,
escreve-se:
for (int i = 0; i < bixoComX.length; i++) {
for (int j = 0; j < bixoComX[i].length; j++) {
System.out.print(bixoComX[i][j] + " ");
}
}

O código abaixo monta um array denominado matrix, contendo 3 arrays de double. Na linha 4 é definido
e criado a primeira dimensão do array, observe que o segundo par de colchetes não contém um número, logo os
elementos da segunda dimensão não foram definidos ainda, ou seja estão com valor default null.
Na linha 6 definimos o primeiro elemento de matrix, ele tem uma referência para um array de double com
um elemento double em que foi atribuído (linha 7) o valor 8.5.
Na linha 9 definimos o segundo elemento de matrix, ele tem uma referência para um array de double com
dois elementos double em que foram atribuídos
Figura 2.5 os valores
– Layout Memória 6.3 e referência
duas variáveis 4.4 . para o mesmo objeto
Na linha 9 definimos o terceiro elemento de matrix, ele tem uma referência para um array de double com
três elementos double em que foram atribuídos os valores 1.5 e 2.9 e 5.5.
2.3 Membros de Instância
public class Matrix {
Cada public
objeto criado
staticdeverá ter sua própria args)
void main(String[] instância
{ de variáveis Os valores das variáveis
(atributos) definidas pela classe. Osmatriz
//criando métodos 2Ddefinem
com 3 oelementos
comportamento de um em um objeto constituem
objeto. Isto é importante, pois denotamatrix
double[][] que um=método pertence a cada objeto da
new double[3][];
o seu estado.
//montando
classe. Porém não devemos confundirelemento
isto com a0implementação
de matrix do método, que
matrix[0] = new double[1]; Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
matrix[0][0]=8.5; o mesmo estado se suas
//montando elemento 1 de matrix
2.3.1 Invocação de Métodos
matrix[1] = new double[2]; variáveis membro têm os
matrix[1][0]
Objetos se comunicam = 6.3;
pela troca de mensagens, isto significa que um mesmos valores.
matrix[1][1] = 4.4;
objeto pode ter que mostrar um comportamento particular invocando uma
//montando elemento 2 de matrix
operação apropriada matrix[2]
que foi definida
= newnodouble[3];
objeto. Em Java, isto é feito pela
chamada de um método em um objeto
matrix[2][0] 1.5; o operador binário "." (ponto),
= usando
devendo especificar amatrix[2][1]
mensagem completa:
= 2.9; o objeto que é o recebedor da
matrix[2][1]
mensagem, o método a ser invocado e os = 5.5;
argumentos para o método (se houver).
}
O método} invocado no recebedor pode também enviar informações de volta ao
objeto chamador através de um valor Listagem
de retorno. O método
6.4 – Array's de múltiplaschamado
dimensões deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 49
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
57
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

Na Figura 6.1, avalor


//atribuindo matriz,aarray de arrays,
variável é mostrada após os elementos terem sido explicitamente
referência
inicializados.
Carro carro1 = new Carro();
carro1.ano = "2001";
carro1.modelo= "fusca";
carro1.cor = "prata";

Figura 6.1 – matrix Array Multidimensional

Figura 2.4 – Layout Memória após inicialização


6.5 Copiando Arrays
//criando novo alias
A biblioteca padrão Java disponibiliza um método static, System.arraycopy(), que pode efetuar cópias de
Carro carro2 = carro1;
um array de modo muito mais rápido do que você conseguiria se fosse usar um laço for para efetuar a cópia
manualmente. System.arraycopy() é sobrecarregado para manipular todos os tipos. A seguir há um exemplo que
manipula arrays de int. A sintaxe é:

System.arraycopy( de, indiceDe, para, indicePara, contagem );

Por exemplo, o programa a seguir define dois arrays e depois copia os quatro últimos elementos do
primeiro array para o segundo. A cópia começa na posição 2 do array de origem e copia 4 elementos, começando
na posição 3 do array de destino.

public class CopiaArray {

public static void main(String args[]) {

int[] numerosPrimos = { 2, 3, 5, 7, 11, 13 };


Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
int[] numerosSortudos = { 1001, 1002, 1003, 1004, 1005, 1006, 1007};

System.arraycopy(numerosPrimos, 2, numerosSortudos, 3, 4);


2.3 Membros de Instância
for (int i = 0; i < numerosSortudos.length; i++) {
Cada objeto criado System.out.println("O
deverá ter sua própria instância
elementode
" +variáveis
i + " apósOsa valores
cópia das
é" variáveis
(atributos) definidas pela classe. Os métodos+definem o comportamento de um
numerosSortudos[i]); em um objeto constituem
objeto. Isto é importante,
} pois denota que um método pertence a cada objeto da
o seu estado.
} devemos confundir isto com a implementação do método, que
classe. Porém não
} Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
Listagem 6.5 – Copiando array's o mesmo estado se suas
2.3.1 Invocação de Métodos variáveis membro têm os
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
6.6 Percorrendo
objeto pode ter que Arrays
mostrarcom
umEnhaced-for
comportamento particular invocando uma
O Java 5.0 traz uma nova
operação apropriada que foi definida sintaxe para percorrermos
no objeto. arrays
Em Java, (e coleções,
isto que veremos mais a frente). Este
é feito pela
laço é similar aos laços for-each
chamada de um método em um objeto usando o operador binário "." (ponto), etc.) .
de outras linguagens de programação (Perl,Php, Python,
devendoSintaxe do Enhanced-for:
especificar a mensagem completa: o objeto que é o recebedor da
mensagem, o método a ser invocado e os argumentos para o método (se houver).
for (<tipo dado> <variável> : <Expressão>)
O método invocado no recebedor pode também enviar informações de volta ao
<sentença>
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 50
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
58
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

No caso de você não ter necessidade de manter uma variável com o índice que indica a posição do
elemento no array, ou de modificar
//atribuindo valor ao elemento array, podemos usar o enhanced-for. Veja a comparação:
variáveldoreferência
Carro carro1 = new Carro();
Laço for(;;) tradicional
carro1.ano = "2001"; Laço for(:) melhorado
carro1.modelo= "fusca";
idades = {12, =30,
int[] carro1.cor 45, 55};
"prata"; int[] idades = {12, 30, 45, 55};
int somaIdade = 0; int somaIdade = 0;
for (int i = 0; i < idades.length; i++) for (int element : idades)
soma += idades[i]; soma += element;

Tabela 6.1 – Enhanced-for

public class ForEach {

public static void main(String[] args) {

int[] idades = {12,30,45,55};

for (intFigura
i :2.4idades)
– Layout Memória
{ após inicialização
//criando novo alias System.out.print(i + ", ");
}
Carro carro2 = carro1;
}
}
Listagem 6.5 – Percorrendo array's com Enhanced-For

6.7 Manipulando Arrays com java.util.Arrays


Em java.util você encontrará a classe Arrays, que tem um conjunto de métodos static para executar
funções necessárias para a manipulação dos arrays: equals(), para comparar dois arrays em termos de igualdade;
fill(), para preencher um array com um valor; sort(), para ordenar o array; e binarySearch(), para procurar um
elemento em um array ordenado. Todos estes métodos são sobrecarregados para todos os tipos primitivos e
Object. Além disto, há um método específico asList() que transforma qualquer array em um contêiner List, sobre o
qual falaremos mais tarde.

import java.util.Arrays;
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

public class TesteArrays {

2.3 Membros de Instância


public static void main(String[] args) {
Cada objeto int[]
criado numeros
deverá ter sua própria instância de variáveis
= { -1, 2, 120, 0, -275 }; Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem
int[] outrosNumeros = new int[5]; o comportamento de um em um objeto constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir com
// preencha isto com a implementação
algum valor do método, que
Dois objetos distintos têm
Arrays.fill(outrosNumeros, 2, 5, new Double(Math.PI).intValue());
é compartilhada por todas as instâncias da classe.
o mesmo estado se suas
// imprimir array como está variáveis membro têm os
2.3.1 Invocação de Métodos
System.out.println("Aqui array numeros não classificado");
Objetos se comunicam pela troca de mensagens, isto significa que um
System.out.println(Arrays.toString(numeros)); mesmos valores.
System.out.println();
objeto pode ter que mostrar um comportamento particular invocando uma
operação apropriada System.out.println("Aqui
que foi definida no objeto. Em Java, isto é feito pela
array outrosNumeros não classificado");
chamada de um método em um objeto usando o operador binário "." (ponto),
System.out.println(Arrays.toString(outrosNumeros));
devendo especificar aSystem.out.println();
mensagem completa: o objeto que é o recebedor da
mensagem, o método a ser invocado e os argumentos para o método (se houver).
O método invocado no// compare two arrays
recebedor pode também enviar informações de volta ao
if (Arrays.equals(numeros, outrosNumeros)) {
objeto chamador através de um valor de retorno. O método
System.out.println("os doischamado
arraysdeve sãoser
iguais!");
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 51
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
59
www.3way.com.br
Linguagem de de
Linguagem Programação JavaJava
Programação

} else {
System.out.println("os dois arrays são diferentes!");
//atribuindo} valor a variável referência
Carro carro1 = new Carro();
carro1.ano //= classificar
"2001"; o array numeros
carro1.modelo= "fusca";
Arrays.sort(numeros);
carro1.cor = "prata";
// imprime array numeros classificado
System.out.println("Aqui array classificado");
System.out.println(Arrays.toString(numeros));
System.out.println();
}
}
Listagem 6.6 – Manipulando array's com java.util.Arrays

6.8 Fazer Laboratório 4


Siga instruções do laboratório e tome cuidado com o tempo de execução, sempre recorra ao instrutor em
caso de dúvida, nunca deixe uma dúvida sem reposta
Figura 2.4 – Layout Memória após inicialização
6.9 Exercícios novo alias
//criando
Escreva,carro2
Carro compile =
e execute
carro1;todas as listagens de código apresentadas neste capítulo.

7 Programação Orientada a Objetos


7.1 Classes e Objetos
7.1.1 Definindo Classes
Antes de escrever sua classe pense no que ela conhece (variáveis de instância, estado) e no que ela faz
(métodos, comportamento). Procure listar as outras classes que colaborarão com a sua no sentido de prover as
funcionalidades desejadas.
Use nomes apropriados para a classe, atributos e métodos sigam convenção
de nomenclatura Java. Para definir uma classe, escrevemos: Antes de escrever sua
classe pense no que ela
<modificador>* class <nome> {
} conhece (variáveis de
instância, estado) e no
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
<modificador de classe> class <nome> que ela faz (métodos,
<clausula extends> <clausula implements > // Class header comportamento).
{ // corpo da Classe .
2.3 Membros de Instância
<declaraçãoDoAtributo>*
<declaraçãoDoConstrutor>*
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
<declaraçãoDoMétodo>*
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
<classe aninhada>
objeto. Isto é importante, pois denota que um método pertence a cada objeto da
<declaração interface> o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
<bloco de inicialização> Dois objetos distintos têm
é compartilhada
} por todas as instâncias da classe.
o mesmo estado se suas
onde:
2.3.1 Invocação de Métodos variáveis membro têm os
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
<modificador> é um modificador de acesso, que pode ser usado em combinação com outros
objeto pode ter que mostrar um comportamento particular invocando uma
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
<nome> nome da sua classe
chamada de um método em um objeto usando o operador binário "." (ponto),
devendo especificar a mensagem
<declaraçãoDoAtributo> completa:
atributos o objeto
definidos para aque é o recebedor da
classe
mensagem, o método a ser invocado e os argumentos para o método (se houver).
<declaraçãoDoConstrutor>
O método invocado no recebedormétodo construtor
pode também enviar informações de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 52
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
60
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

<declaraçãoDoMétodo> métodos da classe


//atribuindo valor a variável referência
<classe
Carro aninhada>
carro1 = new veremos
Carro();adiante
carro1.ano = "2001";
<declaração interface>"fusca";
carro1.modelo= veremos adiante
carro1.cor = "prata";
<bloco de inicialização> veremos adiante

Neste exemplo, criaremos uma classe que conterá o registro de um estudante. Como já identificamos o
objetivo da nossa classe, agora podemos nomeá-la. Um nome apropriado para nossa classe seria Estudante.
Para definir nossa classe, escrevemos:

public class Estudante {

String nome;
String endereco;
int idade;
double matematicaPontos;
Figura 2.4 – Layout Memória após inicialização
double portuguesPontos;
double cienciaPontos;
//criando novo alias
Carro carro2 = carro1;
}

onde:

public modificador de acesso, permite que esta classe esteja acessível a qualquer outra classe em
qualquer pacote;
class palavra-chave usada para criar uma classe ;
Estudante identificador único que identifica a classe.

7.1.2 Definindo Métodos


Nos exemplos apresentados anteriormente, temos apenas um método, o Um método é um
método main(). Em Java, nós podemos definir vários métodos e podemos chamá-
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto trecho de código
los a partir de outros métodos. distinto que pode ser
Por que é necessário criar métodos? invocado por qualquer
Porque não colocamos todas as instruções dentro de um grande método? outro método para
2.3 Membros de Instância
Conforme uma tarefa cresce e se torna mais complexa, surge uma série de
realizar alguma
situações Cada objeto
a serem criado para
resolvidas deverá que terestesua própria possa
problema instância de variáveis
ser solucionado. Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um operação específica.
em um objeto constituem
Podemos dizer que passamos a ter dentro de um problema uma série de pequenos
objeto. Isto é importante, pois denota que um método pertenceeste a cada emobjeto
partesda .
probleminhas. Assim, conhecido o problema, ao separarmos o seu estado.
classe. Porém não devemos confundir isto com a implementação
menores, nosso trabalho de escrever grandes classes se torna menos crítico e de do método, que
Dois objetos distintos têm
é compartilhada
mais por todas as instâncias da classe.
fácil manutenção. o mesmo estado se suas
2.3.1 Invocação de Métodos variáveis membro têm os
Métodos possuem as seguintes características:
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
objeto pode
 ter que
Podem mostrar
ou não umum
retornar comportamento
valor. particular invocando uma
operação apropriada que ou
Podem aceitar foinão
definida no objeto. Em Java, isto é feito pela
argumentos.
chamada deApós
um método
o métodoem um objeto
encerrar usando o fluxo
sua execução operador binárioé"."
de controle (ponto),
retornado
devendo especificar
a quem o achamou.
mensagem completa: o objeto que é o recebedor da
mensagem, o método a ser invocado e os argumentos para o método (se houver).
O métodoA forma geralno
invocado para declaração
recebedor de um
pode métodoenviar
também é informações de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 53
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
61
www.3way.com.br
Linguagem de de
Linguagem Programação JavaJava
Programação

<modificadores método> <tipo retorno> <nome do método> (<lista de parâmetros formais>)


<clausula
//atribuindothrows> // prototipação
valor a variáveldo método
referência
{ // Corpo
Carro do método
carro1 = new Carro();
<variáveis locais>
carro1.ano = "2001";
<classes locais aninhadas>
carro1.modelo= "fusca";
carro1.cor
<sentenças> = "prata";
}

Além do nome do método é possível especificar as seguintes informações:


 modificador de escopo ou acessibilidade.
 outros modificadores de métodos (static, final, abstract, synchronized, native, transient, volatile)
 o tipo do valor a ser retornado ou void se o método não retornar qualquer valor
 lista de parâmetros formais
 cláusula throws, para tratamento de exceções a ser vista em capítulo posterior.

Os parâmetros formais é uma lista, de parâmetros usados para passar informação ao método quando este
é invocado e são separados por vírgula. Uma lista de parâmetros vazia deve ser especificada dentro dos parenteses.
Figura 2.4 – Layout Memória após inicialização
Cada parâmetro é uma simples declaração de variável que consiste em seu tipo e nome:
//criando novo alias
Carro carro2
<modificador = carro1;
do parâmetro> <tipo> <nome do parâmetro>
Objetos têm estado
Os nomes do parâmetro são variáveis locais ao método. O modificador de (variáveis de instância)
parâmetro final será discutido num próximo momento. e comportamento
O nome do método e a lista de parâmetros formais compreendem a (métodos).
assinatura de um método. O corpo do método é um bloco que contém as declarações .
de variáveis locais e as sentenças do método.
Da mesma maneira que as variáveis membro, os métodos membro podem ser
caracterizados como:
 métodos de estáticos, usa modificador static
 métodos de instância, sem modificador

7.1.2.1 Definindo Métodos na Classe


Sabemos que objetos têm estado e comportamento, representados pelas variáveis de instância e
métodos. Mas até o momentoFigura não2.5relacionamos
– Layout Memóriaestes
duas variáveis referência para
dois princípios doso mesmo objetoNo código abaixo, estamos
objetos.
adicionando uma operação à classe Estudante, esta operação atua sobre o estado do objeto, não alterando, mas
informando. Veja a definição da operação getMedia(). Também definimos uma nova classe EstudanteExemplo,
2.3 criarMembros
para e manipularde Instância
instâncias da classe Estudante.
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
class
(atributos) Estudante
definidas {
pela classe. Os métodos definem o comportamento de um em um objeto constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
String nome;
classe. Porém não devemos confundir isto com a implementação do método, que
String endereco; Dois objetos distintos têm
é compartilhadaintpor todas as instâncias da classe.
idade;
double matematicaPontos; o mesmo estado se suas
2.3.1 double
Invocação portuguesPontos;
de Métodos variáveis membro têm os
double cienciaPontos;
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
objeto pode ter que mostrar um comportamento particular invocando uma
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamada de um /**
método em um objeto usando o operador binário "." (ponto),
* Calcula a media das classes de português, matemática e ciências
devendo especificar
*/
a mensagem completa: o objeto que é o recebedor da
mensagem, o método
publica ser invocado
double e os argumentos
getMedia() { para o método (se houver).
O método invocado no recebedor
double result pode
= 0; também enviar informações de volta ao
objeto chamador result
através de um valor de retorno. O+ método
= (matematicaPontos chamado deve
portuguesPontos ser
+ cienciaPontos) / 3;
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 54
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
62
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

return result;
}
}//atribuindo valor a variável referência
Carro carro1 = new Carro();
carro1.ano
public = "2001";
class EstudanteExemplo {
carro1.modelo= "fusca";
carro1.cor = "prata";
public static void main(String[] args) {

// criar instâncias de objetos para Estudante


Estudante annaRegistro = new Estudante();
Estudante beahRegistro = new Estudante();
Estudante crisRegistro = new Estudante();

// modifica estado, atributo nome dos estudantes


annaRegistro.nome = "Anna";
beahRegistro.nome = "Beah";
crisRegistro.nome = "Cris";
annaRegistro.endereco = "Brasil";
beahRegistro.endereco = "Filipinas";
crisRegistro.endereco = "EUA";
Figurada
// alterar notas 2.4 anna
– Layout Memória após inicialização
annaRegistro.matematicaPontos
//criando novo alias = 6.5;
annaRegistro.portuguesPontos
Carro carro2 = carro1; = 8.9;
annaRegistro.cienciaPontos = 9.5;

// mostrar o nome de anna


System.out.println(annaRegistro.nome);
// mostrar a media da anna
System.out.println("Media=" + annaRegistro.getMedia());
}
}
Listagem 7.1 – Criando uma classe

7.1.3 Métodos de Instância e a Referência this


Métodos de instância são compartilhados entre objetos da mesma classe,
diferentemente das variáveis de instância onde se tem uma para cada objeto. Deste
modo deve haver alguma "mágica" Figura 2.5 para
– Layoutque o interpretador
Memória Java para
duas variáveis referência saiba qualobjeto Métodos de instância
o mesmo
referência está invocando um método! E há, a grosso modo, toda invocação de são compartilhados
método passa, além dos parâmetros formais, um argumento extra que é a referência entre objetos da
do objeto chamador do método. Para entender isso melhor, tomemos o método
2.3 Membros de Instância mesma classe,
setIdade(int i) como exemplo, ao ser invocado os argumentos passados ao método
Cada objeto criado deverá ter sua própria instância de variáveis diferentemente
Os valores das das
variáveis
seriam como em setIdade(refobjeto, 10), onde refobjeto é a referência do objeto
(atributos) definidas pela classe. Os métodos definem o comportamento
chamador. Isto é feito de forma implícita por Java. Não espere que o compilador Java de um variáveis de instância
em um objeto constituem
objeto.chamadas
aceite Isto é importante,
como estapois em denota
seu código.que O umexemplo
métodoé pertence
para te dar a cada
uma objeto
idéia doda onde seotem seuuma para
estado.
classe. Porém não devemos confundir isto com a implementação do método, que
que acontece. Doiscada objeto.
objetos distintos têm
é compartilhada por todas as instâncias da classe.
Suponha que você esteja dentro de um método e queira obter a referência o mesmo. estado se suas
para o objeto corrente, como fazer? Para este propósito podemos usar a palavra variáveis membro têm os
2.3.1 this.
chave Invocação
A palavrade Métodos
chave this — que só pode usada dentro de um método -
mesmos valores.
contém aObjetos
referênciase para
comunicam
o objetopela cujotroca
métodode mensagens, isto significa
está sendo chamado. Vocêque um
pode
objetoesta
tratar pode ter que
referência comomostrar
qualquer umoutra
comportamento particular
referência a objeto. Perceba invocando
que, se vocêuma
operação
está chamandoapropriada
um métodoque mA()
foi definida no objeto.
de uma classe a partirEm de Java,
outro isto
método é feito
mB()pela
da
chamada de um método em um objeto usando o operador
mesma classe, você não precisa usar this. Você simplesmente invoca o método. A binário "." (ponto),
devendo this
referência especificar
correnteaé mensagem
automaticamente completa:
usadaopeloobjeto
outroque é o recebedor da
método.
mensagem, o método
A referência a ser
this é deinvocado e os argumentos
grande utilidade para o
em situações método
onde o nome (se de
houver).
uma
variável
O método localinvocado
conflita com o nome da pode
no recebedor variável de instância.
também enviarPor exemplo: de volta ao
informações
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 55
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
63
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

class Estudante{
//atribuindo valor a variável referência
int idade;
Carro carro1 = new Carro();
carro1.ano = "2001";
public void setIdade(int idade){
carro1.modelo= "fusca";
carro1.cor idade
= "prata";
= idade; // Não é uma boa prática

}
}

O nome do argumento nesta declaração é idade (linha 3), que tem o mesmo nome do atributo de objeto
idade (linha 2). Já que o argumento idade é local ao método, o valor do argumento idade será usado, na instrução:

idade = idade;

Neste caso estamos simplesmente associando o valor do argumento idade para si mesmo! Isto não é o que
queremos que aconteça neste código. A fim de corrigir esse equivoco, usamos a referência this para fazer a
distinção entre os nomes. Para utilizar a referência
Figura 2.4 –this , digitamos:
Layout Memória após inicialização

//criando novo alias


this.<nomeDoAtributo>
Carro carro2 = carro1;

O ideal é reescrever o nosso método do seguinte modo:

public void setIdade(int idade){

this.idade = idade;
}

Este método irá atribuir o valor do argumento idade para o atributo de objeto idade do objeto Estudante.

7.1.4 Sobrecarga de Métodos (Overloading)


Nas nossas classes, podemos necessitar de criar métodos que tenham os
mesmos nomes, mas que funcionem de maneira diferente dependendo dos Sobrecarga de métodos
argumentos que informamos. Esta capacidade é chamada de SOBRECARGA (ou permite que um método
overloading em inglês) de métodos. Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto com o mesmo nome,
Sobrecarga de métodos permite que um método com o mesmo nome, entretanto com
entretanto com diferentes tipos ou quantidade de argumentos, possa ter diferentes tipos ou
2.3 Membros
implementações de Instância
diferentes e retornar valores de diferentes tipos. Ao invés de quantidade de
inventar novos nomes todas
Cada objeto criado as vezes,
deveráa sobrecarga de métodos
ter sua própria pode ser
instância de utilizada
variáveis Os valores das
argumentos, possa ter
variáveis
quando a mesma
(atributos) operação
definidas tem implementações
pela classe. Os métodos definemdiferentes.o comportamento de um implementações
em um objeto constituem
Por éexemplo,
objeto. Isto na nossa
importante, classe Estudante,
pois denota que um métodoqueremos ter um
pertence método
a cada objetoque
da diferentes
o seue estado.
retornar
mostre
classe. as informações
Porém sobre oconfundir
não devemos estudante. Entretanto,
isto queremos quedo
com a implementação o método
método,printque
mostre dados diferentes dependendo dos daargumentos
valores de diferentes
Dois objetos distintos têm
é compartilhada por todas as instâncias classe. que lhe informamos. tipos.
Por exemplo, quando não enviamos qualquer argumento queremos que o o mesmo estado se suas
método print mostre o nome, endereço e idade do estudante. Quando passamos um
2.3.1 Invocação de Métodos variáveis membro têm os
argumento do tipo String, queremos que o método mostre esta String mais o nome mesmos valores.
Objetos se comunicam pela troca de mensagens, isto significa que um
e as notas do estudante.
objeto pode ter que mostrar um comportamento particular invocando uma
Teremos os seguintes métodos dentro da nossa classe Estudante:
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamada método
de umvoid
public em um objeto usando o operador binário "." (ponto),
print(){
devendo especificar a mensagem completa: o +objeto
System.out.println("nome:" nome); que é o recebedor da
mensagem, o método a ser invocado e os argumentos para
System.out.println("endereco:" o método (se houver).
+ endereco);
O método invocadoSystem.out.println("idade:"
no recebedor pode também enviar + idade);informações de volta ao
}
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 56
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
64
www.3way.com.br
Linguagem de de
Linguagem Programação JavaJava
Programação

public void print(String msg){


System.out.println(msg);
//atribuindo valor a variável referência
System.out.println("nome:" + nome);
Carro System.out.println("Nota
carro1 = new Carro(); de Matematica:" + matNota);
carro1.ano = "2001";
System.out.println("Nota de Portugues:" + portNota);
carro1.modelo= "fusca";
System.out.println("Nota de Ciencias:" + cienNota);
}carro1.cor = "prata";

Quando tentamos chamar estes métodos no método main(), criado para a classe EstudanteExemplo:

public static void main(String[] args) {

Estudante annaRegistro = new Estudante();

annaRegistro.nome="Anna";
annaRegistro.endereco="Philippines";
annaRegistro.idade=15;

// sobrecarga de métodos
annaRegistro.print();
Figura 2.4 – Layout Memória após inicialização
annaRegistro.print("Situação do(a) Aluno(a) ");
}//criando novo alias
Carro carro2 = carro1;
Teremos diferentes saídas para a chamada ao método print.
Lembre-se sempre de que métodos sobrecarregados possuem as seguintes propriedades:
1. o mesmo nome
2. lista de parâmetros formais diferentes
3. definido na mesma classe
O principal propósito dos
7.1.5 Construtores
Utilizado quando há uma chamada com o operador new. São como construtores são
métodos mas a assinatura de um construtor é diferente de um método, temos as inicializar o estado de um
propriedades de um construtor: objeto quando este é
criado.
1. Devem ter o mesmo nome da classe
2. Construtor são como métodos, entretanto, somente as seguintes
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
informações podem ser colocadas no cabeçalho do construtor:
 Escopo ou identificador de acessibilidade (como public, private)
 Nome do construtor
2.3 Membros
 Lista dede Instânciaformais, opcional
parâmetros
3. Cada
Não objetovalor
retornam criado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos)
4. definidas
Somente pela classe.
são invocados Os métodos
usando operadordefinem
new duranteo comportamento
a instanciação da de um em um objeto constituem
objeto. classe
Isto é ou
importante,
dentro de pois
outrodenota
construtorque usando
um métodothis()pertence
e/ou super() a cada objeto da o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
Dois objetos distintos têm
Para declarar
é compartilhada por todas as instâncias um construtor, escrevemos:
da classe.
o mesmo estado se suas
Toda classe tem o variáveis membro têm os
[modificador] <nomeClasse> (<argumento>*) {
2.3.1 Invocação de Métodos
seu construtor mesmos valores.
Objetos se comunicam <instrução>*
pela troca de mensagens, isto significa que um
padrão. }
objeto pode ter que mostrar um comportamento particular invocando uma
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
7.1.6 Construtor
devendo especificar a mensagem Padrão
completa: o (default)
objeto que é o recebedor da
mensagem, o método a ser invocado e os argumentos épara
O construtor padrão umoconstrutor
método (sepúblico e sem argumentos. Se não for
houver).
O método invocado no recebedor pode também enviar informações de volta aoJava automaticamente definirá
definido um construtor para a classe, então, o compilador
um construtor padrão para a classe.
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 57
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
65
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

Por exemplo, na nossa classe Estudante, o construtor padrão é definido do seguinte modo:
//atribuindo valor a variável referência
Estudante()
publiccarro1
Carro {}
= new Carro();
carro1.ano = "2001";
7.1.7 Overloading de Construtores
carro1.modelo= "fusca";
Construtores podem
carro1.cor sofrer sobrecarga (overloading), por exemplo, temos aqui
= "prata"; Construtores podem
quatro construtores: sofrer sobrecarga
(overloading).
public Estudante() {
// qualquer código de inicialização aqui
}

public Estudante(String temp){


this.nome = temp;
}

public Estudante(String nome, String endereco) {


this.nome = nome;
this.endereco = endereco;
Figura 2.4 – Layout Memória após inicialização
}
//criando novo alias
Carro carro2
public = carro1; matematica, double portugues, double ciencia) {
Estudante(double
matematicaNota = matematica;
portuguesNota = portugues;
cienciaNota = ciencia;
}

7.1.8 Usando Construtores


Para utilizar os construtores, definidos na seção anterior, temos as seguintes instruções:

public static void main(String[] args) {


// criar três objetos para o registro do estudante
Estudante annaRegistro = new Estudante("Anna");
Estudante beahRegistro = new Estudante("Beah", "Filipinas");
Estudante crisRegistro = new Estudante(80,90,100);
// algum código a partir daqui
}
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

Ao criar um novo objeto o construtor será invocado, logo após a alocação das variáveis de instância.
Vejamos o seguinte exemplo, vamos adicionar o atributo estático static int refCount à classe Estudande (linha 3):
2.3 Membros de Instância
Cada Estudante{
class objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
int idade;
(atributos) definidas pela classe. Os métodos definem o comportamento de um
static int refCount; em um objeto constituem
objeto. Isto é importante,
public void poissetIdade(int
denota que um idade){
método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
idade = idade; // Não é uma boa prática Dois objetos distintos têm
é compartilhada } por todas as instâncias da classe.
} o mesmo estado se suas
2.3.1 Invocação de Métodos variáveis membro têm os
OObjetos
propósito
se de refCount épela
comunicam contar o número
troca de objetosisto
de mensagens, quesignifica
são instanciados mesmos
que um a partir da valores.
classe Estudante.
Então,
objeto opode
que desejamos é incrementar
ter que mostrar o valor de refCount
um comportamento todainvocando
particular vez que umumaobjeto da classe Estudante é
instanciado. Os construtores são um bom local para modificar e incrementar
operação apropriada que foi definida no objeto. Em Java, isto é feito pela o valor de refCount, pois ao menos um
deles certamente será invocado quando um objeto Estudante for instanciado.
chamada de um método em um objeto usando o operador binário "." (ponto), Por exemplo:
devendo especificar a mensagem completa: o objeto que é o recebedor da
public Estudante() {
mensagem, o método a ser invocado
refCount++; e os argumentos
// adicionar para o método (se houver).
um estudante
O método
} invocado no recebedor pode também enviar informações de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 58
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
66
www.3way.com.br
Linguagem de de
Linguagem Programação JavaJava
Programação

public Estudante(String nome) {


refCount++; // adicionar um estudante
//atribuindo
this.nomevalor a variável referência
= nome;
Carro
} carro1 = new Carro();
carro1.ano = "2001";
carro1.modelo=
public "fusca";nome, String endereco) {
Estudante(String
carro1.cor = "prata";
refCount++; // adicionar um estudante
this.nome = nome;
this.endereco = endereco;
}

public Estudante(double matematica, double portugues, double ciencia) {


refCount++; // adicionar um estudante
matematicaNota = matematica;
portuguesNota = portugues;
cienciaNota = ciencia;
}

7.1.9 Utilizando o Construtor this( )


Chamadas a construtores podemFigura
ser 2.4
encadeados, o que
– Layout Memória após significa
inicializaçãoser possível chamar um construtor a
partir de outro construtor. Usamos uma invocação a this() para isso. Por exemplo, dado o seguinte código:
//criando novo alias
Carro carro2 = carro1;
public Estudante() {
this("alguma string");
}

public Estudante(String temp) {


this.nome = temp;
}

public static void main( String[] args ) {


Estudante annaRegistro = new Estudante();
}

No código acima, quando se executa a instrução do método o main() (linha 8), será chamado o construtor
padrão (linha 1). A instrução inicial (linha 2) deste construtor resultará na chamada ao segundo construtor (linha 4).
Há algum regras para utilização da chamada ao construtor por this():
1. A chamada ao construtor DEVE
Figura 2.5 – Layout SEMPRE
Memória OCORRER
duas variáveis NApara
referência PRIMEIRA
o mesmo objeto
LINHA DE INSTRUÇÃO Como boa prática de
2. UTILIZADO PARA A CHAMADA DE UM CONSTRUTOR. A chamada ao
programação, é ideal
2.3 Membros this() pode ser seguida por outras instruções.
de Instância nunca construir
Como boa prática
Cada objeto de deverá
criado programação,ter sua é ideal
próprianunca construir
instância demétodos
variáveis métodos
Os valores das variáveis
que repitam as
que repitamdefinidas
(atributos) as instruções.
pela Buscamos
classe. Os amétodos
utilizaçãodefinem
de sobrecarga com o objetivo
o comportamento dedeum
evitarmos em um objeto
instruções. constituem
objeto. Istoessa repetição. Deste
é importante, modo, que
pois denota reescreveremos
um método os construtores
pertence a cadadaobjeto
classeda
o seu
Buscamos estado.
a utilização
Estudante, definida na seção 7.16, para reutilizar o construtor default:
classe. Porém não devemos confundir isto com a implementação do método, que
Dois
de objetos distintos
sobrecarga com o têm
é compartilhada por todas as instâncias da classe.
public Estudante() { o mesmo
objetivo estado se suas
de evitarmos
refCount++; // adicionar um estudante
essa repetição.
variáveis membro têm os
2.3.1 }Invocação de Métodos
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
pode terEstudante(String
objeto public nome) {
que mostrar um comportamento particular invocando uma
this();// construtor default
operação apropriada que foi
this.nome = nome;definida no objeto. Em Java, isto é feito pela
chamada} de um método em um objeto usando o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da
public
mensagem, Estudante(String
o método a ser invocado enome, String para
os argumentos endereco)
o método{ (se houver).
this(nome);
O método invocado no recebedor= pode
this.endereco também enviar informações de volta ao
endereco;
objeto chamador
} através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 59
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
67
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

public Estudante(double matematica, double portugues, double ciencia) {


//atribuindo
this(); valor a variável
// adicionar referência
um estudante
Carro matematicaNota
carro1 = new Carro();
= matematica;
carro1.ano = "2001";
portuguesNota = portugues;
carro1.modelo= "fusca";
cienciaNota = ciencia;
}carro1.cor = "prata";

7.2 Fazer Laboratório 5


Siga instruções do laboratório e tome cuidado com o tempo de execução, sempre recorra ao instrutor em
caso de dúvida, nunca deixe uma dúvida sem reposta.

7.3 Herança
Como já vimos no capítulo 2, uma das formas de criarmos novas classes é fazê-lo através de herança, o
que nos proporcionará uma grande vantagem em relação a outros paradigmas de programação, pois assim
podemos reutilizar código que seja comum às classes (lembre-se: reuso é algo mais eficiente e menos falho do que
"copiar e colar").
Um exemplo de hierarquia de classes
Figuraé2.4
mostrado Figura
com a após
– Layout Memória 7.1.
inicialização

//criando novo alias


Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

Figura 7.1: Hierarquia de Classes

2.3 Membros de Instância


Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
Definimos código comum a uma determinada classe (superclasse) e definimos
(atributos) definidas pela classe. Os métodos definem o comportamento de um Todas as classes são
código mais específico em classes que herdam (subclasse) as características da classe em um objeto constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da subclasses da classe
o seu estado.
mais genérica.
classe. Porém não devemos confundir isto com a implementação do método, que Object.
Em Java, dizemos que a subclasse estende a superclasse. Um relacionamento Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
de herança significa que a subclasse herdará membros (atributos e operações – o mesmo estado se suas
métodos e variáveis de instância) da superclasse. variáveis membro têm os
2.3.1 Invocação de Métodos
A classe Object é a classe ancestral de todas as outras. O compilador Java,
Objetos se comunicam pela mesmos valores.
automaticamente, insere a definição da troca depara
herança mensagens, isto significa
todas as definições que um
de classes.
objeto pode ter que mostrar um comportamento particular invocando uma
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamada de um método
7.3.1 Definindo em um
Superclasses objeto usando o operador binário "." (ponto),
e Subclasses
devendoParaespecificar
criar umaa mensagem
nova classe completa:
por herançao objeto
usamosque é o recebedor
a palavra-chave da
extends.
mensagem, ocriando
Ilustraremos método umaa ser invocadode
superclasse e os argumentos
exemplo, para
a partir o métodoUML:
do diagrama (se houver).
O método invocado no recebedor pode também enviar informações de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 60
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
69
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

//atribuindo valor a variável referência


Carro carro1 = new Carro();
carro1.ano = "2001";
carro1.modelo= "fusca";
carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização

//criando novo alias


Figura 7.2 – Exemplo de Generalização
Carro carro2 = carro1;

public class Funcionario {

double salario;
java.util.Date dataContrato;
String nome;
String cargo="indefinido";

public Funcionario(){}

public Funcionario(String nome,double salario,


java.util.Date dataContrato) {
this.salario = salario;
this.dataContrato = dataContrato;
this.nome = nome;
} Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

void bonusSalario (double percentual) {


salario *= 1 + percentual / 100;
2.3 Membros
} de Instância
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
}
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
Listagem 7.2 – Definindo classe Funcionario
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
Dois objetos distintos têm
Vamos criar
é compartilhada por outra
todas classe chamada
as instâncias da Gerente.
classe. E, como um gerente também é-um funcionário, concluímos
o mesmo estado se suas
que podemos estendê-la da classe Funcionario, assim, poderemos herdar todas as propriedades existentes nesta
classe.
2.3.1 Veja o código:de Métodos
Invocação variáveis membro têm os
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
class Gerente extends Funcionario {
objeto pode ter que mostrar um comportamento particular invocando uma
operação apropriada
double que foi definida no objeto. Em Java, isto é feito pela
bonus;
chamada de um método em
String secretaria;um objeto usando o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da
String cargo;
mensagem, o método a ser invocado e os argumentos para o método (se houver).
public Gerente(String nomeGerente,double salarioGerente,
O método invocado no recebedor pode também enviar informações de volta ao
java.util.Date dataContratoGerente,String secretaria) {
objeto chamador através de um valor
nome=nomeGerente; de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 61
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
70
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

salario = salarioGerente;
dataContrato = dataContratoGerente;
//atribuindo valor a variável
this.secretaria referência
= secretaria;
Carro carro1 = new Carro();
cargo="gerente";
carro1.ano = "2001";
carro1.modelo= "fusca";
bonus = 0.0;
carro1.cor
} = "prata";

void bonusLucro (double lucro) {


bonus += lucro * 0.01;
}

}
Listagem 7.3 – Definindo classe Gerente por herança

Agora Responda! Quem nasce primeiro os filhos ou os pais? Se nós chamarmos a superclasse de "pai" da
subclasse, quem deve ser criado primeiro?
A classe Gerente usa seu próprio construtor para fazer as inicializações necessárias, observe que fazemos
FiguraFuncionario.
acesso direto às variáveis membros da classe Isto após
2.4 – Layout Memória só éinicialização
possível porque no processo de criação dos
objetos, //criando
os construtores das superclasses
novo alias são invocados antes dos construtores das subclasses, uma vez que as
subclasses podem depender de
Carro carro2 = carro1; partes definidas na superclasse, estas têm que estar completamente formadas
antes que as partes da subclasse sejam construídas.
Outros atributos foram acrescentados à classe Gerente, como um bônus por produtividade e nome da
secretária do gerente. Após isso, as instruções dentro do construtor da subclasse são executadas. Para ilustrar,
considere o seguinte código:

public class MainGerente {

public static void main(String[] args) {

//uma instancia de calendar


java.util.Calendar database = java.util.Calendar.getInstance();

//configura data de contratacao do funcionario


database.set(2005, 6, 10);

Figura 2.5 –de


//instancia Layout Memória duas variáveis referência para o mesmo objeto
Gerente
Gerente funcionario = new Gerente("Hide Otta",1999.99,
database.getTime(), "Effe Ciente");
2.3 Membros de//invoca
Instânciamétodo da heranca
Cada objeto funcionario.bonusSalario(2);
criado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela classe. Os
//invoca métodos
método da definem o comportamento de um
instancia
em um objeto constituem
funcionario.bonusLucro(10000.00);
objeto. Isto é importante, pois denota que um método pertence a cada objeto da
//imprime estado desta instancia de Gerente o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
System.out.println("Nome funcionario: Dois objetos distintos têm
" + funcionario.nome);
é compartilhada por todas as instâncias da classe.
System.out.println("Cargo: " + funcionario.cargo);
System.out.println("Secretariado por : "+ funcionario.secretaria);
o mesmo estado se suas
System.out.println("Salario base: " +
2.3.1 Invocação de Métodos variáveis membro têm os
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
String.format("%,.2f", funcionario.salario));
System.out.println("Salario + Comissao: " +
objeto pode ter que mostrar um comportamento particular invocando uma
String.format("%,.2f", (funcionario.salario+
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
funcionario.bonus)));
chamada de um método em um objeto usando o operador binário "." (ponto),
}
devendo especificar a mensagem completa: o objeto que é o recebedor da
mensagem,
} o método a ser invocado e os argumentos para o método (se houver).
O método invocado no recebedor pode também enviar informações de volta ao
Listagem 7.4 – Usando as classes Funcionario e Gerente
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 62
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
71
www.3way.com.br
Linguagem de de
Linguagem Programação JavaJava
Programação

7.3.2 Chamando
//atribuindoConstrutor
valorsuper() e Referência
a variável super
referência
No exemplo
Carro anterior,
carro1 = newListagem 7.3, a classe Gerente definiu um construtor. Grande parte do que ele faz é
Carro();
configurar as variáveis membro
carro1.ano da superclasse. Observe que as mesmas operações também são definidas em um
= "2001";
carro1.modelo=
dos construtores "fusca"; E o reuso como fica? Será que posso invocar o construtor da superclasse
da classe Funcionario.
carro1.cor
para reaproveitar = "prata";
o código?
Para nossa comodidade a resposta é sim. Uma subclasse pode invocar explicitamente um construtor de
sua superclasse imediata. Isso é feito utilizando a chamada de construtor super(). Uma invocação a super(), no
construtor de uma subclasse, irá resultar na execução de um construtor específico da superclasse, sendo este
diferenciado com base nos argumentos passados.
Remodelando o construtor da classe Gerente:

public GerenteM(String nome,double salario,


java.util.Date dataContrato,String secretaria) {

//invoca construtor superclasse


super(nome,salario,dataContrato);
= secretaria;
this.secretaria Figura 2.4 – Layout Memória após inicialização
cargo="gerente";
//criando bonus
novo alias
= 0.0;
Carro carro2 = carro1;
}
Listagem 7.5 – Invocando construtor da superclasse

Este código chama o construtor não padrão de sua superclasse imediata (a classe Funcionario) e a executa.
Devemos relembrar, quando usamos uma chamada ao super():
1. A instrução super() DEVE SER A PRIMEIRA INSTRUÇÃO EM UM CONSTRUTOR.
2. As instruções this() e super() não podem ocorrer simultaneamente no mesmo construtor.

Repare que tanto na superclasse Funcionario quanto na subclasse Gerente, está definido o atributo cargo,
veja que este atributo é inicializado no construtor da subclasse Gerente, então quem fica com a referência para
String "gerente", o atributo da superclasse ou da subclasse? Neste caso dizemos que a variável da superclasse está
shadowed ou seja sendo ocultada pela definição de uma variável com mesmo nome na subclasse.
Para resolver conflitos de nomes, como apresentado no parágrafo anterior, ou simplesmente fazer
referência aos membros da superclasse, podemos
Figura 2.5 – Layout usar
Memória a referência
duas de objeto
variáveis referência super.objeto
para o mesmo Exemplo:

public GerenteM(String nome,double salario,


java.util.Calendar dataContrato,String secretaria) {
2.3 Membros de Instância
Cada objeto criado deverá
//invoca ter sua
construtor própria instância de variáveis
superclasse Os valores das variáveis
super(nome,salario,dataContrato);
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
this.secretaria = secretaria;
objeto. Isto é importante, pois denota
//atributo quesuperclasse
cargo um método pertence a cada objeto da o seu estado.
classe. Porém não devemos
super.cargo="gerente";a implementação do método, que
confundir isto com
Dois objetos distintos têm
é compartilhada por todas as instâncias
//atributo cargoda na
classe.
classe corrente
this.cargo="gerente"; o mesmo estado se suas
bonus = 0.0;
2.3.1 }Invocação de Métodos variáveis membro têm os
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
Listagem 7.6 – Referênciando membros da superclasse
objeto pode ter que mostrar um comportamento particular invocando uma
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
7.3.3 Modificador
chamada de Classe
de um método em final
um objeto usando o operador binário "." (ponto),
devendo especificar a mensagemque
Podemos declarar classes não permitem
completa: o objeto a herança.
que é Estas classes são
o recebedor da chamadas classes finais. Para
definir que uma classe seja final, adicionamos a palavra-chave final
mensagem, o método a ser invocado e os argumentos para o método (se houver). da classe (na posição do
na declaração
modificador).
O Por exemplo,
método invocado desejar
se vocêpode
no recebedor também classe Gerente
que a enviar não possa
informações ter classes
de volta ao filhas - ser estendida, ou
herdada por outra classe - você deverá escrever:
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 63
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
72
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

public final class Gerente {


//atribuindo valor a variável referência
// Código da classe aqui
Carro carro1 = new Carro();
}
carro1.ano = "2001";
carro1.modelo= "fusca";
Muitas classes na=API"prata";
carro1.cor Java são declaradas final para certificar que seu comportamento não seja herdado e
possivelmente modificado. Exemplos são as classes Integer, Double, Math e String.

7.4 Polimorfismo
Um mesmo método pode apresentar várias formas, de acordo com seu contexto. O polimorfismo é
importante pois permite que a semântica de uma interface seja efetivamente separada da implementação que a
representa.
O termo polimorfismo é originário do grego e significa muitas formas (poli = muitas, morphos = formas).
(ver wikipedia).
Entendeu? Não! Então tenha calma, vamos explicar!
Na prática, se temos uma hierarquia de classe como na figura abaixo:

Figura 2.4 – Layout Memória após inicialização

//criando novo alias


Carro carro2 = carro1;

Figura 7.3 – Polimorfismo e Herança

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
então podemos fazer a seguinte declarações:

Animal cao = new Cachorro();


2.3 Membros de Instância
Animal bichano = new Gato();
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento
ou seja, uma variável de referência de uma classe mais genérica (superclasse) de um Polimorfismo
em um objeto permite
constituem
objeto. Isto é importante, pois denota que um método pertence a cada
pode receber referência de objetos de classes mais especializadas (subclasses). objeto da que referências de tipos
o seu estado.
classe.assim,
Sendo Porémpodemos
não devemos
também confundir
declarar:isto com a implementação do método, que de classes mais abstratas
Dois objetos distintos têm
é compartilhada por todas as instâncias da classe. (genéricas) representem
o mesmo estado se suas
Animal bicho; o comportamento
variáveis membro dastêm os
2.3.1 bicho
Invocação= new Cachorro();
de Métodos classes concretas que
bicho.fazerRuido(); //ruído é o latir de cachorro
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
bicho = new Gato(); referenciam.
objeto bicho.fazerRuido();
pode ter que mostrar um comportamento
//ruído é o miar particular
do gato invocando uma
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamadaOde um método
método fazerRuido(), objeto usando
em um definido o operador
como uma binárioda
característica "."classe
(ponto),
devendofoiespecificar
Animal, sobrepostoapelas
mensagem completa:
versões do o objeto
método nas que Cachorro
subclasses é o recebedor
e Gato, da
mensagem,
embora o método
possuam a serassinatura
a mesma invocado e(mesmo
os argumentos para o método
nome, número (se houver).
de parâmetros e
O método
tipos invocado no
dos parâmetros), recebedor
eles apresentampode tambémcom
resultados enviar informações
formas diferentes.de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 64
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
73
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

7.4.1 Coleções Heterogêneas de Objetos


//atribuindo valorarrays,
Em nosso estudo sobre vimos quereferência
a variável ele é uma estrutura de dados que armazena diversos elementos
do mesmo tipo de
Carro dados,=desde
carro1 new tipos primitivos bem como referências para outros objetos. Agora imagine-se
Carro();
formando um petshop a partir
carro1.ano da hierarquia de classes apresentada na Figura 7.3, onde temos definidos, além das
= "2001";
classes Cachorro e Gato, as classes
carro1.modelo= "fusca";Canario e Coelho. Sem polimorfismo, essa tarefa nos levaria a definir uma
estruturacarro1.cor = tipo
de array para cada "prata";
de animal em nossa loja, exemplo:

//coleção de Cachorros
Cachorro [] caes = new Cachorro[3];
caes[0] = new Cachorro("Raja");
caes[1] = new Cachorro("Lilica");
caes[2] = new Cachorro("Lupi");

//coleçao de Coelhos
Coelho [] peludos = new Coelho[3];
peludos[0]=new Coelho("Fred");
peludos[1]=new Coelho("Fofão");

O recurso do polimorfismo nos permite criar


Figura 2.4 – Layout único array
um Memória para nossa coleção de animais, veja:
após inicialização

//criando novo alias


//cria coleção
Carro carro2 = carro1;
Animal[] bichos = new Animal[10];

//atribui referencia a coleção


bichos[0] = new Cachorro("Raja");
bichos[1] = new Gato("Garfield");
bichos[2] = new Canario("Piupiu");
bichos[3] = new Coelho("Pernalonga");
bichos[4] = new Coelho("Lilica");
bichos[5] = new Gato("Frajola");

Uma vez que toda classe em Java estende a classe Object, é possível manipular coleções genéricas para
todos os tipos de dados, inclusive de valores de tipos primitivos (neste caso devemos fazer uso das classes
empacotadoras):

Object[] primitivos = new Object[3];


primitivos[0] = new
FiguraInteger(10);
2.5 – Layout Memória duas variáveis referência para o mesmo objeto
primitivos[1] = new Double(2.2);
primitivos[2] = new Character("C");

2.3 Determinando
7.4.2 Membros dea Classe Instância
de um Objeto
Um dos problemas que deverá
Cada objeto criado ter suaao própria
enfrentaremos lidar cominstância
referênciasde genéricas
variáveispara objetos
Os valores das variáveis
de subclasses, é
(atributos) definidas pela classe. Os métodos definem o comportamento
que não sabemos mais a qual classe pertence a referência armazenada. Reveja nosso em de um um objeto
exemplo constituem
da coleção de
objeto. Isto
animais, é importante,
a qual pois adenota
classe pertence quede
referência umobjeto
método pertence em
armazenada a cada objeto da
bichos[4]? Tudo bem você o olhou
seu estado.
o código-
fonte e descobriu que é do tipo Coelho, mas nem sempre isso é possível. Então que
classe. Porém não devemos confundir isto com a implementação do método, como determinar a classe de umtêm
Dois objetos distintos
é compartilhada por todas as instâncias da classe.
objeto? o mesmo estado se suas
Existem duas maneiras de se descobrir a qual classe determinado objeto pertence:
2.3.1 Invocação de Métodos variáveis membro têm os
1. Obtendo-se o nome da classe: Utiliza-se o método getClass() que retorna a classe do objeto (onde Class
é a classe Objetos
em si) que sepossui
comunicam
o métodopelachamado
troca degetName()
mensagens, que isto significa
retorna o nome que
daumclasse. mesmos valores.
objeto pode ter que mostrar um comportamento particular invocando uma
Por exemplo:
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamadaString
de um namemétodo= bichos[4].getClass().getName();
em um objeto usando o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da
mensagem,2. Testar se uma ser
o método objeto qualquer
invocado e osfoi instanciadopara
argumentos de ouma determinada
método classe: Utiliza-se a palavra-chave
(se houver).
instanceof.
O método invocado no recebedor pode também enviar informações de volta àao
Esta palavra-chave possui dois operadores: a referência para o objeto esquerda e o nome da classe à
direita. A expressão retorna um booleano dependendo de o
objeto chamador através de um valor de retorno. O método chamado deve serobjeto ser uma instância da classe declarada ou
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 65
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
74
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

qualquer uma de suas subclasses. Por exemplo:


//atribuindo valor a variável referência
Stringcarro1
Carro ex1 = "Polimorfismo";
= new Carro();
System.out.println(ex1 instanceof String);//retorna true
carro1.ano = "2001";
String ex2;
carro1.modelo= "fusca";
System.out.println(ex2 instanceof String);//retorna false,referencia null
carro1.cor = "prata";

7.4.3 Casting de Referências de Objetos


No item 7.4.1, usamos os recursos de polimorfismo para referenciar qualquer objeto como Object, isso
nos permitiu criar coleções heterogêneas. Podemos até passar argumentos genéricos para métodos, um método
que recebe uma referência a Object como argumento, isto é, qualquer objeto criado em Java. Todas as vezes que
provocamos uma mudança no tipo da referência de subclasse para o da superclasse dizemos que houve up-casting.
Veja exemplo,

public class Database {


private Object[] dados;
private int posicao = 0;
Figura 2.4 – Layout Memória após inicialização
public
//criando Database(int
novo alias tamanho) {
dados = new
Carro carro2 = carro1; Object[tamanho];
}
public void insere(Object object) {
this.dados[this.posicao] = object;
this.posicao++;
}
public Object retornaObjeto(int indice) {
return this.dados[indice];
}
}
Listagem 7.7 – Paramêtros Genéricos

public class DatabaseGenerico {

public static void main(String[] args) {

//uma Figura 2.5 – Layoutde


instancia Memória duas variáveis referência para o mesmo objeto
calendar
java.util.Calendar data_base = java.util.Calendar.getInstance();

//configura data de contratacao do funcionario


2.3 Membros dedata_base.set(2005,
Instância 6, 10);
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela classe. Os métodos
//instancia definem o comportamento de um
de Gerente
em um objeto constituem
Gerente funcionario = new Gerente("Hide Otta",1999.99,
objeto. Isto é importante, pois denota que um método pertence a cada objeto da
data_base.getTime(),"Effe oCiente");
seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
//invoca método da heranca Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
funcionario.bonusSalario(2);
o mesmo estado se suas
//invoca método da instancia
2.3.1 Invocação de Métodos variáveis membro têm os
funcionario.bonusLucro(10000.00);
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
objeto pode ter que //Cria
mostrarumumobjeto
comportamento
Database particular invocando uma
operação apropriada Database
que foi definida
dados no objeto.
= new Em Java, isto é feito pela
Database(10);
chamada de um método em um objeto usando o operador binário "." (ponto),
devendo especificar a//Armazena um Gerente no Database
mensagem completa: o objeto que é o recebedor da
dados.insere(funcionario);//ok, up-casting para object
mensagem, o método a ser invocado e os argumentos para o método (se houver).
O método invocado no//Armazena
recebedor pode
uma também
String enviar informações de volta ao
no Database
objeto chamador através de um valor de retorno.
dados.insere(new O método chamado deve ser
String("Gerente!"));//ok,up-casting para object
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 66
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
75
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

// Como resgatar o Objeto ?


Gerente o_funcionario = dados.retornaObjeto(0); //(1)
//atribuindo valorcompilacao
//erro a variável referência
Carro carro1
//imprimeCarro();
= new estado desta instancia de Gerente
carro1.ano System.out.println("Nome
= "2001"; funcionario: " + o_funcionario.nome);
carro1.modelo= "fusca";
System.out.println("Cargo: " + o_funcionario.cargo);
carro1.cor System.out.println("Secretariado
= "prata"; por : "+ o_funcionario.secretaria);
System.out.println("Salario base: " + String.format(
"%,.2f", o_funcionario.salario));
System.out.println("Salario + Comissao: " + String.format("%,.2f",
(o_funcionario.salario + o_funcionario.bonus)));
}
}
Listagem 7.8 – Todo objeto é Object

Se tentarmos recuperar a referência armazenada como em (1 – linha 24),

Gerente o_funcionario = dados.retornaObjeto(0); //(1)qual o tipo da classe ?


Figura 2.4 – Layout Memória após inicialização
teremos um erro de compilação, informando que os tipos são incompatíveis.
//criando novo alias
Nós temos certeza de que esse Object é uma referência a um objeto da classe Gerente, já que fomos nós
Carro carro2 = carro1;
que o adicionamos ao objeto Database, a classe que guarda nossa coleção heterogênea de objetos. Mas o
compilador Java não sabe se o que vai ser retornado pelo método será realmente um objeto da classe Gerente.
Então retornaremos a referência Object polimórfica a uma variável do tipo Object,

Object o_funcionario = dados.retornaObjeto(0); //ok

Mas agora não é possível utilizarmos a referência para fazermos acesso aos membros do o objeto Gerente:

System.out.println("Nome funcionario: "+ o_funcionario.nome); //erro

Mas por que? A referência teve uma amnésia?


A resposta para o dilema é que, o compilador decidirá o que você pode referenciar usando como base o
tipo da referência e não o tipo do objeto para o qual ela aponta. Deste modo,é legal fazermos:

System.out.println("funcionario:
Figura 2.5 – Layout Memória"duas
+ variáveis
o_funcionario.toString());
referência para o mesmo objeto //ok

Pois o método toString() é um método definido na classe Object.


Seu objeto Gerente
2.3 Membros não mudou, ele continua o mesmo, o que mudou foi o tipo da referência. Então para
de Instância
voltarmosCada
a ter acesso
objeto aos membros
criado deverádo objeto
ter suadevemos
própriaforçar a conversão
instância do tipo da referência para o tipo do
de variáveis Os valores das variáveis
objeto
(atributos) definidas pela classe. Os métodos definem o comportamento de como
real. Se tiver certeza de que o tipo do objeto é um Gerente, então proceda um abaixo: em um objeto constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
Gerente o_funcionario = (Gerente) dados.retornaObjeto(0); //ok
classe. Porém não devemos
estadoconfundir isto com a implementação
de Gerente do método, que
//imprime desta instancia Dois objetos distintos têm
é compartilhada por todas as instâncias da
System.out.println("Nome classe.
funcionario: " + o_funcionario.nome);//ok
o mesmo estado se suas
Se você nãodesabe
2.3.1 Invocação ao certo qual o tipo do objeto real, teste-o antes com instanceof,variáveis
Métodos membro
senão uma exceçãotêm
do os
tipo ClassCastException seria lançada
Objetos se comunicam pela(uma o quê?
troca Calma chegaremos
de mensagens, lá). Neste
isto significa que exemplo
um mesmos
o objeto valores.
armazenado no
índicie
objeto1 pode
do array
teré do
quetipo String. um comportamento particular invocando uma
mostrar
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamadaGerente o_funcionario;
de um método em um objeto usando o operador binário "." (ponto),
if( dados.retornaObjeto(1) instanceof Gerente){
devendo especificar a mensagem
o_funcionario completa: odados.retornaObjeto(0);
= (Gerente) objeto que é o recebedor //ok da
mensagem, o método
//imprimea ser estado
invocadodesta
e os argumentos
instancia para
deo Gerente
método (se houver).
O método invocado no recebedor pode também
System.out.println("Nome enviar informações
funcionario: de volta ao
" + o_funcionario.nome);
} //ok através de um valor de retorno. O método chamado deve ser
objeto chamador
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 67
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
76
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

7.4.4 Operações Polimórficas


//atribuindo valor poraSobreposição de Métodos
variável referência
Atentemos
Carro novamente
carro1 = new para a hierarquia de classes da Figura 7.3, a classe Animal define o comportamento
Carro();
fazerRuido(), é óbvio que animais
carro1.ano diferentes como Cachorro e Gato produzem sons diferentes, o que é comum é o
= "2001";
fato de que ambos produzem"fusca";
carro1.modelo= algum tipo de som (ou ruído). É desejável que características específicas possam ser
carro1.cor
implementadas = "prata";
para cada subclasse.
Esta característica de sobreposição nos permite implementar um mesmo comportamento e especializá-lo
na subclasse. Veja exemplo:

public class Carnivoro { Em Java os métodos da


String ruido; superclasse podem ser
redefinidos nas
public Carnivoro(String ruido){ subclasses, dizemos que o
this.ruido = ruido;
}
método está sendo
sobreposto (override) nas
void fazerRuido(){ subclasses.
System.out.println("nao faço
Figura 2.4 ruidos
– Layout Memóriaainda");
após inicialização
}
//criando novo alias
Carro
void carro2 = carro1;
comer(){
System.out.println("preferencia por proteina animal");
}

void andar(){
System.out.println("ando com quatro patas");
}
}
Listagem 7.9 – Superclasse Carnivoro

Definindo uma subclasse Cachorro, que redefine método fazerRuido() (linha 6):

public class Cachorro extends Carnivoro {

public Cachorro() {
super("Auuuu,auuu,auuu");
} Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

void fazerRuido(){
System.out.println("Latir="+ ruido);
2.3 Membros
} de Instância
}Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela classe.Listagem
Os métodos definem
7.10 – Subclasse o especialização
Cachorro, comportamento de um
de Carnivoro em um objeto constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
Dois objetos distintos têm
Definindopor
é compartilhada uma subclasse
todas Gato, que
as instâncias classe. método fazerRuido() (linha 6):
da redefine
o mesmo estado se suas
public class Gato extends Carnivoro {
2.3.1 Invocação de Métodos variáveis membro têm os
Objetos se comunicam
public Gato() { pela troca de mensagens, isto significa que um mesmos valores.
objeto pode ter que super("Miauuuu,miauuu,miauuu");
mostrar um comportamento particular invocando uma
}
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamada de void
um método em um objeto usando o operador binário "." (ponto),
fazerRuido(){
devendo especificar aSystem.out.println("Miar
mensagem completa: o objeto ="+que é o recebedor da
ruido);
mensagem, o}método a ser invocado e os argumentos para o método (se houver).
O método} invocado no recebedor pode também enviar informações de volta ao
objeto chamador através de um valor
Listagemde
7.11retorno.
– SubclasseO método
Gato, chamado
especialização deve ser
de Carnivoro
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 68
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
77
www.3way.com.br
Linguagem de de
Linguagem Programação JavaJava
Programação

Para testarmos essa


//atribuindo característica
valor a variávelpolimórfica de Java vamos escrever a seguinte classe:
referência
Carro carro1 = new Carro();
public class =
carro1.ano TestaCarnivoro
"2001"; {
carro1.modelo= "fusca";
public static
carro1.cor void main(String[] args) {
= "prata";

Carnivoro bicho = new Carnivoro("sem ruido");


bicho.fazerRuido(); // (1) qualquer carnivoro
bicho = new Cachorro();
//tem que latir
bicho.fazerRuido();// (2)
bicho = new Gato();
//tem que miar
bicho.fazerRuido();// (3)
}
}
Listagem 7.12 – Testando polimórfismo

Figura 2.4 – Layout Memória após inicialização

//criando novo alias


O método fazerRuido() agora é especifico para cada subclasse (Cachorro e Gato) da superclasse
Carro carro2 = carro1;
(Carnivoro), mas que método será chamado, o da superclasse ou da subclasse?

bicho.fazerRuido();

Quando o método é chamado a referência de objeto bicho estará chamando a versão mais específica do
método para o tipo de objeto sendo referenciado por bicho.
1. Na Listagem 7.12, linha 4, será invocado o método fazerRuido() de Carnivoro (listagem 7.9 linha 6);
2. Na listagem 7.12, linha 7, será invocado o método fazerRuido() para Cachorro (listagem 7.10 linha 6);
3. Na listagem 7.12 linha 10, será invocado o método fazerRuido() para Gato (listagem 7.11 linha 6);

Podemos dizer que a JVM tenta localizar a assinatura do método sendo invocado pelas classes mais
especializadas, as que estão nos níveis mais baixo da hierarquia de classes. Se não encontrar uma versão do método
nessa classe, começará a retroceder, subir, na hierarquia até encontrar algo que atenda.
A JVM determina o método a ser invocado em tempo de execução usando um recurso denominado de
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
ligação tardia, isso significa que durante o processo de compilação não é feita qualquer ligação entre a chamada
por uma referência e método a ser invocado, exceto se o método for marcado pelos modificador static ou final.

2.3 Membros
7.4.4.1 de Instância
Invocando Métodos Sobrepostos
ÉCada
muitoobjeto criado
útil, pois deverá
o objetivo real ter sua própria
da sobrescrita não éinstância
substituirde variáveis
a versão de Os valoresinvocar
Podemos das variáveis
(atributos) definidas pela
método da superclasse, masclasse. Os métodos definem o comportamento de um
estendê-lo. em um objetodaconstituem
métodos
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
superclasse,
classe. Porém
public nãoclass
devemos confundir isto
Funcionario { com a implementação do método, que
Dois objetos distintos
sobrescritos da têm
é compartilhada por todas as instâncias da classe.
String nome; o mesmo estado
subclasse, usando a se suas
double salario; variáveis membro
2.3.1 Invocação
Datedeaniversario;
Métodos referência super. têm os
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
objeto pode String
ter que valoresCampos()
mostrar um comportamento { particular invocando uma
return "Nome: " + nome +
operação apropriada que foi"\nSalario:
definida no objeto. Em
" + salario;
Java, isto é feito pela
chamada de um} método em um objeto usando o operador binário "." (ponto),
devendo}especificar a mensagem completa: o objeto que é o recebedor da
mensagem, o método a serListagem
invocado
7.14 – e os argumentos
Superclasse Funcionário para o método (se houver).
O método invocado no recebedor pode também enviar informações de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 69
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
78
www.3way.com.br
Linguagem de de
Linguagem Programação JavaJava
Programação

Na Listagem 7.15, linha 7, invocamos o método valoresCampos() da superclasse Funcionarios.


//atribuindo valor a variável referência
publiccarro1
Carro Secretaria
class = extends Funcionario {
new Carro();
carro1.ano = "2001";
String departamento;
carro1.modelo= "fusca";
String chefe;
carro1.cor = "prata";
String valoresCampos() {
// chama método da superclasse
return super.valoresCampos() +
"\nDepartamento: " + departamento + "\nChefe: "+ chefe;
}
}
Listagem 7.15 – Subclasse Secretaria

Uma invocação de método na forma super.algumMétodo() tem o mesmo efeito que a invocação feita por
uma referência do tipo da superclasse. O método não precisa estar definido diretamente na superclasse, ele pode
ter sido herdado de alguma classe mais alta na hierarquia.
Figura 2.4 – Layout Memória após inicialização

7.4.4.2 //criando
Regras sobrenovo alias de Métodos
Sobreposição
Carro carro2 = carro1;
As seguintes regras para sobreposição de métodos devem ser seguidas:
1 – O tipo de retorno do método na subclasse deve ser o mesmo ou um subtipo do tipo de retorno do
método sobreposto na superclasse.
2 – O método que está sobrepondo não pode ser menos acessível que o seu método sobreposto.
3 – O método que está sobrepondo não pode lançar exceções de tipos diferentes das exceções do método
sobreposto. Veremos detalhes no estudo de exceções.

Estas regras resultam da natureza do polimorfismo combinado com as


características de tipagem segura da linguagem Java. Considere este exemplo:

public class Pai {


Lembrando que o
public void m() { nome do método e
} ordem dos argumentos
} do método na
Listagem
Figura 2.57.16 – Superclasse
– Layout MemóriaPai
duas variáveis referência para o mesmo objeto subclasse devem ser
idênticos aos do
public class Filho extends Pai { método da superclasse,
2.3 Membros de Instância
private void m() {//problemas aqui, é private
para que a versão da
}
}
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
superclasse seja
(atributos) definidas pela classe. Os métodos definem o comportamento de um em umsobreposta.
objeto constituem
Listagem 7.17 – Subclasse Filho
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
public class UsaAmbos { Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
public void mo() { o mesmo estado se suas
Pai p1 = new Pai(); variáveis membro têm os
2.3.1 Invocação de Métodos
Pai p2 = new Filho();
Objetos se comunicam
p1.m(); pela troca de mensagens, isto significa que um mesmos valores.
objeto pode ter que p2.m();
mostrar um comportamento particular invocando uma
}
operação
}
apropriada que foi definida no objeto. Em Java, isto é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
Listagem 7.18 – Testando sobreposição de métodos
devendo especificar a mensagem completa: o objeto que é o recebedor da
mensagem, o método a ser invocado e os argumentos para o método (se houver).
O métodoUminvocado
membro no
marcado com opode
recebedor modificar
tambémprivate só estão
enviar acessível de
informações dentro
voltadaaoprópria classe, ou seja somente
métodos
objeto e construtores
chamador definidos
através de umna classe
valor depoderão
retorno.usar este membro.
O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 70
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
79
www.3way.com.br
Linguagem
LinguagemdedeProgramação
ProgramaçãoJava
Java

Uma chamada a p2.m() (listagem 7.18, linha 6) resulta na execução da


versão//atribuindo
do método m() definido
valor anavariável (Listagem 7.17, linha 2). Porém,
classe Filhoreferência
Também é possível criar
pela regra
Carro2 (dois)
carro1o método
= newm() da classe Filho tem menor visibilidade que o
Carro(); métodos que não
método m() na classe Pai,= o"2001";
carro1.ano que viola a regra e portanto o código não irá compilar.
carro1.modelo= "fusca"; possam ser modificados
7.4.5 carro1.cor = "prata";
Modificador de Método final pelos filhos, impedindo o
Métodos marcados como final são o que chamamos de métodos finais. override. Estes métodos
Para declarar um método final, adicionamos a palavra-chave final na declaração são o que chamamos de
do método (na posição do modificador). métodos finais.
Assim como uma classe final não pode ser herdada, gerando um erro de
compilação caso o façamos. O mesmo acontecerá ao se tentar fazer um override
de um método final.

7.5 Encapsulamento
Quando estamos criando as nossas classes e definindo as suas
propriedades e métodos, queremos implementar algum tipo de restrição para
acessar esses dados. Por exemplo, ao Figura
necessitar que um certo atributo seja
2.4 – Layout Memória após inicialização
modificado apenas pelos métodos dentro da classe, é possível esconder isso dos outros objetos que estejam
usando//criando
a sua classe. novo alias
Para implementar isso, com Java, temos os modificadores de acesso (veja seção 7.5.2).
Carro carro2 = carro1;
Existem quatro diferentes tipos de modificadores de acesso: public, private, protected e "default" ou
pacote. Os três primeiros modificadores são escritos explicitamente no código para indicar o acesso, para o tipo
default, não se utiliza nenhuma palavra-chave.

Existem quatro 7.5.1 Pacotes


diferentes tipos de Esta é uma característica poderosa que oferece um mecanismo para
modificadores de gerenciamento de um grande grupo de classes e interfaces e evita possíveis conflitos
de nome, sendo também um modo de encapsulamento dessas estruturas.
acesso: public, private,
protected e default. 7.5.1.1 Criando pacotes
Para criar pacotes, declaramos como segue:

package <nomeDoPacote>;
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

Suponha que desejamos criar um pacote onde colocaremos a nossa classe


Funcionario juntamente, com outras classes relacionadas. Chamaremos o nosso pacote
2.3 Membros de Instância de empresa.rh.
Cada objeto criado temos
A primeira coisa que deverá queter
fazer é criar
sua as pastas
própria (ou diretórios)
instância chamadas Os valores das variáveis
de variáveis
empresa/rh,
(atributos) estes diretórios
definidas pela classe.seOsencontram de algumo outro
métodos definem diretório onde
comportamento de um esteja em um Pacotes são
objeto constituem
guardando
objeto. Isto éseus arquivospois
importante, de denota
classes que
(arquivos com extensão
um método pertence.class),
a cadapor exemplo
objeto da [ utilizados para
o seu estado.
/opt/java/lib
classe. Porém não ]. devemos confundir isto com a implementação do método, que agrupar classes e
Em seguida,
é compartilhada copiar
por todas para a pasta
as instâncias rh todas as classes que pertençam a este Dois objetos distintos têm
da classe. interfaces
pacote. Adicione a seguinte instrução no arquivo da classe, esta linha deve ser a o mesmo estado se suas
relacionadas em
primeira
2.3.1 linha dentro
Invocação de seu arquivo fonte (rever seção 2.8 ). Agora vamos modificar a variáveis membro têm os
de Métodos
classe Funcionario uma únicavalores.
mesmos unidade.
Objetos se para que a mesma
comunicam pela fique
troca dentro do pacote:isto significa que um
de mensagens,
objeto pode ter que mostrar um comportamento particular invocando uma
package empresa.rh;
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamada de um método
public class em um objeto usando
Funcionario { o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da
double
mensagem, o método salario;
a ser invocado e os argumentos para o método (se houver).
java.util.Date dataContrato; //(1)
O método invocado no recebedor
String nome;
pode também enviar informações de volta ao
objeto chamador String
através de um valor de retorno. O método chamado deve ser
cargo="indefinido";
um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 71
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
80
www.3way.com.br
Linguagem de de
Linguagem Programação JavaJava
Programação

public Funcionario(){}
//atribuindo valor a variável referência
Carro public
carro1 Funcionario(String
= new Carro(); nome,double salario,
carro1.ano = "2001"; java.util.Date dataContrato) { //(2)
carro1.modelo= "fusca"; = salario;
this.salario
carro1.cor this.dataContrato
= "prata"; = dataContrato;
this.nome = nome;
}

void bonusSalario (double percentual) {


salario *= 1 + percentual / 100;
}
}
Listagem 7.19 – Definindo pacotes

Pacotes podem ser aninhados. Neste caso, o interpretador espera que a estrutura de diretórios
contendo as classes combine com a hierarquia dos pacotes. Veja a figura abaixo:
Figura 2.4 – Layout Memória após inicialização

//criando novo alias


Carro carro2 = carro1;

Figura 7.4 – Diretórios Pacotes

7.5.1.2 Importando Pacotes


Reveja a classe Funcionario que definimos anteriormente (Listagem 7.19), observe abaixo (Listagem 7.20),
em (1, linha 6) e (2, linha 13). Quando precisamos fazer referência a uma classe que pertence a outro pacote,
devemos usar seu nome completo Figura(nome
2.5 – Layout Memória duas variáveis
completamente referênciaNo
qualificado). paracaso
o mesmo objeto utilizando a classe Date do
estamos
pacote java.util.
Ter que usar o nome completamente qualificado de uma classe não é
2.3 agradável,
muito Membros dede
além Instância
tornar as linhas de nosso código-fonte bem grandes, Quando precisamos fazer
tornandoCada
sua leitura
objeto mais difícil, deverá
criado o que não teré nada bom parainstância
sua própria manutenção de de uma
variáveis referência
Os valoresa uma classe
das variáveis
programa. definidas pela classe. Os métodos definem o comportamento de um
(atributos) queum
em pertence
objetoaconstituem
outro
Paraé importante,
utilizar classes
poisexternas
denota ao quepacote, de uma forma amaiscada simples,
objeto da pacote, devemos
objeto. Isto um método pertence o seu estado. seu
usar
podemos
classe. importar
Porém não os pacotesconfundir
devemos dessas classes. Por padrão,
isto com todos as suas
a implementação do classes
método, Java
que nome completo ou têm
Dois objetos distintos
éimportam o pacote
compartilhada por java.lang implicitamente.
todas as instâncias É por isso que é possível utilizar
da classe. podemos
classes como String e Integer dentro da sua classe, sem usar seu nome completo: o mesmo estado seossuas
importar
pacotes dessas classes.
java.lang.String,
2.3.1 Invocação java.lang.Integer.
de Métodos variáveis membro têm os
Para importar
Objetos pacotes você
se comunicam pelausatroca
a palavra-chave
de mensagens, import istoseguido do que
significa nomeum mesmos valores.
completamente qualificado da classe, veja:
objeto pode ter que mostrar um comportamento particular invocando uma
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
import empresa.rh.Gerente;
chamada de um método em um objeto usando o operador binário "." (ponto),
devendoouespecificar
você pode ausar
mensagem
somente ocompleta: o objeto
nome do pacote que é curinga
e o caracter o recebedor
"*", da
mensagem, o método a ser invocado e os argumentos para o método (se houver).
O método invocado
import no recebedor pode também enviar informações de volta ao
empresa.rh.*;
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 72
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
81
www.3way.com.br
Linguagem de de
Linguagem Programação JavaJava
Programação

A primeira forma importa especificamente a classe Gerente do pacote empresa.rh, enquanto que a
seguinte,//atribuindo
com o curinga, importa
valor todas as classes do
a variável pacote empresa.rh.
referência
Lembre-se,
Carro import
carro1 = deve
new ser colocado após a cláusula package e antes das definições de classe ou interface
Carro();
no arquivo de código fonte=(ver
carro1.ano seção 2.8). Refazendo o código,
"2001";
carro1.modelo= "fusca";
carro1.cor = "prata";
package empresa.rh;

import java.util.Date;

public class Funcionario {

double salario;
Date dataContrato; //(1)
String nome;
String cargo="indefinido";

public Funcionario(){}

public Funcionario(String nome,double salario,Date dataContrato) { //(2)


this.salario =Figura 2.4 – Layout Memória após inicialização
salario;
this.dataContrato
//criando novo alias = dataContrato;
this.nome
Carro carro2 = carro1;= nome;
}

void bonusSalario (double percentual) {


salario *= 1 + percentual / 100;
}
}
Listagem 7.20 – Importando pacotes

7.5.1.3 Localização de Classes e CLASSPATH


Antes que você possa executar sua aplicação a JVM precisa fazer o carregamento das classes (class loader).
O class loader é um mecanismo usado para carregar classes a partir de arquivos nos diretórios ou arquivos
compactados (zip ou jar), especificados na propriedade de sistema java.class.path. Esta propriedade é configurada
quando a variável de ambiente CLASSPATH está definida. As classes são localizadas seqüencialmente através dos
diretórios e arquivos jar (ou zip) que estejam especificados na propriedade java.class.path. A configuração padrão
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
para propriedade java.class.path é o subdiretório jre/lib dentro do diretório onde
foi instalado o JDK( ou JRE).
Você pode usar java -verbose SuaClasse, para ver a seqüência da carga É possível definir a
2.3classes,
das Membros de sua
ao executar Instância
aplicação. variável CLASSPATH com
Cada objeto
Quando surge ocriado deverá ter sua própria
erro NoClassDefFoundError, instância
significa que ode JVMvariáveis
não Os valores
mais das de
de um local variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento
conseguiu localizar sua classe ou alguma classe da qual ela depende. Você deve de um em umbasta
pesquisa; objetosepará-
constituem
objeto.
informarIsto é importante,
à JVM poispelos
onde procurar denota que um
pacotes, método
definindo pertence
a variável a cada objeto da los por ponto-e-vírgula
CLASSPATH. o seu estado.
classe. Porém
Tomando não nosso
devemos confundir
pacote isto com
de exemplo, a implementação
empresa.rh, e supondo do que
método,
nossoque (noDois objetosou
Windows) distintos
dois- têm
épacote
compartilhada
está sob opor todas as/opt/java/lib
o diretório instâncias da(ou classe.
c:\opt\java\lib) escrevemos:
o mesmo estado se suas
pontos (nos sistemas
baseados
variáveisem Unix). têm os
membro
2.3.1 Invocação de Métodos
export CLASSPATH=/opt/java/lib (para sistemas baseados em UNIX);
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
objeto pode ter que mostrar um (para
set CLASSPATH=c:\opt\java\lib Windows); particular invocando uma
comportamento
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamadaComo
de umfoimétodo
dito, em
seusumpacotes podem oestar
objeto usando dentro
operador de "."
binário arquivos
(ponto),
compactados jar ou zip, neste caso devemos incluir o nome
devendo especificar a mensagem completa: o objeto que é o recebedor do arquivo com da
extensão:
mensagem, o método a ser invocado e os argumentos para o método (se houver).
O método invocado no recebedor pode também enviar informações de volta ao
export CLASSPATH=/opt/java/lib/aplicacao.jar
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 73
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
83
www.3way.com.br
Linguagem de de
Linguagem Programação JavaJava
Programação

Você também pode


//atribuindo colocar
valor seus pacotes
a variável ou arquivos jar no diretório JAVA_HOME/jre/lib/ext, este
referência
diretórioCarro
é verificado antes=danew
carro1 CLASSPATH na seqüência de carga das classes.
Carro();
carro1.ano = "2001";
7.5.1.4 carro1.modelo=
Importação Estática"fusca";
carro1.cor = "prata";
Como vimos em capítulos anteriores membros estáticos são referenciados pelo nome da classe, assim antes de
invocar um método ou utilizar um atributo devemos proceder como no exemplo (Listagem 7.21, linha 4 e 5):

class Calcula1 {

public static void main(String[] args) {

double x = 10.0, y = 20.5;


double raizquadrada = Math.sqrt(x);
double hipotenusa = Math.hypot(x, y);
double area = Math.PI * y * y;
}
}
Figura 2.4 –7.21
Listagem Layout Memória
– Sem apósstatic
importação inicialização

//criando novo alias


Carro
No Javacarro2 = carro1;
5.0 foi introduzido o static import, que importa métodos e atributos estáticos de qualquer classe
(ou atributos da interface), além dos tipos enumerados, desde que não estejam em pacotes não nomeados, ou
seja, default package.
Deste modo, você pode importar os métodos utilizados no exemplo anterior (Listagem 7.21, linha 4 e 5) e
usá-los diretamente, sem utilizar o nome da classe ou interface para referenciá-los (Listagem 7.22, linha 5 e 6):
Importando todos os membros estáticos (Listagem 7.22, linha 1):

import static java.lang.Math.*;//curinga, qualquer membro estático

class Calcula2 {

public static void main(String[] args) { Apesar de poder importar


todos os métodos e
double x = 10.0, y = 20.5; atributos estáticos da
double raizquadrada = sqrt(x); //membro estático
double hipotenusa Figura 2.5=– Layout
hypot(x,Memória y);
duas variáveis referência
//membro para o mesmo objeto
estático uma classe, a classe em si
double area = PI * y * y; não foi importada, se
} você tentar instanciar um
}
2.3 Membros de Instância objeto sem o nome
Listagem 7.22 – Usando static import
Cada objeto criado deverá ter sua própria instância de variáveis Oscompletamente
valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um qualificado da classe,
em um objeto com
constituem
Você pode
objeto. Istoimportar um membro
é importante, estáticoque
pois denota específico
um método (Listagem 7.23, alinhas
pertence cada1objeto
e 2): da operador new, o
o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que compilador não
Dois objetos distintos têm
por todasjava.lang.Math.sqrt;
import static
é compartilhada as instâncias da classe. // método estatico conseguiria localizá-la
import static java.lang.Math.PI; // campo estático o mesmo estado se suas
precisando de um import
2.3.1 class
Invocação de Métodos{ variáveis membro têm os
Calculate3 normal à parte.
Objetos
publicsestatic
comunicam voidpela troca de mensagens,
main(String[] args) isto { significa que um mesmos valores.
double x = 10.0, y = 20.5;
objeto pode ter que mostrar um comportamento particular invocando uma
double raizquadrada = sqrt(x);
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
//requer nome completo
chamada de double
um método em um objeto
hipotenusa usando o operador
= Math.hypot(x, y); binário "." (ponto),
devendo especificar
double aarea
mensagem
= PI * completa:
y * y; o objeto que é o recebedor da
mensagem, } o método a ser invocado e os argumentos para o método (se houver).
O método} invocado no recebedor pode também enviar informações de volta ao
objeto chamador através de um
Listagem 7.23 –valor
Usandode retorno.
static O método chamado deve ser
import específico
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 74
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
84
www.3way.com.br
Linguagem de de
Linguagem Programação JavaJava
Programação

7.5.2 Modificadores de Acesso


//atribuindo valor a variável referência
Carro carro1 = new Carro();
7.5.2.1 carro1.ano
Público - public = "2001";
Define que os elementos
carro1.modelo= da classe são acessíveis tanto internamente quanto externamente à classe.
"fusca";
Qualquer objeto que interage
carro1.cor com a classe pode ter acesso aos elementos públicos a partir de qualquer pacote.
= "prata";
Por exemplo:

// Arquivo: SuperclassA.java (1)

package packageA;

public class SuperclassA {


public int superclassVarA; // (2)
public void superclassMethodA() {/*...*/} // (3)
}

class SubclassA extends SuperclassA {


void subclassMethodA() { superclassVarA = 10; } // (4) OK.
Figura 2.4 – Layout Memória após inicialização
}
//criando novo alias
AnyClassA
class carro2
Carro {
= carro1;

SuperclassA obj = new SuperclassA();


void anyClassMethodA() {
obj.superclassMethodA(); // (5) OK.
}

}
Listagem 7.24 – Definindo classes no pacote A

// Arquivo: SubclassB.java (6)

package packageB;

import packageA.*;
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
public class SubclassB extends SuperclassA {
void subclassMethodB() { superclassMethodA(); } // (7) OK.
}
2.3 Membros de Instância
Cada AnyClassB
class objeto criado
{ deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
objeto. Isto éSuperclassA objdenota
importante, pois = new SuperclassA();
que um método pertence a cada objeto da o seu estado.
classe. Porémvoid
não devemos confundir isto {com a implementação do método, que
anyClassMethodB() Dois objetos distintos têm
é compartilhada por todas as instâncias da =classe.
obj.superclassVarA 20; // (8) OK.
}
o mesmo estado se suas
2.3.1 Invocação de Métodos variáveis membro têm os
}
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
Listagem 7.25 – Definindo
objeto pode ter que mostrar um comportamento particular invocando umaclasses no pacote B

operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamadaOde um método
exemplo contémem doisum objetofonte,
arquivos usando o operador
mostrados binário 7.24
na Listagem "." (ponto),
e na Listagem 7.45. A hierarquia dos
devendo especificar
pacotes definidas pelosaarquivos
mensagem completa:
está descrita o objeto
na Figura 7.5, que é o recebedor
mostrando o packageAdae o packageB, dois pacotes que
contêm suaso respectivas
mensagem, método a serclasses. As classes
invocado do packageBpara
e os argumentos fazem uso das(se
o método classes definidas no pacote packageA. A
houver).
classe
O SuperclassA
método invocado packageA
dono recebedortempode
duas subclasses:
também enviar SubclassA no packageA
informações e SubclassB
de volta ao no packageB.
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 75
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
85
www.3way.com.br
Linguagem de de
Linguagem Programação JavaJava
Programação

//atribuindo valor a variável referência


Carro carro1 = new Carro();
carro1.ano = "2001";
carro1.modelo= "fusca";
carro1.cor = "prata";

Figura 7.5 – Visibilidade Pública


Figura 2.4 – Layout Memória após inicialização

//criando novo alias


Demonstramos
Carro carro2 acessibilidade
= carro1; pública neste exemplo, onde observa-se o
uso do modificador de acesso public para o campo superclassVarA e no método
Membro com
superclassMethodA() na Listagem 7.24, linha 6 e 7 respectivamente, definidos na
classe SuperclassA. Estes membros podem ser usados por todos os clientes do
acessibilidade protegida
exemplo, que são: são acessíveis por todas
 Cliente 1: SubclassA (Listagem 7.24, linha 11), a partir da subclasse as classes contidas no
definida no mesmo pacote, ela tem acesso ao campo herdado. mesmo pacote.
 Cliente 2: AnyClassA (Listagem 7.24, linha 17), uma classe no mesmo
pacote, que tem-um objeto do tipo SuperclassA, pode invocar o
método de instância superclassMethodA.
 Cliente 3: SubclassB (Listagem 7.25, linha 6), uma subclasse em outro
pacote, que chama o método herdado.
 Cliente 4: AnyClassB (Listagem 7.25, linha 11), uma classe definida em
outro pacote, que tem-um objeto do tipo SuperclassA que acessa a
variável membro daFigura
classe.
2.5 – Layout Memória duas variáveis referência para o mesmo objeto

7.5.2.2 Protegido – protected


Membro com acessibilidade protegida são acessíveis por todas as classes contidas no mesmo pacote e por
2.3 Membros de Instância
todas as subclasses desta classe em qualquer pacote em que a classe seja visível. Em outras palavras, classes que
Cada objeto criado deverá ter sua própria instância de variáveis Osdevalores
não são subclasses em outros pacotes não podem fazer uso de membros protegidos a partir outros das variáveis
pacotes. Ele
(atributos) definidas pela classe. Os métodos definem o comportamento de um emosum objeto daconstituem
é menos restritivo que o modificador padrão (default ou pacote). Por exemplo, redefinindo membros classe
objeto. Isto énaimportante,
SuperclassA pois
Listagem 7.24 denota
(linhas 6 eque um método
7), para pertence a cada objeto da
protected: o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
Dois objetos distintos têm
é compartilhada por todas
public class as instâncias da
SuperclassA { classe.
o mesmo estado se suas
protected
2.3.1 Invocação int superclassVarA;
de Métodos // (2) variáveis membro têm os
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
protected void superclassMethodA() {/*...*/} // (3)
objeto }pode ter que mostrar um comportamento particular invocando uma
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamadaAssim,
de umo método em um objeto usando
método anyClassMethodB(), o operador
na classe dentro"."
Client4binário do (ponto),
pacote packageB não pode acessar o
devendo especificar atambém
campo superclassVar, mensagem completa:
não pode acessaroo objeto
métodoque é o recebedor da
superclassMethodA() definidos na classe SuperclassA
mensagem, o métodocom
dentro de packageA, a ser invocado
mostrado naeFigura
os argumentos
7.6. para o método (se houver).
O método invocado no recebedor pode também enviar informações de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 76
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
86
www.3way.com.br
Linguagem de de
Linguagem Programação JavaJava
Programação

//atribuindo valor a variável referência


Carro carro1 = new Carro();
carro1.ano = "2001";
carro1.modelo= "fusca";
carro1.cor = "prata";

Figura 7.6 – Modificador Protected

7.5.2.3 Padrão ou Pacote Figura 2.4 – Layout Memória após inicialização


Define que os elementos da classe são acessíveis somente aos métodos das classes definidas dentro do
//criando novo alias
mesmo pacote. Não há palavra chave para o modificador padrão (default). É aplicado na ausência de um
Carro carro2 = carro1;
modificador de acesso. Por exemplo:

public class SuperclassA {

int superclassVarA; // (2)

void superclassMethodA() {/*...*/} // (3)


}

No exemplo, os campos superclassVarA e o método superclassMethodA estão definidos como default,


então eles estão acessíveis para classes dentro do pacote packageA, mas não acessíveis para classes em outro
pacote (mesmo estando aninhado).

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância


Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
o mesmo estado se suas
2.3.1 Invocação de Métodos variáveis membro têm os
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
objeto pode ter que mostrar um comportamento particular invocando uma
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamada de um método em um objeto usando o operador
Figure 7.7. binário "." (ponto),
Visibilidade Default
devendo especificar a mensagem completa: o objeto que é o recebedor da
mensagem, o método
As classes a serdentro
clientes invocado e os argumentos
do pacote para o método
packageB (Client3 (senão
e Client4) houver).
podem ter acesso aos membros de
O método invocado no recebedor pode também enviar
SuperclassA. Observe as relações demonstradas na Figura 7.7. informações de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 77
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
87
www.3way.com.br
Linguagem de de
Linguagem Programação JavaJava
Programação

7.5.2.4 Privado - private


Define que os elementos
//atribuindo valor da
a classe são acessíveis
variável somente na classe que o definiu. Por exemplo:
referência
Carro carro1 = new Carro();
SuperclassA
public class =
carro1.ano "2001"; {
carro1.modelo= "fusca";
private int
carro1.cor superclassVarA;
= "prata"; // (2)

private void superclassMethodA() {/*...*/} // (3)


}

Veja Figura 7.8, nenhum cliente pode acessar estes membros.

Figura 2.4 – Layout Memória após inicialização

//criando novo alias


Carro carro2 = carro1;

Figura 7.8 – Modificador Private

Um padrão adotado como estratégia de desenvolvimento é tornar todas as variáveis membros privadas e
construir métodos de acesso público para elas (GET e SET). Métodos auxiliares que não ofereçam recursos para
outras classes também devem ser declarados como privados.
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
7.6 Métodos de Configuração e Captura
Até agora vínhamos cometendo um grande erro na implementação de nossas classes. Nosso erro decorre
do
2.3fato de deixarmosde
Membros osInstância
dados de nossas classes exposto ao acesso externo. Isso significa que podemos alterar o
valor das Cada
variáveis
objeto criado através
de instância deverádoter
operador ponto, como
sua própria abaixo:de variáveis
instância Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
funcionario.nome = "Ana";
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seugetter
estado.
classe. Porém não devemos confundir isto com a implementação do método, que Métodos são
épermitir
Para que se possa implementar o princípio do encapsulamento, isto é, não
compartilhada por todas as instâncias usados para ler valorestêm
Dois objetos distintos
que qualquer objeto acesse da
os classe.
dados de qualquer modo. Para isto o mesmo
de atributosestado se suas
de objeto,
declaramos os campos ou atributos, da nossa classe com modificador de acesso variáveis
2.3.1 Invocação ou seja,membro
de classe.têm os
private. Entretanto,deháMétodos
momentos em que queremos que outros objetos acessem mesmos valores.
Objetos
alguns destes se comunicam
atributos, tanto parapela trocaquanto
escrita de mensagens, isto
para leitura. significa
Para que um
que possamos
objeto pode ter que mostrar um comportamento particular invocando
fazer isso, criamos métodos de configuração chamados de getter e setter, com uma
operação apropriada
visibilidade pública. que foi definida no objeto. Em Java, isto é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
devendo especificar
7.6.1 Métodos Gettera mensagem completa: o objeto que é o recebedor da
mensagem, o método
O método dea captura
ser invocado
recebee os
o argumentos para o método (se houver).
nome de get<NomeDoAtributo>(). Ele
O método
retorna uminvocado
objeto dono recebedor
mesmo pode
tipo do também
atributo enviar
e deve informações
retornar de atributo
o valor do volta ao
objeto
desejado.chamador
Para o nosso de um valor
atravésexemplo, de retorno.
queremos O método
um método chamado
que possa ler odeve ser
nome,
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 78
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
88
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

endereço, nota de inglês, nota de matemática e nota de ciências do estudante. Assim na classe Funcionario
teríamos//atribuindo
para o campo nome o método,
valor a variável referência
Carro carro1 = new Carro();
private String=nome;
carro1.ano "2001";
...
carro1.modelo= "fusca"; Métodos setter são
public String =
carro1.cor getNome(){...};
"prata"; usados para modificar
os valores de atributos
7.6.2 Métodos Setter de objeto, ou seja, de
Para que outros objetos possam modificar os atributos da classe,
classe.
disponibilizamos métodos que possam gravar ou modificar os valores das variáveis
de instância. Este método é escrito como set<NomeDoAtributoDeObjeto>(<tipo
do atributo parametrizado>). Novamente, para o campo nome o método ficaria:

private String nome;


...
public void setNome(String nome){...};

7.6.3 Aplicando Encapsulando no Exemplo Funcionario/Gerente


Figura 2.4 – Layout Memória após inicialização
Vamos usar os novos conhecimentos adquiridos até aqui para aprimorar as classes Funcionario e Gerente,
//criando
que temos usado comonovo alias
exemplo ao longo do capítulo.
Carro carro2 = carro1;
package empresa.rh;

import java.util.Date;

public class Funcionario {

private double salario;

private Date dataContrato;

private String nome;

public Funcionario() {
}

public Funcionario(String nome,


Figura 2.5 – Layout Memória double
duas variáveis salario,Date
referência dataContrato) {
para o mesmo objeto
this.salario = salario;
this.dataContrato = dataContrato;
this.nome = nome;
2.3 Membros
} de Instância
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
public void bonusSalario(double percentual) {
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
salario *= 1 + percentual / 100;
objeto. Isto é importante,
} pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
Dois objetos distintos têm
é compartilhada //por todas as de
métodos instâncias da classe.
configuracao
public Date getDataContrato() { o mesmo estado se suas
2.3.1 Invocação
return dataContrato; variáveis membro têm os
} de Métodos
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
objeto pode ter que mostrar
public um comportamento particular
void setDataContrato(Date invocando{ uma
dataContrato)
operação apropriada this.dataContrato
que foi definida no objeto.= dataContrato;
Em Java, isto é feito pela
}
chamada de um método em um objeto usando o operador binário "." (ponto),
devendo especificar
publica String
mensagem completa:{ o objeto que é o recebedor da
getNome()
mensagem, o método areturn
ser invocado
nome;e os argumentos para o método (se houver).
O método invocado
} no recebedor pode também enviar informações de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 79
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
89
www.3way.com.br
Linguagem de Programação
Linguagem Java Java
de Programação

public void setNome(String nome) {


this.nome = nome;
//atribuindo
} valor a variável referência
Carro carro1 = new Carro();
carro1.ano = "2001";
public double getSalario() {
carro1.modelo=
return"fusca";
salario;
carro1.cor
} = "prata";

public void setSalario(double salario) {


this.salario = salario;
}
}
Listagem 7.26 – Encapsulamento dos campos da classe Funcionário

package empresa.rh;

import java.util.Date;
Figura 2.4 – Layout Memória após inicialização
public class Gerente extends Funcionario {
//criando novo alias
private
Carro carro2double bonus;
= carro1;

private String secretaria;

public Gerente(String nome, double salario,Date dataContrato,


String secretaria) {

// invoca construtor superclasse


super(nome, salario, dataContrato);
this.secretaria = secretaria;
bonus = 0.0;
}

void bonusLucro(double lucro) {


bonus += lucro * 0.01;
}

// métodos de Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
configuracao
public double getBonus() {
return bonus;
}
2.3 Membros de Instância
Cadapublic
objeto void
criadosetBonus(double
deverá ter sua bonus)
própria {instância de variáveis Os valores das variáveis
(atributos) definidas this.bonus
pela classe. Os= métodos
bonus; definem o comportamento de um em um objeto constituem
objeto. Isto é}importante, pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
public String getSecretaria() { Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
return secretaria; o mesmo estado se suas
}
2.3.1 Invocação de Métodos variáveis membro têm os
public
Objetos void setSecretaria(String
se comunicam pela troca de mensagens, secretaria)
isto significa { que um mesmos valores.
this.secretaria = secretaria;
objeto pode }ter que mostrar um comportamento particular invocando uma
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamada
} de um método em um objeto usando o operador binário "." (ponto),
devendo especificar a mensagem Listagem
completa: o objeto que
7.27 – Encapsulamento é o
da classe recebedor da
Gerente
mensagem, o método a ser invocado e os argumentos para o método (se houver).
O método invocado
package no recebedor pode também enviar informações de volta ao
empresa.rh;
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.
Seja um Profissional Aprendendo com Profissionais 80
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
90
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

import java.util.Calendar;
import static java.util.Calendar.getInstance;
//atribuindo valor a variável referência
Carro carro1
public = new Carro();
class MainGerente {
carro1.ano = "2001";
carro1.modelo= "fusca";
public static void main(String[] args) {
carro1.cor = "prata";
// uma instancia de calendar
Calendar dataBase = getInstance();//data contratação

// configura data de contratacao do funcionario


dataBase.set(2005, 6, 10);

// instancia de Gerente
Gerente funcionario = new Gerente("Hide Otta", 1999.99,
dataBase.getTime(),"Effe Ciente");

// invoca método da heranca


funcionario.bonusSalario(2);
Figurada
// invoca método 2.4 –instancia
Layout Memória após inicialização
funcionario.bonusLucro(10000.00);
//criando novo alias
Carro carro2 = carro1;
// imprime estado desta instancia de Gerente
System.out.println("Nome funcionario: " + funcionario.getNome());
System.out.println("Secretariado por : "+
funcionario.getSecretaria();

System.out.println("Salario base: " + String.format("%,.2f",


funcionario.getSalario()));
System.out.println("Salario + Comissao: " + String.format("%,.2f",
(funcionario.getSalario() + funcionario.getBonus())));

}
}
Listagem 7.28 -Usando getXXX() e setXXX() das classes Funcionario e Gerente

7.7 Fazer Laboratório 6 Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
Siga instruções do laboratório e tome cuidado com o tempo de execução, sempre recorra ao instrutor em
caso de dúvida, nunca deixe uma dúvida sem reposta.
2.3 Membros de Instância
7.8 OCada objeto==criado
operador deverá ao
comparado terMétodo
sua própria
equalsinstância de variáveis Os valores das variáveis
(atributos) definidas
Quando pela classe.
queremos saber Osse métodos definem
duas variáveis o comportamento
primitivas de um o operador
são iguais usamos em um objeto constituem
==. Como bem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da
sabemos, este mesmo operador quando utilizado com referência de objetos nos diz se as variáveis referenciam
o seu estado. o
classe. Porém
mesmo objeto.não devemos confundir isto com a implementação do método, que Dois objetos distintos têm
é compartilhada
A classe por todas
Object no as instâncias
pacote da classe.
java.lang define o método equals(), que compara a igualdade (o estado) entre
o mesmo estado se suas
dois objetos. Se este método não for sobreposto o método equals() retorna true somente se as duas referências
apontam para o mesmo
2.3.1 Invocação objeto. Entretanto nosso objetivo ao utilizar equals() deve comparar
de Métodos variáveis membro
o conteúdo entre têm
dois os
objetos, se isso forse
Objetos possível. É por isso
comunicam pelaque equals()
troca é freqüentemente
de mensagens, sobreposto
isto significa mesmos
em novas classes.
que um valores.o
Por exemplo,
método equals() na classe String retorna true se, e somente
objeto pode ter que mostrar um comportamento particular invocando umase, o argumento passado ao método (uma referência
de Object),apropriada
operação quenull
é diferente de foie odefinida
objeto que
no está sendo
objeto. Emcomparado
Java, istocontém a mesma
é feito pela seqüência de caracteres do
objeto
chamadaquedeestáuminvocando
método oem método:
um objeto usando o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da
String str1 = "Igual";
mensagem, o método a ser invocado e os argumentos para o método (se houver).
String str2 = new String("Igual");
O método invocado
boolean iguais no recebedor pode também enviar informações de volta ao
= str1.equals(str2);
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 81
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
91
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

Uma implementação simples, mas decente, pode ser uma operação de


ou-exclusivo (XOR operador ^), entre os camposreferência
da classe. O código seguinte
//atribuindo
ilustra essas modificações:
valor a variável A documentação de Java
Carro carro1 = new Carro();
carro1.ano = "2001";
recomenda sobrepor o
package empresa.rh;
carro1.modelo= "fusca"; método hashCode()
carro1.cor = "prata"; sempre que o método
import java.util.Date;
equals() for sobreposto.
public class Funcionario {

private double salario;


private Date dataContrato;
private String nome;

public Funcionario() {
}

public Funcionario(String nome, double salario, Date dataContrato) {


this.salario = salario;
this.dataContrato = dataContrato;
Figura 2.4 – Layout Memória após inicialização
this.nome = nome;
//criando novo alias
}
Carro carro2 = carro1;
public void bonusSalario(double percentual) {
salario *= 1 + percentual / 100;
}
// métodos de configuracao
public Date getDataContrato() {
return dataContrato;
}

public void setDataContrato(Date dataContrato) {


this.dataContrato = dataContrato;
}

public String getNome() {


return nome;
}
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
// Equals e hashCode métodos
public boolean equals(Object o) {

2.3 Membros deboolean


Instância
resultado = false;
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
if ((o != null) && (o instanceof Funcionario)) {
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
Funcionario f = (Funcionario) o;
objeto. Isto é importante, poisif
denota que um método pertence
(nome.equals(f.nome) a cada objeto da o seu estado.
&& dataContrato.equals(f.dataContrato)
classe. Porém não devemos confundir isto com &&a salario
implementação do método,{que
== f.salario) Dois objetos distintos têm
é compartilhada por todas as instâncias da classe. = true;
resultado
} o mesmo estado se suas
}
2.3.1 Invocação de Métodos variáveis membro têm os
return resultado;
Objetos mesmos valores.
} se comunicam pela troca de mensagens, isto significa que um
objeto pode ter que mostrar um comportamento particular invocando uma
public que
operação apropriada hashCode()
int foi definida no{ objeto. Em Java, isto é feito pela
return (nome.hashCode() ^ dataContrato.hashCode()
chamada de um método em um objeto usando o operador binário "." (ponto),
^ Double.valueOf(salario).hashCode());
devendo especificar
} a mensagem completa: o objeto que é o recebedor da
mensagem,
} o método a ser invocado e os argumentos para o método (se houver).
O método invocado no recebedor pode7.29
Listagem também enviarmétodo
– Implementando informações de volta ao
equals() e hashcode()
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 82
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
92
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

import static java.util.Calendar.getInstance;


//atribuindo valor a variável referência
Carro carro1
public = new Carro();
class TesteEquals {
carro1.ano = "2001";
carro1.modelo= "fusca";
public static void main(String[] args) {
carro1.cor = "prata";
Calendar cal = getInstance();
cal.set(2000, 10, 10);
Date data = cal.getTime();

Funcionario emp1 = new Funcionario("Vagabo Undo", 3500.0f, data);


Funcionario emp2 = new Funcionario("Vagabo Undo", 3500.0f, data);

if (emp1 == emp2) {
System.out.println("emp1 = emp2");
} else {
System.out.println("emp1 <> emp2");
}
Figura 2.4 – Layout Memória após inicialização
if (emp1.equals(emp2)) {
System.out.println("emp1 = emp2");
//criando novo alias
} =
Carro carro2 else {
carro1;
System.out.println("emp1 <> emp2");
}

emp2 = emp1;
System.out.println("faz emp2 = emp1;");

if (emp1 == emp2) {
System.out.println("emp1 == emp2");
} else {
System.out.println("emp1 == emp2");
}

}
Listagem 7.30 – Comparando objetos Funcionario com seu equals()
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

7.9 Classses Abstratas


2.3 Membros de Instância
Reflita um pouco sobre a hierarquia de classes da Figura 7.9, nós vimos que podemos dizer que Gato ou
Leão é-umCada
Animal, ou
objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
Animal bichano = new Gato();
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
Animal gatao = new Leao();
classe. Porém não devemos confundir isto com a implementação do método, que
Dois objetos distintos têm
é compartilhada
e também por todas asque
sabemos instâncias
Galinha da classe.
é-um Animal, ou o mesmo estado se suas
2.3.1 Invocação de Métodos
Animal galinha = new Galinha();
variáveis membro têm os
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
objeto pode
Agora ter queO mostrar
pense! que é umum comportamento
objeto Animal? Que forma particular invocando
ele tem? Como eleuma
anda? O que ele come? Que som
ele faz? apropriada que foi definida no objeto. Em Java, isto é feito pela
operação
chamada de um método em um objeto usando o operador binário "." (ponto),
devendoAnimal bicho
especificar = new Animal();
a mensagem completa://o que seria
o objeto que éumo Animal
recebedor ? da
mensagem, o método a ser invocado e os argumentos para o método (se houver).
O método invocado no recebedor pode também enviar informações de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 83
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
93
www.3way.com.br
Siga-nos também no Twitter!
twitter.com/3waynet
Linguagem de Programação
Linguagem JavaJava
de Programação

//atribuindo valor a variável referência


Carro carro1 = new Carro();
carro1.ano = "2001";
carro1.modelo= "fusca";
carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização

//criando novo alias


Carro carro2 = carro1;
Figura 7.9 - Classe Abstrata

Percebe que não faz muito sentido ter um objeto da classe Animal. Precisamos sim de uma classe Animal
para termos herança e polimorfismo, entretanto não vamos precisar de instâncias de Animal. Pelo menos não
neste exemplo.
Volte sua atenção para classe Felino ou Aves, da mesma forma que Animal, não precisamos de instâncias
dessas classes, mas há uma característica comum às suas subclasse, que podemos definir com certeza. No caso a
maneira como os Felinos andam – com quatro patas – ou como as Aves andam – com duas pernas. Mas não
podemos dizer com certeza que todas as Aves emitem o mesmo som, ou que um Leão coma o mesmo que um
Gato, e menos ainda que emitam o mesmo som.
Para definir operações em classes devemos, necessariamente, saber qual o seu comportamento.
Entretanto, em muitos casos não sabemos como estas operações se comportarão na classe que estamos criando,
mas sabemos que elas possuemFiguraeste2.5
comportamento ou variáveis
– Layout Memória duas pelo menos abstraímos
referência estas
para o mesmo características da coisa real.
objeto
Assim, é desejável que as subclasses que herdem desta classe possua, obrigatoriamente, estas operações. Por
exemplo, queremos criar uma superclasse chamada Animal. Esta classe tem certos métodos como comer(), andar()
e fazerRuido(). Entretanto, existem tantas diferenças entre os métodos nestas subclasses que não podemos
2.3 Membros de Instância
generalizar este comportamento na superclasse. Para realizarmos isto, teremos que criar uma superclasse que
Cada objeto criado deverá ter sua própria instância de variáveis Osclasse
valores das variáveis
possua alguns métodos com implementações e outros não. Este tipo de classe é chamada de abstrata. Uma
(atributos) definidas pela classe. Os métodos definem o comportamento
classe abstrata é uma classe que não pode ser instanciada. Nós definimos classes abstratas de um em umcom objeto constituem
o modificar
objeto. Isto
abstract antesé de
importante,
class. pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
Dois objetos distintos têm
é compartilhada
public por todas as instâncias
abastract da classe.
class Animal{...}
o mesmo estado se suas
2.3.1 Invocação
Os métodosdenas
Métodos variáveis membro têm os
classes abstratas que não têm implementação são chamados de métodos abstratos. Para
Objetosabstrato,
criar um método se comunicam pela troca
apenas escreva de mensagens,
a assinatura isto sem
do método significa que(sem
o corpo mesmos
um um abre chaves { e valores.
um fecha
objeto}),pode
chave e use ater que mostrar
palavra-chave um comportamento
abstract. Por exemplo: particular invocando uma
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamadapublic
de um abstract
método emvoid fazerRuido();
um objeto usando o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da
mensagem,ou o método a ser invocado e os argumentos para o método (se houver).
O método invocado no recebedor pode também enviar informações de volta ao
abstract public void fazerRuido();
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 84
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
95
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

Podemos ter classes abstratas sem métodos abstratos, mas toda classe com qualquer método abstrato é
obrigatoriamente abstrata.valor
//atribuindo Vamos aremodelar
variávela classe Animal e defini-lá como uma classe abstrata:
referência
Carro carro1 = new Carro();
//superclasse = "2001";
carro1.ano
class Animal {
public abstract "fusca";
carro1.modelo=
carro1.cor = "prata";
String ruido;

public Animal(String ruido){


this.ruido = ruido;
}

public abstract void fazerRuido();


public abstract void comer();
abstract public void andar();

}
Listagem 7.31 – Implementando classes abstratas

Figura 2.4 – Layout Memória após inicialização


Quando uma classe
//criando novo estende
alias a classe abstrata Animal, ela é obrigada a implementar o métodos abstratos,
como comer(), ou tornar-se abstrata.
Carro carro2 = carro1; Veja:

//superclasse
public abstract class Felino extends Animal {

public Felino(String ruido){


super(ruido);
}

public abstract void fazerRuido();


public abstract void comer();
public void andar(){
System.out.println("anda com quatro patas");
}

}
Listagem
Figura 2.5 – Layout 7.31 – Herança
Memória de classes
duas variáveis abstrados
referência para o mesmo objeto

Se a classe Felino implementar o método andar(), mas não implementar fazerRuido() e nem comer(),
2.3 métodos
estes Membros de Instância
continuam sendo abstratos (Listagem 7.31, linhas 7 e 8), devendo a classe ser abstrata também.
JáCada
a classe Gato é concreta,
objeto criado deverádevendo
ter suaimplementar todos métodos
própria instância abstratos definido
de variáveis na das
Os valores superclasse
variáveis
(atributos)7.32,
(Listagem linhas 6pela
definidas e 9):classe. Os métodos definem o comportamento de um em um objeto constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
//subclasse
classe. Porém não devemos- especialização
confundir isto comcarnivoro
a implementação do método, que
public class Gato extends Felino { Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
public Gato() { o mesmo estado se suas
super("Miauuuu,miauuu,miauuu");
2.3.1 Invocação
} de Métodos variáveis membro têm os
public
Objetos void comer(){
se comunicam pela troca de mensagens, isto significa que um mesmos valores.
System.out.println("come rato");
objeto pode ter
}
que mostrar um comportamento particular invocando uma
operação apropriada que foi definida
public void fazerRuido(){ no objeto. Em Java, isto é feito pela
chamada de um método em um objeto usando o operador
System.out.println("Miar ="+ ruido); binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da
}
} o método a ser invocado e os argumentos para o método (se houver).
mensagem,
O método invocado no recebedor
Listagem 7.32pode tambémclasses
– Implementando enviar informações
concretas declasses
que herdam de voltaabstratas
ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 85
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
96
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

Vejamos como utilizar essas classes. A Listagem 7.33 não compilará, porque não podemos instanciar
classes abstratas
//atribuindo 7.33, linhas
(Listagemvalor 4 e 6). Mas
a variável perceba que mesmo não podendo ter instâncias de classes
referência
abstratas, podemos
Carro ter variáveis
carro1 referência do tipo da classe abstrata (Listagem 7.33, linha 11):
= newdeCarro();
carro1.ano = "2001";
public class Zoo
carro1.modelo= {
"fusca";
public static
carro1.cor void main(String[] args) {
= "prata";

//errado - abstrata não instancia


Animal bicho = new Animal("sem ruido");

//errado - abstrata não instancia


Felino bichanos = new Felino("sem ruido");

Gato gato = new Gato();

gato.fazerRuido(); //qualquer Gato


bichanos = gato; //Gato é um Felino - up-casting
bichanos.fazerRuido();//polimofirmo de referência
bicho = bichanos;//Felino é um Animal - up-casting
bicho.fazerRuido();//polimofirmo
Figura 2.4 – Layout Memória após de referência
inicialização
}
//criando
}
novo alias
Carro carro2 = carro1;
Listagem 7.33 – Reunindo a bicharada

7.10 Interfaces
Uma interface, a grosso modo, é um tipo de classe abstrata que só pode conter métodos abstratos ou
atributos marcados com o modificador final. Interfaces, por natureza, são
abstratas, não necessitando do modificador abstract.
Quando você cria uma interface, está definindo um contrato. Este Interface é uma classe
contrato reza o que uma classe, que aceita o contrato, deverá ter como abstrata que só pode
comportamento definido pela interface implementado.
conter métodos abstratos
e/ou atributos marcados
7.10.1 Porque utilizar Interfaces?
Utilizamos interfaces quando queremos uma relação entre classes não com o modificador final.
relacionadas (semelhante a uma herança)
Figura que
2.5 – Layout implementem
Memória duas variáveismétodos similares.
referência para o mesmo objeto
Através de interfaces, podemos compartilhar esse comportamento entre as
classes, mas sem forçar um relacionamento entre elas.
Tome como de
2.3 Membros exemplo a classe Linha, ela contém métodos que obtém o
Instância
tamanho Cada
da linha
objeto criado odeverá
e compara objeto terLinhasuacom objetosinstância
própria de mesma de classe.
variáveis
Considere também que tenhamos outra classe, MeuInteger, que contém métodos
Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
que comparam um objeto MeuInteger com objetos da mesma classe. Você pode
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
ver que ambas as classes têm métodos similares que comparam objetos do
classe. Porém não devemos confundir isto com a implementação do método, que
mesmo tipo, entretanto eles não estão relacionados. Para ter certeza de que as Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
classes implementam os mesmos métodos com as mesmas assinaturas, utilizamos o mesmo estado se suas
as interfaces. Você pode criar uma interface Relacao que têm alguns métodos de comparação. A Figura
variáveis 7.10 mostra
membro têm os
2.3.1 Invocação de Métodos
o diagrama UML desta interface Relacao e sua utilização pelas classes Linha e MeuInteger:
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
objeto pode ter que mostrar um comportamento particular invocando uma
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da
mensagem, o método a ser invocado e os argumentos para o método (se houver).
O método invocado no recebedor pode também enviar informações de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 86
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
97
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

//atribuindo valor a variável referência


Carro carro1 = new Carro();
carro1.ano = "2001";
carro1.modelo= "fusca";
carro1.cor = "prata";

Figura 7.10 – UML interface Relacao

Existem outros motivos para você querer utilizar interfaces em seus programas:

 Usar referências de objetos sem saber qual a classe que a implementa. Como veremos mais adiante,
podemos utilizar uma interface como tipo de dados.
Figura 2.4 – Layout Memória após inicialização
 Utilizar interfaces como mecanismo alternativo para herança múltipla, que permite às classes ter
//criando
mais de umanovo alias Herança múltipla não está implementada em Java.
superclasse.
Carro carro2 = carro1;
7.10.2 Interface vs. Classe Abstrata
A principal diferença entre uma interface e uma classe abstrata é que a classe abstrata pode possuir
métodos implementados (concretos) ou não implementados (abstratos). Na interface, todos os métodos são
definidos com abstratos e públicos, sendo que a palavra-chave abstract e public sendo opcional na declaração.

7.10.3 Criando Interfaces


Para criarmos uma interface, utilizamos a sintaxe abaixo:

[public] [abstract] interface <NomeDaInterface> {

< [public] [static] [final] <tipoAtributo> <atributo> = <valorInicial>; >*

< [public] [abstract] <retorno> <nomeMetodo>(<parametro>*); >*


}
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

Como exemplo, criaremos uma interface que define o relacionamento entre dois objetos de acordo com a
"ordem natural" dos objetos:
2.3 Membros de Instância
Cada objeto
public criado Relacao
interface deverá ter
{ sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
public boolean
objeto. Isto é importante, maiorQue(Object
pois denota que um métodoa, Object
pertence b); objeto da
a cada o seu estado.
classe. Porém não devemos confundir isto com a implementação
a, Objectdob);método, que
public boolean menorQue(Object Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
public boolean igualA(Object a, Object b);
o mesmo estado se suas
}
2.3.1 Invocação de Métodos variáveis membro têm os
Objetos se comunicam pela troca de 7.34
Listagem mensagens, istoem
– Interface Relacao significa
Java que um mesmos valores.
objeto pode ter que mostrar um comportamento particular invocando uma
operaçãoPara
apropriada
implementar queesta
foi interface
definida você
no objeto.
deve usar Ema palavra
Java, isto
chaveé feito pela na definição da classe. Por
implements
chamada de um método em um objeto usando o operador binário
exemplo, esta é a implementação da interface Relacao pela classe Linha (Figura 7.10):"." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da
mensagem, o método
public classa ser invocado
Linha e os argumentos
implements Relacao para{ o método (se houver).
O método invocado no recebedor pode também enviar informações de volta ao
objeto chamador private
atravésdouble x1; de retorno. O método chamado deve ser
de um valor
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 87
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
98
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

private double x2;


private double y1;
//atribuindo valor ay2;
private double variável referência
Carro carro1 = new Carro();
carro1.ano = "2001"; x1, double x2, double y1, double y2) {
public Linha(double
carro1.modelo= "fusca";
this.x1 = x1;
carro1.cor this.x2
= "prata";
= x2;
this.y2 = y2;
this.y1 = y1;
}

public double tamanho() {


double tamanho = Math
.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
return tamanho;
}

public boolean maiorQue(Object a, Object b) {


double ca = ((Linha) a).tamanho();//casting
double cb = ((Linha) b).tamanho();//casting
Figura 2.4 – Layout Memória após inicialização
return (ca > cb);
}
//criando novo alias
Carro carro2 = carro1;
public boolean menorQue(Object a, Object b) {
double ca = ((Linha) a).tamanho();//casting
double cb = ((Linha) b).tamanho();//casting
return (ca < cb);
}

public boolean igualA(Object a, Object b) {


double ca = ((Linha) a).tamanho();//casting
double cb = ((Linha) b).tamanho();//casting
return (ca == cb);
}
}
Listagem 7.35 – Implementando interface Relacao na classe Linha

Quando a classe implementa uma interface ela aceita o contrato da interface, então ela têm que
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
implementar todos os métodos definidos na interface, caso contrário o compilador Java emitirá um erro de
compilação. Da mesma forma também implementamos a classe MeuInteger:

2.3 Membros de Instância


public class MeuInteger implements Relacao {
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
Integer
(atributos) definidas pelavalor;
classe. Os métodos definem o comportamento de um
public MeuInteger(int valor){ em um objeto constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da
this.valor=valor; o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
} Dois objetos distintos têm
é compartilhada por todasint
private as instâncias
valor(){da classe.
return valor.intValue(); o mesmo estado se suas
}
2.3.1 Invocação de Métodos variáveis membro têm os
public boolean maiorQue(Object a, Object b) { mesmos valores.
Objetos se comunicam
int ca = pela troca de mensagens,
((MeuInteger) isto significa que um
a).valor();//casting
objeto pode ter que int
mostrar
cb = um comportamento
((MeuInteger) particular invocando uma
b).valor();//casting
operação apropriada return
que foi (ca
definida no objeto. Em Java, isto é feito pela
> cb);
chamada de um} método em um objeto usando o operador binário "." (ponto),
public boolean menorQue(Object a, Object b) {
devendo especificar aint
mensagem completa: o objeto
ca = ((MeuInteger) que é o recebedor da
a).valor();//casting
mensagem, o método int
a ser cb
invocado e os argumentos
= ((MeuInteger) para o método (se houver).
b).valor();//casting
O método invocado noreturn
recebedor
(capode também enviar informações de volta ao
< cb);
} através de um valor de retorno. O método chamado deve ser
objeto chamador
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 88
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
99
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

public boolean igualA(Object a, Object b) {


//atribuindo valor
int ca = a((MeuInteger)
variável referência
a).valor();//casting
Carro carro1 = new Carro();
int cb = ((MeuInteger) b).valor();//casting
carro1.ano return
= "2001";
(ca == cb);
carro1.modelo=
} "fusca";
carro1.cor
} = "prata";
Listagem 7.36 – Implementando interface Relacao na classe MeuInteger

7.10.4 Relacionamento de uma Interface para uma Classe


Como vimos nas seções anteriores, a classe pode implementar uma
interface e para isso, deve prover o código de implementação para todos os métodos
Uma classe que definidos na interface.
implementa uma Outro detalhe a se notar na relação entre uma interface e uma classe, é que a
interface tem que classe pode apenas herdar uma única superclasse, mas pode implementar diversas
interfaces. Um exemplo de uma classe que implementa diversas interfaces:
implementar o código
para todos os FiguraPessoa
public class implements
2.4 – Layout IPessoa, IVivente, IQualquerUm {
Memória após inicialização
métodos definidos na // algumas linhas de código
//criando novo }alias
interface.
Carro carro2 = carro1;
Outro exemplo de uma classe que estende de outra superclasse e
implementa interfaces:

public class EstudanteComputacao extends Estudante


implements IPessoa,IVivente {
// algumas linhas de código
}

Uma interface não faz parte de uma hierarquia de classes. Classes não relacionadas podem implementar a
mesma interface.

7.10.5 Herança entre Interfaces


Interfaces não são partes de uma hierarquia de classes. Entretanto, interfaces podem ter relacionamentos
entre si. Por exemplo, suponha Figura
que tenhamos duas interfaces,
2.5 – Layout Memória IEstudante
duas variáveis e IPessoa.
referência para Se IEstudante estende IPessoa,
o mesmo objeto
esta herda todos os métodos declarados em IPessoa.

public interface IPessoa {


2.3 Membros
... de Instância
}Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um Interface pode ser
em um objeto constituem
public interface IEstudante extends IPessoa {
objeto. Isto é importante, pois denota que um método pertence a cada objeto da utilizada como
... o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que declaração de um tipo
} Dois objetos distintos têm
é compartilhada por todas as instâncias da classe. de váriavel, apesar de
o mesmo estado se suas
Além disto, interfaces podem ter herança múltipla, exemplo: não poder ser
2.3.1 Invocação de Métodos variáveis membro têm os
instanciada.
Objetos se comunicam
interface IPessoa{} pela troca de mensagens, isto significa que um mesmos valores.
objeto pode ter que mostrar um comportamento particular invocando uma
apropriadaIQualquerOutroInterface{}
operaçãointerface que foi definida no objeto. Em Java, isto é feito pela
chamadainterface
de um método em um objeto
IEstudante extends usando o operador binário "." (ponto),
devendo especificar aIPessoa,IQualquerOutroInterface
mensagem completa: o objeto que é{ o recebedor da
mensagem, o método
//... a ser invocado e os argumentos para o método (se houver).
O método } invocado no recebedor pode também enviar informações de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 89
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
100
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

7.10.6 Interface vs. Classe


Uma característica
//atribuindo comum
valor a entre uma interface
variável e uma classe é que ambas são tipos. Isto significa que
referência
uma interface
Carro pode
carro1ser usada
= newnoCarro();
lugar onde uma classe é esperada. Por exemplo, dadas a classe Pessoa e a
interfacecarro1.ano
IPessoa, as seguintes declarações são válidas:
= "2001";
carro1.modelo= "fusca";
carro1.cor = "prata";
IPessoa ip = new Pessoa();
Pessoa cp = new Pessoa();

Entretanto, não se pode criar uma instância de uma interface, assim como não podemos instanciar
classes abstratas. Um exemplo disso é:

IPessoa ip = new IPessoa(); //erro - não instancia interface !!!

Outra característica comum é que ambas, interfaces e classes, podem definir métodos, embora uma
interface não possa tê-los implementados. Já uma classe pode.

7.11 Classes Aninhadas


Figuraa2.4
Classe aninhada (nested class) surgiu – Layout
partir daMemória
versãoapós
1.1 inicialização
do Java. Assim como métodos e propriedades,
uma classe aninhada énovo
//criando aliasum membro da classe.
considerada
Carro carro2 = carro1;
public class Externa {
class Interna { Classe aninhada é um
// ...
}
recurso que permite
} definir uma classe
dentro de outra.
Uma classe aninhada é utilizada para reforçar sua dependência com a sua
classe externa, ou seja, ela depende dos outros membros da classe externa para
funcionar. Por exemplo, suponha um cursor que depende totalmente de um editor de
texto:

public class EditorDeTexto {


class Cursor {
// ...
} Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
}

Alguns consideram que este novo recurso afetou a legibilidade do código, tornando-o mais complexo,
2.3 Membros
inclusive de Instância
aninhando uma à outra de forma recursiva, como por exemplo:
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos) definidas
public pelaAclasse.
class { Os métodos definem o comportamento de um em um objeto constituem
class B {pois denota que um método pertence a cada objeto da
objeto. Isto é importante,
class C { o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
} Dois objetos distintos têm
é compartilhada} por todas as instâncias da classe.
o mesmo estado se suas
}
2.3.1 Invocação de Métodos variáveis membro têm os
Objetosdoserecurso
Apesar comunicam pelaaninhadas
de classes troca de dificultar
mensagens, isto significa
a legibilidade umaplicado), amesmos
quemal
(se for valores.
maioria aceita que
classes
objeto internas
pode teré um
que recurso
mostrarque umpermite organizar melhor
comportamento o seu
particular conjunto uma
invocando de classes. Especialmente classes
internas
operaçãosãoapropriada
muito úteisque
para:foi definida no objeto. Em Java, isto é feito pela
chamada deTratamento
um método deem
eventos gráficos:
um objeto cliqueodeoperador
usando mouse, pressionamento de botão, etc. É utilizado bastante
binário "." (ponto),
quando se estuda a parte de tratamento de
devendo especificar a mensagem completa: o objeto que é o recebedor da AWT.
este recurso eventos gráficos
mensagem,  Classe aninhadas
o método de teste:e os
a ser invocado emargumentos
vez de se criar
parauma classe (se
o método externa à uma classe, para testar as suas
houver).
funcionalidades, é possível e recomendável criar uma
O método invocado no recebedor pode também enviar informações de volta ao classe aninhada que poderá ter vários métodos
de teste. Iremos ver sobre isso mais à frente.
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 90
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
101
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

7.11.1 Classe Aninhada valor a variável referência


//atribuindo
Veja o seguinte
Carro carro1 exemplo, Listagem 7.37, ele define a classe ClasseExterna (linha 1), uma classe interna
= new Carro();
(linha 3),carro1.ano
e a instância (linha= 10) :
"2001";
carro1.modelo= "fusca";
carro1.cor = "prata";
public class ClasseExterna {

public class ClasseInterna {


public String toString() {
return "Classe Interna";
}
} // ClasseInterna

public String toString() {


ClasseInterna ci = new ClasseInterna();
return "Classe Externa com " + ci;
} // toString

public static void main(String[] args) {


Figura=2.4new
ClasseExterna ce – Layout Memória após inicialização
ClasseExterna();
System.out.println(ce);
//criando novo alias
Carro }carro2
// main
= carro1;
} // ClasseExterna
Listagem 7.37

Note neste exemplo, que é possível ter classes dentro de outras, onde a classe ClasseExterna, definiu uma
classe internamente denominada ClasseInterna. Ambas sobrepõe o método toString(), que é executado
automaticamente toda vez que é invocado (chamado) o método System.out.print().
Note que quando se compila ClasseExterna.java, surgem dois arquivos .class:
 ClasseExterna.class - este é o resultado da compilação de ClasseExterna.
 ClasseExterna$ClasseInterna.class - este é o resultado da compilação de Assim como outros
ClasseInterna, porém como ela é interna, a sua classe externa também é membros da classe,
listada, separada pelo cifrão ($). como métodos e
propriedades,
7.11.2 Classes aninhadas estáticas
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto classes aninhadas
Assim como outros membros da classe, como métodos e propriedades, classes também pode ser
aninhadas também pode ser estáticas denominadas classes aninhadas estáticas (static estáticas.
nested
2.3 class)
Membrosou nãodeestáticas
Instânciadenominadas classes internas de instância (instance
inner class).
CadaAssim, quando
objeto criado deveráclasse
dizemos ter interna nunca instância
sua própria referimos de a uma classe-
variáveis Os valores das variáveis
membro estática; enquanto que classe aninhada é um termo geral
(atributos) definidas pela classe. Os métodos definem o comportamento de um tanto para classes-
membro estáticas ou não. Vejamos o exemplo: em um objeto constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
public class ClasseTopo { Dois objetos distintos têm
é compartilhada
//por todasé asuma
esta instâncias
classedaaninhada
classe. estática o mesmo estado se suas
// static nested class
2.3.1 Invocação de Métodos
public static class ClasseAninhadaEstatica { variáveis membro têm os
Objetos se comunicamstatic
public void
pela troca de main(String[] args) {que um
mensagens, isto significa mesmos valores.
System.out.println("Classe Aninhada Estática");
objeto pode ter que }mostrar um comportamento particular invocando uma
operação apropriada
} que foi definida no objeto. Em Java, isto é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
// esta
devendo especificar é uma classe
a mensagem interna
completa: de instancia
o objeto que é o recebedor da
// instance inner class
mensagem, o método a ser invocado
class ClasseInterna { e os argumentos para o método (se houver).
O método invocado no//recebedor
somente classes aninhadas estáticasdepodem
pode também enviar informações volta ao
ter membros estáticos
objeto chamador através
// de
as um valor
duas de retorno. abaixo
declarações O método chamado deve
retornariam ser
erro
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 91
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
102
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

//static int i = 1;
//public static void main(String[] args) { }
//atribuindo
} valor a variável referência
Carro public
carro1static
= new void
Carro();
main(String[] args) {
carro1.ano System.out.println("Classe
= "2001"; Topo");
carro1.modelo=
} "fusca";
}carro1.cor = "prata";
Listagem 7.39 – Classes Internas e classes estáticas aninhadas

Note neste exemplo, que tanto a classe de mais alto nível (ClasseTopo, linha 1) e a sua classe aninhada
ClasseAninhadaEstatica (linha 4 ), possuem cada uma seu próprio método main(). Você pode usar cada classe de
forma independente, experimente executar as classes como segue:

> java ClasseTopo


> java ClasseTopo\$ClasseAninhadaEstatica

Note neste exemplo, que como regra de sintaxe as classes internas não-estáticas Local inner classes
(ClasseInterna, linha 12) não podem ter membros
Figura 2.4 estáticos.
– Layout Memória após inicialização são classes
//criando novo alias definidas dentro de
7.11.3 Classes
Carro internas
carro2locais
= carro1; um bloco de
Classes internas locais (local inner classes) são aquelas que são definidas dentro método.
de um bloco de método ou de um comando (statement). Vejamos o exemplo:

public class ClasseInternaLocal {


public static void main(String[] main) {
class DentroDaMain {
public String toString() {
return "DentroDaMain";
}
}
DentroDaMain ddm = new DentroDaMain();
// erro: nao é permitido classes aninhadas estáticas locais
//static class EstaticaDentroDaMain { }
//erro: não é permitido qualquer modificador de acesso
// private class PrivadaDentroDaMain { }
System.out.println(ddm);
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
if (true) {
class DentroDoIf {
public String toString() {
2.3 Membros de Instância return "DentroDoIf";
}
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
}
(atributos) definidas pela classe. Os métodos definem
DentroDoIf ddi = new DentroDoIf();o comportamento de um em um objeto constituem
objeto. Isto é importante, poisSystem.out.println(ddi);
denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos
} confundir isto com a implementação do método, que
//erro: fora do escopo do if Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
//DentroDoIf ddi1 = new DentroDoIf(); o mesmo estado se suas
}
2.3.1 }Invocação de Métodos variáveis membro têm os
Objetos se comunicam pela troca Listagem
de mensagens, isto significa que um mesmos valores.
7.40 – Local inner class
objeto pode ter que mostrar um comportamento particular invocando uma
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamadaNeste exemplo, veja que é possível criar classes internas locais tanto dentro de um bloco de método (linha
de um método em um objeto usando o operador binário "." (ponto),
3) ou dentro de um bloco de comando (linha 15). Note também que não é permitido criar classes estáticas locais,
devendo especificar a mensagem completa: o objeto que é o recebedor da
utilizando-se do modificador static. Também não é permitido utilizar modificadores de acesso - como public,
mensagem, o método a ser invocado e os argumentos para o método (se houver).
protected e private - à classes internas, somente é permitido utilizar o padrão - sem modificadores de acesso.
O método invocado no recebedor pode também enviar informações de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 92
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
103
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

7.11.4 Classes internas anônimas


Classes internas anônimas
//atribuindo valor a (anonymous inner classes) em geral aumentam bastante a complexidade de
variável referência
entendimento
Carrodecarro1
seu código, portanto
= new deve ser utilizado de forma comedida ou em situações em que seu usa já
Carro();
seja esperado - por exemplo,
carro1.ano = em tratamento de eventos gráficos AWT. Vejamos o exemplo:
"2001";
carro1.modelo= "fusca";
carro1.cor = "prata";
public class TesteClasseAnonima {

public static void main(String[] args) {

class TesteDescendente extends Teste {

public String toString() {


return "TesteDescendente - filha de: " +
super.toString();
}

} // fim TesteDescendente

Teste t1 = new Teste();


Teste t2 = new Figura 2.4 – Layout Memória após inicialização
TesteDescendente();
Teste t3;
//criando novo alias
Carro carro2 = carro1;
t3 = new Teste() {

public String toString() {


return "Classe anonima - filha de: " + super.toString();
}; // fim toString()

}; // fim new Teste()

System.out.println("t1:" + t1 + "\nt2:" + t2 + "\nt3:" + t3);

} // fim main()

} // fim TesteClasseAnonima

class Teste {

Figura
public String 2.5 – Layout Memória
toString() { duas variáveis referência para o mesmo objeto
return "Classe Teste";
} // fim main()

2.3 Membros de Instância


} // fim Teste
Cada objeto criado deverá ter sua própria instância de variáveis
Listagem 7.41 – Classes Internas Anônimas Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
Na Listagem
classe. Porém 7.41, a confundir
não devemos instância associada
isto com aà implementação
variável t2 (linhado13), foi criada
método, que através da definição de uma
classe interna denominada TesteDescendente (linha 5), que é filha da classe Teste (linha 27). DoisDe
objetos
forma distintos
análoga, etêm
é compartilhada por todas as instâncias da classe.
com o mesmo efeito, foi criado uma nova definição de classe, porém sem utilizar nenhum nome novo, conformeo mesmo estado se suas
podemos ver na declaração da variável t3 (linhas 15-19).
2.3.1 Invocação de Métodos variáveis membro têm os
Simplesmente foi incluído um novo bloco que define a classe anônima após a chamadamesmos new Teste() (linha
valores.
Objetos se comunicam pela troca de mensagens, isto significa que um
15), com uma sobreposição do método toString() da classe pai Teste().
objeto pode ter que mostrar um comportamento particular invocando uma
Como uma classe interna anônima não tem nome, não possível referenciá-la além do ponto de sua
operação apropriada
declaração, quesalvar
então, deve-se foi sua
definida no objeto.
referência no mesmo Eminstante
Java, isto é definição.
de sua feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
devendo especificar ademensagem
7.11.5 Modificadores acesso completa: o objeto que é o recebedor da
mensagem, o método a ser invocado
Assim como outros membros, e os argumentos
pode-se utilizarpara o método
private, public(seouhouver).
protected na definição de classes
O método invocado no recebedor
aninhadas. Vejamos o exemplo: pode também enviar informações de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 93
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
104
www.3way.com.br
Linguagem de Programação
Linguagem Java Java
de Programação

class TiposDeAcesso {
static class AcessoPadrao {
//atribuindo valor
public a variável
static referência args) {
void main(String[]
Carro carro1 = new Carro();
System.out.println("AcessoPadrao");
carro1.ano} = "2001";
carro1.modelo=
} "fusca";
carro1.cor = "prata";
public static class AcessoPublico {
public static void main(String[] args) {
System.out.println("AcessoPublico");
}
}

private static class AcessoPrivado {


public static void main(String[] args) {
System.out.println("AcessoPrivado");
}
}

protected static class AcessoProtegido {


Figura main(String[]
public static void 2.4 – Layout Memória após inicialização
args) {
System.out.println("AcessoProtegido");
//criando novo alias
}
Carro carro2 = carro1;
}
}

public class TesteDeAcesso {


public static void main(String[] args) {
TiposDeAcesso.AcessoPadrao.main(null);
TiposDeAcesso.AcessoPublico.main(null);
TiposDeAcesso.AcessoProtegido.main(null);
// TiposDeAcesso.AcessoPrivado.main(null); //isto causa erro
}
}

class TesteDescendente extends TiposDeAcesso {


public static void main(String[] args) {
AcessoPadrao.main(null);
AcessoPublico.main(null);
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
AcessoProtegido.main(null);
// AcessoPrivado.main(null); // isto causa erro
}
}
2.3 Membros de Instância
Listagem 7.42 – Classes aninhadas e modificadores de acesso
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
objeto.Você
Isto pode executar as
é importante, classes
pois como
denota quesegue:
um método pertence a cada objeto da o seu estado.
classe. >Porém
java TesteDeAcesso
não devemos confundir isto com a implementação do método, que
AcessoPadrao Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
AcessoPublico o mesmo estado se suas
2.3.1 AcessoProtegido
Invocação de Métodos variáveis membro têm os
> java TiposDeAcesso\$AcessoPadrao
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
AcessoPadrao
objeto pode ter que mostrar um comportamento particular invocando uma
operação> java TiposDeAcesso\$AcessoPublico
apropriada que foi definida no objeto. Em Java, isto é feito pela
AcessoPublico
chamada de um método em um objeto usando o operador binário "." (ponto),
> java TiposDeAcesso\$AcessoPrivado
devendo especificar a mensagem completa: o objeto que é o recebedor da
AcessoPrivado
mensagem, o método a ser invocado e os argumentos para o método (se houver).
> java TiposDeAcesso\$AcessoProtegido
O método invocado no recebedor pode também enviar informações de volta ao
AcessoProtegido
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 94
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
105
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

Aqui neste exemplo,


//atribuindo apenas
valor exemplificamos
a variável o acesso externo por uma classe de mesmo pacote e uma
referência
classe descendente.
Carro carro1Há também
= newoutras situações de teste de acesso externo, como: classe por pacote diferente e
Carro();
classe descendente.
carro1.ano = "2001";
carro1.modelo= "fusca";
carro1.cor
7.12 Tipos Enumerados= "prata";
Quando você precisar criar uma constante, você utilizará definição de variáveis estática e final. Toda vez
que usamos a palavra-chave final estamos informando que algo não pode mudar. Com classes, final significa que
não podemos mais fazer herança, com métodos não podemos mais sobrepô-lo e com variáveis significa que após a
inicialização o valor da variável não pode mais ser alterado, exemplo:

static final int JANEIRO=1;

Algumas vezes necessitamos de conjuntos de valores constantes - por exemplo, conjunto de estação do
ano. Uma abordagem padrão para definição de um conjunto com esta natureza, seria definir uma classe ou
interface contendo as constantes como abaixo:

public class Estacoes { Figura 2.4 – Layout Memória após inicialização

//criando novo alias


Carro public
carro2 static final
= carro1; int PRIMAVERA = 1;
public static final int VERAO = 2;
public static final int OUTONO = 3;
public static final int INVERNO = 4;
}

public class EstacoesDoAno {

int estacao;

public void setEstacao(int estacao){


this.estacao=estacao;
}

public static void main(String[] args) {

EstacoesDoAno estacaoAtual = new EstacoesDoAno();


Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
estacaoAtual.setEstacao(Estacoes.PRIMAVERA);// (1) nome constante
// qualificado pelo nome da classe
estacaoAtual.setEstacao(1);// mesmo que anterior
2.3 Membros deestacaoAtual.setEstacao(5);//
Instância não existe mas é aceito
Cada objeto System.out.println(Estacoes.VERAO);
criado deverá ter sua própria instância de variáveis "2",Osevalores
// Imprime das variáveis
não "VERAO"
(atributos) definidas
} pela classe. Os métodos definem o comportamento de um em um objeto constituem
} é importante, pois denota que um método pertence a cada objeto da
objeto. Isto o seu estado.
classe. Porém não devemos confundirListagem isto com
7.43 –aConjuntos
implementação doJava
de constantes em método,
1.4 que
Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
o mesmo estado se suas
A abordagem utilizada apresenta algumas desvantagens:
2.3.1 Invocação variáveis membro têm os
 não éde Métodos
segura quanto ao tipo – qualquer inteiro pode ser passado ao método setEstacao().
Objetos se comunicam
 devemos pela da
utilizar o nome troca de (ou
classe mensagens,
interface) isto
parasignifica
referenciar quea constante.
um mesmos valores.
objeto pode oter que
valor nãomostrar
representauma comportamento
informação textualparticular
do nome da invocando
constante.uma
operação apropriada
as classesque foi definida
que utilizam no objeto.devem
estas constantes Em Java, isto é feitocaso
ser recompiladas pelaseus valores sofram mudança.
chamada de um método em um objeto usando o operador binário "." (ponto),
devendoJava
especificar a mensagem
5.0 implementa completa:
este conceito de oconjunto
objeto de queconstantes
é o recebedorcom o da novo tipo enum. O tipo enum
representa
mensagem,oso tipos
métodoenumerados ou conjuntos
a ser invocado comumente
e os argumentos paravistos em outras
o método (se linguagens
houver). de programação, ele define
um conjuntoinvocado
O método de nomes noe recebedor
valores constantes. Vejamosenviar
pode também como informações
fica nosso exemplo ao enum:
usando
de volta
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 95
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
106
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

public enum Estacoes {


PRIMAVERA,VERAO,OUTONO,INVERNO;
//atribuindo valor a variável referência O tipo enum representa os
}
Carro carro1 = new Carro(); tipos enumerados ou
carro1.ano = "2001";
public class EstacoesDoAno { conjuntos de nomes e
carro1.modelo= "fusca";
Estacoes estacao; valores constantes.
carro1.cor = "prata";
public void setEstacao(Estacoes estacao){
this.estacao=estacao;
}
public static void main(String[] args) {
EstacoesDoAno estacaoAtual =
new EstacoesDoAno();

estacaoAtual.setEstacao(Estacoes.PRIMAVERA);
//estacaoAtual.setEstacao(1);// erro - nao existe 1
//estacaoAtual.setEstacao(5);// erro - nao existe 5
System.out.println(Estacoes.VERAO); // Imprime "VERAO"
}
}
Figura 2.4 – Layout Memória após inicialização
Listagem 7.44 – Usando tipos enumerados em Java 1.5
//criando novo alias
Carro carro2 = carro1;
O tipo enum estende implicitamente a classe java.lang.Enum. Nossas enumerações podem ter
construtores, métodos, variáveis. Como as classes, as enumerações podem ser declaradas dentro de classes, como
enumerações estáticas e locais. Veja exemplo de um enumerado mais complexo:

public enum EEstacoes {

PRIMAVERA(Mes.SETEMBRO,Mes.NOVEMBRO),
VERAO(Mes.DEZEMBRO,Mes.FEVEREIRO),
OUTONO(Mes.MARÇO,Mes.MAIO),
INVERNO(Mes.JUNHO,Mes.AGOSTO);

enum Mes {
JANEIRO,FEVEREIRO,MARÇO,ABRIL,MAIO,JUNHO,JULHO,
AGOSTO,SETEMBRO,OUTUBRO,NOVEMBRO,DEZEMBRO;
}
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
private Mes inicio, fim;

//visibilidade são private ou package


2.3 Membros de Instância
private EEstacoes(Mes inicio,Mes fim){
Cada objeto this.inicio=inicio;
criado deverá ter sua própria instância de variáveis Os valores das variáveis
this.fim=fim;
(atributos) definidas pela classe. Os métodos definem o comportamento de um
} em um objeto constituem
objeto. Isto é importante, pois denota que um
public Mes getInicio() { método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir
return inicio;a implementação do método, que
isto com
Dois objetos distintos têm
é compartilhada } por todas as instâncias da classe.
public Mes getFim() { o mesmo estado se suas
return fim;
2.3.1 Invocação de Métodos variáveis membro têm os
} mesmos valores.
}Objetos se comunicam pela troca de mensagens, isto significa que um
objeto pode ter que mostrar um comportamento particular invocando uma
operaçãopublic
apropriada
classque foi definida no {objeto. Em Java, isto é feito pela
EEstacoesDoAno
chamada de um método em um objeto usando o operador binário "." (ponto),
public static void main(String[] args) {
devendo especificar aString
mensagem completa: o objeto que é o recebedor da
msg="";
mensagem, o método fora ser (EEstacoes
invocado e os estacao
argumentos para o método (se houver).
: Eestacoes.values()){
O método invocado no recebedorswitchpode também enviar
(estacao) { informações de volta ao
objeto chamador através de um valorcase PRIMAVERA
de retorno. : msg="Flores,Frutos
O método chamado deve ser e chuvas"; break;
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 96
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
107
www.3way.com.br
Linguagem de de
Linguagem Programação JavaJava
Programação

case VERAO : msg="Calor e Chuvas"; break;


case OUTONO : msg="Ventos e Seca"; break;
//atribuindo valor a variável referência
case INVERNO : msg="Frio e Seca"; break;
Carro carro1 = new
} Carro();
carro1.ano = "2001";
carro1.modelo= "fusca";
System.out.println(estacao + " começa no mês "
carro1.cor = "prata"; + estacao.getInicio() + ", termina no mês "
+ estacao.getFim() + ", temos " + msg);
}
}
}
Listagem 7.45 – Enumerados com métodos, construtores, etc

O tipo enumerado acrescenta dois métodos implicitamente,

static <tipo da sua enum>[] values() Retorna um array contendo as constantes desta
enum, na ordem em que são declaradas
static <tipo da sua enum> valueOf(StringFigura
nome) 2.4 – Layout MemóriaRetorna uma constante da enum com o argumento
após inicialização
nome passado.
//criando novo alias
Carro carro2 = carro1;
O comando switch, no Java 5, também pode ser usado com enumerados e não somente tipos integrais
inteiros, o rótulo case pode ser acompanha da constante.

7.13 Fazer Laboratório 7


Siga instruções do laboratório e tome cuidado com o tempo de execução, sempre recorra ao instrutor em
caso de dúvida, nunca deixe uma dúvida sem reposta

7.14 Exercícios
Escreva, compile e execute todas listagens de código apresentadas neste capítulo.

8 Exceções
Uma exceção é um evento que interrompe o fluxo normal de processamento de uma classe. Este evento é
um erro de algum tipo. Isto causa o término inesperado da execução de seu programa.
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
Estes são alguns dos exemplos de exceções que podem ter ocorridos em exercícios anteriores:
 ArrayIndexOutOfBoundsException: ocorre ao acessar um elemento inexistente de um array.
 NumberFormatException: ocorre ao enviar um parâmetro não-numérico para o método
2.3 Membros de Instância
Integer.parseInt().
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um
8.1 Manipulando Exceções Exceção
em é um constituem
um objeto evento
objeto. Isto é importante, pois denota que um método pertence a cada
Para tratar exceções em Java utilizamos a declaração try-catch-finally. O que
objeto da queointerrompe
seu estado.o
classe. Porém não devemos confundir isto com a implementação do método, que
devemos fazer para proteger as instruções passíveis de gerar uma exceção é inserí-las Dois objetos fluxo normal de têm
distintos
édentro
compartilhada por
deste bloco. todas as instâncias da classe. processamento de
o mesmo estado se suas
A forma geral de um try-catch-finally é: uma classe.
variáveis Todatêm os
membro
2.3.1 Invocação de Métodos exceção é de algum
Objetos
try{ se comunicam pela troca de mensagens, isto significa que um mesmos valores.
tipo.
objeto pode//escreva
ter que mostrar um comportamento
as instruções passíveisparticular
de gerarinvocando
uma exceçãouma
//neste que
operação apropriada blocofoi definida no objeto. Em Java, isto é feito pela
} catch (<exceptionType1> <varName1>){
chamada de um//escreva
método emaqui um objeto usando o operador binário "." (ponto),
o código do seu programa, caso ocorra
devendo especificar
//umaa exceção
mensagem de completa: o objeto tipo
um determinado que é o recebedor da
mensagem,
} .o método
. . a ser invocado e os argumentos para o método (se houver).
O método} invocado
catch (<exceptionTypen> <varNamen>){
no recebedor pode também enviar informações de volta ao
//escreva aqui o código do seu programa, caso ocorra
objeto chamador através de um valor de retorno. O método chamado deve ser
//uma exceção de um determinado tipo
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 97
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
108
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação

} finally {
//escreva a ação que o seu programa executará caso
//atribuindo
//ocorra valor
ou nãoa um
variável
erro oureferência
exceção
Carro
} carro1 = new Carro();
carro1.ano = "2001";
carro1.modelo= "fusca";
Exceções geradas durante a execução do bloco try podem ser detectadas e tratadas num bloco catch. O
carro1.cor = "prata";
código no bloco finally é sempre executado, ocorrendo ou não a exceção.
A seguir são mostrados os principais aspectos da sintaxe da construção de um try-catch- finally:
1. A notação de bloco é obrigatória, o try.
2. Para cada bloco try, pode haver um ou mais blocos catch, mas somente um bloco finally.
3. Um bloco try deve que ser seguido de pelo menos um bloco catch ou um bloco finally, ou ambos.
4. Cada bloco catch define o tratamento de uma exceção de um tipo.
5. O cabeçalho do bloco catch recebe somente um argumento, que é o tipo da exceção (Exception) que
este bloco irá tratar.
6. A exceção deve ser da classe Throwable ou de uma de suas subclasses.

Tomemos, por exemplo, uma classe que imprime o segundo argumento passado através da linha de
comandos. Supondo que não há verificaçãoFigura
no código paraMemória
2.4 – Layout o número de argumentos.
após inicialização

//criando novo alias


public class ExceptionExample {
Carro carro2 = carro1;
public static void main(String[] args) {

System.out.println(args[1]);
System.out.println("Finish");
}
}

Ao executar esta classe sem informar nenhum argumento, ao tentar acessar diretamente - conforme o
exemplo descrito - o segundo argumento args[1], uma exceção será lançada e interromperá a execução normal do
programa. A seguinte mensagem será mostrada na console do sistema:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1


at ExceptionExample.main(ExceptionExample.java:5)

Para prevenir que isto Figura


ocorra,2.5 – Layout Memória duas variáveis referência para o mesmo objeto
podemos colocar o código dentro de um bloco try-catch. O bloco finally é
opcional. Neste exemplo, não utilizaremos o bloco finally.

2.3 Membros de Instância


public class ExceptionExample {
Cada objeto criado deverá ter sua própria args)
public static void main(String[] { de variáveis
instância Os valores das variáveis
(atributos) definidas pela
try classe.
{ Os métodos definem o comportamento de um em um objeto constituem
objeto. Isto é importante, poisSystem.out.println(args[1]);
denota que um método pertence a cada objeto da o seu estado.
classe. Porém não devemos confundir
} catch isto com a implementação do método,
(ArrayIndexOutOfBoundsException exp)que
{
System.out.println("Exception caught!"); Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
} o mesmo estado se suas
2.3.1 Invocação
System.out.println("Finish"); variáveis membro têm os
} de Métodos
}Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
objeto pode ter que mostrar um comportamento particular
Listagem 8.1 – Tratando invocando uma
exceção de runtime
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamadaAssim,
de um método
quando em um objeto
tentarmos rodar ousando
programa o operador
novamente sem"."
binário (ponto), dos argumentos, a saída
a informação
devendo
trataria especificar
a exceção a mensagem
e o fluxo do programacompleta: o objeto quemostrando
não será interrompido, é o recebedor da
o resultado:
mensagem, o método a ser invocado e os argumentos para o método (se houver).
O método invocado
Exception no recebedor
caught! Finish pode também enviar informações de volta ao
objeto chamador através de um valor de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 98
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
110
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava