Escolar Documentos
Profissional Documentos
Cultura Documentos
Linguagem Java
Java OO
www.3way.com.br
Linguagem
Linguagem de
de Programação
Programação Java
Java
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
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
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.
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
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
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.
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
// 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
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
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:
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
//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.
//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();
nomeDoObjeto.nomeDoMétodo([argumentos]);
Figura 2.4 – Layout Memória após inicialização
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
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
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
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
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
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.
// (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.
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
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.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>
*/
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
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
}
}
Listagem 3.2 – Declaração de variáveis
System.out.println() ou System.out.print()
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
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.
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.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):
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
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.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
int i = 3.14;
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.
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.
retorna erro:
Note no exemplo anterior que a classe Boolean recebe um construtor de String que não difere de
maiúsculas ou minúsculas.
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.
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
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
// 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 );
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
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 ^.
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:
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
x1 x2 Resultado
true true true
true false true
false true true
false false false
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:
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
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;
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
// 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
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;
int x = 7, y = 3,resultado=0;
resultado = (++y)%2*5 + (++x)/2+8*(y--) + -10;
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
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:
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
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:
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
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);
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).
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;
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
return ++count;
ou
return "Hello";
Abordaremos as declarações return nas próximas lições, quando falarmos sobre métodos.
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;
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:
// 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:
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:
O código abaixo utiliza uma declaração for para mostrar todos os elementos de um array.
// array de caracteres de 8 x 16 x 24
char [][][] tresD = new char[8][16][24];
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
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.
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;
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
import java.util.Arrays;
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
} 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
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:
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.
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
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) {
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
this.idade = idade;
}
Este método irá atribuir o valor do argumento idade para o atributo de objeto idade do objeto Estudante.
Quando tentamos chamar estes métodos no método main(), criado para a classe EstudanteExemplo:
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
}
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
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
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
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
double salario;
java.util.Date dataContrato;
String nome;
String cargo="indefinido";
public Funcionario(){}
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";
}
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:
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:
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:
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.5 – Layout Memória duas variáveis referência para o mesmo objeto
então podemos fazer a seguinte declarações:
//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");
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):
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
Mas agora não é possível utilizarmos a referência para fazermos acesso aos membros do o objeto Gerente:
System.out.println("funcionario:
Figura 2.5 – Layout Memória"duas
+ variáveis
o_funcionario.toString());
referência para o mesmo objeto //ok
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 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
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
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.
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.
package <nomeDoPacote>;
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
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;
}
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
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;
double salario;
Date dataContrato; //(1)
String nome;
String cargo="indefinido";
public Funcionario(){}
class Calcula1 {
class Calcula2 {
package packageA;
}
Listagem 7.24 – Definindo classes no pacote A
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
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
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:
import java.util.Date;
public Funcionario() {
}
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;
// 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
// instancia de Gerente
Gerente funcionario = new Gerente("Hide Otta", 1999.99,
dataBase.getTime(),"Effe Ciente");
}
}
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
public Funcionario() {
}
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
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;
}
Listagem 7.31 – Implementando classes abstratas
//superclasse
public abstract class Felino extends Animal {
}
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";
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
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.
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
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:
Uma interface não faz parte de uma hierarquia de classes. Classes não relacionadas podem implementar a
mesma interface.
Entretanto, não se pode criar uma instância de uma interface, assim como não podemos instanciar
classes abstratas. Um exemplo disso é:
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.
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
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:
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:
} // fim TesteDescendente
} // 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()
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");
}
}
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:
int estacao;
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:
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;
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.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
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:
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
} catch (Exception e) {
System.out.println(e);
A compilação desse código produzirá a mensagem de erro abaixo, já que a classe Exception é superclasse
da classe ArrayIndexOutOfBoundsException.
class ThrowDemo {
//atribuindo valor a variável referência
Carro public
carro1static
= new void
Carro();
main(String args[]) {
carro1.ano = "2001";
carro1.modelo=
try {"fusca";
carro1.cor = "prata";
throw new RuntimeException("throw demo");
} catch (RuntimeException e) {
System.out.println("Exceção capturada aqui.");
System.out.println(e);
}
}
}
Listagem 8.3 – Lançando exceções
Este exemplo mostra o método m() (linha 2) repassando a exceção ClassNotFoundException. O método
main() (linha 6), método chamador de m(), tornou-se o responsável por tratar a exceção lançada por
Class.forName(), invocado por m() (linha 3).
3. O código pode ter um bloco catch específico para tratar a exceção que foi lançada.
4. Temos o oposto
//atribuindo do terceiro
valor cenário, onde
a variável a exceção não é tratada. Nesse caso, a exceção lançada não
referência
foi tratada
Carro carro1por= nenhum bloco catch.
new Carro();
carro1.ano = "2001";
Estes cenários são vistos
carro1.modelo= na classe a seguir:
"fusca";
carro1.cor = "prata";
public class CenariosExceptionsDemo {
try {
switch (n) {
case 1:
System.out.println("primeiro caso");
return;
case 3:
System.out.println("terceiro caso");
throw new RuntimeException("terceiro caso demo");
case 4:
Figura 2.4 – Layout Memória após inicialização
System.out.println("quarto caso");
//criando novo alias throw new Exception(" quarto caso demo");
case 2:
Carro carro2 = carro1;
System.out.println("segundo case");
}
} catch (RuntimeException e) {
System.out.print("captura RuntimeException:"+e.getMessage());
} finally {
System.out.println("bloco try executado.");
}
}
try {
CenariosExceptionsDemo.myMethod(i);
} catch (Exception e) {
Figura 2.5 –System.out.print("Exção
Layout Memória duas variáveis referênciatratada:
para o mesmo objeto
");
System.out.println(e.getMessage());
}
System.out.println();
2.3 Membros de}Instância
Cada }objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
} definidas pela classe. Os métodos definem o comportamento de um Para
(atributos) emcriar
um uma classe
objeto de
constituem
objeto. Isto é importante, pois
Listagem 8.5denota
– Cenáriosque umtry-catch-finally
do bloca método pertence a cada objeto da exceção, aoclasse tem que
seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que estender a classe
Dois objetos distintos têm
é8.4
compartilhada
Criando por todas as instâncias da classe.
Exceções o mesmo estado ou
RuntimeException se suas
Apesar de muitas classes de exceção já existirem no pacote java.lang, Exception.
variáveis membro têm os
2.3.1 classes
essas Invocação de Métodos
de exceção não são suficientes para cobrir todas possibilidades de
mesmos valores.
exceções Objetos
que podem se comunicam pela troca de mensagens,
ocorrer na implementação isto significa
de suas próprias classes. que
Daí aum
objetodepode
razão ter que
querermos criarmostrar um comportamento
nossas próprias classes de exceções.particular invocando uma
operaçãoPara apropriada que foi definida no objeto.
criar nossa própria exceção, teremos que criar Em Java, uma
isto classe
é feitoquepela
chamada de um método em um objeto usando o operador binário
estenda a classe RuntimeException ou Exception, ou qualquer de suas subclasses. "." (ponto),
devendo
Deste especificar
modo, devemosa personalizar
mensagem acompleta:
classe de oacordo
objetocom queo éproblema
o recebedor
a ser da
mensagem,
resolvido. o método
Atributos a ser invocado
de objeto e os argumentos
e construtores para o método
podem ser adicionados (se classe
na sua houver).
O método
de exceção.invocado no recebedor pode também enviar informações de volta ao
Veja um 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 102
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
114
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação
Exemplos:
Aqui, TesteB1 (Listagem 8.8), vai compilar pois ArithmeticException é subclasse de RuntimeException. Já
TesteB2 (Listagem 8.9), nãovalor
//atribuindo a Exception
compila, variávelé superclasse
referência de RuntimeException.
Mais exemplos,
Carro carro1seguindo
= new as regras:
Carro();
carro1.ano = "2001";
import java.io.*;
carro1.modelo= "fusca";
public class TestMultiA
carro1.cor = "prata"; {
public void metodoA() throws IOException, RuntimeException {
// faz alguma operação IO
}
}
Listagem 8.10 – Sobrepondo métodos que relançam exceções
import java.io.*;
public class TestMultiB1 extends TestMultiA {
public void metodoA() throws FileNotFoundException,
UTFDataFormatException, ArithmeticException {
// faz agluma operação de IO e númerica
}
} Figura 2.4 – Layout Memória após inicialização
A versão com generics de ArrayList usa o literal <String>, aparecendo imediatamente após a referência do
tipo ArrayList. Assim declarada, a referência genArrList ficará amarrada ao tipo String. Logo, somente objetos do
tipo String poderão ser usados com o método add(), bem como, não será possível retornar objeto do tipo Integer
ou qualquer outro tipo que não seja do tipo String, usando o método get(). As próximas instruções não são válidas:
A sintaxe <Leao> após a declaração de Jaula especifica que essa instância da classe irá trabalhar com
variáveis//atribuindo
do tipo Leao. Podemos
valortrabalhar com variáveis
a variável do tipo Integer ou qualquer outro tipo de referência. Para
referência
trabalharCarro Integer, =
com umcarro1 o fragmento do código teria a seguinte instrução:
new Carro();
carro1.ano = "2001";
Jaula<Integer>
carro1.modelo= jaulaInteger
"fusca"; = new Jaula<Integer>();
carro1.cor = "prata";
Observe a declaração para o método get() (linha 5):
O método get() retorna um valor do tipo TipoValido, que é um tipo Generic. Isso significa que o método
terá um tipo de dado em tempo de execução, ou mesmo em tempo de compilação. Depois de declarar um objeto
do tipo Jaula, TipoValido será ligado a um tipo de dado específico. Essa instância atuará como se tivesse sido
declarada para ter esse tipo de dado específico, e apenas esse, desde o início.
No seguinte código, duas instâncias da classe Jaula foram criadas.
Figura 2.4 – Layout Memória após inicialização
Jaula <String> jaulaString = new Jaula <String>();
//criando
String str novo alias
= jaulaString.get();
Carro carro2 = carro1;
Jaula <Urso> jaulaUrso = new Jaula <Urso>();
Urso urso = jaulaUrso.get();
Note que a criação de uma instância de uma classe que utiliza Generics é bem similar à criação de uma
classe normal, exceto pelo tipo de dado específico entre os sinais <> logo após o nome do construtor. Essa
informação adicional indica o tipo de dado com que você trabalhará para essa instância da classe Jaula em
particular. Depois de criada a instância, torna-se possível acessar os elementos da classe sem a necessidade do
typecast no valor do retorno do método get(), uma vez que já foi decidido que ele irá trabalhar com um tipo de
dado de referência específico.
A instanciação de obj1 (Listagem 9.3, linha 3) é válida, uma vez que Gato é uma subclasse de Animal.
Porém a criação de obj2 (linha 5) causará um erro em tempo de compilação, uma vez que Animal não é uma
subclasse de Carnivoro.
Usar Generics limitados nos dá um benefício adicional, que é a checagem estática de tipos. Como
resultado, nós temos a garantia de que toda instanciação de um tipo Generics respeita os limites (ou restrições) que
atribuímos a ele. Uma vez que asseguramos que toda instância do tipo é uma subclasse do limite atribuído, e então
podemos chamar, de forma segura, qualquer método do objeto.
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
NOTA a ausência do limite explícito no parâmetro, <T> é o mesmo que <T extends Object>.
System.out.println("doidao");
ArrayList<E> lista = new ArrayList<E>();
//atribuindo valor a variável referência
lista.add(e);
Carro carro1 = newlista;
return Carro();
carro1.ano
} = "2001";
carro1.modelo= "fusca";
carro1.cor = "prata";
public static void main(String[] args) {
System.out.println(make(new Integer(1200)));
System.out.println(make(777));
System.out.println(make(777.0));
}
}
Listagem 9.4 – Métodos genéricos
Para construir uma nova instância de ArrayList<Integer>, nós simplesmente teríamos o seguinte comando:
Util.make(new Integer(0));
A coisa mais estranha na declaração de um método genérico é que devemos colocar o <T> antes do tipo
de retorno do método. O <T>, posto assim, implica que o método retorna o que vem após sua declaração, no caso,
ArrayList<E>.
9.4 Subtipagem
Como você já sabe, é possível atribuir a referência de um objeto Integer a um Object, já que Object é um
supertipo de Integer:
Na terminologia de orientação a objetos, isto é um relação do tipo é-um. Uma vez que Integer é um tipo
2.3 Membros de Instância
de Object, então a atribuição é permitida. Mas Integer é também um tipo de Number, então o código seguinte
também éCada
válido.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,
public pois denota que um
void umMetodo(Number n){método pertence a cada objeto da o seu estado.
classe. Porém não //devemos
corpo doconfundir
métodoisto com a implementação do método, que
omitido
}
Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
umMetodo(new Integer(10)); // OK o mesmo estado se suas
umMetodo(new Double(10.1)); // OK
2.3.1 Invocação de Métodos variáveis membro têm os
mesmos valores.
OObjetos
mesmosepode
comunicam
ser dito pela
para troca de mensagens,
generics. isto Jaula
Usando a classe significa que um
(Listagem 9.2), tendo Number como seu
objeto pode ter que mostrar um comportamento particular invocando
argumento de tipo da classe, você pode realizar uma invocação ao método add() umacom qualquer argumento seja
operação apropriada
compatível com Number: que foi definida no objeto. Em Java, isto é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
devendoJaula<Number>
especificar a mensagem
jaula = completa: o objeto que é o recebedor da
new Jaula<Number>();
mensagem, o método a serInteger(10));
jaula.add(new invocado e os argumentos
// OK para o método (se houver).
O métodojaula.add(new Double(10.1));
invocado no recebedor pode também // OKenviar 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 109
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
121
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação
Animal a = rei;
import java.util.*;
class Jaula<E> {
private E animal;
public Jaula() { }
Figura 2.4 – Layout Memória após inicialização
public
//criando E get()
novo alias{
return animal;
Carro carro2 = carro1;
}
Figura
public static 2.5 – Layout
void Memória duas variáveis
main(String[] args) referência
{ para o mesmo objeto
com genérics, parece que perdemos o que havia de melhor em Java, o polimorfismo de referência. O que você deve
observar//atribuindo
é que a notação de genéricos
valor nos obrigareferência
a variável a trabalhar com um único tipo, não nos deixando manipular os
métodosCarro
sobrepostos
carro1nas =subclasses a partir de referências do tipo da superclasse, como vimos ser possível ao
new Carro();
estudarmos polimorfismo, =
carro1.ano sem generics.
"2001";
Para continuarmos com
carro1.modelo= a segurança de tipo, trazida por generics, e ainda termos o nosso aclamado
"fusca";
carro1.cor
comportamento = "prata";
polimórfico, precisamos de uma maneira de dizer ao compilador que desejamos usar qualquer
subtipo genérico do tipo do argumento declarado. Felizmente podemos utilizar o literal <?>, o coringa, como forma
de dizer ao compilador que o método aceita qualquer tipo, ou ainda <? extends AlgumaClasse>, para dizer que
qualquer objeto do tipo da classe ou de suas subclasses serão aceitos.
Vejamos nosso exemplo modificado:
public T get() {
return animal;
//atribuindo
} valor a variável referência
Carro carro1 = new Carro();
carro1.ano = "2001";
public void add(T animal) {
carro1.modelo= "fusca";= animal;
this.animal
carro1.cor
} = "prata";
public void fill(List<? extends Carnivoro> listaCanivoros){
//animais.add(new Carnivoro("qq"));
//não pode adicionar quando
//usamos <? extends Carnivoro>
for(Carnivoro bicho: listaCarnivoros)
bicho.fazerRuido();
}
Listagem 9.9 – Coringa torna sua referência somente leitura
Outra situação que provavelmente você esperaria encontrar é uma declaração como a que se segue:
As coleções não se resumem somente a estas interfaces e classes concretas da Figura 10.1, na verdade
estamos apresentando as que são mais utilizadas por programadores Java, uma lista mais detalhada pode ser
verificada na documentação da API.
import java.util.*;
[1, 2, String]
Exception in thread "main" java.lang.ClassCastException: java.lang.String
at java.lang.Integer.compareTo(Integer.java:35)
at java.util.Arrays.mergeSort(Arrays.java:1156)
at java.util.Arrays.sort(Arrays.java:1080)
at java.util.Collections.sort(Collections.java:117)
at treeway.cap9.NaoGenericoDemo.main(NaoGenericoDemo.java:12)
O que acontecerá será um erro de compilação na linha 8, ou seja, o Generics bloqueia os elementos
estranhos a lista não permitindo
//atribuindo valor a quevariável
esta tenhareferência
elementos diversos, fora o especificado. Assim você não terá
nenhuma surpresa
Carro durante=a new
carro1 execução do seu programa.
Carro();
carro1.ano = "2001";
The method add(Integer)
carro1.modelo= in the type List<Integer> is not
"fusca";
applicable for the=arguments
carro1.cor "prata";(String)
// imprime lista1
for (String e : lista1)
System.out.println(e);
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
// imprime lista2
for (Integer e : lista2)
2.3 Membros de Instância
System.out.println(e);
}
}
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
Listagem 10.3 – Enhanced For
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
é10.3.2 Interface por
compartilhada Iterator
todas as instâncias da classe.
o mesmo
Interface muito importante é a interface Iterator, que permite navegar (iterar) pelos estado se de
vários elementos suas
uma coleção.
2.3.1 Invocação de Métodos variáveis membro têm os
Objetos interface
se comunicam pela troca de{ mensagens, isto significa que um mesmos valores.
public Iterator<E>
objeto pode ter que mostrar
//retorna trueumse comportamento particular invocando
houver mais elementos a iterar uma
operação apropriada
boolean quehasNext();
foi definida no objeto. Em Java, isto é feito pela
chamada de um //retorna
método em o um
proximo
objetoelemento na proxima
usando o operador iteracao
binário "." (ponto),
E next();
devendo especificar a mensagem completa: o objeto que é o recebedor da
//remove o ultimo elemento retornado pela iteracao
mensagem, o método a ser invocado e os argumentos para o método (se houver).
void remove();
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 116
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
129
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação
A interface Iterator é bastante simples, uma referência a Iterator é obtido da própria coleção, que
implementa Iterator, através
//atribuindo do método
valor iterator()referência
a variável e depois podemos navegar pela coleção por meio dos métodos
hasNext(), next()carro1
Carro e remove();
= new Carro();
carro1.ano = "2001";
Veja exemplo :
carro1.modelo= "fusca";
carro1.cor = "prata";
import java.util.*;
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
10.4 Usando Listas – Interface List
Implementa listas de dados, onde os elementos (repetidos ou não) estão ordenados pelo índice e não
classificado.
2.3 Membros de Instância
Cada objeto criado deverá ter sua própria instância de variáveis
10.4.1 LinkedList Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de
É implementação de uma lista encadeada. A classe LinkedList contém métodos emum que um objetoque
permitem constituem
listas
objeto. Isto sejam
encadeadas é importante, pois pilhas,
usadas como denotafilas
queouumalgum
método pertence
outra a cada
estrutura objeto
de dados. Temdauma inserção
o eseu
deleção muito
estado.
classe.
mais Porémque
rápidos nãoArrayList
devemos confundir isto com a implementação do método, que
e Vector. Dois objetos distintos têm
é compartilhada
O códigopor todasmostra
a seguir as instâncias da classe.
como usar a classe LinkedList e vários dos métodos definidos em Collection:
o mesmo estado se suas
2.3.1 Invocação de Métodos
import java.util.*; variáveis membro têm os
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
public class LinkedListDemo {
objeto pode ter que mostrar um comportamento particular invocando uma
operação apropriada
publicque foi definida
static no objeto. Em
void main(String Java, isto
args[]) { é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
devendo especificar aLinkedList<Integer>
mensagem completa: olista objeto= que
new éLinkedList<Integer>();
o recebedor da
mensagem, o método a//adiciona
ser invocado elementos
e os argumentos para
a lista
o método (se houver).
O método invocado nolista.add(new
recebedor pode Integer(1));
também enviar informações de volta ao
objeto chamador através de um valor de
lista.add(new retorno. O método chamado deve ser
Integer(2));
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 117
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
130
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação
lista.add(new Integer(3));
lista.add(new Integer(1));
//atribuindo valor a variável referência
Carro carro1 = new Carro();
//imprime elementos com toString() de AbstractColletion
carro1.ano //= e"2001";
quantidade de elementos da lista
carro1.modelo= "fusca";
System.out.println(lista + ", size = " + lista.size());
carro1.cor = "prata";
//adiciona elemento inicio da lista
lista.addFirst(new Integer(0));
//adiciona elemento fim da lista
lista.addLast(new Integer(4));
10.5 ArrayList
Vector é apropriado para uso em multithread, porém é mais lento que ArrayList. O ArrayList é uma versão
de um array redimensionável.Figura Usa2.5métodos não-sincronizados,
– Layout Memória seu para
duas variáveis referência acesso aleatório
o mesmo objeto é rápido, prefira esta a
LinkedList se precisar de iteração rápida que pouca inserção ou remoção aleatória. Exemplo:
import java.util.*;
2.3 Membros de Instância
Cada objeto
public classcriado deverá ter {sua própria instância de variáveis
ArrayListDemo Os valores das variáveis
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
public static
objeto. Isto é importante, main(String
void que
pois denota um método args[])
pertence a{ cada objeto da o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
ArrayList<String> al = new ArrayList<String>(2); Dois objetos distintos têm
é compartilhada por todas as instâncias da classe. + ", tamanho = " + al.size());
System.out.println(al
o mesmo estado se suas
al.add("R");
2.3.1 al.add("U");
Invocação de Métodos variáveis membro têm os
al.add("O");
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
System.out.println(al + ", tamanho = " + al.size());
objeto pode ter que mostrar um comportamento particular invocando uma
operação apropriada al.remove("U");
que foi definida no objeto. Em Java, isto é feito pela
chamada de um método em um objeto usando o+operador
System.out.println(al = "."
binário
", tamanho " +(ponto),
al.size());
ListIterator li = al.listIterator();
devendo especificar a mensagem completa: o objeto que é o recebedor da
mensagem, o método awhile
ser invocado e os argumentos para o método (se houver).
(li.hasNext())
O método invocado no recebedor pode também enviar informações de volta ao
System.out.println(li.next());
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 118
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
131
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação
import java.util.*;
inicio = System.currentTimeMillis();
fim = System.currentTimeMillis();
tempo = (fim - inicio) / 1000.0;
System.out.println("Tempo : " + tempo);
System.out.println("Consultando " +size+ " elementos...");
inicio = System.currentTimeMillis();
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
for (int i = 0; i < size; i++) {
c.contains(i);
}
2.3 Membros de Instância
Cada objeto fim
criado deverá ter sua própria instância de variáveis
= System.currentTimeMillis(); Os valores das variáveis
tempo = (fim
(atributos) definidas pela classe. - inicio)
Os métodos / 1000.0;
definem o comportamento de um
System.out.println("Tempo : " + tempo); 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
public as instâncias
static da classe.
void main(String[] args) {
o mesmo estado se suas
variáveis membro têm os
TestaEficienciaCollection teste= new TestaEficienciaCollection()
2.3.1 Invocação de Métodos
ArrayList <Integer> c1 = new ArrayList<Integer>(); mesmos valores.
Objetos se comunicam pela troca de mensagens, isto significa que um
LinkedList <Integer> c2 = new LinkedList<Integer>();
objeto pode ter que Vector<Integer>
mostrar um comportamento particular invocando uma
c3 = new Vector<Integer>();
operação apropriada teste.mensurar(c1,1000);
que foi definida no objeto. Em Java, isto é feito pela
chamada de um método teste.mensurar(c2,1000);
em um objeto usando o operador binário "." (ponto),
teste.mensurar(c3, 1000);
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
Listagem 10.7 informações
– Teste de perfomance 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 119
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
132
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação
import java.util.*;
10.6.2 TreeSet
O TreeSet é uma implementação da interface Set que usa uma árvore de balanceamento. Esta classe
assegura que o conjunto será organizado em uma ordem ascendente, na regra de comparação padrão. Veja o
exemplo:
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
import java.util.*;
10.7.1 HashMap
Implementação de
//atribuindo Map,a modela
valor variávelmapas não ordenados, sem classificação e com métodos não-
referência
sincronizados.
CarroA carro1
implementação
= new usa o código de hash do objeto, chama o método hashCode(), que determina
Carro();
onde umcarro1.ano
objeto será ou está
= armazenado.
"2001"; Veja exemplo:
carro1.modelo= "fusca";
carro1.cor = "prata";
import java.util.HashMap;
import java.util.*;
Veja exemplo de comparação entre objetos Funcionários baseado na diferença das datas de contratação,
ordenado pelo tempo de casa em ordem decrescente.
import java.util.*;
Figura 2.4 – Layout Memória após inicialização
public class
//criando Funcionario
novo alias implements Comparable<Funcionario> {
Carro carro2 = carro1;
private double salario;
private Date dataContrato;
private String nome;
private String cargo = "indefinido";
public Funcionario() {
}
dataContrato.set(2002, 2, 02);
funcList.add(new Funcionario("Frodo",3000, dataContrato.getTime()));
dataContrato.set(1997, 3, 02);
funcList.add(new Funcionario("Zaroldo",400,dataContrato.getTime()));
Esta tipo de comparação sempre ocorre entre os objetos do mesmo tipo armazenados na lista, porém há
outra maneira. Podemos criar classes que implementam a interface Comparator e chamar a sobrecarga do método
sort(List o, Comparator c), assim o método sort() irá empregar o objeto que implementa Comparator ao invés de
chamar compareTo() do objeto.
10.10 Exercício
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.
11
2.3 Construindo
Membros Interfaces Gráficas com AWT/Swing
de Instância
Mesmo sem conhecer interface gráfica com o usuário ou GUI (Graphical
Cada objeto criado deverá ter sua própria instância de variáveis Os valores
Projeto das variáveis
desenvolvido
User Interface) é possível criar uma grande variedade de diferentes projetos.
(atributos) definidas pela classe. Os métodos definem o comportamento de um ememGUI
umafeta
objeto constituem
o uso de
Entretanto, estas aplicações não teriam grandes chances de serem agradáveis aos
objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado.
usuários, tão acostumados aos ambientes gráficos como Windows, Solaris e Linux. sua aplicação pois
classe. Porém não devemos confundir isto com a implementação do método, que
Ter um projeto desenvolvido em GUI afeta o uso de sua aplicação pois Dois objetos
resulta distintos têm
em facilidade
éresulta
compartilhada por todas as instâncias
e melhordaexperiência
classe.
em facilidade de uso para os usuários de seus ode
mesmo estado se suas
uso e melhor
aplicativos. Java fornece ferramentas como Abstract Window Toolkit (AWT) e experiência para ostêm os
variáveis membro
2.3.1 para
Swing Invocação de Métodos
desenvolver aplicações GUI interativas.
Objetos se comunicam pela troca de mensagens, isto significa que um usuários.
mesmos valores.
objeto
11.1 pode ter que mostrar
AWT (Abstract Window umToolkit)
comportamento
vs. Swingparticular invocando uma
operaçãoA apropriada que foi definida no
JFC (Java Foundation Classes) é uma objeto. Em Java,
importante istodeé Java
parte feitoSDK.
pela
chamada de um método em um objeto usando o operador binário "."
Refere-se a uma coleção de APIs que simplificam o desenvolvimento de aplicações (ponto),
devendo especificarbasicamente
Java GUI. Consistem a mensagem emcompleta:
cinco APIs o objeto AWT
incluindo que eé Swing.
o recebedor
As outrasda
mensagem, o método a ser invocado e os argumentos para o método (se
três APIs são Java2D, Accessibility e Drag and Drop. Todas essas APIs dão suporte houver).
O método invocado no recebedor pode também enviar informações
aos desenvolvedores na criação e implementação de aplicações visualmente de volta ao
objeto chamador
destacadas. 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 123
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
136
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação
Ambas AWT e Swing dispõem de componentes GUI que podem ser usadas na criação de aplicações Java e
Applets. //atribuindo
Diferentemente de alguns
valor a componentes AWT que usam código nativo, a API gráfica de seu sistema
variável referência
operacional.
CarroSwing fornece
carro1 uma Carro();
= new implementação independente de plataforma que assegura que aplicações
desenvolvidas em diferentes
carro1.ano plataformas tenham a mesma aparência. AWT, entretanto, assegura que o look and
= "2001";
feel (a aparência) de uma aplicação
carro1.modelo= "fusca"; executada em duas máquinas diferentes sejam compatíveis. A API Swing é
carro1.cor
construída sobre um número= "prata";
de APIs que implementa várias partes da AWT. Como resultado, componentes AWT
ainda podem ser usados com componentes Swing, mas não é recomendado.
Você pode ver uma demonstração de AWT e Swing com exemplos do JDK, veja em:
> $JAVA_HOME/demo/jfc/SwingSet2/
Swing é escrito > java -jar SwingSet2.jar SwingSet2 Java fornece
inteiramente em ferramentas como
Java. 11.2 Componentes GUI AWT Abstract Window
Apesar de não ser mais tão utilizada a AWT, ainda é Toolkit (AWT) e Swing
utilizada indiretamente por Swing, como gerenciadores de para desenvolver
layouts e classes para controle de eventos. Assim aplicações GUI
apresentamos alguns componentes para que você se
Figura 2.4 – Layout Memória após inicialização interativas.
familiarize com o processo de desenvolvimento e vá
//criando novo alias
gradualmente aprendendo a utilizar a JFC.
Carro carro2 = carro1;
11.2.1 Fundamental Window Classes
No desenvolvimento de aplicações GUI, os componentes como os botões ou
campos de texto são localizados em containers. Essa é uma lista de importantes
classes containers fornecidas pela AWT.
Window Também herda a classe Container. Uma janela top-level, que significa que ela não pode ser
contida em nenhum outro objeto. Não tem bordas ou barra de menu.
2.3 Membros de Instância
Dialog Uma janela contendo a barra de título e o botão de fechar, utilizada para criar janelas para
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
comunicação com o usuário.
(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem
Frame Isto é importante,
objeto. Uma janela completa
pois denota quecomumum título,pertence
método barra de menu,
a cadaborda,
objetoedacantos redimensionáveis.
o seu estado.
Possui quatro
classe. Porém não devemos construtores,
confundir isto comdois deles possuemdo
a implementação as método,
seguintesqueassinaturas:
Dois objetos distintos têm
é compartilhada porFrame()
todas as instâncias da classe.
Frame(String title) o mesmo estado se suas
2.3.1 Invocação de Métodos Tabela 11.1: Classes Container AWT
variáveis membro têm os
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
objeto pode ter que omostrar
Para configurar tamanhoum comportamento
da janela, podemos utilizarparticular invocando
o método uma
setSize(), do seguinte modo:
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamadavoidde um método em width,
setSize(int um objeto intusando
height) o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da
mensagem,Reconfigura
o método o tamanho da janela
a ser invocado para
e os o width(largura)
argumentos height(altura)
para o emétodo fornecidos como argumentos.
(se houver).
O método invocado no recebedor pode também enviar informações de volta ao
void setSize(Dimension
objeto chamador através de um valord)de retorno. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 124
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
137
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação
Reconfigura o tamanho da janela para os atributos d.width e d.height baseado em um objeto instanciado
Dimension especificado
da classe//atribuindo valor como argumento.
a variável referência
Por padrão
Carro uma janela
carro1 = newnão é visível a não ser que seja configurada a sua visibilidade para true. Esta é a
Carro();
sintaxe para o método setVisible():
carro1.ano = "2001";
carro1.modelo= "fusca";
carro1.cor = "prata"; b)
void setVisible(boolean
Ao criar aplicações GUI, o objeto Frame é o mais comumente utilizado. Aqui está um exemplo de como
criar uma aplicação dessas:
import java.awt.*;
Note que o botão de fechar ainda não funciona porque nenhum mecanismo de suporte a eventos foi
adicionado a classe até o momento.
FiguraConheceremos sobre
2.5 – Layout Memória suportereferência
duas variáveis a eventos
para nos próximos
o mesmo objeto tópicos.
11.2.2 Graphics
Vários métodos
2.3 Membros de gráficos são encontrados na classe Graphics. Aqui está a lista de alguns desses métodos.
Instância
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
drawLine() definidas pela classe. Os métodos
(atributos) drawPolyline()
definem o comportamento setColor() de um em um objeto constituem
objeto.
fillRect()Isto é importante, pois denotadrawPolygon()
que um método pertence a cada objeto da
getFont() o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
drawRect() fillPolygon() setFont() Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
clearRect() getColor() drawString()
o mesmo estado se suas
2.3.1 Invocação de Métodos variáveis membro têm os
Tabela 11.2: Alguns métodos da classe Graphics
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
objeto pode ter que mostrar um comportamento particular invocando uma
operaçãoRelacionada
apropriadaa essa
queclasse
foi definida no Color,
está a classe objeto.que Emtem três construtores.
Java, isto é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
Formatodo
devendo Construtor
especificar a mensagem completa: o objeto Descrição que é o recebedor da
Color(int r, int
mensagem, g, int b) a ser invocado e os argumentos para
o método Valoro inteiro
métodode(se 0 ahouver).
255
O método invocado no recebedor
Color(float r, float g, float b) pode também enviar informações de volta
Valor decimal de 0.0 a 1.0. 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 125
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
138
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação
Aqui está uma classe demonstrando a utilização de alguns métodos da classe Graphics:
import java.awt.*;
GraphicsPanelDemo () {
// Constante na classe Color
setBackground(Color.WHITE);
}
Figura 2.4 – Layout Memória após inicialização
public void paint(Graphics g) {
//criando novo alias
// vermelho
g.setColor(new
Carro carro2 = carro1; Color(255, 0, 0));
g.setFont(new Font("Helvetica", Font.PLAIN, 16));
g.drawString("Bem Vindo ao mundo GUI de Java!", 30, 100);
// preto
g.setColor(new Color(1, 0, 0));
g.fillRect(10,100,150,10);
}
public ControlComponentDemo(){
setLayout(new GridLayout(4,6,10,10));
setSize(600, 200);
add(new Label("Nome"));
add(new Label("Componente"));
add(new Label("Nome"));
add(new Label("Componente"));
add(new Label("Nome"));
add(new Label("Componente"));
add(new Label("Button ->"));
add(new Button("Click Aqui"));
add(new Label("Label ->"));
add(new Label("Um
Figura Rotulo"));
2.5 – Layout Memória duas variáveis referência para o mesmo objeto
add(new Label("TextField ->"));
add(new TextField());
add(new Label("CheckBox ->"));
2.3 Membros deadd(new Instância Checkbox("chk1", true));
add(new
Cada objeto criado deverá Label("CheckBoxGroup
ter sua própria instância ->")); de variáveis
CheckboxGroup cbg = new CheckboxGroup(); Os valores das variáveis
(atributos) definidas pela classe.Checkbox("radios
add(new Os métodos definem1", o comportamento
cbg, true));de um em um objeto constituem
objeto. Isto é importante, pois denota que
add(new Label("List ->")); um método pertence a cada objeto da o seu estado.
classe. Porém não devemos
List confundir
list = new isto com a implementação
List(3, false); do método, que
list.add("item 1");
Dois objetos distintos têm
é compartilhada por todas as instâncias da classe.
list.add("item 2"); o mesmo estado se suas
add(list);
2.3.1 Invocação de Métodos variáveis membro têm os
add(new Label("Choice ->"));
Objetos se comunicam pela troca
Choice chooser = denewmensagens,
Choice();isto significa que um mesmos valores.
objeto pode ter que chooser.add("Opção
mostrar um comportamento 1"); particular invocando uma
operação apropriada chooser.add("Opção
que foi definida no objeto. 2"); Em Java, isto é feito pela
chooser.add("Opção 3");
chamada de um método em um objeto usando o operador binário "." (ponto),
add(chooser);
devendo especificar aadd(new
mensagem completa: o objeto
Label("Scrollbar que é o recebedor da
->"));
mensagem, o método aadd(new
ser invocado e os argumentos para o método (se houver).
Scrollbar());
O método invocado nosetBackground(Color.WHITE);
recebedor pode também enviar informações de volta ao
setVisible(true);
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 127
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
140
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação
Caso não seja necessário utilizar nenhum gerenciador de layout, é possível passar o layout do tipo nulo
(NullLayout) como argumento para esse método, ao se fazer isso será necessário posicionar todos os elementos
manualmente com a utilização do método setBounds() da classe Component. Este método possui a seguinte
assinatura:
O método controla a posição baseada nos argumentos x (esquerda) e y (topo), e o tamanho width
(largura) e height (altura) especificados. Isso seria bastante difícil e tedioso de programar, principalmente ao se
possuir um layout com diversos objetos Component e Container. Teríamos de chamar esse método para cada
componente, além de conhecer sua determinada posição em pixels. Sem falar que o resultado da apresentação em
diferentes ambientes gráficos ouFigura
resoluções deMemória
2.5 – Layout vídeo diferentes
duas variáveisnão podepara
referência sero mesmo
garantido.
objeto
import java.awt.*;
Como no gerenciador FlowLayout, os parâmetros hgap e vgap aqui também se referem ao espaçamento
entre os //atribuindo
componentes no container.
valor a Para um componente a uma região específica, use o método add() e
adicionarreferência
variável
passe dois argumentos:
Carro carro1o =componente
new Carro(); a ser adicionado e a região onde o componente deve ser posicionado.
Adicionarcarro1.ano
mais de um componente
= "2001"; a um container resulta em exibir apenas o último componente adicionado. A
lista a seguir apresenta as regiões
carro1.modelo= válidas que são campos predefinidos na classe BorderLayout.
"fusca";
carro1.cor
= "prata";
BorderLayout.NORTH
BorderLayout.SOUTH
BorderLayout.EAST
BorderLayout.WEST
BorderLayout.CENTER Apenas um
componente pode
Aqui está uma classe demonstrando como a BorderLayout pode ser utilizada: ser colocado em
uma região.
import java.awt.*;
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
Construtores GridLayout
//atribuindo valor a variável referência
GridLayout() Cria um novo objeto GridLayout com uma única linha e uma
Carro carro1 = new Carro();
única coluna por padrão.
carro1.ano = "2001";
GridLayout(int rows, int cols)"fusca";
carro1.modelo= Cria um novo objeto GridLayout com o número especificado
carro1.cor = "prata"; de linhas e colunas.
GridLayout(int rows, int cols, int hgap, int vgap) Cria um novo objeto GridLayout com o número especificado
de linhas e colunas. Os espaçamentoshorizontalhgap e
verticalvgap sãoaplicadosaoscomponentes.
import java.awt.*;
Esse é o resultado da classe (observe o efeito do redimensionamento sobre o frame na segunda figura):
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
import java.awt.*;
//atribuindo
public valor a variável
class CompondoLayouts referência
extends Frame {
Carro carro1 = new Carro();
carro1.ano = "2001";
public static void main(String args[]) {
carro1.modelo= "fusca";
carro1.corCompondoLayouts
= "prata"; cl = new CompondoLayouts();
Panel panelNorth = new Panel();
Panel panelCenter = new Panel();
Panel panelSouth = new Panel();
/* Painel North */
// Painéis usam FlowLayout por padrão
panelNorth.add(new Button("ONE"));
panelNorth.add(new Button("TWO"));
panelNorth.add(new Button("THREE"));
/* Painel Center */
panelCenter.setLayout(new GridLayout(1, 4));
panelCenter.add(new TextField("1st"));
Figura 2.4
panelCenter.add(new – Layout Memória após inicialização
TextField("2nd"));
//criando panelCenter.add(new
novo alias TextField("3rd"));
panelCenter.add(new
Carro carro2 = carro1; TextField("4th"));
/* Painel South */
panelSouth.setLayout(new BorderLayout());
panelSouth.add(new Checkbox("Choose me!"), BorderLayout.CENTER);
panelSouth.add(new Checkbox("I'm here!"), BorderLayout.EAST);
panelSouth.add(new Checkbox("Pick me!"), BorderLayout.WEST);
11.4 Componentes
//atribuindo GUI Swing
valor a variável referência
Como pacote AWT,
Carroo carro1 o pacote
= new Swing fornece classes para criar aplicações GUI. O pacote é encontrado em
Carro();
javax.swing. A diferença principal
carro1.ano entre esses dois é que o componente Swing é escrito inteiramente usando Java enquanto o
= "2001";
outro não. Como resultado, projetos
carro1.modelo= "fusca"; GUI escritos utilizando classes do pacote Swing possuem a mesma aparência mesmo
quando executado
carro1.cor sobre plataformas completamente diferentes. Além disso, Swing fornece componentes mais interessantes.
= "prata";
Os nomes dos componentes de Swing são quase similares aos componentes AWT. Uma diferença óbvia é a convenção
de nomes dos componentes. Basicamente, os nomes dos componentes Swing são os mesmos nomes dos componentes AWT
mas com um prefixo em que é adicionado a letra J. Por exemplo, um componente no AWT é a classe Button, o mesmo
componente correspondente a este no pacote Swing é a classe JButton. Descrito abaixo, está uma lista de alguns dos
componentes Swing:
Componente Descrição
JComponent A classe raiz para todos os componentes Swing, excluindo containers hierarquicamente
superiores.
JTextField Permite a edição de uma única linha de texto. Corresponde a classe TextField no pacote
AWT.
JFrame Herda e corresponde a classe Frame no pacote AWT, mas as duas são ligeiramente
incompatíveis em termos de adição de componentes a esse container. É preciso pegar o
conteúdo do pane atual antes de adicionar um componente.
JPanel Herança de um JComponent.É uma classe container simples. Corresponde a classe Panel
no pacote AWT.
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
JApplet Herança da classe Applet no pacote AWT. Também ligeiramente incompatível com a
classe Applet em termos de adição de componentes a esse container.
2.3 Membros
JOptionPane de Instância
Herda JComponent. Fornece uma maneira fácil de exibir caixas de diálogo pop-up.
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
JDialog Herança
(atributos) definidas pela classe. da classe
Os métodos Dialog onocomportamento
definem pacote AWT. Normalmente
de um utilizado para informar o
em um objeto constituem
usuário de
objeto. Isto é importante, pois denota quealguma coisa oupertence
um método alertá-lo para umaobjeto
a cada entrada.
da o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
JColorChooser Herda JComponent. Permite ao usuário selecionar uma cor. 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 Tabela 11.7 - Alguns componentes Swing
variáveis membro têm os
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
de componentes Swing, por favor recorra à documentação API.
objeto Para
podea lista
ter completa
que mostrar um comportamento particular invocando uma
operação apropriada que foi definida
11.4.1 Configurando Containers JFrame e JApplet
no objeto. Em Java, isto é feito pela
chamada de um método em um objeto
Como mencionado, os containers top-level usandocomo o operador
o JFrame e o "."
binário (ponto),
JApplet no pacote Swing são ligeiramente
devendo especificar
incompatíveis a mensagem completa:
com seus correspondentes AWT. Isso emo termos
objetodeque é de
adição o componentes
recebedor da ao container. Ao invés de adicionar
mensagem,um
diretamente o método
componente a seraoinvocado
container e os argumentos
como nos containerspara AWT,o émétodo (seprimeiro
necessário houver).pegar o conteúdo do ContentPane
do container.invocado
O método Para fazer isso utiliza-se o método
no recebedor getContentPane()
pode também do container: de volta ao
enviar 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 133
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
147
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação
import javax.swing.*;
import java.awt.*;
//atribuindo valor a variável referência
Carro
publiccarro1
class = new Carro();
SwingDemo extends JFrame {
carro1.ano = "2001";
JButton botao = new JButton("Fonte");
carro1.modelo= "fusca";
JLabel rotulo = new JLabel("Um botao");
carro1.cor = "prata";
public SwingDemo() {
super("Primeira Aplicação Swing");
this.setSize(300, 100);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(new FlowLayout());//default BorderLayout
this.getContentPane().add(rotulo);//conteiner que recebe o componente
this.getContentPane().add(botao);
this.setVisible(true);
}
Note que o pacote java.awt ainda é importado porque os gerenciadores de layout em uso são definidos
neste pacote. Aqui está um resultado demonstrativo:
<Tipo> depende do tipo de event source. Ele pode ser Key, Mouse, Focus, Component, Action e outros.
Diversos listener podem ser registrados para um event source para recepção de notificações de
eventos. Um listener registrado pode também ser removido através do método remove<Tipo>Listener.
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
void remove<Tipo>Listener(<Tipo>Listener listenerObj)
KeyEvent Estende a classe InputEvent. Instanciado quando uma tecla é pressionada, liberada ou
digitada
//atribuindo (pressionada
valor e liberada).
a variável referência
Carro carro1 = new Carro();
MouseEvent Estende a classe InputEvent. Instanciada quando um botão do mouse é pressionado,
carro1.ano = "2001";
liberado,"fusca";
carro1.modelo= clicado (pressionado e liberado) ou quando o cursor do mouse entra ou sai de uma
carro1.corparte=visível de um componente.
"prata";
TextEvent Estende a classe AWTEvent. Instanciada quando o valor de um campo texto ou area de texto
sofre alteração.
WindowEvent Estende a classe ComponentEvent. Instanciada quando um objeto Windowé
aberto,fechadoativado, desativado, minimizado, restaurado ou quando o foco
étransferido para dentro ou para fora da janela.
Tabela 1: Classes Event
Tome nota: todas as subclasses de AWTEvent seguem esta convenção de nomeação: <Tipo>Event
2.3 Membros
11.5.3.5 Roteiro para decriação
Instância
de Aplicações Gráficas com tratamento de eventos
Cada objeto criado
Estes são os passos a serem deverá ter sua
lembrados própria
ao criar uma instância de variáveis
aplicação gráfica com tratamentoOs valores das variáveis
de eventos.
(atributos)1.definidas pela classe. Os métodos definem o comportamento de um
Criar uma classe que descreva e mostre a aparência da sua aplicação gráfica. em um objeto constituem
objeto. Isto
2. é Criar
importante, poisque
uma classe denota que uma método
implemente interfacepertence a cada
XXXListener objeto da
apropriada. o seuestar
Esta classe poderá inserida
estado.
classe. Porémna não devemos confundir
classe do primeiro passo. isto com a implementação do método, que
Dois objetos distintos têm
é compartilhada por todas
3. Na classe as instâncias
implementada, da classe.
sobrepor todos os métodos da interface XXXListener.o mesmo estado se suas
4. Descrever em cada método como o evento deve ser tratado. Podemos deixar vazio um método que
2.3.1 Invocação de Métodos variáveis membro têm os
não desejamos tratar.
Objetos se comunicam
5. Registrar pela troca de(amensagens,
o objeto XXXListener instância daisto significa
classe que umdo passo mesmos
XXXListener valores.
2) no EventSource
objeto pode utilizando
ter que omostrar
método um comportamento particular invocando uma
add<Tipo>Listener.
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamadaVejade exemplo
um métodode usoemdoumEvento Action:
objeto usando o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da
mensagem,import java.awt.BorderLayout;
o método a ser invocado e os argumentos para o método (se houver).
import java.awt.event.ActionEvent;
O método invocado no recebedor pode também enviar informações de volta ao
import java.awt.event.ActionListener;
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 137
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
151
www.3way.com.br
Linguagem de Programação
Linguagem Java Java
de Programação
import javax.swing.JButton;
import javax.swing.JFrame;
//atribuindo
import valor a variável referência
javax.swing.JTextField;
Carro carro1 = new Carro();
carro1.ano
public = "2001"; extends JFrame implements ActionListener {
class ActionDemo
carro1.modelo= "fusca";tf;
private JTextField
carro1.cor = "prata";
private JButton bt;
add(tf, BorderLayout.SOUTH);
add(bt, BorderLayout.NORTH);
setSize(300, 300);
bt.addActionListener(this);
Figura 2.4 – Layout
//o evento windowClose Memória após inicialização
e disparado
//criando this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
novo alias
setVisible(true);
Carro carro2 = carro1;
}
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
add(tf, BorderLayout.SOUTH);
add(bt3, BorderLayout.EAST);
add(bt2, BorderLayout.CENTER);
add(bt1, BorderLayout.WEST);
setSize(300, 300);
bt1.addActionListener(this);
bt2.addActionListener(this);
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
bt3.addActionListener(this);
//o evento windowClose e disparado
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
2.3 Membros desetVisible(true);
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
public void actionPerformed(ActionEvent actionEvent) { em um objeto constituem
objeto. Isto é importante, pois denota que um método pertence
if (actionEvent.getSource()== bt1)a cada objeto da o seu estado.
classe. Porém não devemos confundir isto com a implementação
tf.setText("Cliquei no botãodo1");
método, que
elseasif (actionEvent.getSource()== bt2) Dois objetos distintos têm
é compartilhada por todas instâncias da classe.
tf.setText("Cliquei no botão 2"); o mesmo estado se suas
2.3.1 Invocação de Métodos variáveis membro têm os
JButton bt = (JButton) actionEvent.getSource();
Objetos se comunicam pela troca de mensagens, isto significa que
if (bt.getActionCommand().equals("botão 3"))um mesmos valores.
objeto pode ter que mostrar um comportamento particular
tf.setText("Cliquei no botãoinvocando
3"); uma
}
operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamada de um método
public static objeto
em umvoid usando o operador
main(String args[]) binário
{ "." (ponto),
devendo especificar anewmensagem completa: o objeto
ActionDemo("Action Demo que 2");é 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. ListagemO11.10 – Eventoschamado deve ser
método
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 139
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
153
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
import java.awt.BorderLayout;
//atribuindo
import valor a variável referência
java.awt.TextField;
Carro carro1 = new Carro();
import java.awt.event.MouseEvent;
carro1.ano = "2001";
import java.awt.event.MouseListener;
carro1.modelo=
import "fusca";
java.awt.event.MouseMotionListener;
carro1.cor = "prata";
import javax.swing.JFrame;
this.addMouseMotionListener(new MouseMotionListener() {
public void mouseDragged(MouseEvent mouseEvent) {
2.3 Membros de Instância eventoMouse6(mouseEvent);
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
public
objeto. Isto é importante, pois denotavoid mouseMoved(MouseEvent
que um método pertence a cada mouseEvent)
objeto da {
eventoMouse7(mouseEvent); 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 dethis.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Métodos variáveis membro têm os
setVisible(true);
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
public voidque foi definida no objeto. Em Java,
eventoMouse1(MouseEvent me) isto
{ é feito pela
chamada de um método em um objeto usando
tf.setText("Cliquei operador binário "." (ponto),
no oMouse.");
}
devendo especificar a mensagem completa: o objeto que é o recebedor da
mensagem, opublic
método void
a ser invocado e os argumentos para me)
eventoMouse2(MouseEvent o método
{ (se houver).
O método invocado tf.setText("Cursor
no recebedor pode também enviar informações
posicionado no componente."); 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 141
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
155
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação
Nem sempre você precisará implementar todos os métodos de uma interface, como no exemplo anterior
onde implementamos MouseListener e MouseMotionListener. É muito trabalhoso, freqüentemente
necessitaremos implementar somente alguns métodos da interface. Felizmente, os engenheiros do Java fizeram a
bondade de adicionar as classes adaptadores. Estas classes implementam todos os métodos das interfaces
XXXListener que possuem mais de um método. As implementações dos métodos são vazias, ou seja, não fazem
nada, simplesmente funcionam como um gabarito para sobrescrevermos os métodos que queremos utilizar. Veja
como utilizar com o exemplo abaixo, onde usamos a interface a classe Adaptadora WindowAdapter.
import java.awt.event.WindowAdapter;
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
2.3 Membros de Instância
import javax.swing.JLabel;
Cada objeto criado deverá ter sua própria instância de variáveis
public class FechaJanela extends JFrame { 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
private JLabel que um método pertence a cada objeto da
label; o seu estado.
classe. Porém não devemos confundir isto com a implementação do método, que
FechaJanela(String Dois objetos distintos têm
é compartilhada public
por todas as instâncias da classe.titulo) {
super(titulo); o mesmo estado se suas
this.setSize(300, 300); variáveis membro têm os
2.3.1 Invocação de Métodos
label = new JLabel("Feche a Janela");
Objetos se comunicam pela trocajava.awt.BorderLayout.CENTER);
this.add(label, de mensagens, isto significa que um mesmos valores.
objeto pode ter que mostrar um comportamento particular invocando uma
this.addWindowListener(new WindowAdapter() {
operação apropriada que foipublic
definidavoid
no objeto. Em Java, isto é feito pela
windowClosing(WindowEvent e) {
chamada de um método em um objeto usando
fechado(); 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 nothis.setVisible(true);
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 142
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
156
www.3way.com.br
Linguagem de de
Linguagem Programação JavaJava
Programação
Usando a classe WindowAdapter você pôde sobrescrever somente o método windowClosing() um dos
sete métodos grafados na interface WindowListener.
11.7Fazer Laboratório 11
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
12 Internacionalização do código
Em java a partir da versão 5.0 é possível fazer de forma adequada a Internacionalização
internacionalização do código de uma aplicação desktop, com Swing utilizando
significa você ter umna
recurso de formatação de Data e Números, principalmente monetário.
A internacionalização significa sua aplicação rodar em mais de um idioma, aplicação com a
criando de forma parametrizada os dados de labels a serem mostrados em possibilidade de mudar
arquivos .properties. o seu idioma baseado
A formatação baseia-se na Localização do idioma informada, seja pelo no SO ou através de
Sistema Operacional (SO) ou informado através de parametro pelo usuário. A seleção do usuário,
classe java.util.Locale que é responsável por determinar o idioma a ser utilizado conhecido também
para internacionalização. Locale você define a região conforme exemplo: como i18n.
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
Locale local = new Locale(“pt”, “BR”); //Brasil
dateFormat.format(new Date());
numberFormat.format(13.23);
Você pode utilizar o objeto de formatação para converter textos em Objetos com o método parse(), veja
abaixo: Figura 2.4 – Layout Memória após inicialização
12.2ResourceBoundle
A classe ResourceBoundle é a responsável por acessar o arquivo .properties de internacionalização
baseado no Locale definido. Existe um padrão para nomear os arquivos de internacionalização, deve ser composto
por messages_“iso-code-language”_“iso-code-country”.properties conforme exemplo abaixo para o Brasil.
messages_pt_BR.properties
O arquivo .properties e composto por uma lista de registros com chave e valor, onde a chave será a mesma
para todos os arquivos de todos idiomas e o valor que será diferente para cada um.
messages_pt_BR.properties
welcome=Bem vindo!
messages_en_US.properties
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
welcome=Hello!
Para carregar o arquivo do respectivo Locale definido é necessário utilizar o método getBoundle() da classe
2.3 Membros de Instância
passando o nome inicial do arquivo e o Locale conforme abaixo:
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
(atributos) definidas
Locale ptBRpela classe.
= new Os métodos definem o comportamento de um
Locale("pt","BR"); em um objeto constituem
objeto. ResourceBundle
Isto é importante, pois denota
bundle que um método pertence a cada objeto da
= ResourceBundle.getBundle("messages", ptBR);o seu estado.
System.out.println(bundle.getString("welcome"));
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.
A procura pelo arquivo .properties ocorre de três formas, primeiro ele procurao mesmo estado
pelo nome se suas
completo
definido não encontrar então procura com somente a definição do idioma variáveis
pelo locale,deseMétodos
2.3.1 Invocação e caso nãomembro
encontretêm
ele os
procura com somente o nome do arquivo.
Objetos se comunicam pela troca de mensagens, isto significa que um mesmos valores.
objeto pode ter que mostrar um comportamento particular invocando uma
messages_pt_BR.properties //pesquisa 1
operação apropriada que foi definida
messages_pt.properties no objeto.2 Em Java, isto é feito pela
//pesquisa
chamada de um método em um objeto
messages.properties //pesquisa usando 3 o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da
mensagem, o método
12.3Mensagens a ser invocado e os argumentos para o método (se houver).
Formatadas
O método
Da invocado no recebedor
mesma forma pode
que existe tambémque
as classes enviar informações
ajudam de volta
a formatação ao e número, existe a classe
de data
objeto chamador através de um valor de retorno.
MessageFormat que ajuda na formatação de mensagens. O método chamado deve ser
um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 144
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
158
www.3way.com.br
Linguagem de de
Linguagem Programação JavaJava
Programação
a saída será:
12.4Fazer Laboratório 12
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
12.5Exercício
//criando novo alias
Carro
Escreva, compile =
carro2 carro1;
e execute todas listagens de código apresentadas neste capítulo.
13 Exportação de Aplicação
Para aplicações Java construídas para rodar localmente na máquina do usuário existe duas formas indicada
para exportar o projeto e enviar a aplicação para o usuário sem perder a portabilidade que java oferece.
13.1Jar executável
Exportar a aplicação para um arquivo JAR é uma tarefa simples utilizando IDEs de desenvolvimento, como
Eclipse, a própria IDE possui o recurso de exportar gerando o arquivo .jar.
Só exportar o projeto para um arquivo jar não é o mais indicado, porque o usuário terá que iniciar a
aplicação por prompt através do comando java e qual o nome a classe com os pacotes que possui o método main.
Este seria um trabalho tedioso para o usuário inicar a aplicação.
A solução é criar um jar executável, ou seja, com um duplo clique do usuário a aplicação já é iniciada e o
usuário não precisa digitar nenhum comando,
Figura 2.5 ou muito
– Layout Memória menosreferência
duas variáveis saber qual
para oamesmo
classeobjeto
que precisa ser chamada para
iniciar a aplicação.
Quando você for gerar o arquivo jar executável é necessário que informe qual a classe que deve ser
invocada quando o arquivo
2.3 Membros sofrer um duplo clique do usuário.
de Instância
Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis
13.2Java Web
(atributos) Startpela
definidas (JWS)
classe. Os métodos definem o comportamento de um
JavaéWeb Start é semelhante aoque
exemplo anterior,pertence
do jar executável. A diferença
em um objeto constituem
objeto. Isto importante, pois denota um método a cada objeto da fundamental o seu
entre as duas
estado.
é a suaPorém
classe. distribuição, quando gerado
não devemos um isto
confundir jar executável você precisa enviar
com a implementação que.jar para o usuário e quando o
o arquivo
do método,
mesmo for alterado você precisará enviar novamente. Para aplicação JWS você envia para Dois
o objetos distintos
usuário um arquivotêm
é compartilhada por todas as instâncias da classe.
o mesmo estado
com extensão jnlp, este arquivo possui instruções de onde a JVM do usuário deve baixar os arquivos e qual a classe se suas
deve ser executada para iniciar a aplicação.
2.3.1 Invocação de Métodos variáveis membro têm os
Desta forma sempre que houver uma atualização da aplicação é necessário que atualizemesmos somente valores.
o servidor
Objetos se comunicam pela troca de mensagens, isto significa que um
que esta disponibilizando o arquivo JAR e quando o usuário executar a aplicação automaticamente ele identificará
objeto pode ter que mostrar um comportamento particular invocando uma
que foi atualizado o arquivo no servidor e baixará a nova versão, deixando a máquina do usuário sempre atualizada.
operação apropriada
O arquivo queserfoiexecutado
jar para definidavianoJava
objeto. Em precisa
Web Start Java, isto é feito pela
ser assinado digitalmente, isso é um modelo de
chamada de um método em um objeto usando o operador binário "." (ponto),
segurança implementado por Java. A assinatura digital é uma forma de identificar a origem do arquivo. A assinatura
devendo
pode ser criada por você em sua máquina e assinar os arquivos para que o usuário da
especificar a mensagem completa: o objeto que é o recebedor consiga executá-los.
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 145
www.3way.com.br
Todos os direitos reservados a 3Way Networks
Seja um Profissional Aprendendo com Profissionais 12
159
www.3way.com.br
Linguagem de Programação
Linguagem JavaJava
de Programação
13.3Fazer Laboratório 13
Siga instruções dovalor
//atribuindo laboratório e tome cuidado
a variável com o tempo de execução, sempre recorra ao instrutor em
referência
caso de dúvida,
Carro nunca
carro1deixe
= uma
new dúvida sem reposta
Carro();
carro1.ano = "2001";
carro1.modelo=
13.4Exercício "fusca";
carro1.cor = "prata";
Escreva, compile e execute todas listagens de código apresentadas neste capítulo.
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto