Sie sind auf Seite 1von 161

Linguagem Java

Java OO

Apostila

www.3way.com.br

Linguagem Linguagem de de Programao Programao Java Java

Carro carro1 = new Carro(); 1 Introduo Linguagem Java carro1.ano = "2001"; 1.1 O que a Tecnologia Java ? carro1.modelo= "fusca"; 1.1.1 JSE - Java Standard=Edition carro1.cor "prata"; 1.1.2 JEE - Java Enterprise Edition 1.1.3 JME - Java Micro Edition 1.1.4 Java Card 1.2 Quanto tempo necessrio para aprender Java ? 1.3 O curso 1.3.1 Convenes de Cdigo 1.3.2 Sobre os exerccios 1.4 Fazer Laboratrio 0 2 Bases da Programao em Java 2.1 Classes 2.1.1 Declarando Membros: Variveis e Mtodos 2.2 Objetos Figura 2.4 Layout Memria aps inicializao 2.2.1 Instncia de Classes 2.2.2 Referncia de novo Objetos //criando alias 2.3 Membros de Instncia Carro carro2 = carro1; 2.3.1 Invocao de Mtodos 2.3.1.1 Chamando Mtodos de Objeto 2.3.2 Envio de Argumentos para Mtodos 2.3.2.1 Passagem de Parmetros por valor 2.3.2.2 Passagem de Parmetros por referncia 2.4 Membros Estticos 2.5 Herana - Relacionamentos do tipo "-um" 2.6 Agregao - Relacionamentos do tipo "tem-um" 2.7 Princpios de Programao Com Java 2.8 Estrutura de Arquivos Fontes em Java 2.9 O mtodo main() 2.10 Fazer Laboratrio 1 2.11 Exerccios 3 Identificadores, Palavras-chave e Tipos Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto 3.1 Comentrios 3.2 Ponto-e-Vrgula, Blocos e Espao 3.3 Identificadores 3.4 Palavras Reservadas 2.3 Membros de Instncia 3.5 Variveis, Declaraes e Atribuio Cada objeto criado dever ter sua prpria instncia de variveis 3.5.1 Declarando e inicializando Variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um 3.5.2 Exibindo o valor de uma Varivel objeto. Isto importante, pois e denota que um mtodo pertence a cada objeto da 3.5.3 Variveis de Referncia de Valor classe. Porm no devemos confundir isto com a implementao do mtodo, que 3.6 Tipos Bsicos em Java compartilhada por todas as instncias da classe. 3.6.1 Literais Java 3.6.2 Tipos Dados Primitivos 3.6.2.1 Lgico boolean 2.3.1 Invocao de Mtodos 3.6.2.2 Textual char and String pela troca de mensagens, isto significa que um Objetos se comunicam 3.6.2.3 Inteiro byte, int e long objeto pode ter queshort, mostrar um comportamento particular invocando uma 3.6.2.4 Ponto Flutuante float e double operao apropriada que foi definida no objeto. Em Java, isto feito pela 3.6.2.5 Exemplos de declaraes e atribuies chamada de um mtodo em um objeto usando o operador binrio "." (ponto), 3.7 Converses devendo especificar a mensagem completa: o objeto que o recebedor da 3.7.1 Casting de Tipos Primitivos mensagem, o mtodo a ser invocado Numrica e os argumentos para o mtodo (se houver). 3.7.2 Literais numricos e Promoo O mtodo invocado no recebedor pode 3.8 Classes Wrapper (Empacotadoras) tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser 3.8.1 Construtores Wrapper um que esteja definido 3.8.2 Mtodo valueOfpelo objeto. 3.8.3 Converses
Seja Seja um um Profissional Profissional Aprendendo Aprendendo com com Profissionais Profissionais www.3way.com.br www.3way.com.br
Todos os direitos reservados a 3Way Networks

Sumrio//atribuindo valor a varivel referncia

7 6 7 6 7 6 7 6 7 6 8 7 8 7 10 8 10 8 10 8 10 8 11 9 11 9 12 10 12 10 12 10 14 11 15 12 15 12 16 13 16 13 16 13 18 14 19 15 20 16 22 17 23 18 23 18 24 19 24 19 24 19 19 24 19 24 20 23 20 23 20 23 21 26 Os valores das variveis21 26 em um objeto constituem 22 28 o seu estado. 22 28 23 29 Dois objetos distintos tm 23 29 o mesmo estado se suas 23 29 variveis membro tm os 23 29 mesmos valores. 23 29 24 30 24 30 25 31 26 32 26 32 26 32 27 33 28 34 28 34 28 34

1 12 2

Linguagem de Programao JavaJava Linguagem de Programao


3.9 AutoBoxing 3.9.1 Boxing e Unboxing Automtico para Tipos Primitivos //atribuindo valor a varivel referncia 3.9.2 Ocorrncia de Boxing e Unboxing automtico Carro carro1 = new Carro(); 3.10 Fazer Laboratrio 2 carro1.ano = "2001"; 3.11 Exerccios carro1.modelo= "fusca"; 4 Operadores carro1.cor = "prata"; 4.1 Operadores Aritmticos 4.2 Operadores de Incremento e Decremento 4.3 Operadores Relacionais 4.4 Operadores Lgicos 4.4.1 && (e lgico) e & (e binrio) 4.4.2 || ( ou lgico) e | ( ou binrio) 4.4.3 ^ (ou exclusivo binrio) 4.4.4 ! (negao) 4.4.5 Operador Condicional ( ?: ) 4.5 Precedncia de Operadores 4.6 Exerccios 5 Estruturas de controle 5.1 Estruturas de deciso if - else Figura 2.4 Layout Memria aps inicializao 5.2 Declarao switch //criando novo alias 5.3 Iteraes (Laos) Carro carro2 = carro1; 5.3.1 while 5.3.2 do-while 5.3.3 Declarao for 5.4 Declaraes de Interrupo e Desvio 5.4.1 Declarao break 5.4.1.1 Declarao unlabeled break 5.4.1.2 Declarao labeled break 5.4.2 Declarao continue 5.4.2.1 Declarao unlabeled continue 5.4.2.2 Declarao labeled continue 5.4.3 Declarao return 5.5 Fazer Laboratrio 3 5.6 Exerccios 6 Array 6.1 Declarando Array Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto 6.2 Acessando um elemento do Array 6.3 Tamanho de Array 6.4 Arrays Multidimensionais 6.5 Copiando Arrays 2.3 Membros de Instncia 6.6 Percorrendo Arrays com Enhaced-for Cada objeto criado dever ter sua prpria instncia de variveis 6.7 Manipulando Arrays com java.util.Arrays (atributos) definidas pela 6.8 Fazer Laboratrio 4 classe. Os mtodos definem o comportamento de um objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da 6.9 Exerccios 7 Programao Orientadaconfundir a Objetos isto com a implementao do mtodo, que classe. Porm no devemos 7.1 Classes e Objetos compartilhada por todas as instncias da classe. 7.1.1 Definindo Classes 7.1.2 Definindo Mtodos 2.3.1 Invocao de Mtodos 7.1.2.1 Definindo Mtodos na Classe Objetosde se comunicam pela troca 7.1.3 Mtodos Instncia e a Referncia this de mensagens, isto significa que um objeto pode ter de que mostrar um comportamento particular invocando uma 7.1.4 Sobrecarga Mtodos (Overloading) operao apropriada que foi definida no objeto. Em Java, isto feito pela 7.1.5 Construtores 7.1.6 Construtor Padro (default) chamada de um mtodo em um objeto usando o operador binrio "." (ponto), 7.1.7 Overloading de Construtores devendo especificar a mensagem completa: o objeto que o recebedor da 7.1.8 Usando Construtores mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). 7.1.9 Utilizando o Construtor this( ) O mtodo invocado no recebedor pode tambm enviar informaes de volta ao 7.2 Fazer Laboratrio 5 objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser 7.3 Herana
35 29 29 35 29 35 30 36 30 36 30 36 30 36 31 37 32 38 33 39 34 40 35 42 36 43 43 36 44 37 44 37 45 38 45 38 45 38 47 40 48 41 48 41 49 42 50 43 51 44 44 51 44 51 44 51 45 52 45 52 45 52 46 54 46 54 46 54 46 54 46 54 47 55 48 56 49 57 50 58 50 58 Os valores das variveis 51 59 52 em um objeto constituem 60 60 o seu estado. 52 52 60 Dois objetos distintos tm 52 60 o mesmo estado se 52 suas 60 53 variveis membro tm 61 os 54 62 mesmos valores. 55 63 56 64 57 65 57 65 58 66 58 66 59 67 60 69 60 69 2

um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 3

Linguagem de Programao JavaJava Linguagem de Programao


7.3.1 Definindo Superclasses e Subclasses 7.3.2 Chamando Construtor super() e Referncia super //atribuindo valor a varivel referncia 7.3.3 Modificador de Classe final Carro carro1 = new Carro(); 7.4 Polimorfismo carro1.ano = "2001"; 7.4.1 Colees Heterogneas de Objetos carro1.modelo= "fusca"; 7.4.2 Determinando a Classe de um Objeto carro1.cor = "prata"; 7.4.3 Casting de Referncias de Objetos 7.4.4 Operaes Polimrficas por Sobreposio de Mtodos 7.4.4.1 Invocando Mtodos Sobrepostos 7.4.4.2 Regras sobre Sobreposio de Mtodos 7.4.5 Modificador de Mtodo final 7.5 Encapsulamento 7.5.1 Pacotes 7.5.1.1 Criando pacotes 7.5.1.2 Importando Pacotes 7.5.1.3 Localizao de Classes e CLASSPATH 7.5.1.4 Importao Esttica 7.5.2 Modificadores de Acesso 7.5.2.1 Pblico - public Figura 2.4 Layout Memria aps inicializao 7.5.2.2 Protegido protected novo alias 7.5.2.3 //criando Padro ou Pacote Carro carro2 7.5.2.4 Privado - private = carro1; 7.6 Mtodos de Configurao e Captura 7.6.1 Mtodos Getter 7.6.2 Mtodos Setter 7.6.3 Aplicando Encapsulando no Exemplo Funcionario/Gerente 7.7 Fazer Laboratrio 6 7.8 O operador == comparado ao Mtodo equals 7.9 Classses Abstratas 7.10 Interfaces 7.10.1 Porque utilizar Interfaces? 7.10.2 Interface vs. Classe Abstrata 7.10.3 Criando Interfaces 7.10.4 Relacionamento de uma Interface para uma Classe 7.10.5 Herana entre Interfaces 7.10.6 Interface vs. Classe Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto 7.11 Classes Aninhadas 7.11.1 Classe Aninhada 7.11.2 Classes aninhadas estticas 7.11.3 Classes internas locais 2.3 Membros de Instncia 7.11.4 Classes internas annimas Cada objeto 7.11.5 Modificadores de criado acesso dever ter sua prpria instncia de variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um 7.12 Tipos Enumerados objeto. Isto Laboratrio importante, 7.13 Fazer 7 pois denota que um mtodo pertence a cada objeto da 7.14 Exerccios classe. Porm no devemos confundir isto com a implementao do mtodo, que 8 Excees por todas as instncias da classe. compartilhada 8.1 Manipulando Excees 8.2 Categorias de Excees 2.3.1 Invocao de Mtodos 8.2.1 Excees Verificadas e No-verificadas Objetos Excees se comunicam pela troca de mensagens, isto significa que um 8.3 Lanando objeto pode ter quethrow mostrar um comportamento particular invocando uma 8.3.1 A palavra-chave operao apropriada que foi definida no objeto. Em Java, isto feito pela 8.3.2 Desviando Excees 8.4 Criando Excees chamada de um mtodo em um objeto usando o operador binrio "." (ponto), 8.5 Sobrescrita de Mtodos e Excees devendo especificar a mensagem completa: o objeto que o recebedor da 8.6 Fazer Laboratrio 8 mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). 8.7 Exerccio O mtodo invocado no recebedor pode tambm enviar informaes de volta ao 9 Tipos Genricos objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser 9.1 Por que Generics?
69 60 63 72 63 72 64 73 65 74 65 74 66 75 68 77 69 78 70 79 71 80 71 80 71 80 71 80 72 81 73 83 74 84 75 85 75 85 86 76 87 77 88 78 88 78 88 78 89 79 89 79 91 81 91 81 93 83 97 86 86 97 87 98 87 98 89 100 89 100 90 101 90 101 91 102 91 102 92 103 93 104 Os valores das variveis 93 104 95 106 em um objeto constituem 108 o seu estado. 97 97 108 Dois objetos distintos tm 97 108 o mesmo estado se suas 97 108 99 os 111 variveis membro tm 100 112 mesmos valores. 100 112 100 112 101 113 102 114 103 115 105 117 105 117 105 117 105 117 3

um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 4

Linguagem de Programao JavaJava Linguagem de Programao


9.2 Declarando uma Classe Utilizando Generics 9.2.1 Limitao "Primitiva" //atribuindo valor a varivel referncia 9.2.2 Limitando Genricos Carro carro1 = new Carro(); 9.3 Declarando Mtodos Genricos carro1.ano = "2001"; 9.4 Subtipagem carro1.modelo= "fusca"; 9.5 Usando o Coringa <?> carro1.cor = "prata"; 9.6 Fazer Laboratrio 9 9.7 Exerccio 10 Java Collections 10.1 Hierarquia Das Interfaces 10.2 Generics e Colees Java 10.3 Percorrendo Collections 10.3.1 Lao for-each 10.3.2 Interface Iterator 10.4 Usando Listas Interface List 10.4.1 LinkedList 10.5 ArrayList 10.5.1 Teste de Desempenho 10.6 Usando Conjuntos Interface Set Figura 2.4 Layout Memria aps inicializao 10.6.1 HashSet novo alias 10.6.2 //criando TreeSet Carro carro2 = carro1; 10.7 Usando Mapas Interface Map 10.7.1 HashMap 10.8 Classificando Colees: Collections.sort 10.9 Fazer Laboratrio 10 10.10 Exerccio 11 Construindo Interfaces Graficas com AWT/Swing 11.1 AWT (Abstract Window Toolkit) vs. Swing 11.2 Componentes GUI AWT 11.2.1 Fundamental Window Classes 11.2.2 Graphics 11.2.3 Mais Componentes AWT 11.3 Gerenciadores de Layout 11.3.1 O Gerenciador FlowLayout 11.3.2 O Gerenciador BorderLayout 11.3.3 O gerenciador GridLayout Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto 11.3.4 Painis e Layouts Complexos 11.4 Componentes GUI Swing 11.4.1 Configurando Containers JFrame e JApplet 11.5 Manipulao de Eventos 2.3 Membros de Instncia 11.5.1 Registrando Classes Ouvintes (Listeners) Cada Event objeto criado dever ter sua prpria instncia de variveis 11.5.2 Classes (atributos) definidas pela classe. Os mtodos definem o comportamento de um 11.5.3 Listeners de Evento objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da 11.5.3.1 Mtodo de ActionListener 11.5.3.2 Mtodos de devemos MouseListener classe. Porm no confundir isto com a implementao do mtodo, que 11.5.3.3 Mtodos de MouseMotionListener compartilhada por todas as instncias da classe. 11.5.3.4 Mtodos WindowListener 11.5.3.5 Roteiro para criao de Aplicaes Grficas com tratamento de eventos 2.3.1 Invocao de Mtodos 11.5.4 Implementando Manipuladores de Eventos com Anonymous inner class Objetos se comunicam pela troca de mensagens, isto significa que um 11.6 Classes Adaptadoras objeto pode ter que mostrar um comportamento particular invocando uma 11.7 Fazer Laboratrio 11 operao apropriada que foi definida no objeto. Em Java, isto feito pela 11.8 Exerccio 12 Internacionalizao cdigo chamada de um mtododo em um objeto usando o operador binrio "." (ponto), 12.1 Formatao devendo especificar a mensagem completa: o objeto que o recebedor da 12.2 ResourceBoundle mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). 12.3 Menssages Formatadas O mtodo invocado no recebedor pode tambm enviar informaes de volta ao 12.4 Fazer Laboratrio 12 objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser 12.5 Exerccios
118 106 107 119 107 119 108 120 109 121 111 123 113 125 113 125 113 125 113 125 114 126 116 129 116 129 116 129 117 130 117 130 118 131 119 132 120 133 120 133 120 133 120 133 121 134 121 134 123 136 123 136 136 123 136 123 137 124 137 124 138 125 127 140 128 141 128 141 129 142 130 143 131 144 132 147 133 147 148 134 149 135 Os valores das variveis 149 135 150 136 em um objeto constituem 150 136 o seu estado.150 136 Dois objetos distintos tm 151 137 o mesmo estado se suas 151 137 137 151 os variveis membro tm 139 153 mesmos valores. 140 154 143 157 143 157 143 157 143 157 144 158 144 158 145 159 145 159 4

um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 5

Linguagem de Programao JavaJava Linguagem de Programao


13 13.1 13.2 13.3 13.4 Exportao de Aplicao Jar executvel //atribuindo valor a varivel referncia Java Web Start Carro carro1 = new Carro(); Fazer Laboratrio 13 carro1.ano = "2001"; Exerccios carro1.modelo= "fusca"; carro1.cor = "prata";
159 145 145 159 145 159 146 160 146 160

Figura 2.4 Layout Memria aps inicializao

//criando novo alias Carro carro2 = carro1;

Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

Cada objeto criado dever ter sua prpria instncia de variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da classe. Porm no devemos confundir isto com a implementao do mtodo, que compartilhada por todas as instncias da classe. 2.3.1 Invocao de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

2.3

Membros de Instncia

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 6

Linguagem Linguagem de de Programao Programao Java Java

De forma bastante simplificada podemos dizer que a tecnologia Java composta por uma gama de produtos pensados para utilizar o melhor das redes de computadores e capaz de serem executados (rodar) em diferentes mquinas, sistemas operacionais e dispositivos. Por diferentes dispositivos entendemos: PCs, servidores, notebooks, handhelds, PDAs (Palm), celulares, TV, geladeiras e tudo que for possvel instalar e executar uma JVM. Os programas feitos em Java rodam em diferentes ambientes graas a um componente da plataforma chamado JVM (Java Virtual Machine) que um tipo de tradutor de cdigo Java para instrues especficas de cada sistema operacional e/ou dispositivo. A tecnologia Java foi lanada em 1995 e desde ento tem crescido Figura 2.4 Layout Memria aps inicializao em popularidade e se tornado uma plataforma muito estvel e madura. //criando novo alias A Plataforma Java pode ser subdividida nos seguintes grupos:
Carro carro2 = carro1;

valor a varivel referncia 1.1 //atribuindo O que a Tecnologia Java? Carro carro1 = new Carro(); Talvez no seja a primeira vez que voc ouve falar em Java, Java 5, Java 6, JRE, Mquina Virtual, J2SE, carro1.ano = "2001"; J2EE, JSP, EJB e etc. Bom, a resposta carro1.modelo= "fusca"; muito longa e pouco proveitosa neste momento. Voc no vai encontrar carro1.cor = "prata"; neste material todas as explicaes para tantas siglas e nomes que esto relacionados com a tecnologia Java.

Introduo Linguagem Java

Os programas feitos em Java rodam em diferentes ambientes graas a JVM (Java Virtual Machine).

- JSE (Java Standard Edition) - JEE (Java Enterprise Edition) - JME (Java Micro Edition) - Java Card 1.1.1 JSE - Java Standard Edition A JSE uma rica plataforma que oferece um completo ambiente para o desenvolvimento de aplicaes para clientes e servidores. A JSE tambm a base da tecnologia JEE e est dividida em dois grupos conceituais: Core Java e Desktop Java. Empresas como Sun, IBM, BEA, entre outras, distribuem a JSE na forma de um SDK (Software Development Kit), em conjunto com uma JRE (Java Runtime Environment). O pacote do SDK da JSE vem com ferramentas para: compilao, debugging, gerao de documentao Figura 2.5 Layout Memria duas,variveis referncia o mesmo objeto (javadoc), empacotador de componentes (jar) e a JRE que contm apara JVM e outros componentes necessrios para rodar aplicaes Java. O JDK (SDK Java) usado para compilar e depurar programas, sendo utilizados pelos desenvolvedores de 2.3 Membros de Instncia sistemas. A JRE o ambiente dedever execuo, qualquer que deseje executar umdas programa que Cada objeto criado tersendo sua utilizado prpria por instncia de um variveis Os valores variveis tenha sido compilado como byte code Java. definem o comportamento de um (atributos) definidas pela classe. Os mtodos em um objeto constituem objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da o seu estado. 1.1.2 Porm JEE - Java Edition isto com a implementao do mtodo, que classe. noEnterprise devemos confundir Dois objetos distintos tm A tecnologia JEE no um produto, mas sim uma especificao definida por grandes empresas, atravs do compartilhada por todas as instncias da classe. o mesmo estado se suas JCP (Java Community Process). Simplifica o desenvolvimento de aplicaes empresariais e multi-camadas. variveis membro tm um os baseado nos componentes padronizados, modulares e reusveis, como os EJB (Enterprise JavaBeans ). Oferece 2.3.1 Invocao de Mtodos mesmos valores. conjuntoObjetos completo servios para Define muitos comportamentos da aplicao. Voc no se de comunicam pela estes trocacomponentes. de mensagens, isto significa que um precisa reaprender a programar pois voc vai utilizar os mesmo recursos do Java SE . Necessita de servidores de objeto pode ter que mostrar um comportamento particular invocando uma aplicaesapropriada JEE. A tecnologia JEE definida no est no deste operao que foi noescopo objeto. Em curso. Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), 1.1.3 JME - Java Micro Edition completa: o objeto que o recebedor da devendo especificar a mensagem A tecnologia JME voltada para aplicaes que rodam em pequenos dispositivos como celulares, PDAs, mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). smart cards e etc. Ela umapode API bastante para o desenvolvimento O mtodo invocado no possui recebedor tambm completa enviar informaes de volta ao de aplicaes de dispositivos mveis. A tecnologia J2MEde no est no escopo deste curso. objeto chamador atravs um valor de retorno .O mtodo chamado deve ser um que esteja definido pelo objeto.
os direitos reservados a 3Way Networks SejaTodos um Profissional Aprendendo com Profissionais Seja um Profissional Aprendendo com Profissionais www.3way.com.br www.3way.com.br

12 7

Linguagem Linguagemde deProgramao ProgramaoJava Java


1.1.4 Java Card Java Card umavalor tecnologia que permite pequenos aplicativos (applets) //atribuindo a varivel referncia Carro carro1 Java = new Carro(); baseados em plataforma sejam executados com segurana em smart cards e carro1.ano "2001";de processamento e armazenamento, como dispositivos similares com=limitaes carro1.modelo= "fusca"; o Java Ring. muito utilizado em cartes SIM (usados em celulares GSM) e em carro1.cor = "prata"; caixas eletrnicos. Os produtos Java Card so baseados nas especificaes da plataforma Java Card desenvolvida pela Sun Microsystems, e suas principais caractersticas so portabilidade e segurana.

Podemos dizer que muito tempo, basicamente o que ser apresentado neste material. Como j dissemos e voc vai perceber, Java muito mais que uma linguagem de programao, um conjunto de ferramentas e bibliotecas de apoio ao desenvolvimento de sistemas em diversas reas de tecnologia de software. Porm, mais importante que aprender a linguagem aprender a programar no Figura 2.4 Layout Memria aps inicializao paradigma de orientao a objetos. //criando novo alias O texto abaixo uma traduo do artigo de autoria de Peter Norvig Carro carro2 = carro1; (http://norvig.com/21-days.html, para ver original ou busque na internet "Aprenda a programar em dez anos"), os conselhos apresentados servem para todos os que desejam ou necessitam aprender programar. Abaixo est a receita de Peter Norvig para sucesso na programao:

1.2

Quanto tempo necessrio para aprender Java?

No se preocupe com o quanto tempo, mas com o que devo aprender para programar em Java. Mais importante que aprender a linguagem Java aprender a programar no paradigma de orientao a objetos.

Aprenda ingls. Leia o texto original. Essa traduo s est aqui para exercitar o meu ingls, no o seu. (Nota do tradutor)  Se interesse por programao 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 tcnica, "o nvel mximo de performance individual em um domnio no alcanado automaticamente em Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto funo de uma experincia estendida, mas sim aumentado, mesmo por indivduos extremamente experientes, por um esforo deliberativo de melhorar." (p. 366) e "o aprendizado mais efetivo requer uma tarefa bem definida com uma dificuldade apropriada para o indivduo em particular, dado que 2.3 Membros de Instncia exista um retorno sobre a experincia e oportunidades de repetio e correes de erros." (p. 20-21) Cada objeto criado dever ter sua prpria instncia de variveis valores das variveis do livro Cognition in Practice: Mind, Mathematics, and Culture in Everyday Os Life , que uma referncia (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem interessante deste ponto de vista. objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da o seu estado . dar  Se voc quiser, gaste quatro anos em uma universidade (ou mais em uma ps-graduao). Isso lhe classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm acesso a alguns empregos que requerem alguma formao e um grande entendimento do campo de compartilhada por todas as instncias da classe. trabalho, mas se voc no gosta muito de ir para escola, voc pode (com alguma dedicao) conseguir o mesmo estado se suas alguma experincia similar sobre esse tipo de trabalho. Em qualquer caso, apenas ler livros no ser variveis membro tm os 2.3.1 Invocao de Mtodos suficiente. "Educao em cincias da computao no faz de ningum um gnio em programao mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um tanto quanto estudar pincis e pigmentos no fazem um bom pintor." diz Eric Raymond, autor de objeto pode ter que mostrar um comportamento particular invocando uma The New Hackers Dictionary. Um dos melhores programadores que eu j contratei tinha apenas o operao apropriada que foi definida no objeto. Em Java, isto feito pela segundo grau, e ele produziu vrios softwares incrveis, tem seu prprio grupo de discusso, e fez chamada de um mtodo em um objeto usando o operador binrio "." (ponto), dinheiro suficiente em aes para comprar seu prprio 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 mtodo a ser invocado e os argumentos para o mtodo (se houver). o pior em outros. Quando voc o melhor voc testa suas habilidades para liderar um projeto e para O mtodo invocado no outros recebedor enviar voc informaes deaprender volta ao o que os mestres ensinam e o inspirar os com pode a sua tambm viso. Quando for o pior objeto chamador atravs de um valor de retorno . O mtodo chamado deve ser que eles no gostam de fazer (porque eles fazem voc fazer por eles). um que esteja definido pelo objeto.  Trabalhe em projetos aps outros programadores. Esteja envolvido em entender um programa escrito

Todos os direitos reservados a 3Way Networks Seja um Profissional Aprendendo com Profissionais Seja um Profissional Aprendendo com Profissionais www.3way.com.br www.3way.com.br

12 8

Linguagem de Programao Java

//atribuindo valor a varivel referncia Carro carro1 = new Carro(); carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 Layout Memria aps inicializao

//criando novo alias Carro carro2 = carro1;

Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

Cada objeto criado dever ter sua prpria instncia de variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da classe. Porm no devemos confundir isto com a implementao do mtodo, que compartilhada por todas as instncias da classe. 2.3.1 Invocao de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.
Todos os direitos reservados a 3Way Networks

2.3

Membros de Instncia

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 9

Linguagem Linguagemde deProgramao ProgramaoJava Java


por outro. Veja o que preciso para entender e consertar quando o programador original no est por

perto. Pense valor em como programas para que seja fcil mant-los, se no for voc. //atribuindo a desenvolver varivel seus referncia Carro carro1 = menos new Carro();  Aprenda pelo meia dzia de linguagens de programao. Inclua na lista uma linguagem carro1.ano = "2001"; orientada a objetos (como Java ou C++), uma que seja de abstrao funcional (como Lisp ou ML), carro1.modelo= "fusca"; uma que suporte abstrao sinttica (como Lisp), uma que suporte especificao 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 "cincia da computao". Saiba quanto tempo leva para o seu computador computar uma instruo, carregar uma palavra at a memria (com e sem cache), ler palavras consecutivas do disco rgido, procurar por uma nova posio no disco.  Se envolva no esforo de padronizao de uma linguagem. Pode ser o comit ANSI C++, ou na padronizao de programao na sua empresa, se utilizaram edentao com 2 ou 4 espaos. 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 padronizao to rpido quanto possvel.
Figura 2.4 Layout Memria aps inicializao

Voc tem um material com a teoria necessria e um conjunto de atividades prticas, denominadas laboratrios. Todo o contedo corresponde ao que j definimos como JSE. O material no e no deve ser adotado como sua nica referncia para estudos da linguagem, a aquisio de livros ou leitura do tutorial oficial da Sun recomendado. Seu material est ordenado numa seqncia didtica que consideramos a mais adequada para o seu aprendizado. A cada exemplo ou exerccio apresentado em um captulo tentamos no utilizar recursos da linguagem que ainda no tenham sido apresentados no captulo corrente ou anterior. No entanto, sempre que possvel ns introduzimos vrios destes recursos em exemplos de cdigos com o objetivo de apresent-lo deliberadamente para voc ou simplesmente para simplificar o cdigo exemplo. Assim vamos apresentado algumas bibliotecas da linguagem, sem entrar em detalhes, para que voc v se familiarizando com uso das mesmas. 1.3.1 Convenes de Cdigo Os cdigos e exemplos apresentados neste material seguem as convenes de cdigo-fonte Java, sempre Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto que possvel, mas podem sofrer adaptaes para melhorar a impresso. Voc deve se familiarizar com essa conveno veja em http://www.oracle.com/technetwork/java/codeconv-138413.html

//criando alias Este curso novo abordado de forma bastante prtica, ou seja, construindo programas com a linguagem de Carro carro2 = carro1; programao o mximo possvel durante o treinamento.

1.3

O curso

Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis 1.3.2 Sobre os exerccios (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem No curso Java e Orientao a Objetos, recomendado estudar em casa aquilo que foi visto durante a aula, objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da o seu estado . fazendo os exerccios que no foram feitos ou refazendo os que j foram feitos em sala. classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos tm Os laboratrios devero ser resolvidos durante o treinamento com objetivo de exercitar a distintos linguagem de compartilhada por todas as instncias da classe. programao e no a sua capacidade de programar. Contudo eles apresentam uma pequena aplicao ser o mesmo estado que se suas completada ao final de todos os laboratrios. variveis membro tm os 2.3.1 Invocao de Mtodos Durante a execuo de um laboratrio o mesmo pode necessitar de listagem demesmos cdigos que j foram valores. Objetos se comunicam pela troca de mensagens, isto significa que um construdos nos laboratrios anteriores, portanto no deixe de fazer o exerccio do laboratrio, especialmente as objeto que pode ter que mostrar comportamento particular invocando uma estimada e o instrutor dever tarefas forem indicadas paraum voc fazer. Os laboratrios possuem uma durao operao apropriada que foi definida no objeto. Em Java, isto feito pela do curso, se sentir dificuldade segui-la a fim de concluir os laboratrios com sucesso. No atrase o andamento chamada de um mtodo em um objeto usando o operador binrio "." (ponto) , chame o instrutor. devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). 1.4 Fazer Laboratrio 0 O mtodo invocado no recebedor pode enviar informaes dede volta ao Siga instrues do Laboratrio 0tambm e tome cuidado com o tempo execuo, sempre recorra ao instrutor objeto chamador atravs de um valor de retorno . O mtodo chamado deve ser em caso de dvida, nunca deixe uma dvida sem reposta. um que esteja definido pelo objeto.
os direitos reservados a 3Way Networks Seja Todos um Profissional Aprendendo com Profissionais Seja um Profissional Aprendendo com Profissionais www.3way.com.br www.3way.com.br

2.3

Membros de Instncia

12 10

Linguagem Linguagem de deProgramao ProgramaoJava Java

//atribuindo valor nossa a varivel Antes de comearmos jornada referncia no mundo da programao em Carro carro1 = new Carro(); Java, importante compreendermos a terminologia bsica e os conceitos em carro1.ano = "2001"; programao orientada a objetos. Neste captulo veremos os princpios bsicos carro1.modelo= "fusca"; da programao em Java aprofundamento dos temas, que sero revistos carro1.cor = sem "prata";

Bases da Programao em Java

com maior profundidade nos captulos subseqentes.

Abstraes so o fundamento utilizado por ns, seres humanos, a fim de lidar com a complexidade. Uma abstrao demonstra o comportamento e propriedades essenciais de um objeto, que o diferencia de outro objeto qualquer. Por exemplo, ao utilizar um carro, voc no pensa nele como um conjunto de dezenas de milhares de peas individuais. Pensamos em um carro como um nico objeto sobre qual podemos realizar um determinado conjunto de operaes. Essa abstrao permite que as pessoas utilizem um carro sem nenhum conhecimento sobre mecnica de automveis. Podemos ignorar os detalhes do motor como: Figura 2.4 Layout Memria aps inicializao sistema de injeo de combustveis, transmisso, sistema de freios funcionam //criando novo alias individualmente ou em conjunto. Ao invs disso, utilizamos o objeto automvel como um elemento nico. Carro carro2 = carro1; A essncia da Programao Orientada a Objetos (POO) consiste modelar as abstraes usando Classes e Objetos. A parte difcil deste trabalho encontrar a abstrao mais correta. Uma Classe modela uma abstrao pela definio das Um Objeto qualquer propriedades e comportamentos dos objetos representados pela abstrao. Uma coisa criada a partir dessa Classe, ento, especifica a categoria dos Objetos e funciona como uma "planta Classe, algo contendo as baixa" na criao desses objetos. Um Objeto qualquer coisa criada a partir dessa propriedades e Classe, algo contendo as propriedades e comportamentos definidos na Classe. comportamentos Voltando ao exemplo do carro, um grupo de engenheiros mecnicos criam o definidos na Classe. projeto de um carro (a Classe) e a partir deste projeto so reproduzidos milhares de automveis (os Objetos), praticamente idnticos entre si. Propriedades de um Objeto da Classe so chamados de atributos e so definidos usando variveis em Java, tambm denominado Campos da Classe. O comportamento de um Objeto, tambm conhecido por operaes, so definidos usando-se mtodos em Java. referncia Variveis eo mtodos utilizados na definio da classe Figura 2.5 Layout Memria duas variveis para mesmo objeto so, juntos, denominados de Membros da Classe. Usando notao de Classe da UML (Unified Modeling Language), podemos descrever graficamente o exemplo de uma classe Carro, ver Figura 2.1. 2.3 Membros de Instncia Ambos ter atributos (variveis) e mtodos so mostrados na forma expandida na Cada objeto criado dever sua prpria instncia de variveis Os valores das variveis Figura 2.1 . (atributos) definidas pela classe. Os mtodos definem o comportamento de um

2.1

Classes

A essncia da Programao Orientada a Objetos (POO) consiste em modelar as abstraes usando Classes e Objetos.

objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da classe. Porm no devemos confundir isto com a implementao do mtodo, que compartilhada por todas as instncias da classe.

2.3.1 Invocao de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo invocado no recebedor pode tambm enviar informaes de volta ao Figura 2.1 Notao UML para Classe objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.
Seja Todos um Profissional Aprendendo com Profissionais os direitos reservados a 3Way Networks www.3way.com.br Seja um Profissional Aprendendo com Profissionais www.3way.com.br

em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

12 11

Linguagem Linguagem de de Programao Programao Java Java


2.1.1 Declarando Membros: Variveis e Mtodos Na Listagem 2.1 mostra implementao em Java da definio da classe mostrada na Figura 2.1. O //atribuindo valor a avarivel referncia Carro carro1 = preocupar new Carro(); exemplo, apesar de no se com a utilidade desta implementao, mostra as principais caractersticas da carro1.ano = "2001"; definio de uma classe em Java.
carro1.modelo= "fusca"; carro1.cor "prata"; public class = Carro { // nome da classe
// Variaveis private String private String private String private String cor; ano; modelo; nome;

// Constructor public Carro() { modelo = "2000"; } // Mtodos public String acelerar() Figura 2.4 { Layout Memria aps inicializao return "acelerando !"; //criando novo alias } Carro carro2 carro1; public = String frear() { return "freando !"; } public String abrirPorta() { return "abre porta !"; } }
Listagem 2.1 Elementos Bsicos da Definio de uma Classe

A classe possui quatro variveis, toda varivel em Java deve ter um tipo, neste caso todas so do tipo String (linhas 4 a 7), possui trs mtodos (linhas 13 a 15) representado as operaes disponveis aos objetos da classe e um mtodo especial (linha 10) com o mesmo nome da classe, este mtodo denominado construtor e seu propsito inicializar o objeto quando este criado a partir da classe. String uma classe em Java, ela armazena um conjunto de caracteres. Figura 2.5 Layout Memria duas variveis referncia para o mesmo objetodetalharemos a classe String Como estamos aprendendo o que uma classe, posteriormente. Um Objeto instncia de

Cada objeto criado dever ter prpria instncia variveis valores das variveisa Umsua objeto uma instncia de de uma classe. EleOs construdo usando-se (atributos) definidas pela classe.classe, Os mtodos definem o comportamento de um da mesma maneira que usamos uma "planta em baixa" construir uma um para objeto constituem objeto. Isto importante, pois denota um mtodo pertence a cadaque objeto da representa; casa, que uma entidade real da abstrao a classe usando o exemplo o seu estado . classe. Porm no devemos confundir isto com implementao do mtodo, que criado a partir do projeto dos do carro, uma ainstncia representa um veculo Dois objetos distintos tm compartilhada por todas as instncias da classe. engenheiros mecnicos. Um objeto deve ser explicitamente criadoestado a partirse de uma o mesmo suas classe antes que possa ser utilizado em um variveis membro tm os 2.3.1 Invocao de Mtodos programa. mesmos da valores. O propsito chamada Objetos se comunicam pela troca de mensagens, isto significa que um objeto ter de que mostrar um comportamento particular invocando uma ao construtor inicializar 2.2.1 pode Instncia Classes operao Em apropriada que so foi manipulados definida no atravs objeto. de Em Java, istode objetos feito pela Java, objetos referncias (ou o objeto que est sendo chamada de um mtodo em um objeto usando o operador binrio "." (ponto) , simplesmente referncia). O processo de criao de um objeto normalmente criado. devendo especificar a mensagem completa: o objeto que o recebedor da envolve os seguintes passos: mensagem, o mtodo a ser invocado os argumentos paracorresponde o mtodo (se Declarao de uma varivele de referncia: isto a houver). declarar O mtodo invocado no recebedor pode tambm para enviar informaes de volta ao uma varivel de uma classe apropriada armazenar a referncia ao objeto chamador atravs de um valor de retorno . O mtodo chamado deve ser objeto criado. um que esteja definido pelo objeto.
SejaTodos um Profissional Aprendendo com Profissionais os direitos reservados a 3Way Networks www.3way.com.br Seja um Profissional Aprendendo com Profissionais www.3way.com.br

2.3

Membros de Instncia 2.2

uma Classe.

Objetos

10 12 12

Linguagem de Programao Java

//atribuindo valor a varivel referncia Carro carro1 = new Carro(); carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 Layout Memria aps inicializao

//criando novo alias Carro carro2 = carro1;

Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

Cada objeto criado dever ter sua prpria instncia de variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da classe. Porm no devemos confundir isto com a implementao do mtodo, que compartilhada por todas as instncias da classe. 2.3.1 Invocao de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.
Todos os direitos reservados a 3Way Networks

2.3

Membros de Instncia

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 13

Linguagem Linguagem de de Programao Programao Java Java


//declaracao de duas variaveis referncia que denota dois //objetos distintos, nomeando dois objetos carro respectivamente //atribuindo valor a varivel referncia Carro Carro carro1, carro1 =carro2; new Carro();

carro1.ano = "2001"; Criao do Objeto:"fusca"; para criar o objeto fazemos uso do operador new, juntamente com a chamada do carro1.modelo= carro1.cor = "prata"; construtor da classe, assim criamos uma instncia da classe.
//criacao de dois Objetos distintos carro1 = new Carro(); carro2 = new Carro();

O operador new retorna a referncia da nova instncia de uma classe Carro. Esta referncia pode ser atribuda a uma varivel de referncia da classe apropriada. Cada objeto tem uma identidade nica e sua prpria cpia das variveis (atributos) declarados na definio da classe, ou seja, os dois objetos carro, referenciados por carro1 e carro2 tm sua prpria cpia das variveis: cor, ano, modelo, nome. A declarao e instanciao tambm podem ser combinadas:
Figura 2.4 Layout Memria aps inicializao Carro carro1 = new Carro(), carro2 = new Carro(); //criando novo alias Carro carro2 = carro1;

Figura 2.2 Instncias da Classe em UML

A Figura 2.2 mostra a notao UML para classe e objetos. A representao grfica de um objeto muito parecida com a de um classe. Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto 2.2.2 Referncia de Objetos Com j foi observado, uma referncia nos permite manipular objetos que foram criados e armazenados na 2.3 Membros de Instncia memria Cada do computador. Em Java, objetos podem ser utilizados a partir de uma referncia que est armazenada objeto criado dever terssua prpria instncia de variveis Os valores das variveis em uma varivel. Um objeto pode ter vrias referncias, tambm chamadas . O objeto pode ser (atributos) definidas pela classe. Os mtodos definem o comportamento de um de aliases em um objeto constituem manipulado por qualquer um desses aliases . objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da

classe. Porm no devemos confundir isto com a implementao do mtodo, que //declaracao compartilhada por todas as instncias da classe. Carro carro1;

2.3.1 Invocao de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Figura 2.3 Layout Memria aps declarao
Seja Seja um um Profissional Profissional Aprendendo Aprendendo com com Profissionais Profissionais www.3way.com.br www.3way.com.br
Todos os direitos reservados a 3Way Networks

o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

12 14

11

Linguagem Java Linguagem de de Programao Programao Java

//atribuindo //atribuindo valor valor a a varivel varivel referncia referncia Carro Carro carro1 carro1 = = new new Carro(); Carro(); carro1.ano = carro1.ano = "2001"; "2001"; carro1.modelo= carro1.modelo= "fusca"; "fusca"; carro1.cor = carro1.cor = "prata"; "prata";

Figura Layout Figura 2.4 2.4 Layout Memria Memria aps aps inicializao inicializao

//criando //criando novo novo Carro Carro carro2 carro2 = =

alias alias carro1; carro1;

Figura Layout Figura 2.5 2.5 Layout Memria Memria duas duas variveis variveis referncia referncia para para o o mesmo mesmo objeto objeto

Cada Cada objeto objeto criado criado dever dever ter ter sua sua prpria prpria instncia instncia de de variveis variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um um (atributos) definidas pela classe. Os mtodos definem o comportamento de objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da classe. Porm Porm no no devemos devemos confundir confundir isto isto com com a a implementao implementao do do mtodo, mtodo, que que classe. compartilhada por todas as instncias da classe. compartilhada por todas as instncias da classe. 2.3.1 Invocao Invocao de de Mtodos Mtodos 2.3.1 Objetos se se comunicam comunicam pela pela troca troca de de mensagens, mensagens, isto isto significa significa que que um um Objetos objeto pode ter que mostrar um comportamento particular invocando uma objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada apropriada que que foi foi definida definida no no objeto. objeto. Em Em Java, Java, isto isto feito feito pela pela operao chamada de um mtodo em um objeto usando o operador binrio "." (ponto) , chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar especificar a a mensagem mensagem completa: completa: o o objeto objeto que que o o recebedor recebedor da da devendo mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo mtodo invocado invocado no no recebedor recebedor pode pode tambm tambm enviar enviar informaes informaes de de volta volta ao ao O objeto chamador chamador atravs atravs de de um um valor valor de de retorno retorno. .O O mtodo mtodo chamado chamado deve deve ser ser objeto um que esteja definido pelo objeto. um que esteja definido pelo objeto.
Seja Seja um um Profissional Profissional Aprendendo Aprendendo com com Profissionais Profissionais www.3way.com.br www.3way.com.br
Todos os direitos reservados a 3Way Networks

2.3 2.3

Membros de de Instncia Instncia Membros

Os Os valores valores das das variveis variveis em um objeto constituem em um objeto constituem o . o seu seu estado estado. Dois objetos objetos distintos distintos tm tm Dois o o mesmo mesmo estado estado se se suas suas variveis membro tm variveis membro tm os os mesmos valores. mesmos valores.

12 15

12

Linguagem Linguagem de de Programao Programao Java Java


//declaracao Carro carro = new Carro(); //atribuindo valor a varivel referncia Carro carro1 = new Carro(); //invocando mtodo carro1.ano = "2001"; String retorno=carro.acelerar(); carro1.modelo= "fusca"; carro1.cor = "prata"; //A sentena a baixo causa erro compilao, //mtodo no est definido no obejeto invocador carro.print();

Em Java a chamada de um mtodo feito usando o operador binrio "." (ponto).

2.3.1.1 Chamando Mtodos de Objeto Para ilustrar como chamar os mtodos, utilizaremos como exemplo a classe String. Pode-se usar a documentao da API Java para conhecer todos os atributos e mtodos disponveis na classe String. Posteriormente, iremos criar nossos prprios mtodos. Para chamar um mtodo a partir de um objeto, escrevemos o seguinte:
nomeDoObjeto.nomeDoMtodo([argumentos]); Figura 2.4 Layout Memria aps inicializao

//criando novo alias Vamos pegar dois mtodos encontrados na classe String como exemplo: Carro carro2 = carro1;

Declarao do mtodo

Definio Retorna o caractere especificado no ndice. Um ndice vai de 0 at length() - 1. O primeiro caractere da seqncia est no ndice 0, o seguinte, no ndice 1, e assim sucessivamente por todo o array. Compara o contedo de duas Strings, ignorando maisculas e minsculas. Duas strings so consideradas iguais quando elas tm o mesmo tamanho e os caracteres das duas strings so iguais, sem considerar caixa alta ou baixa.

public char charAt(int index)

public boolean equalsIgnoreCase (String outraString)

Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto Tabela 4: Exemplos de Mtodos da classe String

Usando os mtodos:
Stringcriado str1 dever = "Hello"; Cada objeto ter sua prpria instncia de variveis Os valores das variveis char x = str1.charAt(0); (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem // retornar o caracter H e o armazenar no atributo x objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da o seu estado. String str2 = "hello"; classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm retornado o valor booleano true compartilhada// poraqui todas ser as instncias da classe. boolean result = str1.equalsIgnoreCase(str2);

2.3

Membros de Instncia

2.3.1 Invocao de Mtodos 2.3.2 Envio de Argumentos para Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um Em exemplos anteriores, enviamos atributos para invocando os mtodos. objeto pode ter que mostrar um comportamento particular uma Entretanto, no fizemos nenhuma distino entre os diferentes tipos operao apropriada que foi definida no objeto. Em Java, isto de atributos feito pela que podem ser enviados como argumento para os o mtodos. chamada de um mtodo em um objeto usando operador binrio "." (ponto),

H duas formas para se o mesmo estado se suas enviar argumentos paraos variveis membro tm um mtodo, o primeiro mesmos valores. envio por valor e o segundo envio por referncia.

devendo especificar a mensagem completa: o objeto que o recebedor da 2.3.2.1 Passagem deaParmetros por valor mensagem, o mtodo ser invocado e os argumentos para o mtodo (se houver). Quando ocorre uma passagem valor,enviar a chamada do mtodo faz uma O mtodo invocado no recebedor pode por tambm informaes de volta ao cpia do valor do atributo e o envia como argumento. O mtodo chamado no modifica o valor original do argumento mesmo que estes valores objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser sejam modificados durante operaes de clculo implementadas pelo mtodo. um que esteja definido pelo objeto. Por exemplo:
Seja um Profissional Aprendendo com Profissionais Seja um Profissional Aprendendo com Profissionais www.3way.com.br www.3way.com.br
Todos os direitos reservados a 3Way Networks

12 16

13

Linguagem de Programao Java

//atribuindo valor a varivel referncia Carro carro1 = new Carro(); carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 Layout Memria aps inicializao

//criando novo alias Carro carro2 = carro1;

Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

Cada objeto criado dever ter sua prpria instncia de variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da classe. Porm no devemos confundir isto com a implementao do mtodo, que compartilhada por todas as instncias da classe. 2.3.1 Invocao de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.
Todos os direitos reservados a 3Way Networks

2.3

Membros de Instncia

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 17

Linguagem de Linguagem de Programao Programao Java Java

public classvalor PassagemPorValor { //atribuindo a varivel referncia Carro carro1 = new Carro(); public = static void main(String[] args) { carro1.ano "2001"; int i = 10; carro1.modelo= "fusca"; o valor de i carro1.cor // = exibe "prata"; System.out.println(i); // chama o mtodo teste // envia i para o mtodo teste teste(i);---------------------------------------+ // exibe o valor de i no modificado | +---------->System.out.println(i); | | } | | public static void teste(int j) { <------------------+ | // muda o valor do argumento +---------j = 33; } }
2.2 Passagem porinicializao valor FiguraListagem 2.4 Layout Memria aps

copiado para o atributo j do mtodo. J que j o atributo modificado no mtodo teste(), no afetar o valor do atributo i, o que significa uma cpia diferente do atributo. Como padro, todo tipo primitivo, quando enviado para um mtodo, utiliza a forma de envio por valor. Passagem de Parmetros por referncia Quando ocorre um envio por referncia, a referncia de um objeto enviada para o mtodo chamado. Isto significa que o mtodo faz uma cpia da referncia do objeto enviado. Entretanto, diferentemente do que ocorre no envio por valor, o mtodo pode modificar o objeto para o qual a referncia est apontando. Mesmo que diferentes referncias sejam usadas nos mtodos, a localizao do dado para o qual ela aponta a mesma. Veja prximo exemplo, Listagem 2.3:
public class PassagemPorReferencia {

//criando novo alias Carro carro2 = o carro1; No exemplo dado, mtodo teste() foi chamado e o valor de i foi enviado como argumento. O valor de i

2.3.2.2

Figuravoid 2.5 Layout Memria duas variveis referncia public static main(String[] args) { para o mesmo objeto // criar um array de inteiros int[] idades = { 10, 11, 12 }; exibir os valores do array 2.3 Membros de // Instncia for (int i = 0; i < idades.length; i++) { Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis System.out.println(idades[i]); (atributos) definidas pela } classe. Os mtodos definem o comportamento de um em um objeto constituem //pois chamar o que mtodo testepertence e enviar a objeto da objeto. Isto importante, denota um mtodo a cada o seu estado. // referncia array classe. Porm no devemos confundir isto para com a o implementao do mtodo, que Dois objetos distintos tm +----------teste(idades); compartilhada por todas as instncias da classe. | // exibir os valores do array o mesmo estado se suas | for (int i = 0; i < idades.length; i++) { variveis membro tm os 2.3.1 Invocao de Mtodos | System.out.println(idades[i]);<----------------------+ mesmos valores. | | Objetos se comunicam}pela troca de mensagens, isto significa que um | } | objeto pode ter que mostrar um comportamento particular invocando uma +---->public static void teste(int[] arr) { | operao apropriada que foi definida no objeto. Em Java, isto feito pela // mudar os valores do array | chamada de um mtodo em(um usando operador binrio "." { (ponto), for intobjeto i = 0; i < o arr.length; i++) | devendo especificar a mensagem completa: objeto que o recebedor da arr[i] = i +o 50;-------------------------------+ mensagem, o mtodo a } ser invocado e os argumentos para o mtodo (se houver). } O mtodo invocado no recebedor pode tambm enviar informaes de volta ao } objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser

um que esteja definido pelo objeto.

Listagem 2.3 Passagem por "referncia"


Todos os direitos reservados a 3Way Networks

Seja um Profissional Aprendendo com Profissionais Seja um Profissional Aprendendo com Profissionais www.3way.com.br www.3way.com.br

12 18

14

Linguagem Linguagem de de Programao Programao Java Java


A Figura 2.3 ilustra o resultado da execuo do cdigo na Listagem 2.3:
//atribuindo valor a varivel referncia Carro carro1 = new Carro(); carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 Layout Memria aps inicializao

//criando novo alias Carro carro2 = carro1;


Figura 2.6 - Exemplo de Envio por referncia

H casos em que voc precisar que alguns atributos sejam compartilhados por todos os objetos de uma classe em particular, ou seja, esses atributos devem pertencer somente Classe e no aos objetos criados a partir dessa classe. Por exemplo, imagine que voc queira manter um controle de quantos objetos de uma classe foram criados e permitir que cada objetos consiga recuperar esta informao. Definir um contador como uma varivel de instncia na definio da classe no resolveria o problema, pois j sabemos que so criadas cpias desta varivel para cada objeto criado a partir da definio de uma classe. Ento como resolver o problema? A soluo usar variveis estticas - usar a palavra chave static antes da declarao da varivel. Uma varivel esttica inicializada quando a classe carregada em tempo de execuo. De forma similar, os mtodos tambm podem ser estticos. Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

2.4

Membros Estticos

Cada objeto criado dever ter sua prpria instncia de variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da classe. Porm no devemos confundir isto com a implementao do mtodo, que compartilhada por todas as instncias da classe.

2.3

Membros de Instncia

2.3.1 Invocao de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o mostrando operador binrio "." (ponto) , Figura 2.7 Diagrama Classe definio de membros estticos devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). A Figura 2.7 mostra a redefinio da classe Carro que foi acrescentado dois membros estticos, ou O mtodo invocado no recebedor pode tambm enviar informaes de volta ao membros da classe, marcado sublinhado abaixo do nome, conforme notao definida na UML. Em sua objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser implementao usamos a palavra reservada static como mostrado na Listagem 2.4 abaixo: um que esteja definido pelo objeto.
os direitos reservados a 3Way Networks Seja Todos um Profissional Aprendendo com Profissionais Seja um Profissional Aprendendo com Profissionais www.3way.com.br www.3way.com.br

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

12 19

15

Linguagem Programao Java Linguagemde de Programao Java


public class Carro { // Variveis de Instncia //atribuindo valor a varivel referncia String modelo; Carro carro1 = new Carro(); String cor; carro1.ano = "2001"; String ano; carro1.modelo= "fusca"; // declarao varivel esttica carro1.cor = "prata"; static int contador; // 1 // construtor modificado para incrementar o contador // para cada objeto criado public Carro() { // 2 contador = contador + 1; } // Mtodos de Instncia public String acelerar() { return "acelerando !"; } public String frear() {2.4 Layout Memria aps inicializao Figura return "freando !"; //criando novo alias } Carro carro2 = carro1; public String abrirPorta() { return "abre porta !"; } // Mtodo Esttico //3 static int getContadorInstancia() { return contador; } }
Listagem 2.4 Exemplo de membros de classe

Temos acesso aos membros estticos de uma classe usando diretamente o nome da classe seguido do operador ponto (.), no precisamos de uma instncia.

A varivel esttica contador declarada em (1, linha 7), ela ser alocada e inicializada por padro 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 explicitamente o contador da classe. O mtodo 2.5 Layout Memria duas variveis referncia para o mesmo objeto getContadorInstancia() em (3, linha 18) esttico e um mtodo da classe, ele retorna o valor do contador quando for invocado. O cdigo seguinte invoca o mtodo getContadorInstancia() da classe Carro: 2.3 Membros de Instncia

Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis //Nome da classe invoca mtodo estatico (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem int retorno = Carro.getContadorInstancia(); objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da o seu estado. classe. Porm no devemos confundir isto com a implementao do mtodo, que da classe: Membros estticos tambm podem ser acessados via referncia para objetos Dois objetos distintos tm compartilhada por todas as instncias da classe. 2.3.1
//Referencia de objeto invoca mtodo estatico Carro carro1 = new Carro(); Invocao de Mtodos int retorno = carro1.getContadorInstancia(); Objetos se comunicam pela troca de mensagens, isto significa que um

o mesmo estado se suas variveis membro tm os mesmos valores.

objeto pode ter que mostrar um comportamento particular invocando uma Note que membros de classe podem acessados tantoisto pelo nome classe quanto pela referncia de operao apropriada que foi definida no ser objeto. Em Java, feitoda pela objetos da classe, porm membros de instncia s so acessveis via referncia de objetos da classe. chamada de um mtodo em um objeto usando o operador binrio "." (ponto) , devendo especificar a mensagem completa: o objeto que o recebedor da 2.5 Herana - Relacionamentos do tipo "-um" mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). Voc dispem dois mecanismos fundamentais afim de se de construir novas classes a partir de classes O mtodo invocado no de recebedor pode tambm enviar informaes volta ao existentes: herana e agregao . Faz todo construir nossa classe Carro todas as caractersticas de objeto chamador atravs de um valor desentido retorno . O mtodo chamado deveherdando ser uma classe Veculo que j exista, uma vez que um Carro um Veculo . Mas um Veculo constitudo de diversas um que esteja definido pelo objeto.
Seja um Profissional Aprendendo comNetworks Profissionais Todos os direitos reservados a 3Way www.3way.com.br Seja um Profissional Aprendendo com Profissionais www.3way.com.br

16 12 20

Linguagem de Programao Java

//atribuindo valor a varivel referncia Carro carro1 = new Carro(); carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 Layout Memria aps inicializao

//criando novo alias Carro carro2 = carro1;

Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

Cada objeto criado dever ter sua prpria instncia de variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da classe. Porm no devemos confundir isto com a implementao do mtodo, que compartilhada por todas as instncias da classe. 2.3.1 Invocao de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.
Todos os direitos reservados a 3Way Networks

2.3

Membros de Instncia

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 21

Linguagem Linguagem de de Programao Programao Java Java


partes, ento poderamos construir nossa classe Veculo pela agregao de outros objetos que constituem um veculo, //atribuindo assim podemos dizer quea um Veculo tem um Motor, tem um Chassi e tem uma Carroceria. valor varivel referncia Carro carro1 = new Carro(); A Figura 2.7 mostra a relao entre as classes Veculo e Carro, ela mostra que um Carro -UM Veculo, a carro1.ano = "2001"; classe Veculo denominada Superclasse enquanto a classe Carro chamada de Subclasse. A classe Veculo uma carro1.modelo= "fusca"; generalizao para todo Carro (neste caso veculos motorizados), enquanto a classe Carro representa a carro1.cor = "prata"; especializao da classe Veculo, ou seja um tipo particular de veculo.

Figura 2.8 Diagrama de Classe descrevendo a relao de Herana

Em Java, essa relao representada pela palavra-chave extends. Uma subclasse s pode estender novo alias (herdar)//criando somente uma nica superclasse. A listagem 2.4 de cdigo demonstra o uso de extends para criar a Carro carro2 = carro1; subclasse Carro a partir da superclasse Veculo.
class Veiculo { // nome da classe

Figura 2.4 Layout Memria aps inicializao

// (1)Variaveis private String cor; private String ano; private String modelo; private String nome; // (2) Constructor public Veiculo() { modelo="2000" }; // (3) public public public } Mtodos String acelerar() { return "acelerando !"; } String { return "freando !"; } objeto Figurafrear() 2.5 Layout Memria duas variveis referncia para o mesmo String abrirPorta() { return "abre porta !"; }

Os valores das variveis em um objeto constituem Listagem 2.5 pertence Exemplo Herana objeto. Isto importante, pois denota que um mtodo a cada objeto da o seu estado. classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm compartilhada por todasmuito as instncias da classe. No se preocupe neste momento em compreender qual relao dever ser utilizadaestado para criar suas o mesmo se suas classes, foque na terminologia e nas palavras-chave que esto sendo apresentadas. variveis membro tm os 2.3.1 Invocao de Mtodos mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um

class Carro extends Veiculo { Membros de Instncia // declarao de Variveis e Mtodos da nova classe Cada objeto criado dever ter sua prpria instncia de variveis } (atributos) definidas pela classe. Os mtodos definem o comportamento de um

2.3

objeto pode ter que mostrar umclasses comportamento particular invocando uma Voc pode construir novas de objetos por agregao de objetos j existentes, o objeto agregado operao apropriada que foi definida no objeto. Em Java, isto feito pela constitudo de outros objetos. chamadaJava de um mtodo o em um objeto usando ode operador "." , implementa conceito de agregao objetos binrio pelo uso da(ponto) referncia. Objetos em Java no podem devendo especificar mensagem completa: o objeto que conter o recebedor da conter outros objetos a explicitamente. Objetos somente podero variveis de tipos primitivos e referncias a mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). outros objetos. O mtodo invocado tambm enviar informaes de volta ao Uma relaono derecebedor agregao pode demonstrada na Figura 2.8, este diagrama UML informa que objetos da classe objeto chamador atravs de um valor de retorno . O mtodo chamado deve ser Veculo TEM-UM objeto da classe Motor associado a ela. um que esteja definido pelo objeto.
Seja um Profissional Aprendendo com Profissionais Seja um Profissional Aprendendo com Profissionais www.3way.com.br www.3way.com.br
Todos os direitos reservados a 3Way Networks

2.6

Agregao - Relacionamentos do tipo "tem-um"

12 22

17

Linguagem Linguagem de de Programao Programao Java Java

//atribuindo valor a varivel referncia Carro carro1 = new Carro(); carro1.ano = "2001"; Figura 2.9 Diagrama de Classe descrevendo Agregao carro1.modelo= "fusca"; carro1.cor = "prata";

A listagem mostra a implementao da relao TEM-UM mostrada na Figura 2.9.


class Veiculo // nome da classe { // Agregao Motor motor1 = new Motor(); }

2.7

 Tudo em Java deve ser colocado dentro de uma classe; Figura 2.4 Layout Memria aps inicializao  H dois tipos de valores em Java: valores atmicos de tipos primitivos e valores de referncia; novo alias  //criando Referncias indicam objetos que so criados a partir de uma classe; Carro carro2 =ser carro1;  Objetos s podem manipulados via referncia;  Objetos em Java no podem conter outros Objetos, ele somente tem referncias para outros objetos;  Remoo de objetos gerida pelo sistema de tempo de execuo (runtime). Este processo conhecido 

Princpios de Programao Com Java

como Garbage Collection. Java faz distino entre nomes em MAISCULAS e minsculas, ou seja, CASE SENSITIVE.

Em Java, um arquivo de cdigo-fonte tem os elementos especificados na seguinte ordem:  A definio opcional de package para especificar o nome do pacote da classe. As classes e interfaces definidas em um arquivo fonte tornam-se parte deste pacote. Se omitida, as definies pertencem ao pacote default. Veremos mais sobre pacotes posteriormente.  Zero ou mais usos da sentena import. A sentena import ser discutida em detalhes posteriormente.  Qualquer nmero de definies de classes e interfaces. Tecnicamente um arquivo de cdigo-fonte em 2.5 qualquer Layout Memria duas variveis referncia para o mesmoExperimente objeto Java no precisaFigura conter definio, mas ele seria intil. compilar um arquivo fonte sem nenhuma definio. As classes e interfaces podem ser definidas em qualquer ordem. O compilador Java impe a restrio de somente uma classe com modificador public por arquivo, sendo que sede esta existir o nome do arquivo de cdigo-fonte deve ser nomeado obrigatoriamente com o 2.3 Membros Instncia nome da classe pblica. Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem Veja 2.10 na prxima pgina, demonstrao da estrutura um arquivo de cdigo-fonte vlido. objeto. Isto Figura importante, pois denota que um mtodo pertence a cada de objeto da o seu estado. classe. Porm no devemos confundir isto com a implementao do mtodo, que // Nome do Arquivo: Aplicacao.java Dois objetos distintos tm compartilhada por todas as instncias da classe.

2.8

Estrutura de Arquivos Fontes em Java

2.3.1

objeto pode ter que mostrar um comportamento particular invocando uma //PARTE 2: (Zero ou Mais) operao apropriada que foi definida no objeto. Em Java, isto feito pela //Pacotes usados chamada de um mtodo em um objeto usando o operador binrio "." (ponto), import java.util.*; devendo especificar a mensagem completa: o objeto que o recebedor da import javax.swing.JOptionPane; mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo invocado no recebedor pode tambm enviar informaes de volta ao //PATE 3: (Zero ou Mais) objeto chamador de um valor de retorno O mtodo chamado deve ser ordem) //atravs Definies de classes e . interfaces (em qualquer um que esteja definido pelo objeto.
public class Aplicacao {}
Seja um Profissional Aprendendo com Profissionais Seja um Profissional Aprendendo com Profissionais www.3way.com.br www.3way.com.br
Todos os direitos reservados a 3Way Networks

//PARTE 1: (Opcional) //Nome Pacote Invocao de Mtodos package com.nomeempresa.projeto.nomepacote; Objetos se comunicam pela troca de mensagens, isto significa que um

o mesmo estado se suas variveis membro tm os mesmos valores.

12 23

18

Linguagem de de Programao Programao Java Linguagem Java


class C1{} interface I1{} //atribuindo valor a varivel referncia 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 cdigo-fonte

O interpretador Java executa uma chamada ao main() na classe especificada na linha de comando. Este o meio padro pelo qual aplicaes standalone so invocadas. O mtodo main() tem a seguinte assinatura:
public static void main(String [] args)

2.9

O mtodo main()

O comando java AlgumaClasse, resulta em uma chamada para o mtodo AlgumaClasse.main(). Assim qualquer classe pode ter um mtodo main() mas somente a classe especificada ao interpretador ser executada.
Figura 2.4 Layout Memria aps inicializao

novo alias 2.10 //criando Fazer Laboratrio 1

em caso de dvida, nunca deixe uma dvida sem reposta.

Carro carro2 = carro1; Siga instrues do Laboratrio 1 e tome cuidado com o tempo de execuo, sempre recorra ao instrutor

2.11 Exerccios

Escreva, compile e execute todas as listagens de cdigo apresentadas neste captulo.

Assim como outras linguagens, a linguagem de programao Java definida por uma regra gramatical, que especifica como construes sintaticamente legais podem ser formadas usando os elementos da linguagem, e por uma definio semntica que especifica o significado das construes sintaticamente corretas.

Identificadores, Palavras-chave e Tipos

Um programa deve ser documentado com comentrios e notas em lugares relevantes. Comentrios tem Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto como propsito a documentao, eles so ignorados pelo compilador. Para fazer um comentrio em Java, voc pode usar o // para comentar uma linha simples at o final, tudo aps o // ser ignorado pelo 2.3 Membros deser Instncia Um programa deve compilador: Cada objeto documentado pelacriado dever ter sua prpria instncia de variveis Os valores das variveis //isto comenta at o fim da linha (atributos) definidas pela classe. Os mtodos definem o comportamento de um insero de comentrios. em um objeto constituem objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da o seu estado. ou ento usar o /* */ do para comentar classe. Porm no devemos confundir isto com a implementao mtodo, que Dois objetos distintos tm Comentrios Javadoc so mltiplas tudo o que estiver entre eles ser compartilhada por todas as instncias dalinhas, classe. o mesmo estado se suas usados para gerar uma ignorado pelo compilador. variveis membro tm os documentao HTML 2.3.1 Invocao de Mtodos valores. em paramesmos seus programas Objetos se comunicam /* pela troca de mensagens, isto significa que um Um comentrio Java. objeto pode ter que mostrar um comportamento particular invocando uma com varias linhas operao apropriada que foi definida no objeto. Em Java, isto feito pela */ chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o recebedor da mensagem,Voc o mtodo ser invocado e os argumentos para o mtodo (se houver). pode a criar comentrios Javadoc comeando-os com /** e O terminando-os mtodo invocado no recebedor pode tambm enviar informaes de que volta ao ao */, funciona como o exemplo anterior s com objeto chamador atravs de um valor de retorno . O mtodo chamado deve ser adicionarmos tags apropriadas (como @tag valor) podemos colocar mais um que esteja definido objeto. Por exemplo: informao em nossospelo comentrios.
Seja um Profissional Aprendendo com Profissionais Todos os direitos reservados a 3Way Networks www.3way.com.br Seja um Profissional Aprendendo com Profissionais www.3way.com.br

3.1

Comentrios

19

12 24

Linguagem de Programao JavaJava Linguagem de Programao

/** //atribuindo valor varivel referncia Este e um exemplo deacomentrios especiais para documentao usado por Carro carro1 = new Carro(); java para gerar uma documentao em html. Este usa tags como: carro1.ano "2001"; @author Carlos= Eduardo carro1.modelo= "fusca"; @version 1.2 carro1.cor = "prata"; @see <a href="http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/javadoc.html">Javadoc Tutorial</a> */

Uma sentena constituda de uma ou mais linhas de cdigo terminadas por ponto-e-vrgula ( ; ). Uma exemplo de sentena simples :
System.out.println("Hello");

3.2

Ponto-e-Vrgula, Blocos e Espao

Um bloco uma ou mais sentenas cercadas por chaves ({) de abertura e outra (}) de fechamento. Blocos Figura 2.4 Layout Memria aps inicializao de sentenas podem ser aninhados indefinidamente. Qualquer quantidade de espaos so permitidos. Um exemplo 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 sentenas

Identificadores so tokens, elementos bsicos que constitui a linguagem, representa nomes de variveis, mtodos, classes, etc. Exemplos de identificadores Identificadores em Java so: Hello, main, System, out, println. 2.5 Layout Memria duas variveis referncia que para omain. mesmo objeto so case-sensitive, ou Com isto, significa queFigura o identificador: MaIn no o mesmo seja, feito distino de Identificadores devem comear com uma letra, ou um caractere sublinha "_", ou caracteres maisculos e um caractere dlar "$". Letras podem ser maisculas ou minsculas. Os caracteres minsculos. subsequentes podemde usar nmeros de 0 a 9. 2.3 Membros Instncia Os identificadores criados por voc no podem ser iguais aos Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis identificadores reservados pela gramtica da linguagem palavras reservadas (atributos) definidas pela classe. Os mtodos definem o (comportamento de ) um em um objeto constituem como: class public , void, etc. objeto. Isto, importante, pois denota que um mtodo pertence a cada objeto da o seu estado. classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm Exemplos de todas identificadores vlidos: compartilhada por as instncias da classe. o mesmo estado se suas numero, nmero, var0001, a_com_b, _var01_, $$_100.

3.3

Identificadores

variveis membro tm os 2.3.1 Invocao de Mtodos Exemplos de identificadores invlidos: mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um n^mero , 0001var , a-com-b , var/01 , $$..100 . objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), 3.4 Palavras Reservadas devendo especificar a mensagem completa: o objeto que o recebedor da So o identificadores linguagem epara que o no devem ser utilizados como outra finalidade. Seu mensagem, mtodo a ser reservados invocado epela os argumentos mtodo (se houver). uso de forma incorreta gerar um erro de compilao. O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 20
Todos os direitos reservados a 3Way Networks

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 25

Linguagem de Programao JavaJava Linguagem de Programao


abstract assert boolean break byte continue else final implements long private static this try

//atribuindo valor case catch a varivel char referncia class Carro carro1 = new Carro(); const do double carro1.ano =default "2001"; carro1.modelo= "fusca"; false enum extends float carro1.cor = "prata"; finally for goto if
import native protected strictfp throw void instanceof new public super throws volatile int null return switch transient while
Figura 3.1 Palavras Reservadas

interface package short synchronized true

Os identificadores const e goto no so utilizados atualmente em Java, mas palavra reservada porque em //criando novo alias verses anteriores eles tinham utilidade e foi depreciado o seu uso. J null, true e false so literais reservados.
Carro carro2 = carro1;

Figura 2.4 Layout Memria aps inicializao

3.5

Variveis, Declaraes e Atribuio

Variveis em Java podem ser de:  Instncia: um espao na memria usado para armazenar o estado de um objeto.  Esttica ou de classe: que pertencem classe e no a uma instncia de um objeto.  Local: tambm chamadas de variveis de mtodo, que so declaradas em blocos ou mtodos e so alocadas para cada invocao de mtodo ou bloco.

Variveis em Java podem ser de instncia, esttica e local. Devem ser declaradas e inicializadas antes de serem utilizadas.

A varivel armazena valores de um tipo de dado. Uma varivel deve ter um nome, um tipo, um tamanho particular e um valor associado a ela. O tipo da varivel indica o tipo de dado queduas ela variveis pode conter. O nome dasobjeto Figura 2.5 Layout Memria referncia para o mesmo variveis deve seguir as mesmas regras de nomenclatura que os identificadores. 3.5.1 Declarando e inicializando Variveis 2.3 Membros de Instncia A seguir, vemos como feita a declarao de uma varivel: Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem <tipo do dado> <nome> [= valor inicial]; objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da o seu estado. classe. Porm no devemos confundir isto com a implementao do mtodo, que Os valores colocados entre < > so obrigatrios, enquanto que os valores contidos entre [ ] sodistintos opcionais. Dois objetos tm compartilhada por todas as instnciasvlidas: da classe. Exemplos de declaraes e inicializaes

2.3.1 char Invocao de Mtodos caracter; double area; Objetos se comunicam pela troca de mensagens, isto significa que um objeto boolean pode ter flag; que mostrar um comportamento particular invocando uma int idade = 10; operao apropriada que foi definida no objeto. Em Java, isto feito pela float areaMesa = 4.5f; chamada de um mtodo em um objeto usando o operador binrio "." (ponto), byte b1=2, b2=4; devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). int i=10; O mtodo invocado no recebedor pode tambm enviar informaes de volta ao int j=i; objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

21

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 26

Siga-nos tambm no Twitter! twitter.com/3waynet

Linguagem de Programao JavaJava Linguagem de Programao


JAVA muito exigente com relao ao tipo de dado, uma linguagem fortemente tipada. O compilador no permitir que voc use o operador de atribuio (=) para inserir uma referncia de objeto de uma classe //atribuindo valor a varivel referncia Elefante em uma carro1 varivel referncia do tipo da classe Coelho, nem permitir que se atribua um valor do tipo float a Carro = new Carro(); uma varivel do tipo int: = "2001"; carro1.ano
carro1.modelo= "fusca"; carro1.cor = "prata"; Coelho coelho = new Elefante(); int i = 3.4f; //erro
//erro

Abaixo vemos um exemplo de programa que declara e inicializa algumas variveis:


public class ExemploVariaveis { public static void main( String[] args ){ //declara uma varivel com nome result e tipo boolean boolean result; //declara uma varivel com nome option e tipo char char option; Figura 2.4 Layout Memria aps inicializao

//criando novo alias // atribui o smbolo C para a varivel Carro carro2 = carro1; option = 'C';
//declara uma varivel com nome grade e tipo double // e a inicializa com o valor 0.0 double grade = 0.0; } }
Listagem 3.2 Declarao de variveis

3.5.2 Exibindo o valor de uma Varivel Para exibirmos em qualquer dispositivo de sada o valor de uma varivel, podemos fazer uso dos seguintes comandos:
System.out.println() ou System.out.print()
Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

Aqui est um simples programa como exemplo:

Cada objeto criado dever ter sua prpria instncia de variveis public static void main(String[] args) { (atributos) definidas pela classe. Os mtodos definem o comportamento de um objeto. Isto importante, poisint denota que = um mtodo pertence a cada objeto da value 10; char x; classe. Porm no devemos confundir isto com a implementao do mtodo, que x = 'A'; compartilhada por todas as instncias da classe.

objeto pode ter que mostrar um comportamento particular invocando uma Listagem 3.3 Imprimindo valor de variveis operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), 3.5.3 Variveis de Referncia e de Valor devendo especificar a mensagem completa: o objeto que o recebedor da Java suporta duas classes de variveis, elas podem ser: de referncia ou de valor. mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). As variveis de valor (ou primitivas) so aquelas que armazenam dados no exato espao de memria onde O mtodo invocado no recebedor pode tambm enviar informaes de volta ao a varivel est. objeto chamador atravs de um valor retorno . Oarmazenam mtodo chamado deve de ser memria onde o dado est As variveis de referncia so de aquelas que o endereo um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 22
Todos os direitos reservados a 3Way Networks

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas System.out.println(value); System.out.println("O valor de x = " + x); variveis membro tm os 2.3.1 Invocao de Mtodos } mesmos valores. Objetos } se comunicam pela troca de mensagens, isto significa que um

2.3

public class ImprimeVariavel Membros de Instncia

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 28

Linguagem de de Programao Java Linguagem Programao Java


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

Suponha que o quadro abaixo represente a memria do computador, com seus endereos de memria, o nome das variveis e os tipos de dados que ele pode suportar.
Endereo 0x10001 : 0x20002 : Identificador num : nome Valor 10 : 0x30001 "Hello"

: aps inicializao Figura: 2.4 Layout Memria

//criando novo 0x30001 alias Carro carro2 = carro1;

Figura 3.2 Memria aps inicializao de variveis.

A varivel num (do tipo int) o valor o atual valor contido por ela e a varivel referncia nome (do tipo String) somente armazenado o endereo de memria que contm o valor da varivel.

3.6.1 Literais Java Um literal um valor constante, este valor pode ser numrico (inteiros e ponto-flutuantes), caracteres, booleanos ou cadeia de caracteres (String). H ainda o literal null que representa uma referncia nula (sem destino). 3.6.2 Tipos Dados Primitivos 3.6.2.1 Lgico boolean Figura 2.5 Layout Memria duas referncia o mesmo objeto O tipo booleano tem dois valores literais true e variveis false, ele podepara representar dois estados: true (verdadeiro) ou false (falso). No exemplo abaixo declarada a varivel verdade do tipo boolean e atribuda a esta o valor true.

3.6

Tipos Bsicos em Java

Para usar um literal de caracter devemos cercar o caractere entre delimitadores de aspas simples. Por exemplo, a letra A, representada como o 'A'.

Cada objeto criado dever ter sua prpria instncia de variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um 3.6.2.2 Textual char and String objeto. Isto importante, pois denota que um pertence a cada objeto de da O tipo de dado caracter representa ummtodo CARACTER UNICODE, conjunto classe. Porm no devemos confundir isto com a implementao do mtodo, que caracteres de 16 bits sem sinal, em substituio ao conjunto de caracter ASCII de 8 compartilhada por todas da classe. especiais das lnguas. bits. Unicode permite o uso as deinstncias smbolos e caracteres

UNICODE, por exemplo '\u0041', esta a representao hexadecimal do caractere unicode 'A'. objeto pode ter caracteres que mostrar um comportamento particular uma contra-barra usada seguida Para usar especiais, tais como um caractere de invocando nova-linha, uma operao apropriada foi definida no objeto. Emde Java, isto '\r feito pela pelo cdigo do caracter.que Por exemplo, '\n' para o caracter nova-linha, ' para o retorno de "carro-do-carro", o chamada de um mtodo em um objeto usando o operador binrio "." (ponto) , '\b' para o "backspace". devendoOespecificar a que mensagem completa: o objeto o recebedor da representar sequencias de tipo String, no um tipo primitivo mas que uma classe, usado para mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). caracteres. Por exemplo: O mtodo invocado no recebedor pode tambm enviar informaes de volta ao "Um literal String pode caracter de escape objeto chamador atravs de um valorconter de retorno . O mtodo chamado\n". deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 23
Todos os direitos reservados a 3Way Networks

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas Para usar um literal de caracter devemos cercar o caractere entre delimitadores de aspas simples.tm Por os variveis membro 2.3.1 Invocao de exemplo, a letra A , Mtodos representada como o 'A'. Ou podemos ainda usar o cdigo hexadecimal do caractere mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um

2.3

boolean verdade = true;

Membros de Instncia

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 29

Linguagem de de Programao Java Linguagem Programao Java

//atribuindo valor a varivel referncia Carro carro1 = new Carro(); // declara e inicializa carro1.ano = "2001"; uma varivel char char ch = 'A'; carro1.modelo= "fusca"; carro1.cor = "prata"; // declara e inicializa duas variveis char char ch1,ch2; ch1='\U0020'; ch2='B;

Alguns exemplos de declaraes e inicializaes de variveis do tipo char e do tipo String:

// declara duas variveis String e as inicializa String deseja = "Bom dia !! \n"; String lembre = "Strings so imutveis !"; // declara duas variveis String String str1,str2;

Literais do tipo String so seqncias de caracteres que devem estar cercadas por aspas-duplas ("") e devem comear e terminar na mesma linha.

3.6.2.3 Inteiro byte, short, int e long Figura 2.4 Layout Memria aps inicializao H quatro tipos inteiros em Java, representados pelas palavras chaves byte, //criando novo alias short, int e longcarro2 . Os literais podem ser escritos de trs formas diferentes: Carro = integrais carro1; decimal (base 10), hexadecimal (base 16) e octal (base 8). Para nmeros decimais basta escrev-lo como ele exemplo: 2010. Para usar os outros literais inteiros em Java voc pode seguir algumas notaes especiais. Para nmeros hexadecimais devemos utilizar o prefixo "0x" (zero xis minsculo) ou "0X" (zero xis maisculo). Para nmeros em octal ele deve ser precedido de "0" (zero). Por exemplo, considere o nmero 12 (em decimal):
int valDecimal = 12; int valHexadecimal = 0xC;

int valOctal = 014; Os literais inteiros so, por padro, do tipo de dados int (32-bit com sinal). Em alguns casos pode-se desejar forar 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 Memria duas variveis referncia para o mesmo objeto

7 Cada objeto criado dever ter sua 8 byte prpria instncia -27 a 2de - 1 variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um 16 short -215 a 215 - 1 objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da 31 classe. Porm no devemos do mtodo, que a2 -1 32 confundir isto com int a implementao -231 compartilhada por todas as instncias da classe. 64 long -263 a 263 - 1

2.3

Membros de Instncia

Tamanho (bits)

Tipo

Faixa

2.3.1 Invocao de Mtodos Tabela 3.1: Tipos e faixa de valores dos Tipos Integrais Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida 3.6.2.4 Ponto Flutuante float e double no objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador "." (ponto) Os literais de ponto flutuante podem ser expressos em binrio notao padro ou, cientfica. Por exemplo, 123.4 devendo especificar a, enquanto mensagem completa: o notao objeto que o . recebedor da tipos fracionrios so do tipo est na notao padro 123.4e2 est na cientfica Os literais dos mensagem, o mtodo a ser64-bit) invocado epadro. os argumentos para ouma mtodo (se houver). de dados double (um valor por Para inicializar varivel com o tipo de dados float (32-bit), de O mtodo invocado no recebedor tambm enviar informaes de volta ao menor preciso, adicione o caracterepode "f" ou "F" ao literal: 3.1415F . objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 24
Todos os direitos reservados a 3Way Networks

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 30

Linguagem de de Programao Java Linguagem Programao Java


double d1 = 123.4; double d2 = 1.234e2; // mesmo valor de d1, mas em notao cientfica //atribuindo valor a varivel referncia float f1 = 123.4f; Carro carro1 = new Carro(); carro1.ano = "2001"; Os literais dos tipos Tamanho (bits) Tipo Faixa carro1.modelo= "fusca"; fracionrios so do tipo 31 31 carro1.cor =float "prata"; 32 -2 a 2 - 1 64 double -2 a 2 - 1
63 63

de dados double e do tipo float.

Tabela 3.2: Tipos e faixa de valores dos Nmero Fracionrios

3.6.2.5 Exemplos de declaraes e atribuies O seguinte programa demonstra como declarar e atribuir valores para variveis dos tipos int, float, boolean, char e String:
public class Atribui { public static void main (String args []) { //criando novo alias Carro carro2 carro1;variavel integer //= declara int x, y; // declara variavel ponto-flutuante float z = 3.414f; // declare e atribui double double w = 3.1415; // declare e atribui boolean boolean verdadeiro = true; // declare variavel caracter char c; // declare variavel String String str; Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto // declare e atribui variavel String String str1 = "bye"; // atribui valor para variavel char = 'A'; 2.3 Membros decInstncia // atribui valor a variavel String Cada objeto str criado dever ter declaracoes!"; sua prpria instncia de variveis Os valores das variveis = "Pratique (atributos) definidas pela Os valor mtodos o comportamento de um // classe. atribui a definem variaveis inteiras em um objeto constituem x = 6; denota que um mtodo pertence a cada objeto da objeto. Isto importante, pois o seu estado. y = 1000; classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm //atribuies no permitidas compartilhada por todas as instncias da classe. // y = 3.1415926; // 3.1415926 no e inteiro o mesmo estado se suas // requer casting e decimal ser variveis membro tm os 2.3.1 Invocao de Mtodos // truncado. //w = 175,000; // A vrgula (,) no pode aparecer, mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um //em ponto-flutuante use (.); objeto pode ter que mostrar um comportamento particular invocando uma //verdadeiro = 1; // confuso comum feita por operao apropriada que foi definida no objeto. Em Java, isto C/C++ feito pela // ex-programadores chamada de um mtodo em um objeto usando o operador binrio "." (ponto),dentro de um //z = 3.14156; // No pode atribuir double // float; Isto requer converso. devendo especificar a mensagem completa: o objeto que o recebedor da } mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). }
Figura 2.4 Layout Memria aps inicializao

O mtodo invocado no recebedor pode tambm enviar informaes de volta ao Listagem 3.4 Exemplo atribuies objeto chamador atravs de um valor de retorno .O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

www.3way.com.br

25

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 31

Linguagem de Programao JavaJava Linguagem de Programao

J dissemos que o Java bastante rigoroso quanto aos tipos das variveis, tudo tem haver com o tamanho //atribuindo valor a varivel referncia = new de Carro(); de cada Carro tipo, ou carro1 com quantidade bits que cada tipo exige para representar o dado a ser armazenado na varivel. carro1.ano = "2001"; Enquanto um nmero fracionrio costuma ser armazenado em uma varivel do tipo double (64 bits), tentar atribui"fusca"; lo a umacarro1.modelo= varivel do tipo int (32 bits) no funciona pois um cdigo que diz: "i deve receber tudo que est em d", = "prata"; mas nocarro1.cor se sabe se d realmente um nmero inteiro ou no, ou seja, Java no consegue antecipar se o valor armazenado em d vai caber em i.
double d = 3.1415; int i = d; // no compila

3.7

Converses

O mesmo ocorre no seguinte trecho:


int i = 3.14;

O mais interessante, que nem mesmo o seguinte cdigo compila:


Figura 2.4 Layout Memria aps double d = 5; // ok, o double pode conter um inicializao nmero inteiro

Apesar de 5 ser um bom valor para um int, o compilador no tem como saber que valor estar dentro desse double no momento da execuo, mesmo que voc esteja lendo o valor literal de d no seu cdigo fonte, o compilador no tem como garantir que essa atribuio ocorra sem perda de valores. como colocar uma xcara de caf grande numa xcara pequena, alguma coisa vai derramar. J no caso a seguir o contrrio:
int i = 5; double d2 = i;

int i = d; // alias no compila //criando novo Carro carro2 = carro1;

O cdigo acima compila sem problemas, j que um double pode guardar um nmero com ou sem ponto flutuante. Todos os inteiros representados por uma varivel do tipo int podem ser guardados em uma varivel double, ento no haver problemas com o cdigo acima. 3.7.1 Casting de Tipos Primitivos s vezes, precisamos que um nmero quebrado seja arredondado e armazenado em um nmero inteiro. Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto Para fazer isso sem que haja o erro de compilao, preciso ordenar que o nmero quebrado seja moldado ( cast) como um nmero inteiro. Esse processo recebe o nome de casting.

2.3

Membros double d3 de = Instncia 3.14;

(atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem O casting foi feito pois para denota moldar que a varivel d3 como um int.aOcada valor de i agora ocorre entre objeto. Isto importante, um mtodo pertence objeto da 3. O mesmo o seu estado. valores int e long . devemos confundir isto com a implementao do mtodo, que classe. Porm no Dois objetos distintos tm compartilhada por todas as instncias da classe. 2.3.1 Invocao de Mtodos mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um E, se quisermos realmente fazer isso, fazemos o casting: objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela long x = 10000; int i =mtodo (int) em x; um objeto usando o operador binrio "." (ponto), chamada de um devendo especificar a mensagem completa: o objeto que o recebedor da 3.7.2 Literais numricos e Promoo Numrica mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). Alguns castings tambm quando atribumos valores literais numricos, por exemplo: O mtodo invocado no aparecem recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 26
Todos os direitos reservados a 3Way Networks

int = (intcriado ) d3; dever ter sua prpria instncia de variveis Cadai objeto

Os valores das variveis

o mesmo estado se suas long x = 10000; int i = x; // no compila, pois pode estar perdendo informao variveis membro tm os

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 32

Linguagem de Programao JavaJava Linguagem de Programao


float x = 0.0;

//atribuindo valor a varivel referncia O cdigo acima no compila pois todos os literais ponto flutuante so considerados double pelo Java. E Carro carro1 = new Carro(); float no pode receber um double sem perda de informao, para fazer isso funcionar podemos escrever o carro1.ano = "2001"; seguinte: carro1.modelo= "fusca"; carro1.cor = "prata"; float x = 0.0f;

Como j vimos a letra f, que pode ser maiscula ou minscula, indica que aquele literal deve ser tratado como float.
long l = 0.0L;

A letra L, que tambm pode ser maiscula ou minscula, indica que aquele literal deve ser tratado como long. Outro caso, que mais comum:
double d = 5; Figura 2.4 Layout Memria aps inicializao float f = 3; //criando alias float x = novo (float ) d + f; Carro carro2 = carro1;

Para converter um tipo primitivo para o tipo wrapper associado, basta usar o construtor da classe wrapper, uma vez que toda classe wrapper possui um construtor que recebe seu tipo primitivo correspondente.

Voc precisa do casting porque o Java faz as contas e vai promovendo o resultado intermedirio sempre para o maior tipo que apareceu durante as operaes, 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 variveis do tipo char podem ocorrer. O nico tipo primitivo que no pode ser atribudo a nenhum outro tipo o boolean.

As classes wrapper que representam valores numricos so subclasses da classe Number. O objetivo das classes wrapper empacotar (boxing) tipos primitivos em objetos onde for necessrio. Por exemplo:
public class TesteWrapper {
Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

3.8

Classes Wrapper (Empacotadoras)

public static void main(String[] args) { = new Float("1.1f"); // compila, no considera double: = new Float("1.1"); Cada objeto criado ter Double("1.2"); sua prpria instncia de variveis Os valores das variveis Doubledever d = new (atributos) definidas pela Os mtodos //classe. retorna erro: definem o comportamento de um em um objeto constituem //pois Character c = new Character("e"); objeto. Isto importante, denota que um mtodo pertence a cada objeto da o seu estado. Boolean b1 = new Boolean("false"); classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm Boolean b2 = new Boolean("True"); compartilhada por todas instncias no da classe. // as compila, h diferenciao de maisculas: o mesmo estado se suas Boolean b3 = new Boolean("FaLsE"); variveis membro tm os } 2.3.1 Invocao de Mtodos mesmos valores. } Objetos se comunicam pela troca de mensagens, isto significa que um

2.3

Float f1 Membros de Instncia Float f2

Listagem 3.5 Empacotando variveis objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um algumas mtodo situaes em um objeto o operador binrio "." (ponto), Vejamos onde a usando classe wrapper exigida: devendo especificar awrapper mensagem completa: o estruturas objeto que o recebedor dacolees; As classes so essenciais em de dados chamadas de mensagem, mtodo que a ser invocado os genrico argumentos para  o Mtodos retornam oe tipo Object ; o mtodo (se houver). O mtodo no recebedor pode tambm enviar informaes de volta ao numricas diferentes (octal,  invocado Outro objetivo facilitar a converso de/para o tipo String e/ou bases objeto chamador atravs de um valor de retorno . O mtodo chamado deve ser binrio, hexadecimal, etc); um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 27
Todos os direitos reservados a 3Way Networks

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 33

Linguagem de Programao JavaJava Linguagem de Programao

mtodos de converso de um tipo para outro foram criados.

Por outro lado, o tipo primitivo exigido em: //atribuindo valor a varivel referncia  Incrementos e decrementos; Carro carro1 = new Carro();  Frmulas matemticas; carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata"; Assim o uso do valor primitivo ou da classe wrapper vai depender da necessidade, neste sentido vrios

3.8.1 Construtores Wrapper Para converter um tipo primitivo para o tipo wrapper associado, basta usar o construtor da classe wrapper, uma vez que toda classe wrapper possui um construtor que recebe seu tipo primitivo correspondente como argumento:
Float f = new Float(1.1f); Double d = new Double(1.2); Character c = new Character('e'); Boolean b = new Boolean(false);

Alm do construtor que recebe o tipo primitivo associado, todo tipo wrapper possui um construtor que recebe uma String.

A classe wrapper de Character a nica exceo que o construtor da classe //criando novo alias permite receber char, no permitindo receber uma String. Carro um carro2 = carro1;
Float f2 = new Float("1.1"); Double d = new Double("1.2");

Figura 2.4 Layout Memria aps inicializao

retorna erro:
Character c = new Character("e");

Note no exemplo anterior que a classe Boolean recebe um construtor de String que no difere de maisculas ou minsculas. 3.8.2 Mtodo valueOf Outra forma de embrulhar tipos primitivos usando o mtodo esttico valueOf(), que recebe um valor String como parmetro. Veja o exemplo:
Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

public class TesteValueOf {

Cada objeto Float criado f1 dever ter valueOf sua prpria instncia // deok, variveis = Float. ("1.1f"); no considera como double: Os valores das variveis Float f2 Os = Float. valueOf ("1.1"); (atributos) definidas pela classe. mtodos definem o comportamento de um em um objeto constituem Double d = Double. valueOf //objeto retorna objeto. Isto importante, pois denota que um mtodo("1.2"); pertence a cada da erro: o seu estado. classe. Porm no devemos confundir isto a implementao do mtodo, que // Character c =com Character.valueOf("e"); Dois objetos distintos tm compartilhada por todas as instncias da classe. valueOf("false"); Boolean b1 = Boolean.
Boolean b2 = Boolean.valueOf("True"); // Ok, no sensvel ao caso variveis membro tm os Boolean b3 = Boolean.valueOf("FaLsE"); 2.3.1 Invocao de Mtodos } mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um }

2.3

Membros de Instncia

public static void main(String[] args) {

o mesmo estado se suas

objeto pode ter que mostrar um comportamento particular invocando uma Listagem 3.6 Mtodo valueOf() operao apropriada que foi definida no objeto. Em Java, isto feito pela 3.8.3 Converses chamada de um mtodo em um objeto usando o operador binrio "." (ponto), Para transformar uma String em nmero utilizamos aso classes Wrappers para os tipos primitivos devendo especificar a mensagem completa: o objeto que recebedor da correspondentes. Por exemplo, para transformar a String em um nmero inteiro utilizamos o mtodo esttico mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). parseInt() da classe Integer : O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 28
Todos os direitos reservados a 3Way Networks

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 34

Linguagem de Programao Java Linguagem de Programao Java


String s = "101"; int i = Integer.parseInt(s); //atribuindo valor a varivel referncia Carro carro1 = new Carro(); As classes Double, Short, Long, Float, etc contm os mesmos mtodos, como parseDouble() e carro1.ano = "2001"; parseFloat() que retornam um double e float respectivamente, parse<ClasseWrapper>() onde <ClasseWrapper> carro1.modelo= "fusca"; seja igual o nome da classe Wrapper correspondente, com exceo das classes Character e Boolean. carro1.cor = "prata";

Esse processo de wrapping e unwrapping entediante. O Java 5.0 traz um recurso chamado de autoboxing, que faz isso sozinho para voc, porm o preo a se pagar a perda de legibilidade do cdigo:
Integer x = 5; int y = x;

3.9

AutoBoxing

No Java 1.4 esse mesmo cdigo invlido. No Java 5.0 ele compila perfeitamente. importante ressaltar que isso no quer dizer que tipos primitivos e referncias agora so a mesma coisa, isso simplesmente um artifcio para Figura 2.4 Layout Memria aps inicializao facilitar a codificao. Agora vocnovo pode fazer todos os tipos de operaes matemticas com as //criando alias classes wrappers , porm corre o risco de seu programa retornar um exceo Carro carro2 = voc carro1; do tipo NullPointerException. O autoboxing tambm pode ser feito diretamente para Object:
Object o = 5;

O boxing automtico e as converses unboxing aliviam nosso trabalho de converter valores de tipos primitivos em objetos das classes wrappers correspondentes e viceversa.

Isto seria til, por exemplo, se voc precisar passar o valor de um tipo primitivo para um mtodo que espera receber um Object como argumento. 3.9.1 Boxing e Unboxing Automtico para Tipos Primitivos
int i = 10;

Autoboxing ou Integer iRef = new Integer(i); // Boxing Explicito autounboxing ocorre Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto sempre que houver a int j = iRef.intValue(); // Unboxing Explicit necessidade de iRef = i; // Boxing Automatico converso de tipos 2.3 Membros de Instncia primitivos em objetos j dever = iRef; // Unboxing AutomaticoOs valores das variveis Cada objeto criado ter sua prpria instncia de variveis wrappers e vice-versa. (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem converso do Boxing converte primitivos em objetos da classe objeto. Isto importante, pois denotaAque um mtodo pertence a cada valores objeto da o seu estado. wrappers isto do tipo de correspondente. A converso classe. Porm no devemos confundir com a dado implementao do mtodo, que do Unboxing converte objetos Dois objetos distintos tm tipo de dado primitivo correspondente. compartilhada por todas as wrappers instncias para da classe. o mesmo estado se suas variveis membro tm os 2.3.1 Invocao de Mtodos 3.9.2 Ocorrncia de Boxing e Unboxing automtico mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um Se aplica em vrias situaes: comparao, atribuio, em estruturas de objeto pode ter que mostrar um comportamento particular invocando uma repetio, etc. operao apropriada que foi definida no objeto. Em Java, isto feito pela Comparaes podem ser realizadas atravs do operador == (igualdade) ou chamada de um mtodo em um objeto usando o operador binrio "." (ponto), pelo mtodo equals(); o primeiro, quando aplicado entre objetos, compara se as variveis referenciam o mesmo devendo especificar a mensagem completa: objeto que o o valores recebedor da objeto, enquanto que o segundo avalia se os o objetos possuem significativamente iguais. Veremos no mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). cdigo-fonte do exemplo a seguir, que as comparaes entre tipos diferentes podem ser realizadas: O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 29
Todos os direitos reservados a 3Way Networks

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 35

Linguagem de de Programao Java Linguagem Programao Java


public class AutoBoxing {

//atribuindo valor a varivel referncia public static void main(String[] args) { Carro carro1 = new Carro(); carro1.ano Integer = "2001"; a = new Integer(2); carro1.modelo= "fusca"; Integer b = new Integer(2); carro1.cor int = "prata"; c = 2;
// compara se a e b referenciam o mesmo objeto: if (a == b) System.out.println("1:a e b so os mesmos objetos"); else System.out.println("1:a e b no os mesmos objetos"); // compara se a e b possuem o mesmo valor: if (a.equals(b)) System.out.println("2: a e b tem valores iguais"); // a convertido para tipo primitivo // os dois valores so comparados como tipos primitivos Figura 2.4 Layout Memria aps inicializao if (a == c) System.out.println("3: a e c tem valores iguais"); //criando novo alias Carro carro2 = carro1; // c convertido para objeto // os dois valores so comparados como objetos if (a.equals(c)) System.out.println("4: a e c tem valores iguais"); } }
Listagem 3.7 Boxing e Unboxing implcitos

Siga instrues do laboratrio 2 e tome cuidado com o tempo de execuo, sempre recorra ao instrutor em caso de dvida, nunca deixe uma dvida sem reposta.

3.10 Fazer Laboratrio 2

3.11 Exerccios

Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto Escreva, compile e execute todas listagens de cdigo apresentadas neste captulo.

Cada objeto criado dever ter sua prpria instncia de variveis Osprecedncia valores daspara variveis operadores lgicos e operadores condicionais. Estes operadores obedecem a uma ordem de que (atributos) definidas pela classe. Os mtodos definem o comportamento de um em variedade um objeto constituem o compilador saiba qual operao executar primeiro, no caso de uma sentena possuir grande destes. objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da o seu estado. classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm 4.1 Operadores Aritmticos compartilhada por todas as instncias da classe. Aqui temos a lista dos operadores aritmticos que podem ser utilizados nao criao expresses mesmode estado se suas matemticas: variveis membro tm os 2.3.1 Invocao de Mtodos mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um Operador Uso Descrio objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela * op1 * op2 op1 por op2 chamada de um mtodo em um objeto usando Multiplica o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o recebedor da / op1 / op2 Divide op1 por op2 mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo invocado no recebedor pode enviar % op1 % tambm op2 Resto da informaes diviso de op1 de porvolta op2 ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 30
Todos os direitos reservados a 3Way Networks

2.3

Membros de Instncia Em Java temos diferentes tipos de operadores. Existem operadores aritmticos, operadores relacionais,

Operadores

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 36

Linguagem de Programao JavaJava Linguagem de Programao

op1 - op2 Subtrai op2 de op1 //atribuindo valor a varivel referncia Carro carro1 = new Carro(); + op1 + op2 Soma op1 e op2 carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata"; Tabela 4.1 - Operadores aritmticos e suas funes

Aqui temos um programa que exemplifica o uso destes operadores:


public class Aritimetica { public static void main(String[] args) { // alguns numeros int i = 37, j = 42; double x = 27.475, y = 7.22; System.out.println(" Valor Variavel... "); System.out.println( "i = Memria " + i aps ); Figura 2.4 Layout inicializao System.out.println( "j = " + j ); //criando novo alias System.out.println( "x = " + x ); Carro carro2 = carro1; System.out.println( "y = " + y ); // adio dos nmeros System.out.println( " Adicao... "); System.out.println( " i + j = " + (i + j) ); System.out.println( " x + y = " + (x + y) ); // subtrao dos nmeros System.out.println( " Subtracao... "); System.out.println( " i - j = " + (i j) ); System.out.println( " x - y = " + (x y) ); // multiplicao dos nmeros System.out.println( " Multipicacao... "); System.out.println( " i * j = " + (i * j) ); System.out.println( " x * y = " + (x * y) ); // diviso dos nmeros System.out.println( " Divisao... "); System.out.println( " i/j = " + (i / j) ); deSystem.out.println( Instncia " x/y = " + (x / y) );
Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

Cada objeto criado dever ter sua prpria instncia de variveis // resto da diviso (atributos) definidas pela classe. Os mtodos definem o comportamento de um System.out.println( " Resto da Divisao... "); objeto. Isto importante, pois denota que um mtodo da System.out.println( " i%j pertence = " a+cada (i objeto % j) ); classe. Porm no devemos confundir isto com a implementao do mtodo, que System.out.println( " x%y = " + (x % y) ); compartilhada por todas as instncias da classe.
// misturando operaes System.out.println(" Tudo Junto... "); 2.3.1 Invocao de Mtodos System.out.println(" j + y = " + (j + y) ); Objetos se comunicam pela troca de mensagens, isto um System.out.println(" i * x = " + significa (i * x)que ); } que mostrar um comportamento particular invocando uma objeto pode ter } apropriada que foi definida no objeto. Em Java, isto feito pela operao
Listagem 4.1 Operadores aritmticos

2.3

Membros

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o recebedor da 4.2 Operadores Incremento mensagem, o mtodode a ser invocado e e osDecremento argumentos para o mtodo (se houver). Alm dos operadores aritmticos bsicos, Java d informaes suporte ao operador de incremento (++) e ao O mtodo invocado no recebedor pode tambm enviar de volta unrio ao operador unrio de decremento (--) . Operadores ++ .ou respectivamente aumentam objeto chamador atravs de um valor de retorno O --, mtodo chamado deve ser ou diminuem em 1 o valor um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 31
Todos os direitos reservados a 3Way Networks

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 37

Linguagem de Programao JavaJava Linguagem de Programao


da varivel. Por exemplo, a expresso:
//atribuindo valor a varivel referncia count carro1 = count=+ new 1; // incrementa o valor de count em 1 Carro Carro(); carro1.ano = "2001"; equivalente a, count++; carro1.modelo= "fusca"; carro1.cor = "prata";
Operador ++ ++ --Uso op++ ++op op---op Descrio Incrementa op em 1; avalia a expresso antes do valor ser acrescido Incrementa op em 1; incrementa o valor antes da expresso ser avaliada Decrementa op em 1; Avalia a expresso antes do valor ser decrescido

Decrementa op em 1; decrementa op em 1 antes da expresso ser avaliada Figura 2.4 Layout Memria aps inicializao //criando novo alias Tabela 4.2- Operadores de incremento e decremento Carro carro2 = carro1;

Como visto na tabela acima, os operadores de incremento e decremento podem ser usados tanto antes como aps o operando. E sua utilizao depender disso. Quando usado antes do operando, provoca acrscimo ou decrscimo de seu valor antes da avaliao da expresso em que ele aparece. Por exemplo:
int int int k = i = j = k = ++j 10; 3; 0; + i;

// resultar em k = 4+10 = 14

Quando utilizado depois do operando, provoca, na varivel, acrscimo ou decrscimo do seu valor aps a avaliao da expresso na qual ele aparece. Por exemplo:
int int int k = i = 10; j = 3; k = 0; j++ + i;

Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

// resultar em k = 3+10 = 13

Os definidas operadores relacionais so usados para comparar dois valores ede determinar o relacionamento entre (atributos) pela classe. Os mtodos definem o comportamento um em um objeto constituem eles. A sada desta avaliaopois serdenota fornecida com valor lgico: true false . objeto. Isto importante, que umum mtodo pertence aou cada objeto da o seu estado. classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm compartilhada por todas as instncias da Uso classe. Operador Descrio

2.3 4.3

Membros de Instncia Operadores Cada objetoRelacionais criado dever ter sua prpria instncia de variveis

Os valores das variveis

2.3.1 Invocao de Mtodos >= op1 >= op2 op1 maior ou igual aque op2 um Objetos se comunicam pela troca de mensagens, isto significa < op1 < op2 objeto pode ter que mostrar um comportamento op1 particular invocando menor do que op2 uma operao apropriada que no objeto. Em Java, isto feito pela <= foi definida op1 <= op2 op1 menor ou igual a op2 chamada de um mtodo em um objeto usando o operador binrio "." (ponto), == op1 == op2 op1 que igual op2 devendo especificar a mensagem completa: o objeto ao recebedor da != invocado e os op1 != op2 op1 no igual a op2 mensagem, o mtodo a ser argumentos para o mtodo (se houver). O mtodo invocado no recebedor pode tambm enviar informaes de volta ao Tabela 4.3 - Operadores relacionais objeto chamador atravs de um valor de retorno . O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

>

op1 > op2

op1 maior do que op2

o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

32

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 38

Linguagem de Programao JavaJava Linguagem de Programao

O programa a seguir, mostra a utilizao destes operadores: //atribuindo valor a varivel referncia Carro carro1 = new Carro(); public class OperadoresRelationais { carro1.ano = "2001"; carro1.modelo= "fusca"; public static void main(String[] args) { carro1.cor = "prata";
// declara nmeros 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 Memria aps inicializao

// maior ou igual a //criando novo alias System.out.println("maior Carro carro2 = carro1; System. out.println("i >=j System.out.println("j >=i System.out.println("k >=j

ou =" =" ="

igual a..."); + (i >= j)); // false + (j >= i)); // true + (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 System.out.println("i <= j = System.out.println("j <= i = System.out.println("k <= j = igual a..."); " + (i <= j)); // true " + (j <= i)); // false " + (k <= j)); // true

diferente Cada objeto // criado dever ter sua prpria instncia de variveis Os valores das variveis System.out.println("diferente..."); (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem System.out.println("i != j = " + (i != j)); // true objeto. Isto importante, pois denota que um mtodo pertence cada System. out.println("k != j = " + a (k != objeto j)); da //false o seu estado. classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm } por todas as instncias da classe. compartilhada }
Listagem 4.2 Operadores Relacionais 2.3.1 Invocao de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma 4.4 Operadores operao apropriada Lgicos que foi definida no objeto. Em Java, isto feito pela Operadores lgicos avaliam um ouusando mais operandos lgicos que"." geram um ,nico valor final true ou false chamada de um mtodo em um objeto o operador binrio (ponto) como resultado da expresso. So seis os operadores lgicos: devendo especificar a mensagem completa: o objeto que o recebedor da && o mtodo E lgico, mensagem, a ser invocado e os argumentos para o mtodo (se houver). & E binrio, O mtodo invocado no recebedor pode tambm enviar informaes de volta ao || OU lgico, de um valor de retorno. O mtodo chamado deve ser objeto chamador atravs um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 33
Todos os direitos reservados a 3Way Networks

2.3

Membros de Instncia

// igual variaveis tipo primitivo Figuraentre 2.5 Layout Memria duas de variveis referncia 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

o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 39

Linguagem de Programao JavaJava Linguagem de Programao


| OU binrio, ^ OU exclusivo binrio //atribuindo valor a ,varivel referncia ! negao. Carro carro1 = new Carro(); carro1.ano = "2001"; carro1.modelo= "fusca"; A operao bsica para um operador lgico : carro1.cor = "prata";

x1 op x2 Onde x1 e x2 podem ser expresses, variveis ou constantes lgicas, e op pode tanto ser &&, &,||,| ou ^. 4.4.1 && (e lgico) e & (e binrio)
x1 true true false false //criando novo alias Carro carro2 = carro1; x2 true false true false Resultado true false false false

Figura 2.4 Layout Memria aps inicializao


Tabela 4.4 - Tabela para && e &

A diferena bsica do operador && para & que o && suporta uma avaliao de curto-circuito (ou avaliao parcial), enquanto que o & no. O que isso significa? Dado o exemplo:
exp1 && exp2

o operador E ir avaliar a expresso exp1, e, imediatamente, retornar um valor false se aexpresso exp1 forfalsa.Seaexpressoexp1 resultar em um valor false ooperador nunca avaliar a expresso exp2, pois o valor de toda a expresso ser falsa mesmo que o resultado isolado de exp2 seja verdadeiro. J o operador & sempre avalia as duas partes da expresso, mesmo que a primeira tenha o valor false. O programa a seguir, mostra a utilizao destes operadores:
Figura 2.5 public class TesteAnd { Layout Memria duas variveis referncia para o mesmo objeto

2.3

(atributos) definidas pela classe. Os mtodos definem o comportamento de um // usando o operador && empertence curto circuito objeto. Isto importante, pois denota que um mtodo a cada objeto da test = (i > 10) && (j++ > 9); classe. Porm no devemos confundir isto com a implementao do mtodo, que System.out.println(i); compartilhada por todas as instncias da classe. System. out.println(j);
System.out.println(test);

public static void main(String[] args) { int i = 0; Membros de Instncia int j = 10; Cada objeto boolean criado dever ter sua ; prpria instncia de variveis test = false

2.3.1 Invocao de Mtodos // usando o operador & Objetos se comunicam pela troca de mensagens, isto significa que um test = (i > 10) & (j++ > 9); objeto pode ter que System. mostrarout um comportamento particular invocando uma .println(i); operao apropriada System. que foi out definida no objeto. Em Java, isto feito pela .println(j); System. out .println(test); chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o recebedor da } mensagem, } o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo invocado no recebedor pode tambm enviar informaes de volta ao Listagem 4.3 Operador E objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

34

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 40

Linguagem de Programao JavaJava Linguagem de Programao

Note que o comando j++,a na linha 8 contendo &&, nunca ser executado, pois o operador no o avalia, //atribuindo valor varivel referncia visto queCarro a primeira parte da (i>10) retorna um valor booleano false. carro1 = expresso new Carro(); carro1.ano = "2001"; carro1.modelo= "fusca"; 4.4.2 || ( ou lgico) e | ( ou binrio) carro1.cor = "prata";
x1 true true false false x2 true false true false
Tabela 4.5 - Tabela para || e |

Resultado true true true false

A diferena bsica entre os operadores ||e |, Memria que, semelhante ao operador &&, o || tambm suporta a Figura 2.4 Layout aps inicializao avaliao parcial. O que isso significa? //criando novo alias Dada a expresso,
Carro carro2 = carro1;
exp1 || exp2

O operador OU lgico ir avaliar a expresso exp1, imediatamente retornar um valor lgico true para toda a expresso se a primeira parte for avaliada como verdadeira. Se a expresso exp1 resultar em verdadeira a segunda parte exp2 nunca ser avaliada, pois o valor final da expresso ser true independentemente do resultado da segunda expresso. O programa a seguir, mostra a utilizao destes operadores:
public class TesteOr { public static void main(String[] args) { int i = 0; int j Figura = 10; 2.5 Layout Memria duas variveis referncia para o mesmo objeto boolean test = false; // uso do operador || 10) || (j++ > 9); System.out.println(i); Cada objeto System. criado out dever ter sua prpria instncia de variveis .println(j); (atributos) definidas pela classe. Os mtodos definem o comportamento de um System.out.println(test);

2.3

test = (i < Membros de Instncia

objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da // uso do operador classe. Porm no devemos confundir isto com|a implementao do mtodo, que test = (i < 10) | (j++ > 9); compartilhada por todas as instncias da classe. 2.3.1
System.out.println(i); System.out.println(j); Invocao de Mtodos System.out.println(test); } Objetos se comunicam pela troca de mensagens, isto significa que um

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

objeto pode ter que mostrar um comportamento particular invocando uma } operao apropriada que foi definida no objeto. Em Java, isto feito pela Listagem 4.4 Operador OU chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o recebedor da Note a expresso j++, nas linhas 9 e 15, nunca ser na instruo mensagem, o que mtodo a ser invocado e os argumentos para o avaliada mtodo (se houver). que usa o operador ||, pois a primeira parte da expresso (i<10) j retorna true como valorinformaes final da expresso. O mtodo invocado no recebedor pode tambm enviar de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 35
Todos os direitos reservados a 3Way Networks

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 42

Linguagem de Programao JavaJava Linguagem de Programao


4.4.3 ^ (ou exclusivo binrio)
//atribuindo valor a varivel referncia Carro carro1 = new Carro(); x1 x2 carro1.ano = "2001"; carro1.modelo= "fusca"; true true carro1.cor = "prata"; true false
false false true false
Tabela 4.6 - Tabela para o operador ^

Resultado false true true false

O resultado de uma expresso usando o operador ou exclusivo binrio ter um valor true somente se uma das expresses for verdadeira e a outra falsa. Note que ambos os operandos so necessariamente avaliados pelo operador ^. O programa a seguir, mostra a utilizao deste operador:
public class TesteXOR { //criando novo alias void main(String[] args) { Carro public carro2 static = carro1; boolean val1 = true; boolean val2 = true; System.out.println(val1 ^ val2); val1 = false; val2 = true; System.out.println(val1 ^ val2); val1 = false; val2 = false; System.out.println(val1 ^ val2); val1 = true; val2 = false; System.out.println(val1 ^ val2); } }
Figura 2.4 Layout Memria aps inicializao

Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

Cada objeto criado dever ter sua prpria instncia de variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um 4.4.4 ! (negao) objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da classe. Porm no devemos confundir isto com a implementao do mtodo, que compartilhada por todas as instncias da classe. x1 Resultado
true false

2.3

Membros de Instncia

Listagem 4.5 Operador OU exclusivo

2.3.1 Invocao de Mtodos Objetos se comunicam pela false troca de mensagens, istotrue significa que um objeto pode ter que mostrar um comportamento particular invocando uma Tabela 4.7 - Tabela para o operador operao apropriada que foi definida no objeto. Em Java, isto! feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendoOespecificar anegao mensagem completa: o objeto que expresso o recebedor da ou constante, ou seja, o que operador de inverte o resultado lgico de uma , varivel mensagem, o mtodo ae ser invocado e os argumentos para o mtodo (se houver). era verdadeiro ser falso vice-versa. O programa seguir, mostrapode a utilizao deste operador: O mtodo invocado a no recebedor tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 36
Todos os direitos reservados a 3Way Networks

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 43

Linguagem de Programao JavaJava Linguagem de Programao


public class TesteNOT {

//atribuindo valor void a varivel referncia public static main(String[] args) { Carro carro1 = new Carro(); carro1.ano boolean = "2001"; val1 = true; carro1.modelo= "fusca"; boolean val2 = false; carro1.cor = "prata"; System.out.println(!val1); System.out.println(!val2); } }
Listagem 4.6 Operador de Negao

4.4.5 Operador Condicional ( ?: ) O operador condicional tambm chamado de operador ternrio. Isto significa que ele tem trs argumentos que juntos formam uma nica expresso condicional. A estrutura de uma expresso utilizando um operador condicional a seguinte:
Figura 2.4 Layout Memria aps inicializao

Onde exp1 uma expresso lgica que deve retornar true ou false. Se o valor de exp1 for verdadeiro, ento, o resultado ser a expresso exp2, caso contrrio, o resultado ser exp3. O programa a seguir, mostra a utilizao deste operador:
public class OperadorCondicional { public static void main(String[] args) { String status = ""; int pontuacao = 80; // status do aluno status = (pontuacao >= 60) ? "Aprovado" : "Reprovado"; // print status System. out .println(status); Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

exp1?exp2:exp3 //criando novo alias Carro carro2 = carro1;

Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem 4.5 Precedncia de Operadores objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da o seu estado A precedncia serve para indicar a ordem na qual o compilador interpretar os diferentes tipos. de classe. Porm no devemos confundir isto com a implementao do mtodo, que objetos distintos tm operadores, para que ele sempre tenha como sada um resultado coerente e no ambguo.Dois Na tabela os operadores compartilhada por todas as instncias da classe. na mesma linha possuem mesma precedncia, a coluna ordem define a precedncia do maior (1) para estado o menor (15) o mesmo se suas

2.3

Membros de Instncia

Listagem 4.7 Operador condicional (ou ternrio)

variveis membro tm os 2.3.1 Invocao de Mtodos mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que Associativo um Ordem Operador objeto pode ter que mostrar um comportamento particular invocando uma 1 ( ) ,[], posfix ++, posfix -Esquerda operao apropriada que foi definida no objeto. Em Java, isto feito pela 2 unrio(+,-), prefix ++, prefix --, ,! Direita chamada de um mtodo em um objeto usando o~ operador binrio "." (ponto) , devendo especificar da 3 a mensagem (tipo), new completa: o objeto que o recebedor Esquerda mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). 4 * (mult), / (div), % (mod) esquerda O mtodo invocado no recebedor pode tambm enviar informaes de volta ao 5 + (adio), (subtrao) esquerda objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 37
Todos os direitos reservados a 3Way Networks

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 44

Linguagem de de Programao Java Linguagem Programao Java


Ordem Operador Associativo esquerda

//atribuindo valor a varivel referncia 6 << , >>, >>> Carro carro1 = new Carro(); 7 <, instanceof carro1.ano = <=,>,>=, "2001"; carro1.modelo= 8 != , "fusca"; == carro1.cor = "prata"; 9 & (binrio)
10 11 12 13 14 15 ^ (OU exclusivo binrio) | (binrio) && || ?: condicional =, +=, -=, *=, /=, %=, <<=, >>=, >>>=, &=, |=, ^=
Tabela 4.7: Precedncia de operadores

esquerda esquerda esquerda esquerda esquerda esquerda direita

Figura 2.4 Layout Memria aps inicializao

//criando alias No caso de novo dois operadores com mesmo nvel de precedncia, ter prioridade o que estiver mais Carro carro2 = esquerda da expresso. Vejacarro1; exemplo de uma expresso complexa:
int x = 7, y = 3,resultado=0; resultado = ++y%2*5 + ++x/2+8*y-- + -10;

Podemos alterar a precedncia pelo uso de parnteses, veja nova expresso:


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

A propsito, o resultado das expresses so respectivamente 26 e 0.

4.6

Exerccios

Escreva, compile e execute todas as listagens de cdigo apresentadas neste captulo.


Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

Estruturas de controle de deciso so instrues em linguagem Java que permite que blocos especficos de 2.3 sejam Membros de Instncia cdigo escolhidos para serem executados, redirecionando determinadas partes do fluxo do programa. Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um 5.1 Estruturas de deciso if - else em um objeto constituem objeto. Isto importante, pois denota que instruo um mtodo pertence a cada objeto da A declarao if especifica que uma ou bloco de instrues seja executado se, e se, uma osomente seu estado . classe. Porm no devemos confundir isto com a implementao do mtodo, que expresso lgica for verdadeira. Dois objetos distintos tm compartilhada por todas as instncias classe. A declarao if possui a seguinteda forma:
if (<expresso_lgica>) 2.3.1 Invocao de Mtodos <sentena> Objetos se comunicam pela troca de mensagens, isto significa que um ou: objeto pode ter que mostrar um comportamento particular invocando uma if (<expresso_lgica>) { operao apropriada que foi definida no objeto. Em Java, isto feito pela <sentena 1> chamada de um mtodo em um objeto usando o operador binrio "." (ponto), <sentena 2> devendo } especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). onde, expresso_lgica representa uma expresso ouenviar varivel lgica (que retorna O mtodo invocado no recebedor pode tambm informaes de voltafalse ao ou true). Por exemplo, dado o trecho de cdigo: atravs de um valor de retorno. O mtodo chamado deve ser objeto chamador um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 38
Todos os direitos reservados a 3Way Networks

Estruturas de controle

o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 45

Linguagem de Programao JavaJava Linguagem de Programao

ou:

int nota = 68; //atribuindo if (nota > 60)valor a varivel referncia Carro carro1 = new Carro(); System.out.println("Parabns!"); carro1.ano = "2001"; carro1.modelo= "fusca"; int nota = 68; carro1.cor = "prata"; if (nota > 60) { System.out.println("Parabns!"); System.out.println("Voc passou!"); }

A declarao if-else usada quando queremos executar determinado conjunto de instrues se a condio for verdadeira e outro conjunto se a condio for falsa. Possui a seguinte forma:
if (<expresso lgica>) <sentena 1> else <sentena 2>

Figura 2.4 Layout Memria aps inicializao

//criando novoescrev-la alias na forma abaixo: Tambm podemos Carro carro2 = carro1;
if (<expresso <sentena <sentena } else { <sentena <sentena } lgica>) { 1> 2> 3> 4>

Em uma expresso if else if - else, se a primeira condio falsa, o fluxo de controle segue para a anlise da segunda condio.

Por exemplo, dado o trecho de cdigo:


int nota = 68; if (nota > 60) System.out.println("Parabns! Voc passou!"); else System.out.println("Lamento ! Reprovado"); Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

ou:

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os A declarao pode conter outra estrutura if-else. Este aninhamento de estruturas permite ter decises 2.3.1 Invocao deelse Mtodos mesmos valores. lgicas muito mais se complexas. Objetos comunicam pela troca de mensagens, isto significa que um
A declarao if-else-if possui a seguinte forma: particular invocando uma objeto pode ter que mostrar um comportamento operao apropriada que foi definida no objeto. Em Java, isto feito pela if (<expresso_lgica>) chamada de um mtodo em um objeto usando o operador binrio "." (ponto), <sentena 1> devendo especificar a mensagem completa: o objeto que o recebedor da else if (<expresso_lgica>) mensagem, o mtodo a ser 2> invocado e os argumentos para o mtodo (se houver). <sentena else O mtodo invocado no recebedor pode tambm enviar informaes de volta ao <sentena 3> objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

int nota = 68; Membros Instncia if (nota > de 60) { System. out .println("Parabns!"); Cada objeto criado dever ter sua prpria instncia de variveis System.pela out.println("Voc passou!"); (atributos) definidas classe. Os mtodos definem o comportamento de um } else { objeto. Isto importante, pois denota que um System.out.println("Lamento mtodo !"); pertence a cada objeto da classe. Porm no devemos confundir isto com a implementao do mtodo, que System.out.println("Reprovado"); } compartilhada por todas as instncias da classe.

2.3

www.3way.com.br

39

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 46

Linguagem de Programao JavaJava Linguagem de Programao

Podemos ter vrias estruturas else-if depois de uma declarao if. A estrutura else opcional e pode ser //atribuindo valor a varivel referncia omitida.Carro No exemplo mostrado acima, se a primeira condio verdadeira, o programa executa a <sentena 1> e carro1 = new Carro(); salta as outras instrues. = Caso contrrio, se a condio falsa, o fluxo de controle segue para a anlise da segunda carro1.ano "2001"; carro1.modelo= "fusca"; condio. Se esta for verdadeira, o programa executa a <sentena 2> e salta a <sentena 3>. Caso contrrio, se a = "prata"; segundacarro1.cor condio falsa, ento a <sentena 3> executada. Observe um exemplo da declarao if-else-if no seguinte trecho de cdigo:
public class TesteIfElse { public static void main(String[] args) { int mesDoAno = 13; if (mesDoAno == 12 || mesDoAno == 1 || mesDoAno == 2) { System.out.println("Vero"); } else if (mesDoAno == 3 || mesDoAno == 4 || mesDoAno == 5) { System.out.println("Outono"); } else if (mesDoAno == 6 Memria || mesDoAno == 7 || mesDoAno == 8) { Figura 2.4 Layout aps inicializao System.out.println("Inverno"); //criando novo alias } else if (mesDoAno == 9 || mesDoAno == 10 || mesDoAno == 11) { Carro carro2 = carro1; System.out.println("Primavera"); } else { System.out.println("Ms no vlido: " + mesDoAno); } } }
Listagem 5.1 Testando IF-ELSE

Outra maneira de indicar uma condio atravs de uma declarao switch. A construo switch permite que uma nica varivel tenha mltiplas possibilidades de avaliao. O switch trabalha sobre os tipos primitivos byte, short, char e int, ele tambm pode operar sobre tipos enumerados (a serem vistos posteriormente) sobre classes empacotadoras Characater, Byte, Short e Integer. A declarao switch possui a seguinte forma:
Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

5.2

Declarao switch

switch (<varivel_do_tipo_permitido>) { case <valor 1>: [instruo1;] 2.3 Membros de[instruo2;] Instncia Cada objeto [... criado ]dever ter sua prpria instncia de variveis [break ;] Os mtodos definem o comportamento de um (atributos) definidas pela classe. case <valor objeto. Isto importante, pois 2>: denota que um mtodo pertence a cada objeto da [instruo1;] classe. Porm no devemos confundir isto com a implementao do mtodo, que [instruo2;] compartilhada por todas as instncias da classe. [...] [break;] case 2.3.1 Invocao de <valor Mtodosn>: [instruo1;] Objetos se comunicam pela troca de mensagens, isto significa que um [instruo2;] objeto pode ter que [...] mostrar um comportamento particular invocando uma operao apropriada [ que foi;] definida no objeto. Em Java, isto feito pela break default : em um objeto usando o operador binrio "." (ponto), chamada de um mtodo devendo especificar a[instruo1;] mensagem completa: o objeto que o recebedor da [instruo2;] mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). [...] O mtodo invocado no recebedor [break ;] pode tambm enviar informaes de volta ao } objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser

O programa executa todas instrues a partir do primeiro case, at encontrar uma Os valores das ,variveis instruo break que eminterromper um objeto constituem a execuo do switch o seu estado ., nada o break sertm Dois aps objetos distintos executado. o mesmo estado se suas variveis membro tm os mesmos valores.

um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais


Todos os direitos reservados a 3Way Networks

www.3way.com.br

40

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 47

Linguagem de Programao JavaJava Linguagem de Programao

onde, <varivel_do_tipo_permitido> compreende os tipos de dados citados anteriormente e <valor n> so //atribuindo valor a varivel referncia constantes literais dos tipos dados citados. Carro carro1 = de new Carro(); Quando a declarao switch encontrada, o fluxo de controle avalia inicialmente a carro1.ano = "2001"; carro1.modelo= "fusca"; <varivel_do_tipo_permitido> e segue para o case que possui o valor igual ao da varivel. O programa executa = deste "prata"; todas ascarro1.cor instrues a partir ponto, mesmo as dos prximos case, at encontrar uma instruo break, que interromper a execuo do switch, nada aps o break ser executado. Se nenhum dos valores case for satisfeito, o bloco default ser executado. Este um bloco opcional. O bloco default no obrigatrio na declarao switch. Exemplo para switch:
public class TesteSwitch { public static void main(String[] args) { int mesDoAno = 11; switch (mesDoAno) { Figura 2.4 Layout Memria aps inicializao case 12: case novo 1: //criando alias 2: = carro1; Carro case carro2 System.out.println("Vero"); 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 Memria duas variveis referncia para o mesmo objeto default: System.out.println("Ms no vlido: " + mesDoAno); break; Membros de Instncia } }Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis

2.3

} (atributos) definidas pela classe. Os mtodos definem o comportamento de um

Asem instrues contidas um objeto constituem so objeto. Isto importante, Listagem pois denota que um mtodo pertence a cada objeto da dentro do bloco 5.2 Testando Switch-Case o seu while estado . classe. Porm no devemos confundir isto com a implementao do mtodo, que executadas repetidas Dois objetos distintos tm compartilhada por todas as de instncias dade classe. vezes enquanto o valor de Note que para o caso intervalos valores a declarao if-else-if mais o mesmo estado se suas expresso_lgica for indicada, veja exemplo if-else-if. variveis membro tm os 2.3.1 Invocao de Mtodos verdadeiro. mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um 5.3 Iteraes (Laos) objeto pode ter que mostrarde um comportamento particular invocando uma Estruturas de controle repetio so comandos em linguagem Java operao apropriada que foi definida no objeto. Em Java, isto feito que permitem executar partes especficas do cdigo determinada quantidade depela chamada de um um objeto usando o operador binrioe"." (ponto), vezes. Existem trsmtodo tipos de em estruturas de iterao gerais: while, do-while for. devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). 5.3.1 while O mtodo invocado no recebedor pode tambm enviar de volta ao A declarao while executa repetidas vezes um informaes bloco de instrues objeto chamador atravs de um valor de retorno . O mtodo chamado deve ser enquanto a expresso lgica (condio) resultar em true (boolean). um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 41
Todos os direitos reservados a 3Way Networks

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 48

Linguagem de Programao JavaJava Linguagem de Programao


A declarao while possui a seguinte forma:
//atribuindo valor a varivel referncia while (expresso_lgica) { Carro carro1 = new Carro(); carro1.ano = "2001"; instruo1; carro1.modelo= "fusca"; instruo2; carro1.cor = "prata"; }

Por exemplo, dado o trecho de cdigo:


int i = 4; while (i > 0){ System.out.print(i); i--; }

A diferena entre uma declarao while e do-while que, no lao while, a avaliao feita antes de se Exemplo 1: Figura 2.4 Layout Memria aps inicializao executarem as instrues enquanto int x = 0; //criando novo while (x<10) { alias que, no lao do-while, primeiro se Carro carro2 = carro1; System.out.println(x); executam as instrues e depois x++; realiza-se a avaliao. }
Abaixo, temos outros exemplos de declaraes while: Exemplo 2:
// lao infinito while (true) System.out.println("hello");

Exemplo 3:

// a instruo do lao no ser executada while (false) System.out.println("hello");

Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto 5.3.2 do-while A declarao do-while similar ao while. As instrues dentro do lao do-while sero executadas pelo menos uma vez. do-while possui a seguinte forma: A declaraode 2.3 Membros Instncia

Cada objeto criado dever ter sua prpria instncia de variveis do { (atributos) definidas pela classe. Os mtodos definem o comportamento de um objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da instruo1; classe. Porm no devemos nstruo2; confundir isto com a implementao do mtodo, que ... compartilhada por todas as instncias da classe.
} while (expresso_lgica);

2.3.1 Invocao de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um Inicialmente, as instrues dentro do lao do-while so executadas. Ento, a condio na expresso_lgica objeto pode ter que mostrar um comportamento invocando uma avaliada. Se for verdadeira, as instrues dentro do lao particular do-while sero executadas novamente. operao apropriada que foi definida no objeto. Em Java, isto feito A diferena entre uma declarao while e do-while que, no lao while,pela a avaliao da expresso lgica chamada de um mtodo em um objeto usando o operador binrio "." (ponto) , , primeiro se executam as feita antes de se executarem as instrues nele contidas enquanto que, no lao do-while devendo especificar a mensagem completa: o objeto que o as recebedor instrues e depois realiza-se a avaliao da expresso lgica, ou seja, instruesda dentro em um lao do-while so mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). executadas pelo menos uma vez. O mtodo invocado no recebedor pode tambm enviar informaes do-while: de volta ao Abaixo, temos alguns exemplos que usam a declarao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 42
Todos os direitos reservados a 3Way Networks

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 49

Linguagem de Programao JavaJava Linguagem de Programao


Exemplo 1:

int x = 0; //atribuindo valor a varivel referncia do { Carro carro1 = new Carro(); System.out.println(x); carro1.ano = "2001"; x++; carro1.modelo= } while (x<10); "fusca"; carro1.cor = "prata"; // lao infinito do { System.out.println("hello"); } while(true);

Exemplo 2:

// Um lao executado uma vez do System.out.println("hello"); while (false);

Exemplo 3:

5.3.3 Declarao for //criando novo alias A declarao for , como nas declaraes anteriores, permite a execuo do mesmo cdigo uma quantidade Carro carro2 = carro1; determinada de vezes. A declarao for possui a seguinte forma:
for ([declarao]; [expresso]; [incremento]) { instruo1; instruo2; ... }

Figura 2.4 Layout Memria aps inicializao

onde: 1. [declarao] seo de declarao e inicializao das variveis locais para o lao, executada um nica vez na primeira iterao 2. [expresso] executada a cada passo do lao, utilizada como condio de parada quando a expresso resultar em false as iteraes terminam. 3. [incremento] normalmente usada para incrementar um contador para o lao, mas qualquer Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto declarao vlida em Java poder ser executada. executado aps a execuo do bloco interno ao lao.

Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis (atributos) definidas classe. mtodos for (int i pela = 0; i < Os 10; i++) { definem o comportamento de um em um objeto constituem System.out.print(i); objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da o seu estado. } classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm compartilhada por todas as instncias da classe. o mesmo estado se suas Neste exemplo, uma varivel i, do tipo int, inicializada com o valor zero. A expresso lgica "i menor que 10" avaliada. Se for verdadeira, ento a instruo dentro do lao executada. Aps isso, a expresso i ter variveis membro tm os 2.3.1 Invocao de Mtodos seu valor adicionado em 1 e, novamente, a condio lgica ser avaliada. Este processo continuar at que mesmos valores.a Objetos se comunicam pela troca de mensagens, isto significa que um condio lgica resulte no valor false. objeto pode ter que mostrar um comportamento particular invocando uma Este mesmo exemplo, utilizando a declarao while, mostrado abaixo: operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de i um em um objeto usando o operador binrio "." (ponto), int = mtodo 0; devendo especificar mensagem completa: o objeto que o recebedor da while (i < a 10) { mensagem, oSystem.out.print(i); mtodo a ser invocado e os argumentos para o mtodo (se houver). i++; no recebedor pode tambm enviar informaes de volta ao O mtodo invocado } objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 43
Todos os direitos reservados a 3Way Networks

2.3

Membros Instncia Um exemplode para a declarao for:

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 50

Linguagem de de Programao Java Linguagem Programao Java

Carro carro1 = new Carro(); Declaraes de interrupo permitem que redirecionemos o fluxo de controle do programa. A linguagem carro1.ano = "2001"; Java possui trs declaraes de desvio do fluxo de processamento ou sua interrupo. So elas: break, continue, carro1.modelo= "fusca"; return (h ainda try-catch-finally que ser visto no captulo que trata de excees). carro1.cor = "prata";

5.4

Declaraes de valor Interrupo e Desvio //atribuindo a varivel referncia

5.4.1 Declarao break A declarao break possui duas formas: unlabeled (no identificada - vimos esta forma com a declarao switch) e labeled (identificada). 5.4.1.1 Declarao unlabeled break A forma unlabeled de uma declarao break encerra a execuo de um switch e o fluxo de controle transferido imediatamente para o final deste. Podemos tambm utilizar a forma para terminar declaraes for, while ou do-while. Por exemplo:
public class UnlabeledBreak {
Figura 2.4 Layout Memria aps { inicializao public static void main(String[] args) //criando novo alias String = soletrar Carro carro2 carro1;= "Pneumoultramicroscopicossilicovulcanoconitico"; int tamanho = soletrar.length(); int i; boolean encontrou = false; char procurarpor = '';

for (i = 0; i < tamanho; i++) { if (soletrar.charAt(i) == procurarpor) { encontrou = true; break; } } if (encontrou) { System.out.println("Encontrei a letra " + procurarpor + " na posio " + i + ""); } else { Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto System. out.println("A letra " + procurarpor + " no est na maior palavra do Portugus"); }

Cada objeto criado dever ter sua 5.3 prpria instncia Os valores das variveis Listagem Iterador FOR com LABELde variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da o seu estado. Neste no exemplo, se o caracter isto "" com for encontrado, a declarao for ser classe. Porm devemos confundir a implementao do mtodo, queinterrompida e o controle do Dois objetos distintos tm programa ser transferido para a prximada instruo compartilhada por todas as instncias classe. abaixo da declarao for.

2.3

Membros de Instncia }

label especificado na declarao 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 operao apropriada que foi definida no objeto. Em Java, isto feito pela exemplo: chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo teste: especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo invocado no recebedor pode tambm informaes de volta ao esta linha indica que temos um label com o enviar nome teste . objeto chamador atravs de um valor de retorno . O mtodo chamado devecom ser rotulo (externo) executaria O programa a seguir possui dois laos while aninhados, o lao um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 44
Todos os direitos reservados a 3Way Networks

o mesmo estado se suas 5.4.1.2 Declarao labeled break variveis membro tm os 2.3.1 Invocao de Mtodos A forma labeled de uma declarao break encerra o processamento de um lao que mesmos identificado por um valores. Objetos se comunicam pela troca de mensagens, isto significa que um

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 51

Linguagem de de Programao Java Linguagem Programao Java


infinitamente se no houvesse uma declarao break externo, na linha 15. Quando a condio na linha 13 for satisfeita o labeled break valor terminar execuo do lao externo indo direto para linha 21, assim a linha 18 nunca //atribuindo a a varivel referncia 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 Lao (while) externo"); while (true) { i++; System.out.println("i = " + i); if (i == 3) { System.out.println("break (lao interno) i="+i); break; } if (i == 2) { Figura 2.4 Layout Memria aps inicializao System. out .println("break externo i="+i); break externo; //criando novo alias } Carro carro2 }= carro1; System.out.println("fora lao (while) interno i="+i); } System.out.println("Fora lao (while) externo i="+i); } }
Listagem 5.4 Iterador While com Label

5.4.2 Declarao continue A declarao continue tem duas formas: unlabeled e labeled. Utilizamos uma declarao continue para saltar a repetio atual de declaraes for, while ou do-while. 5.4.2.1 Declarao unlabeledFigura continue 2.5 Layout Memria duas variveis referncia para o mesmo objeto A forma unlabeled salta as instrues restantes de um lao e avalia novamente a expresso lgica que o controla. 5.4.2.2 Cada Declarao labeled continue objeto criado dever ter sua prpria instncia de variveis Os valores das variveis A forma labeled da declarao continue interrompe a repetio atual de um lao e salta para a repetio (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem exterior marcada com o label indicado. objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da o seu estado. classe. Porm no devemos confundir isto com a implementao do mtodo, que public class TesteContinue { Dois objetos distintos tm compartilhada por todas as instncias da classe.
public static void main(String[] args) {

2.3

Membros de Instncia

2.3.1 Invocao de Mtodos int i = 0; Objetos se comunicam pela troca de mensagens, isto significa que um outer: while (true) { objeto pode ter que mostrar um comportamento particular invocando uma System. out.println("lao Outer"); operao apropriada que foiwhile definida no ) objeto. Em Java, isto feito pela (true { i++; chamada de um mtodo em um objeto usando o operador binrio "." (ponto), System. .println("i " + i); da devendo especificar a mensagem completa: out o objeto que o= recebedor if (i == 1) { mensagem, o mtodo a ser invocado e os argumentos o mtodo (se houver). System.para out.println("continue"); O mtodo invocado no recebedor pode tambm enviar;informaes de volta ao continue } de retorno. O mtodo chamado deve ser objeto chamador atravs de um valor um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

45

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 52

Linguagem de de Programao Java Linguagem Programao Java


if (i == 3) { System.out.println("continue outer"); //atribuindo valor a varivel referncia continue 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

Figura 2.4 Layout Memria aps inicializao 5.4.3 Declarao return A declarao novo returnalias utilizada para sair de um mtodo. O fluxo de controle retorna para a declarao que //criando carro2 = carro1; segue a Carro chamada do mtodo original. A declarao de retorno possui dois modos: o que retorna um valor e o que no retorna nada. Para retornar um valor, escreva o valor (ou uma expresso que calcula este valor) depois da palavra chave return. Por exemplo:

return ++count;

ou
return "Hello";

Abordaremos as declaraes return nas prximas lies, quando falarmos sobre mtodos.

Siga instrues do laboratrio tome cuidado com o tempo de execuo, sempre recorra ao instrutor em Figura 2.5 e Layout Memria duas variveis referncia para o mesmo objeto caso de dvida, nunca deixe uma dvida sem reposta. Escreva, compile e execute todas listagens cdigo apresentadas Cada objeto criado dever ter as sua prpriadeinstncia de variveis neste captulo. (atributos) definidas pela classe. Os mtodos definem o comportamento de um objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da 6 Porm Array classe. no devemos confundir isto com a implementao do mtodo, que compartilhada por todas as instncias da classe. Um array uma estrutura de dados que define uma coleo ordenada de elementos homogneos e de tamanho fixo. Um array armazena mltiplos itens de um mesmo tipo de dado em um bloco contnuo de memria. O tamanho de um 2.3.1 Invocao de Mtodos array fixo e no pode ser alterado depois dede sua criao. Objetos se comunicam pela troca mensagens, isto significa que um Se imaginarmos que uma varivel em Java como uma invocando xcara de caf objeto pode ter que mostrar um comportamento particular uma (onde s se toma caf) um array seria uma bandeja contendo uma quantidade operao apropriada que foi definida no objeto. Em Java, isto feito pela definida de xcaras. chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o recebedor da 6.1 Declarando mensagem, o mtodoArray a ser invocado e os argumentos para o mtodo (se houver). Independentemente do tipo de array com o qual voc esteja trabalhando, O mtodo invocado no recebedor pode tambm enviar informaes de volta ao o identificador do atravs array , de na verdade, referncia um objeto real deve que foi objeto chamador um valoruma de retorno . Opara mtodo chamado ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

5.5

Fazer Laboratrio 3

5.6 2.3

Exerccios de Instncia Membros

Um array armazena Os valores das variveis mltiplos itens de um em umtipo objeto constituem mesmo de dado em o seu estado . um bloco contnuo de Dois objetos distintos tm memria. O tamanho de o mesmo estado se suas um array fixo e no variveis membro tm os pode ser alterado depois mesmos valores. de sua criao.

www.3way.com.br

46

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 54

Linguagem de Programao JavaJava Linguagem de Programao


criado na pilha. Este o objeto que guarda as referncias para os outros objetos ou valores de tipos primitivos, pode ser criado tanto implicitamente como parte referncia da sintaxe de inicializao do array, como explicitamente, com o //atribuindo valor a varivel operador new . Uma parte= donew objeto array (de fato, o nico campo ou mtodo acessvel) o atributo length (ele s Carro carro1 Carro(); est disponvel para leitura), informa a voc quantos elementos podem ser armazenados naquele objeto array. carro1.ano = que "2001"; carro1.modelo= "fusca"; Array precisa ser declarados como qualquer varivel. Ao declarar um array, defina o tipo de dados deste = "prata"; seguido carro1.cor por colchetes [] e pelo nome que o identifica. Por exemplo:
int [] idades;

ou colocando os colchetes depois do identificador. Por exemplo:


int idades[];

Depois da declarao, precisamos criar o array e especificar seu tamanho. Este processo chamado de construo (a palavra, em orientao a objetos, para a criao de objetos). Para se construir um objeto, precisamos utilizar um construtor. Por exemplo:
// declarao int idades[]; //criando novo alias // construindo Carro carro2 = carro1; idades = new int[100];
Figura 2.4 Layout Memria aps inicializao

ou, pode ser escrito como:


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

No exemplo, a declarao 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 contm 100 elementos. Ou invs de utilizar uma nova linha de instruo para construir um array, tambm possvel automaticamente declarar, construir e adicionar um valor uma nica vez. Exemplos:
// criando um array de valores lgicos em uma varivel // resultados. Este array contm elementos que so Figura 2.5 Layout Memria 4 duas variveis referncia para o mesmo objeto // inicializados com os valores {true, false, true, false} boolean resultados[] ={ true, false, true, false };

2.3

// criando array de Membros deum Instncia

(atributos) definidas pela classe. Os mtodos definem o comportamento de um objeto. Isto importante, denota que um mtodo pertence a cadadias objeto // criando um pois array de Strings com identificador e da classe. Porm no devemos confundir isto com a array implementao mtodo, que // tambm j inicializado. Este contm do 7 elementos String por dias[] compartilhada todas = as instncias da classe.
{"Seg","Ter","Qua","Qui","Sex","Sab","Dom"};

4 variveis double inicializados // com os valores {100, 80, prpria 75}; Cada objeto criado dever 90, ter sua instncia de variveis double [] notas = {100, 90, 80, 75};

2.3.1 Invocao de Mtodos Uma vez que tenha sido inicializado, o tamanho de um array no pode ser Objetos se comunicam pela troca de mensagens, isto significa que um modificado, pois armazenado em um bloco contnuo de memria. objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela 6.2 Acessando um elemento do Array chamada de um mtodo em um objeto usando o operador binrio "." (ponto), Para acessar um elemento do array, ou parte de um array, utiliza-se um devendo especificar a mensagem completa: o objeto que o recebedor da nmero inteiro chamado de ndice. Os nmeros dos ndices so sempre inteiros. Eles mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). comeam com zero e progridem seqencialmente por todas as posies at o fim do O mtodo invocado no recebedor pode tambm enviar informaes de volta ao array. Lembre-se que os elementos dentro do array possuem ndice de 0 a length - 1. objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

Um ndice atribudo Os valores das variveis para cada membro de em objeto constituem um um array , permitindo o seu estado. ao programador Dois objetos distintos tm acessar os valores individualmente o mesmo estado se suas quando necessrio variveis membro tm os . valores. mesmos

www.3way.com.br

47

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 55

Linguagem de Programao JavaJava Linguagem de Programao


Por exemplo, dado o array idades que declaramos anteriormente, temos:
//atribuindo valor a varivel referncia // atribuir elemento do array Carro carro110 = ao newprimeiro Carro(); idades[0] = 10; carro1.ano = "2001"; // imprimir o ltimo elemento do array carro1.modelo= "fusca"; System.out.print(idades[99]); carro1.cor = "prata";

Lembre-se que o array, uma vez declarado e construdo, ter o valor de cada membro inicializado automaticamente, usando o valor default para cada tipo de dado primitivo. Entretanto, tipos de dados por referncia, como as variveis do tipo String, no sero inicializados com caracteres em branco ou com uma String vazia "", sero inicializados com o valor null. Deste modo, o ideal preencher os elementos do arrays de forma explcita antes de utiliz-los. A manipulao de objetos com referncia null causar a desagradvel surpresa de uma exceo do tipo NullPointerException, por exemplo, ao tentar executar algum mtodo da classe String, conforme o exemplo a seguir:
public class ExemploArray { public static void main(String[] args) { String[] nulls = new String[2]; Figura 2.4 Layout Memria aps inicializao System.out.print(nulls[0]); // Linha correta, mostra null System. out.print(nulls[1].trim()); // Causa erro //criando novo alias Carro } carro2 = carro1; }
Listagem 6.1 Refernciando Array

O cdigo abaixo utiliza uma declarao for para mostrar todos os elementos de um array.
public class PercorrendoArray { public static void main(String[] args) { int[] idades = new int[100]; for (int i = 0; i < 100; i++) { System.out.print(idades[i]); } } }
Listagem 6.2 Iterando sobre Array

Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

O atributo length de um array retorna seu tamanho, ou seja, a quantidade de 2.3 Membros deInstncia elementos, ou seja ele uma constante j que o array depois de criado no sofrer objeto criado ter sua abaixo: prpria instncia de variveis alteraoCada de tamanho. utilizadodever como no cdigo (atributos) definidas pela classe. Os mtodos definem o comportamento de um objeto. nomeArray.length Isto importante, pois denota que um mtodo pertence a cada objeto da classe. Porm no devemos confundir isto com a implementao do mtodo, que Por exemplo, dado as o cdigo anterior, podemos reescrev-lo como: compartilhada por todas instncias da classe.

6.3

Tamanho de Array

2.3.1 Invocao de Mtodos public static void main(String[] args) { Objetos se comunicam pela troca de int mensagens, int[] idades = new [100]; isto significa que um objeto pode ter que for mostrar comportamento particular invocando (intum i = 0; i < idades.length; i++) { uma out .print(idades[i]); operao apropriada que foiSystem. definida no objeto. Em Java, isto feito pela } em um objeto usando o operador binrio "." (ponto), chamada de um mtodo } devendo} especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). Listagem 6.3 Tamanho do Array O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

public class TamanhoArray {

Para se obter o nmero Os valores das variveis de elementos de um em um objeto constituem arrayo , pode-se utilizar seu estado. o atributo . O tm Dois objetoslength distintos atributo length de um o mesmo estado se suas array retorna seu variveis membro tm os tamanho. mesmos valores. .

www.3way.com.br

48

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 56

Linguagem de Programao JavaJava Linguagem de Programao

Arrays multidimensionais so implementados como arrays dentro de arrays. So declarados ao atribuir //atribuindo valor a varivel referncia carro1 = new Carro(); um novoCarro conjunto de colchetes depois do nome do array. Por exemplo:
carro1.ano = "2001"; carro1.modelo= "fusca"; // array inteiro de 512 x 128 elementos carro1.cor = = "prata"; int [][] doisD new int[512][128];

6.4

Arrays Multidimensionais

// array de caracteres de 8 x 16 x 24 char [][][] tresD = new char[8][16][24]; // array de String de 4 linhas x 2 colunas String [][] bixoComX = {{"mamfero", "baleia"}, {"carnvoro", "Leo"}, {"pssaro", "galinha"}, {"rptil", "Brontossauro"}};

Acessar um elemento em um array multidimensional semelhante a acessar elementos em um array de uma dimenso. Por exemplo, para acessar o primeiro elemento da primeira linha do array bixoComX, escreve-se:
Figura 2.4 Layout Memria aps inicializao

Isso mostrar a String "terry" na sada padro. Caso queira mostrar todos os elementos deste array, escreve-se:
for (int i = 0; i < bixoComX.length; i++) { for (int j = 0; j < bixoComX[i].length; j++) { System.out.print(bixoComX[i][j] + " "); } }

System.out.print(bixoComX[0][0]); //criando novo alias Carro carro2 = carro1;

O cdigo abaixo monta um array denominado matrix, contendo 3 arrays de double. Na linha 4 definido e criado a primeira dimenso do array, observe que o segundo par de colchetes no contm um nmero, logo os elementos da segunda dimenso no foram definidos ainda, ou seja esto com valor default null. Na linha 6 definimos o primeiro elemento de matrix, ele tem uma referncia para um array de double com um elemento double em que foi atribudo (linha 7) o valor 8.5. Na linha 9 definimos o segundo elemento de matrix, ele tem uma referncia para um array de double com dois elementos double em que foram atribudos os valores 6.3 e referncia 4.4 . para o mesmo objeto Figura 2.5 Layout Memria duas variveis Na linha 9 definimos o terceiro elemento de matrix, ele tem uma referncia para um array de double com trs elementos double em que foram atribudos os valores 1.5 e 2.9 e 5.5.

Cada public objeto criado ter sua prpria args) instncia staticdever void main(String[] { de variveis (atributos) definidas pela classe. Os mtodos comportamento de um //criando matriz 2Ddefinem com 3 o elementos double matrix =mtodo new double [3][]; objeto. Isto importante, pois[][] denota que um pertence a cada objeto da //montando elemento de matrix do mtodo, que classe. Porm no devemos confundir isto com a0implementao matrix[0] = new double[1]; compartilhada por todas as instncias da classe. matrix[0][0]=8.5;
matrix[1] = new double[2]; 2.3.1 Invocao de Mtodos matrix[1][0] = 6.3; Objetos se comunicam pela troca de mensagens, isto significa que um matrix[1][1] = 4.4; objeto pode ter que mostrar um comportamento particular invocando uma //montando elemento 2 de matrix operao apropriada matrix[2] que foi definida no objeto. Em Java, isto feito pela = new double [3]; chamada de um mtodo em um objeto matrix[2][0] = usando 1.5; o operador binrio "." (ponto), = 2.9; o objeto que o recebedor da devendo especificar amatrix[2][1] mensagem completa: matrix[2][1] = 5.5; mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). } O mtodo invocado no recebedor pode tambm enviar informaes de volta ao } objeto chamador atravs de um valor Listagem de retorno . O mtodo 6.4 Array's de mltiplaschamado dimenses deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

2.3

Membros de Instncia public class Matrix {

//montando elemento 1 de matrix

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

49

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 57

Linguagem de Programao JavaJava Linguagem de Programao

Na Figura 6.1, avalor matriz,aarray de arrays , mostrada aps os elementos terem sido explicitamente //atribuindo varivel referncia Carro carro1 = new Carro(); inicializados.
carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 6.1 matrix Array Multidimensional

6.5

Copiando Arrays

Figura 2.4 Layout Memria aps inicializao

um array de modo muito mais rpido do que voc conseguiria se fosse usar um lao for para efetuar a cpia manualmente. System.arraycopy() sobrecarregado para manipular todos os tipos. A seguir h um exemplo que manipula arrays de int. A sintaxe :
System.arraycopy( de, indiceDe, para, indicePara, contagem );

//criando novo alias A biblioteca padro Java disponibiliza um mtodo static, System.arraycopy(), que pode efetuar cpias de Carro carro2 = carro1;

Por exemplo, o programa a seguir define dois arrays e depois copia os quatro ltimos elementos do primeiro array para o segundo. A cpia comea na posio 2 do array de origem e copia 4 elementos, comeando na posio 3 do array de destino.
public class CopiaArray { public static void main(String args[]) { int[] numerosPrimos = { 2, 3, 5, 7, 11, 13 }; Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto int[] numerosSortudos = { 1001, 1002, 1003, 1004, 1005, 1006, 1007};

Cada objeto criado System. dever out ter .println("O sua prpria instncia variveis Os elementode " + i + " aps a valores cpia das " variveis (atributos) definidas pela classe. Os mtodos+definem o comportamento de um numerosSortudos[i]); em um objeto constituem } pois denota que um mtodo pertence a cada objeto da objeto. Isto importante, o seu estado. } devemos confundir isto com a implementao do mtodo, que classe. Porm no Dois objetos distintos tm } compartilhada por todas as instncias da classe.
Listagem 6.5 Copiando array's

2.3

Membros de Instncia

System.arraycopy(numerosPrimos, 2, numerosSortudos, 3, 4); for (int i = 0; i < numerosSortudos.length; i++) {

2.3.1 Invocao de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um 6.6 Percorrendo com objeto pode ter que Arrays mostrar umEnhaced-for comportamento particular invocando uma O Java 5.0 traz uma nova sintaxe para percorrermos arrays (e colees, que veremos mais a frente). Este operao apropriada que foi definida no objeto. Em Java, isto feito pela lao similar aos laos for-each de outras linguagens de programao (Perl,Php, Python, chamada de um mtodo em um objeto usando o operador binrio "." (ponto), etc.) . do Enhanced-for: devendoSintaxe especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). for (<tipo dado> <varivel> : <Expresso>) O mtodo invocado no recebedor pode tambm enviar informaes de volta ao <sentena> objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 50
Todos os direitos reservados a 3Way Networks

o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 58

Linguagem de Programao JavaJava Linguagem de Programao


No caso de voc no ter necessidade de manter uma varivel com o ndice que indica a posio do elemento no array, ou de modificar doreferncia array, podemos usar o enhanced-for. Veja a comparao: //atribuindo valor ao elemento varivel
Carro carro1 = new Carro(); carro1.ano = "2001"; Lao for(;;) tradicional carro1.modelo= "fusca"; int[] carro1.cor idades = {12, =30, 45, 55}; "prata"; int somaIdade = 0; for (int i = 0; i < idades.length; i++) soma += idades[i];

Lao for(:) melhorado


int[] idades = {12, 30, 45, 55}; int somaIdade = 0; for (int element : idades) soma += element;

Tabela 6.1 Enhanced-for

public class ForEach { public static void main(String[] args) { int[] idades = {12,30,45,55};
Layout Memria for (intFigura i :2.4 idades) { aps inicializao System. out .print(i + ", "); //criando novo alias } Carro carro2 = carro1; } }
Listagem 6.5 Percorrendo array's com Enhanced-For

Em java.util voc encontrar a classe Arrays, que tem um conjunto de mtodos static para executar funes necessrias para a manipulao dos arrays: equals(), para comparar dois arrays em termos de igualdade; fill(), para preencher um array com um valor; sort(), para ordenar o array; e binarySearch(), para procurar um elemento em um array ordenado. Todos estes mtodos so sobrecarregados para todos os tipos primitivos e Object. Alm disto, h um mtodo especfico asList() que transforma qualquer array em um continer List, sobre o qual falaremos mais tarde.
import java.util.Arrays; Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto public class TesteArrays {

6.7

Manipulando Arrays com java.util.Arrays

Cada objeto int criado dever ter sua prpria instncia de variveis Os valores das variveis [] numeros = { -1, 2, 120, 0, -275 }; (atributos) definidas pela classe. Os mtodos definem o comportamento de um int[] outrosNumeros = new int[5]; em um objeto constituem objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da o seu estado. // preencha algum valor classe. Porm no devemos confundir com isto com a implementao do mtodo, que Dois objetos distintos tm Arrays.fill(outrosNumeros, 2, 5, new Double(Math.PI ).intValue()); compartilhada por todas as instncias da classe.
// imprimir array como est variveis membro tm os 2.3.1 Invocao de Mtodos System.out.println("Aqui array numeros no classificado"); mesmos valores. System.out .println(Arrays. toString (numeros)); Objetos se comunicam pela troca de mensagens, isto significa que um System. out .println(); objeto pode ter que mostrar um comportamento particular invocando uma

2.3

public static void Membros de Instncia

main(String[] args) {

o mesmo estado se suas

operao apropriada System. que foi out definida no objeto. Em Java, isto feito pela .println("Aqui array outrosNumeros no classificado"); chamada de um mtodo em um objeto usando o operador binrio "." (ponto), System.out.println(Arrays. toString (outrosNumeros)); out.println(); devendo especificar aSystem. mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). // compare two arrays O mtodo invocado no recebedor pode tambm enviar informaes de volta ao if (Arrays.equals(numeros, outrosNumeros)) { objeto chamador atravs de um valor out de retorno . O mtodo chamado deve System. .println("os dois arrays soser iguais!"); um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 51
Todos os direitos reservados a 3Way Networks

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 59

Linguagem de de Programao Java Linguagem Programao Java


} else { System.out.println("os dois arrays so diferentes!"); //atribuindo } valor a varivel referncia 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

Siga instrues do laboratrio e tome cuidado com o tempo de execuo, sempre recorra ao instrutor em caso de dvida, nunca deixe uma dvida sem reposta
Figura 2.4 Layout Memria aps inicializao

6.8

Fazer Laboratrio 4

6.9

Exerccios novo alias //criando Carro carro2 carro1; Escreva, compile = e execute todas as listagens de cdigo apresentadas neste captulo. Classes e Objetos

Definindo Classes Antes de escrever sua classe pense no que ela conhece (variveis de instncia, estado) e no que ela faz (mtodos, comportamento). Procure listar as outras classes que colaboraro com a sua no sentido de prover as funcionalidades desejadas. Use nomes apropriados para a classe, atributos e mtodos sigam conveno de nomenclatura Java. Para definir uma classe, escrevemos: Antes de escrever sua
<modificador>* class <nome> { } <modificador de classe> class <nome> <clausula extends> <clausula implements > // Class header { // corpo da Classe <declaraoDoAtributo>* 2.3 Membros de Instncia <declaraoDoConstrutor>* Cada objeto criado dever ter sua prpria instncia de variveis <declaraoDoMtodo>* (atributos) definidas pela classe. Os mtodos definem o comportamento de um <classe aninhada> objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da <declarao interface> classe. Porm no devemos confundir isto com a implementao do mtodo, que <bloco de inicializao> compartilhada por todas as instncias da classe. }
Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

7.1.1

7.1

Programao Orientada a Objetos

classe pense no que ela conhece (variveis de instncia, estado) e no que ela faz (mtodos, comportamento). .

onde: 2.3.1 Invocao de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um <modificador> um modificador de acesso, que pode ser usado em combinao com outros objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela <nome> nome da sua classe chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o recebedor da <declaraoDoAtributo> atributos definidos para a classe mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). <declaraoDoConstrutor> mtodo construtor O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 52
Todos os direitos reservados a 3Way Networks

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 60

Linguagem de Programao JavaJava Linguagem de Programao

<declaraoDoMtodo>

mtodos da classe

<bloco de inicializao>

//atribuindo valor a varivel referncia <classe aninhada> adiante Carro carro1 = new veremos Carro(); carro1.ano = "2001"; <declarao interface> veremos adiante carro1.modelo= "fusca"; carro1.cor = "prata";

veremos adiante

Neste exemplo, criaremos uma classe que conter o registro de um estudante. Como j identificamos o objetivo da nossa classe, agora podemos nome-la. Um nome apropriado para nossa classe seria Estudante. Para definir nossa classe, escrevemos:
public class Estudante { String nome; String endereco; int idade; double matematicaPontos; Figura 2.4 Layout Memria aps inicializao double portuguesPontos; double cienciaPontos; //criando novo alias Carro carro2 = carro1; }

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

7.1.2 Definindo Mtodos Um mtodo um Nos exemplos apresentados anteriormente, temos apenas um mtodo, o mtodo main(). Em Java, ns podemos definir vrios mtodos e podemos chamtrecho de cdigo Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto los a partir de outros mtodos. distinto que pode ser Por que necessrio criar mtodos? invocado por qualquer Porque no colocamos todas as instrues dentro de um grande mtodo? outro mtodo para 2.3 Membros de Instncia Conforme uma tarefa cresce e se torna mais complexa, surge uma srie de realizar alguma objeto criado para dever sua prpria possa instncia de variveis Os valores das variveis situaes Cada a serem resolvidas que ter este problema ser solucionado. operao especfica. (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem Podemos dizer que passamos a ter dentro de um problema uma srie de pequenos . objeto. Isto importante, pois denota que um mtodo pertenceeste a cada objeto da probleminhas. Assim, conhecido o problema, ao separarmos em partes o seu estado. classe. Porm no devemos confundir isto com a implementao do mtodo, que menores, nosso trabalho de escrever grandes classes se torna menos crtico e de Dois objetos distintos tm compartilhada por todas as instncias da classe. mais fcil manuteno.

2.3.1 Invocao de Mtodos Mtodos possuem as seguintes caractersticas: Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma  Podem ou no retornar um valor. operao apropriada que ou foi definida no objeto. Em Java, isto feito pela Podem aceitar no argumentos. chamada deAps um mtodo em um objeto usando o fluxo operador binrio"." (ponto), o mtodo encerrar sua execuo de controle retornado a quem o a chamou. devendo especificar mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). A forma geralno para declarao de um mtodo O mtodo invocado recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

53

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 61

Linguagem de de Programao Java Linguagem Programao Java


<modificadores mtodo> <tipo retorno> <nome do mtodo> (<lista de parmetros formais>) <clausula throws> // prototipao do mtodo //atribuindo valor a varivel referncia { // Corpo do mtodo Carro carro1 = new Carro(); <variveis locais> carro1.ano = "2001"; carro1.modelo= "fusca"; <classes locais aninhadas> carro1.cor <sentenas> = "prata"; } Alm do nome do mtodo possvel especificar as seguintes informaes:  modificador de escopo ou acessibilidade.  outros modificadores de mtodos (static, final, abstract, synchronized, native, transient, volatile)  o tipo do valor a ser retornado ou void se o mtodo no retornar qualquer valor  lista de parmetros formais  clusula throws, para tratamento de excees a ser vista em captulo posterior. Os parmetros formais uma lista, de parmetros usados para passar informao ao mtodo quando este invocado e so separados por vrgula. Uma lista de parmetros vazia deve ser especificada dentro dos parenteses. Figura 2.4 Layout Memria aps inicializao Cada parmetro uma simples declarao de varivel que consiste em seu tipo e nome:
//criando novo alias Carro carro2 = carro1; <modificador do parmetro> <tipo> <nome do parmetro>

Os nomes do parmetro so variveis locais ao mtodo. O modificador de parmetro final ser discutido num prximo momento. O nome do mtodo e a lista de parmetros formais compreendem a assinatura de um mtodo. O corpo do mtodo um bloco que contm as declaraes de variveis locais e as sentenas do mtodo. Da mesma maneira que as variveis membro, os mtodos membro podem ser caracterizados como:  mtodos de estticos, usa modificador static  mtodos de instncia, sem modificador 7.1.2.1

Objetos tm estado (variveis de instncia) e comportamento (mtodos). .

Definindo Mtodos na Classe Sabemos que objetos tm estado e comportamento, representados pelas variveis de instncia e Figura Layout Memria duas variveis referncia para o mesmo objeto mtodos. Mas at o momento no2.5 relacionamos estes dois princpios dos objetos. No cdigo abaixo, estamos adicionando uma operao classe Estudante, esta operao atua sobre o estado do objeto, no alterando, mas informando. Veja a definio da operao getMedia(). Tambm definimos uma nova classe EstudanteExemplo, 2.3 criar Membros de Instncia para e manipular instncias da classe Estudante. Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis class Estudante { (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da o seu estado. String nome; classe. Porm no devemos confundir isto com a implementao do mtodo, que String endereco; Dois objetos distintos tm compartilhada por todas as instncias da classe. int idade;

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela /** chamada de um mtodo em um objeto usando o operador binrio "." (ponto), * Calcula a media das classes de portugus, matemtica e cincias devendo especificar a mensagem completa: o objeto que o recebedor da */ mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). public double getMedia() { double result pode = 0; tambm enviar informaes de volta ao O mtodo invocado no recebedor = (matematicaPontos + mtodo portuguesPontos + cienciaPontos) / 3; objeto chamador result atravs de um valor de retorno. O chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

2.3.1

double matematicaPontos; double portuguesPontos; Invocao de Mtodos double cienciaPontos;

o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

54

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 62

Linguagem de Programao JavaJava Linguagem de Programao


return result; } //atribuindo valor a varivel referncia } Carro carro1 = new Carro(); carro1.ano = "2001"; public class EstudanteExemplo { carro1.modelo= "fusca"; carro1.cor = "prata"; public static void main(String[] args) { // criar instncias de Estudante annaRegistro Estudante beahRegistro Estudante crisRegistro objetos para Estudante = new Estudante(); = new Estudante(); = new Estudante();

// modifica estado, atributo nome dos estudantes annaRegistro.nome = "Anna"; beahRegistro.nome = "Beah"; crisRegistro.nome = "Cris"; annaRegistro.endereco = "Brasil"; beahRegistro.endereco = "Filipinas"; crisRegistro.endereco = "EUA"; Figura 2.4 anna Layout Memria aps inicializao // alterar notas da annaRegistro.matematicaPontos = 6.5; //criando novo alias annaRegistro.portuguesPontos = 8.9; Carro carro2 = carro1; annaRegistro.cienciaPontos = 9.5; // mostrar o nome de anna System.out.println(annaRegistro.nome); // mostrar a media da anna System.out.println("Media=" + annaRegistro.getMedia()); } }
Listagem 7.1 Criando uma classe

7.1.3 Mtodos de Instncia e a Referncia this Mtodos de instncia so compartilhados entre objetos da mesma classe, diferentemente das variveis de instncia onde se tem uma para cada objeto. Deste modo deve haver alguma "mgica" que o interpretador Java para saiba qual Figura 2.5 para Layout Memria duas variveis referncia o mesmo objeto Mtodos de instncia referncia est invocando um mtodo! E h, a grosso modo, toda invocao de so compartilhados mtodo passa, alm dos parmetros formais, um argumento extra que a referncia entre objetos da do objeto chamador do mtodo. Para entender isso melhor, tomemos o mtodo mesma classe, 2.3 Membros de Instncia setIdade(int i) como exemplo, ao ser invocado os argumentos passados ao mtodo diferentemente Cada objeto criado dever ter sua prpria instncia de variveis Os valores das das variveis seriam como em setIdade(refobjeto, 10), onde refobjeto a referncia do objeto (atributos) definidas pela classe. Os mtodos definem o comportamento de um variveis de instncia em um objeto constituem chamador. Isto feito de forma implcita por Java. No espere que o compilador Java objeto. Isto importante, que O um mtodo a cada da onde seo tem para seuuma estado . aceite chamadas como estapois em denota seu cdigo. exemplo pertence para te dar uma objeto idia do classe. Porm no devemos confundir isto com a implementao do mtodo, que cada objeto. que acontece. Dois objetos distintos tm compartilhada as instncias . estado se suas Suponha por quetodas voc esteja dentro da de classe. um mtodo e queira obter a referncia o mesmo para o objeto corrente, como fazer? Para este propsito podemos usar a palavra variveis membro tm os 2.3.1 this Invocao de Mtodos chave . A palavra chave this que s pode usada dentro de um mtodo mesmos valores. se para comunicam pela troca de mensagens, isto significa que um contm aObjetos referncia o objeto cujo mtodo est sendo chamado. Voc pode objeto pode ter que mostrar um comportamento particular invocando uma tratar esta referncia como qualquer outra referncia a objeto. Perceba que, se voc operao apropriada que mA() foi definida no objeto. Em feito est chamando um mtodo de uma classe a partir de Java, outro isto mtodo mB()pela da chamada de um mtodo em um objeto usando o operador binrio "." (ponto) mesma classe, voc no precisa usar this. Voc simplesmente invoca o mtodo. A , devendo this especificar completa: objeto o recebedor da referncia correntea mensagem automaticamente usadao pelo outroque mtodo. mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se de houver). A referncia this de grande utilidade em situaes onde o nome uma varivel local conflita com o nome da pode varivel de instncia. exemplo: de volta ao O mtodo invocado no recebedor tambm enviarPor informaes objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 55
Todos os direitos reservados a 3Way Networks

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 63

Linguagem de Programao JavaJava Linguagem de Programao


class Estudante{

//atribuindo valor a varivel referncia int idade; Carro carro1 = new Carro(); carro1.ano = "2001"; public void setIdade(int idade){ carro1.modelo= "fusca"; carro1.cor idade = "prata"; = idade; // No uma boa prtica
} }

O nome do argumento nesta declarao idade (linha 3), que tem o mesmo nome do atributo de objeto idade (linha 2). J que o argumento idade local ao mtodo, o valor do argumento idade ser usado, na instruo: idade = idade; Neste caso estamos simplesmente associando o valor do argumento idade para si mesmo! Isto no o que queremos que acontea neste cdigo. A fim de corrigir esse equivoco, usamos a referncia this para fazer a distino entre os nomes. Para utilizar a referncia this , digitamos: Figura 2.4 Layout Memria aps inicializao
//criando novo alias this.<nomeDoAtributo> Carro carro2 = carro1;

O ideal reescrever o nosso mtodo do seguinte modo:


public void setIdade(int idade){ this.idade = idade; }

Este mtodo ir atribuir o valor do argumento idade para o atributo de objeto idade do objeto Estudante. 7.1.4 Sobrecarga de Mtodos (Overloading) Nas nossas classes, podemos necessitar de criar mtodos que tenham os Sobrecarga de mtodos mesmos nomes, mas que funcionem de maneira diferente dependendo dos permite que um mtodo argumentos que informamos. Esta capacidade chamada de SOBRECARGA (ou Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto com o mesmo nome, overloading em ingls) de mtodos. Sobrecarga de mtodos permite que um mtodo com o mesmo nome, entretanto com entretanto com diferentes tipos ou quantidade de argumentos, possa ter diferentes tipos ou implementaes diferentes e retornar valores de diferentes tipos. Ao invs de 2.3 Membros de Instncia quantidade de inventar novos nomes todas as vezes, a sobrecarga de mtodos pode ser Cada objeto criado dever ter sua prpria instncia de utilizada variveis argumentos possa ter Os valores ,das variveis quando a mesma operao tem implementaes diferentes. (atributos) definidas pela classe. Os mtodos definem o comportamento de um implementaes em um objeto constituem Por exemplo, na nossa classe Estudante, queremos ter um mtodo que objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da diferentes e estado retornar o seu . mostre informaes sobre o estudante. Entretanto, queremos quedo o mtodo print classe. as Porm no devemos confundir isto com a implementao mtodo, que valores de diferentes Dois objetos distintos tm mostre dados diferentes dependendo dos da argumentos compartilhada por todas as instncias classe. que lhe informamos. tipos . o mesmo estado se suas Por exemplo, quando no enviamos qualquer argumento queremos que o mtodo print mostre o nome, endereo e idade do estudante. Quando passamos um variveis membro tm os 2.3.1 Invocao de Mtodos argumento do tipo String, queremos que o mtodo mostre esta String mais o nome mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um e as notas do estudante. objeto pode ter que mostrar um comportamento particular invocando uma Teremos os seguintes mtodos dentro da nossa classe Estudante: operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de umvoid mtodo em um objeto usando o operador binrio "." (ponto), public print(){ devendo especificar a mensagem completa: o + objeto que o recebedor da System.out.println("nome:" nome); System.out.println("endereco:" + endereco); mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). System.out.println("idade:" + idade); O mtodo invocado no recebedor pode tambm enviar informaes de volta ao } objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 56
Todos os direitos reservados a 3Way Networks

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 64

Linguagem de de Programao Java Linguagem Programao Java


public void print(String msg){ System.out.println(msg); //atribuindo valor a varivel referncia System.out.println("nome:" + nome); Carro System.out.println("Nota carro1 = new Carro(); de Matematica:" + matNota); carro1.ano = "2001"; System.out.println("Nota de Portugues:" + portNota); carro1.modelo= "fusca"; System.out.println("Nota de Ciencias:" + cienNota); carro1.cor = "prata"; }

Quando tentamos chamar estes mtodos no mtodo main(), criado para a classe EstudanteExemplo:
public static void main(String[] args) { Estudante annaRegistro = new Estudante(); annaRegistro.nome="Anna"; annaRegistro.endereco="Philippines"; annaRegistro.idade=15; // sobrecarga de mtodos annaRegistro.print(); Figura 2.4 Layout Memria aps inicializao annaRegistro.print("Situao do(a) Aluno(a) "); //criando novo alias } Carro carro2 = carro1;

Teremos diferentes sadas para a chamada ao mtodo print. Lembre-se sempre de que mtodos sobrecarregados possuem as seguintes propriedades: 1. o mesmo nome 2. lista de parmetros formais diferentes 3. definido na mesma classe 7.1.5 Construtores Utilizado quando h uma chamada com o operador new. So como mtodos mas a assinatura de um construtor diferente de um mtodo, temos as propriedades de um construtor: 1. 2.

O principal propsito dos construtores so inicializar o estado de um objeto quando este criado.

Devem ter o mesmo nome da classe Construtor so como mtodos, entretanto, somente as seguintes Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto informaes podem ser colocadas no cabealho do construtor:  Escopo ou identificador de acessibilidade (como public, private)  Nome do construtor 2.3 Membros de Instncia  Lista de parmetros formais, opcional Cada objetovalor criado dever ter sua prpria instncia de variveis 3. No retornam Os valores das variveis (atributos) definidas pela classe. Os mtodos o comportamento de um 4. Somente so invocados usando operadordefinem new durante a instanciao da em um objeto constituem objeto. classe Isto ou importante, denota que usando um mtodo a cada objeto da dentro de pois outro construtor this()pertence e/ou super() o seu estado. classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm Para declarar um construtor, escrevemos: compartilhada por todas as instncias da classe.

o mesmo estado se suas Toda classe tem o variveis membro tm os [modificador] <nomeClasse> (<argumento>*) { 2.3.1 Invocao de Mtodos seu construtor mesmos valores. Objetos se comunicam <instruo>* pela troca de mensagens, isto significa que um padro. } objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), 7.1.6 Construtor Padro devendo especificar a mensagem completa: o (default) objeto que o recebedor da O construtor padro umoconstrutor pblico e sem argumentos. Se no for mensagem, o mtodo a ser invocado e os argumentos para mtodo (se houver). definido um construtor para a classe, ento, o compilador Java automaticamente definir O mtodo invocado no recebedor pode tambm enviar informaes de volta ao um construtor padro para a classe. objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 57
Todos os direitos reservados a 3Way Networks

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 65

Linguagem de Programao JavaJava Linguagem de Programao


Por exemplo, na nossa classe Estudante, o construtor padro definido do seguinte modo:
//atribuindo valor a varivel referncia public Estudante() {} Carro carro1 = new Carro(); carro1.ano = "2001"; Overloading de Construtores carro1.modelo= "fusca"; carro1.cor = "prata"; Construtores podem sofrer sobrecarga (overloading), por exemplo, temos aqui

7.1.7

quatro construtores:

Construtores podem sofrer sobrecarga (overloading).

public Estudante() { // qualquer cdigo de inicializao aqui } public Estudante(String temp){ this.nome = temp; } public Estudante(String nome, String endereco) { this.nome = nome; this.endereco = endereco; Figura 2.4 Layout Memria aps inicializao } //criando novo alias Carro carro2 = carro1; public Estudante( double matematica, double portugues, double ciencia) { matematicaNota = matematica; portuguesNota = portugues; cienciaNota = ciencia; }

7.1.8 Usando Construtores Para utilizar os construtores, definidos na seo anterior, temos as seguintes instrues:
public static void main(String[] args) { // criar trs objetos para o registro do estudante Estudante annaRegistro = new Estudante("Anna"); Estudante beahRegistro = new Estudante("Beah", "Filipinas"); Estudante crisRegistro = new Estudante(80,90,100); // algum cdigo a partir daqui }
Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

Ao criar um novo objeto o construtor ser invocado, logo aps a alocao das variveis de instncia. Vejamos o seguinte exemplo, vamos adicionar o atributo esttico static int refCount classe Estudande (linha 3):
class Cada Estudante{ objeto criado dever ter sua prpria instncia de variveis int idade; (atributos) definidas pela classe. Os mtodos definem o comportamento de um static int refCount; objeto. Isto importante, poissetIdade( denota que um idade){ mtodo pertence a cada objeto da public void int classe. Porm no devemos confundir isto com a implementao do mtodo, que idade = idade; // No uma boa prtica compartilhada } por todas as instncias da classe. }

Ento, que desejamos incrementar o valor de refCount toda vez que um objeto da classe Estudante objeto opode ter que mostrar um comportamento particular invocando uma instanciado. Os construtores so um bom local para modificar e incrementar o valor de operao apropriada que foi definida no objeto. Em Java, isto feito pela refCount, pois ao menos um deles certamente invocado quando um usando objeto Estudante for instanciado. Por exemplo: chamada de um ser mtodo em um objeto o operador binrio "." (ponto) ,

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os 2.3.1 Invocao de Mtodos mesmos valores. O propsito refCount contar o nmero de objetos que so instanciados classe Estudante. Objetos se de comunicam pela troca de mensagens, isto significa que um a partir da

2.3

Membros de Instncia

devendo especificar a mensagem completa: o objeto que o recebedor da public Estudante() { mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). refCount++; // adicionar um estudante O mtodo } invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

www.3way.com.br

58

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 66

Linguagem de de Programao Java Linguagem Programao Java


public Estudante(String nome) { refCount++; // adicionar um estudante //atribuindo valor a varivel referncia this.nome = nome; Carro carro1 = new Carro(); } carro1.ano = "2001"; carro1.modelo= "fusca";nome, String endereco) { public Estudante(String carro1.cor = "prata"; refCount++; // adicionar um estudante this.nome = nome; this.endereco = endereco; } public Estudante(double matematica, double portugues, double ciencia) { refCount++; // adicionar um estudante matematicaNota = matematica; portuguesNota = portugues; cienciaNota = ciencia; }

7.1.9 Utilizando o Construtor this( ) Chamadas a construtores podem ser 2.4 encadeados, o que Figura Layout Memria aps significa inicializaoser possvel chamar um construtor a partir de outro construtor. Usamos uma invocao a this() para isso. Por exemplo, dado o seguinte cdigo:
//criando novo alias Carro carro2 = carro1; public Estudante() { this("alguma string"); }

public Estudante(String temp) { this.nome = temp; } public static void main( String[] args ) { Estudante annaRegistro = new Estudante(); }

No cdigo acima, quando se executa a instruo do mtodo o main() (linha 8), ser chamado o construtor padro (linha 1). A instruo inicial (linha 2) deste construtor resultar na chamada ao segundo construtor (linha 4). H algum regras para utilizao da chamada ao construtor por this(): Figura 2.5 Layout Memria duas variveis referncia o mesmo objeto 1. A chamada ao construtor DEVE SEMPRE OCORRER NApara PRIMEIRA LINHA DE INSTRUO Como boa prtica de 2. UTILIZADO PARA A CHAMADA DE UM CONSTRUTOR. A chamada ao programao, ideal this() pode ser seguida por outras instrues. 2.3 Membros de Instncia nunca construir Como boa prtica de dever programao, ideal nunca construir Cada objeto criado ter sua prpria instncia demtodos variveis mtodos Os valores das variveis que repitam as que repitam as instrues. utilizao de sobrecarga com o objetivo (atributos) definidas pela Buscamos classe. Os a mtodos definem o comportamento dede um em um objeto constituem instrues. evitarmos essa repetio. Deste modo, que reescreveremos construtores da classe objeto. Isto importante, pois denota um mtodo os pertence a cada objeto da Buscamos o seu estado. a utilizao Estudante, definida na seo 7.16, para reutilizar o construtor default: classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos de sobrecarga com o tm compartilhada por todas as instncias da classe. public Estudante() {

2.3.1 } Invocao de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um nome) { objeto public pode terEstudante(String que mostrar um comportamento particular invocando uma this();// construtor default operao apropriada que foi definida no objeto. Em Java, isto feito pela this.nome = nome; chamada de um mtodo em um objeto usando o operador binrio "." (ponto), } devendo especificar a mensagem completa: o objeto que o recebedor da public Estudante(String String para endereco) { (se houver). mensagem, o mtodo a ser invocado enome, os argumentos o mtodo this(nome); O mtodo invocado no recebedor tambm enviar informaes de volta ao this.endereco = pode endereco; objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser } um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

refCount++; // adicionar um estudante

objetivo de evitarmos o mesmo estado se suas essa repetio. variveis membro tm os mesmos valores.

www.3way.com.br

59

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 67

Linguagem de Programao JavaJava Linguagem de Programao

public Estudante(double matematica, double portugues, double ciencia) { //atribuindo a varivel referncia this(); valor // adicionar um estudante Carro matematicaNota carro1 = new Carro(); = matematica; carro1.ano = "2001"; portuguesNota = portugues; carro1.modelo= "fusca"; cienciaNota = ciencia; carro1.cor = "prata"; }

Siga instrues do laboratrio e tome cuidado com o tempo de execuo, sempre recorra ao instrutor em caso de dvida, nunca deixe uma dvida sem reposta.

7.2

Fazer Laboratrio 5

Como j vimos no captulo 2, uma das formas de criarmos novas classes faz-lo atravs de herana, o que nos proporcionar uma grande vantagem em relao a outros paradigmas de programao, pois assim podemos reutilizar cdigo que seja comum s classes (lembre-se: reuso algo mais eficiente e menos falho do que "copiar e colar"). Figura Layout Memria inicializao Um exemplo de hierarquia de classes 2.4 mostrado com a aps Figura 7.1.
//criando novo alias Carro carro2 = carro1;

7.3

Herana

Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto
Figura 7.1: Hierarquia de Classes

Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis Definimos cdigo comum a uma determinada classe (superclasse) e definimos (atributos) definidas pela classe. Os mtodos definem o comportamento de um Todas as classes so cdigo mais especfico em classes que herdam (subclasse) as caractersticas da classe em um objeto constituem objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da subclasses da classe o seu estado . mais genrica. classe. Porm no devemos confundir isto com a implementao do mtodo, que Object . Em Java, dizemos que a subclasse estende a superclasse. Um relacionamento Dois objetos distintos tm compartilhada por todas as instncias da classe. de herana significa que a subclasse herdar membros (atributos e operaes o mesmo estado se suas mtodos e variveis de instncia) da superclasse. variveis membro tm os 2.3.1 Invocao de Mtodos A classe Object a classe ancestral de todas as outras. O compilador Java, mesmos valores. Objetos se comunicam pela depara mensagens, isto significa que um automaticamente, insere a definio da troca herana todas as definies de classes. objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), 7.3.1 Definindo Superclasses e Subclasses devendoPara especificar a mensagem o objeto o recebedor da . criar uma nova classe completa: por herana usamosque a palavra-chave extends mensagem, o mtodo a ser invocadode e os argumentos para o mtodoUML (se houver). Ilustraremos criando uma superclasse exemplo, a partir do diagrama : O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 60
Todos os direitos reservados a 3Way Networks

2.3

Membros de Instncia

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 69

Linguagem de Programao JavaJava Linguagem de Programao

//atribuindo valor a varivel referncia Carro carro1 = new Carro(); carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 Layout Memria aps inicializao

//criando novo alias Carro carro2 = carro1;


public class Funcionario {

Figura 7.2 Exemplo de Generalizao

double salario; java.util.Date dataContrato; String nome; String cargo="indefinido"; public Funcionario(){} public Funcionario(String nome,double salario, java.util.Date dataContrato) { this.salario = salario; this.dataContrato = dataContrato; this.nome = nome; } Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto void bonusSalario (double percentual) { salario *= 1 + percentual / 100;

Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis } (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem Listagem 7.2 Definindo classe Funcionario objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da o seu estado. classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm Vamos criar chamada compartilhada por outra todas classe as instncias da Gerente classe. . E, como um gerente tambm -um funcionrio, conclumos o mesmo estado se suas que podemos estend-la da classe Funcionario, assim, poderemos herdar todas as propriedades existentes nesta variveis membro tm os classe. o cdigo: 2.3.1 Veja Invocao de Mtodos mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um class Gerente extends Funcionario { objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada foi definida no objeto. Em Java, isto feito pela double que bonus; chamada de um mtodo em um objeto usando o operador binrio "." (ponto), String secretaria; String cargo; devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). public Gerente(String nomeGerente,double salarioGerente, O mtodo invocado no recebedor pode tambm enviar informaes de volta ao java.util.Date dataContratoGerente,String secretaria) { objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser nome=nomeGerente; um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 61
Todos os direitos reservados a 3Way Networks

2.3

} Membros de Instncia

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 70

Linguagem de Programao JavaJava Linguagem de Programao


salario = salarioGerente; dataContrato = dataContratoGerente; //atribuindo valor a varivel referncia this.secretaria = secretaria; Carro carro1 = new Carro(); cargo="gerente"; carro1.ano = "2001"; carro1.modelo= "fusca"; bonus = 0.0; carro1.cor = "prata"; } void bonusLucro (double lucro) { bonus += lucro * 0.01; } }
Listagem 7.3 Definindo classe Gerente por herana

Agora Responda! Quem nasce primeiro os filhos ou os pais? Se ns chamarmos a superclasse de "pai" da subclasse, quem deve ser criado primeiro? A classe Gerente usa seu prprio construtor para fazer as inicializaes necessrias, observe que fazemos acesso direto s variveis membros da classe . Isto aps s possvel porque no processo de criao dos FiguraFuncionario 2.4 Layout Memria inicializao objetos, //criando os construtores das superclasses so invocados antes dos construtores das subclasses, uma vez que as novo alias subclasses podem depender de partes definidas na superclasse , estas tm que estar completamente formadas Carro carro2 = carro1; antes que as partes da subclasse sejam construdas. Outros atributos foram acrescentados classe Gerente, como um bnus por produtividade e nome da secretria do gerente. Aps isso, as instrues dentro do construtor da subclasse so executadas. Para ilustrar, considere o seguinte cdigo:
public class MainGerente { public static void main(String[] args) { //uma instancia de calendar java.util.Calendar database = java.util.Calendar. getInstance(); //configura data de contratacao do funcionario database.set(2005, 6, 10);
Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto //instancia de Gerente Gerente funcionario = new Gerente("Hide Otta",1999.99, database.getTime(), "Effe Ciente");

Cada objeto funcionario.bonusSalario(2); criado dever ter sua prpria instncia de variveis Os valores das variveis //invoca mtodo da definem instancia (atributos) definidas pela classe. Os mtodos o comportamento de um em um objeto constituem funcionario.bonusLucro(10000.00); objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da o seu estado. //imprime estado desta instancia de Gerente classe. Porm no devemos confundir isto com a implementao do mtodo, que System. out.println("Nome funcionario: " + funcionario.nome); Dois objetos distintos tm compartilhada por todas as instncias da classe. System. out.println("Cargo: " + funcionario.cargo);
System.out.println("Secretariado por : "+ funcionario.secretaria); variveis membro tm os System.out.println("Salario base: " + 2.3.1 Invocao de Mtodos String.format("%,.2f", funcionario.salario)); mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um System.out.println("Salario + Comissao: " + objeto pode ter que mostrar um comportamento particular invocando uma String. format("%,.2f", (funcionario.salario+ operao apropriada que foi definida no objeto. Em Java, isto feito pela funcionario.bonus)));

2.3

Membros de Instnciamtodo //invoca

da heranca

o mesmo estado se suas

chamada de um mtodo em um objeto usando o operador binrio "." (ponto), } devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). } O mtodo invocado no recebedor pode tambm enviar informaes de volta ao Listagem 7.4 Usando as classes Funcionario e Gerente objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

www.3way.com.br

62

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 71

Linguagem de de Programao Java Linguagem Programao Java

7.3.2 Chamando Construtor super() e Referncia super //atribuindo valor a varivel referncia No exemplo anterior, Listagem 7.3, a classe Gerente definiu um construtor. Grande parte do que ele faz Carro carro1 = new Carro(); carro1.ano = "2001"; configurar as variveis membro da superclasse. Observe que as mesmas operaes tambm so definidas em um carro1.modelo= "fusca"; dos construtores da classe Funcionario . E o reuso como fica? Ser que posso invocar o construtor da superclasse carro1.cor = "prata"; para reaproveitar o cdigo? 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 invocao a super(), no construtor de uma subclasse, ir resultar na execuo de um construtor especfico da superclasse, sendo este diferenciado com base nos argumentos passados. Remodelando o construtor da classe Gerente:
public GerenteM(String nome,double salario, java.util.Date dataContrato,String secretaria) { //invoca construtor superclasse super(nome,salario,dataContrato); this.secretaria Figura = secretaria; 2.4 Layout Memria aps inicializao cargo="gerente"; //criando bonus novo alias = 0.0; Carro carro2 = carro1; }
Listagem 7.5 Invocando construtor da superclasse

Este cdigo chama o construtor no padro de sua superclasse imediata (a classe Funcionario) e a executa. Devemos relembrar, quando usamos uma chamada ao super(): 1. A instruo super() DEVE SER A PRIMEIRA INSTRUO EM UM CONSTRUTOR. 2. As instrues this() e super() no 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, ento quem fica com a referncia para String "gerente", o atributo da superclasse ou da subclasse? Neste caso dizemos que a varivel da superclasse est shadowed ou seja sendo ocultada pela definio de uma varivel com mesmo nome na subclasse. Para resolver conflitos de nomes, como apresentado no pargrafo anterior, ou simplesmente fazer referncia aos membros da superclasse , Layout podemos usar a referncia de objeto superobjeto . Exemplo: Figura 2.5 Memria duas variveis referncia para o mesmo
public GerenteM(String nome,double salario, java.util.Calendar dataContrato,String secretaria) {

//invoca construtor superclasse Cada objeto criado dever ter sua prpria instncia de variveis super(nome,salario,dataContrato); (atributos) definidas pela classe. Os mtodos definem o comportamento de um this.secretaria = secretaria; objeto. Isto importante, pois denota quesuperclasse um mtodo pertence a cada objeto da //atributo cargo classe. Porm no devemos confundir isto com a implementao do mtodo, que super.cargo="gerente"; //atributo cargo na classe corrente compartilhada por todas as instncias da classe. this.cargo="gerente"; bonus = 0.0;

2.3

Membros de Instncia

2.3.1 } Invocao de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um Listagem 7.6 Refernciando membros da superclasse objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela 7.3.3 Modificador de Classe chamada de um mtodo em final um objeto usando o operador binrio "." (ponto), Podemos declarar classes que no permitem a herana. classes so devendo especificar a mensagem completa: o objeto que Estas o recebedor da chamadas classes finais. Para definir que uma classe seja final , adicionamos a palavra-chave final na declarao mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). da classe (na posio do modificador). Por exemplo, se vocpode desejar que a enviar classe Gerente no possa ter classes filhas - ser estendida, ou O mtodo invocado no recebedor tambm informaes de volta ao herdada por outra classe voc dever escrever: objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 63
Todos os direitos reservados a 3Way Networks

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 72

Linguagem de Programao JavaJava Linguagem de Programao

possivelmente modificado. Exemplos so as classes Integer, Double, Math e String.

public final class Gerente { //atribuindo valor a varivel referncia // Cdigo da classe aqui Carro carro1 = new Carro(); } carro1.ano = "2001"; carro1.modelo= "fusca"; Muitas classes na= API Java so declaradas final para certificar que seu comportamento no seja herdado e carro1.cor "prata";

Um mesmo mtodo pode apresentar vrias formas, de acordo com seu contexto. O polimorfismo importante pois permite que a semntica de uma interface seja efetivamente separada da implementao que a representa. O termo polimorfismo originrio do grego e significa muitas formas (poli = muitas, morphos = formas). (ver wikipedia). Entendeu? No! Ento tenha calma, vamos explicar! Na prtica, se temos uma hierarquia de classe como na figura abaixo:
Figura 2.4 Layout Memria aps inicializao

7.4

Polimorfismo

//criando novo alias Carro carro2 = carro1;

Figura 7.3 Polimorfismo e Herana

ento podemos fazer a seguinte declaraes:

Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um Polimorfismo permite em um objeto constituem ou seja, uma varivel de referncia de uma classe mais genrica (superclasse) objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da que referncias de tipos pode receber referncia de objetos de classes mais especializadas (subclasses). o seu estado . classe.assim, Porm no devemos confundir isto com a implementao do mtodo, que de classes mais abstratas Sendo podemos tambm declarar: Dois objetos distintos tm compartilhada por todas as instncias da classe. (genricas) representem o mesmo estado se suas Animal bicho; o comportamento das variveis membro tm os = new Cachorro(); 2.3.1 bicho Invocao de Mtodos classes concretas que bicho.fazerRuido(); //rudo o latir de cachorro mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um referenciam. bicho = new Gato(); objeto bicho.fazerRuido(); pode ter que mostrar um comportamento //rudo o miar particular do gato invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada um mtodo em um objeto usando o operador binrioda "."classe (ponto), Ode mtodo fazerRuido() , definido como uma caracterstica devendo mensagem completa: o objeto que Cachorro o recebedor Animal, foiespecificar sobrepostoapelas verses do mtodo nas subclasses e Gato, da mensagem, o mtodo a serassinatura invocado e(mesmo os argumentos para o mtodo (se houver). embora possuam a mesma nome, nmero de parmetros e O mtodo invocado no recebedor pode tambm enviar informaes tipos dos parmetros), eles apresentam resultados com formas diferentesde . volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 64
Todos os direitos reservados a 3Way Networks

2.3

Animal cao = new Cachorro(); Membros de Instncia Animal bichano = new Gato();

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 73

Linguagem de Programao JavaJava Linguagem de Programao


7.4.1 Colees Heterogneas de Objetos Em nosso estudo sobre arrays , vimos quereferncia ele uma estrutura de dados que armazena diversos elementos //atribuindo valor a varivel do mesmo tipo de dados,=desde primitivos bem como referncias para outros objetos. Agora imagine-se Carro carro1 new tipos Carro(); formando um petshop a partir da hierarquia de classes apresentada na Figura 7.3, onde temos definidos, alm das carro1.ano = "2001"; carro1.modelo= "fusca"; classes Cachorro e Gato, as classes Canario e Coelho. Sem polimorfismo, essa tarefa nos levaria a definir uma carro1.cor = tipo "prata"; estrutura de array para cada de animal em nossa loja, exemplo:
//coleo de Cachorros Cachorro [] caes = new Cachorro[3]; caes[0] = new Cachorro("Raja"); caes[1] = new Cachorro("Lilica"); caes[2] = new Cachorro("Lupi"); //coleao de Coelhos Coelho [] peludos = new Coelho[3]; peludos[0]=new Coelho("Fred"); peludos[1]=new Coelho("Fofo");

O recurso do polimorfismo nos permite criar um Memria nico array para nossa coleo de animais, veja: Figura 2.4 Layout aps inicializao
//criando novo alias //cria coleo Carro carro2 = carro1; Animal[] bichos = new Animal[10];
//atribui bichos[0] bichos[1] bichos[2] bichos[3] bichos[4] bichos[5] referencia a coleo = new Cachorro("Raja"); = new Gato("Garfield"); = new Canario("Piupiu"); = new Coelho("Pernalonga"); = new Coelho("Lilica"); = new Gato("Frajola");

Uma vez que toda classe em Java estende a classe Object, possvel manipular colees genricas para todos os tipos de dados, inclusive de valores de tipos primitivos (neste caso devemos fazer uso das classes empacotadoras):
Object[] primitivos = new Object[3]; primitivos[0] = new Integer(10); Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto primitivos[1] = new Double(2.2); primitivos[2] = new Character("C");

2.3 Determinando Membros de Instncia 7.4.2 a Classe de um Objeto Cada objeto criado ter sua instncia de genricas variveispara objetos Os valores das variveis Um dos problemas que dever enfrentaremos ao prpria lidar com referncias de subclasses, (atributos) definidas pela classe. Os mtodos definem o comportamento de um que no sabemos mais a qual classe pertence a referncia armazenada. Reveja nosso em exemplo da coleo de um objeto constituem objeto. Isto importante, pois a denota quede um mtodo pertence em a cada objeto animais, a qual classe pertence referncia objeto armazenada bichos[4] ? da Tudo bem voc o cdigoo olhou seu estado . classe. Porm no devemos confundir isto com a implementao do mtodo, fonte e descobriu que do tipo Coelho, mas nem sempre isso possvel. Ento que como determinar a classe de umtm Dois objetos distintos compartilhada por todas as instncias da classe. objeto ? o mesmo estado se suas Existem duas maneiras de se descobrir a qual classe determinado objeto pertence: variveis membro tm os 2.3.1 Invocao de Mtodos 1. Obtendo-se o nome da classe: Utiliza-se o mtodo getClass() que retorna a classe do objeto (onde Class mesmos valores. sepossui comunicam pela troca de mensagens, significa que a classe Objetos em si) que o mtodo chamado getName() que isto retorna o nome daum classe. Por exemplo: objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela String = bichos[4].getClass().getName(); chamada de um name mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o recebedor da 2. Testar se um objeto qualquer instanciado de o uma determinada classe: Utiliza-se a palavra-chave mensagem, o mtodo a ser invocado e osfoi argumentos para mtodo (se houver). instanceof . Esta palavra-chave possui dois operadores: a referncia para o objeto esquerda e o nome da classe O mtodo invocado no recebedor pode tambm enviar informaes de volta ao direita. A expresso retorna um booleano dependendo de o objeto ser uma instncia da classe declarada ou objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 65
Todos os direitos reservados a 3Way Networks

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 74

Linguagem de Programao JavaJava Linguagem de Programao


qualquer uma de suas subclasses. Por exemplo:
//atribuindo valor a varivel referncia Stringcarro1 ex1 = "Polimorfismo"; Carro = new Carro(); System.out.println(ex1 instanceof String);//retorna true carro1.ano = "2001"; String ex2; carro1.modelo= "fusca"; System.out.println(ex2 instanceof String);//retorna false,referencia null carro1.cor = "prata";

7.4.3 Casting de Referncias de Objetos No item 7.4.1, usamos os recursos de polimorfismo para referenciar qualquer objeto como Object, isso nos permitiu criar colees heterogneas. Podemos at passar argumentos genricos para mtodos, um mtodo que recebe uma referncia a Object como argumento, isto , qualquer objeto criado em Java. Todas as vezes que provocamos uma mudana no tipo da referncia de subclasse para o da superclasse dizemos que houve up-casting. Veja exemplo,
public class Database { private Object[] dados; private int posicao = 0;

Figura 2.4 Layout Memria aps inicializao

public Database( //criando novo alias int tamanho) { dados = new Object[tamanho]; Carro carro2 = carro1; } public void insere(Object object) { this.dados[this.posicao] = object; this.posicao++; } public Object retornaObjeto(int indice) { return this.dados[indice]; } }
Listagem 7.7 Paramtros Genricos

public class DatabaseGenerico { public static void main(String[] args) {


2.5 Layout Memria duas variveis referncia para o mesmo objeto //uma Figura instancia de calendar java.util.Calendar data_base = java.util.Calendar. getInstance();

Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis //instancia de Gerente (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem Gerente funcionario = new Gerente("Hide Otta",1999.99, objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da seu estado. data_base.getTime(),"Effe o Ciente"); classe. Porm no devemos confundir isto com a implementao do mtodo, que //invoca mtodo da heranca Dois objetos distintos tm compartilhada por todas as instncias da classe. funcionario.bonusSalario(2);
//invoca mtodo da instancia 2.3.1 Invocao de Mtodos funcionario.bonusLucro(10000.00); Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que //Cria mostrarum um comportamento objeto Database particular invocando uma dados no = new Database(10); operao apropriada Database que foi definida objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), um Gerente no Database devendo especificar a//Armazena mensagem completa: o objeto que o recebedor da dados.insere(funcionario);//ok, up-casting para object mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo invocado no recebedor pode informaes de volta ao //Armazena uma tambm String enviar no Database dados.insere( String("Gerente!"));//ok,up-casting para object objeto chamador atravs de um valor new de retorno . O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 66
Todos os direitos reservados a 3Way Networks

2.3

Membros de Instncia data_base.set(2005,

//configura data de contratacao do funcionario 6, 10);

o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 75

Linguagem de Programao JavaJava Linguagem de Programao


// Como resgatar o Objeto ? Gerente o_funcionario = dados.retornaObjeto(0); //(1) //atribuindo valor a varivel referncia //erro compilacao Carro carro1 = new Carro(); //imprime estado desta instancia de Gerente carro1.ano System. = "2001"; out.println("Nome funcionario: " + o_funcionario.nome); carro1.modelo= "fusca"; System. out.println("Cargo: " + o_funcionario.cargo); carro1.cor System. = "prata"; out.println("Secretariado por : "+ o_funcionario.secretaria); System.out.println("Salario base: " + String.format( "%,.2f", o_funcionario.salario)); System.out.println("Salario + Comissao: " + String.format("%,.2f", (o_funcionario.salario + o_funcionario.bonus))); } }
Listagem 7.8 Todo objeto Object

Se tentarmos recuperar a referncia armazenada como em (1 linha 24),


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

teremos um erro de compilao, informando que os tipos so incompatveis. //criando novo alias Ns temos certeza de que esse Object uma referncia a um objeto da classe Gerente, j que fomos ns Carro carro2 = carro1; que o adicionamos ao objeto Database, a classe que guarda nossa coleo heterognea de objetos. Mas o compilador Java no sabe se o que vai ser retornado pelo mtodo ser realmente um objeto da classe Gerente. Ento retornaremos a referncia Object polimrfica a uma varivel do tipo Object,
Object o_funcionario = dados.retornaObjeto(0); //ok

Figura 2.4 Layout Memria aps inicializao

Mas agora no possvel utilizarmos a referncia para fazermos acesso aos membros do o objeto Gerente:
System.out.println("Nome funcionario: "+ o_funcionario.nome); //erro

Mas por que? A referncia teve uma amnsia? A resposta para o dilema que, o compilador decidir o que voc pode referenciar usando como base o tipo da referncia e no o tipo do objeto para o qual ela aponta. Deste modo, legal fazermos:
Figura 2.5 Layout Memria" duas referncia para o mesmo objeto System.out.println("funcionario: + variveis o_funcionario.toString()); //ok

Pois o mtodo toString() um mtodo definido na classe Object. Seu objeto Gerente no mudou, ele continua o mesmo, o que mudou foi o tipo da referncia. Ento para 2.3 Membros de Instncia voltarmosCada a ter acesso membros do objeto devemos forar a converso do tipo da referncia para o tipo do objeto aos criado dever ter sua prpria instncia de variveis Os valores das variveis objeto real. Se tiver certeza de que o tipo do objeto um Gerente, ento proceda (atributos) definidas pela classe. Os mtodos definem o comportamento de como um abaixo:

o mesmo estado se suas variveis membro tm Se voc no sabe ao certo qual o tipo do objeto real, teste-o antes com instanceof , seno uma exceo do os 2.3.1 Invocao de Mtodos mesmos valores. tipo ClassCastException seria lanada (uma o qu? Calma chegaremos l). Neste o objeto armazenado no Objetos se comunicam pela troca de mensagens, isto significa que exemplo um
ndicie do array do tipo String. um comportamento particular invocando uma objeto1 pode ter que mostrar operao apropriada que foi definida no objeto. Em Java, isto feito pela Gerente o_funcionario; chamada de um mtodo em um objeto usando o operador binrio "." (ponto), if( dados.retornaObjeto(1) instanceof Gerente){ devendo especificar a mensagem completa: o objeto que o recebedor //ok da o_funcionario = (Gerente) dados.retornaObjeto(0); mensagem, o mtodo a ser estado invocadodesta e os argumentos para mtodo (se houver). //imprime instancia deo Gerente System.out.println("Nome funcionario: " + o_funcionario.nome); O mtodo invocado no recebedor pode tambm enviar informaes de volta ao } //ok atravs de um valor de retorno. O mtodo chamado deve ser objeto chamador um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da o seu estado. Gerente o_funcionario = (Gerente) dados.retornaObjeto(0); //ok classe. Porm no devemos isto com a implementao //imprime estadoconfundir desta instancia de Gerente do mtodo, que Dois objetos distintos tm compartilhada por todas as instncias da classe. System.out.println("Nome funcionario: " + o_funcionario.nome);//ok

em um objeto constituem

www.3way.com.br

67

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 76

Linguagem de Programao JavaJava Linguagem de Programao

7.4.4 Operaes Polimrficas por de Mtodos //atribuindo valor aSobreposio varivel referncia Atentemos novamente para a hierarquia de classes da Figura 7.3, a classe Animal define o comportamento Carro carro1 = new Carro(); fazerRuido() , bvio que animais diferentes como Cachorro e Gato produzem sons diferentes, o que comum o carro1.ano = "2001"; carro1.modelo= fato de que ambos produzem"fusca"; algum tipo de som (ou rudo). desejvel que caractersticas especficas possam ser carro1.cor = "prata"; implementadas para cada subclasse. Esta caracterstica de sobreposio nos permite implementar um mesmo comportamento e especializ-lo na subclasse. Veja exemplo:
public class Carnivoro { String ruido; public Carnivoro(String ruido){ this.ruido = ruido; } void fazerRuido(){ System.out.println("nao fao ruidos Figura 2.4 Layout Memriaainda"); aps inicializao } //criando novo alias Carro carro2 = carro1; void comer(){ System.out.println("preferencia por proteina animal"); } void andar(){ System.out.println("ando com quatro patas"); } }
Listagem 7.9 Superclasse Carnivoro

Em Java os mtodos da superclasse podem ser redefinidos nas subclasses, dizemos que o mtodo est sendo sobreposto (override) nas subclasses.

Definindo uma subclasse Cachorro, que redefine mtodo fazerRuido() (linha 6):
public class Cachorro extends Carnivoro { public Cachorro() { super("Auuuu,auuu,auuu"); Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto } void fazerRuido(){ System.out.println("Latir="+ ruido); Membros de Instncia } Cada objeto criado dever ter sua prpria instncia de variveis }

2.3

(atributos) definidas pela classe.Listagem Os mtodos definem o especializao comportamento de um 7.10 Subclasse Cachorro, de Carnivoro objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da classe. Porm no devemos confundir isto com a implementao do mtodo, que Definindo uma subclasse Gato, que compartilhada por todas as instncias da redefine classe. mtodo fazerRuido() (linha 6): 2.3.1 Invocao de Mtodos Objetos se comunicam public Gato() { pela troca de mensagens, isto significa que um ("Miauuuu,miauuu,miauuu"); objeto pode ter que super mostrar um comportamento particular invocando uma } operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de void um mtodo em um objeto usando o operador binrio "." (ponto), fazerRuido(){ devendo especificar aSystem. mensagem completa: o objeto que o recebedor da out.println("Miar ="+ ruido); mensagem, o} mtodo a ser invocado e os argumentos para o mtodo (se houver). } invocado no recebedor pode tambm enviar informaes de volta ao O mtodo Listagem 7.11 Subclasse Gato, especializao de Carnivoro objeto chamador atravs de um valor de retorno .O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

public class Gato extends Carnivoro {

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

68

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 77

Linguagem de de Programao Java Linguagem Programao Java

Para testarmos essa caracterstica polimrfica de Java vamos escrever a seguinte classe: //atribuindo valor a varivel referncia Carro carro1 = new Carro(); public class = TestaCarnivoro { carro1.ano "2001"; carro1.modelo= "fusca"; public static void main(String[] args) { carro1.cor = "prata";
Carnivoro bicho = new Carnivoro("sem ruido"); bicho.fazerRuido(); // (1) qualquer carnivoro bicho = new Cachorro(); //tem que latir bicho.fazerRuido();// (2) bicho = new Gato(); //tem que miar bicho.fazerRuido();// (3) } }
Listagem 7.12 Testando polimrfismo

Figura 2.4 Layout Memria aps inicializao

(Carnivoro), mas que mtodo ser chamado, o da superclasse ou da subclasse?


bicho.fazerRuido();

//criando novo alias O mtodo fazerRuido() agora especifico para cada subclasse (Cachorro e Gato) da superclasse Carro carro2 = carro1;

Quando o mtodo chamado a referncia de objeto bicho estar chamando a verso mais especfica do mtodo para o tipo de objeto sendo referenciado por bicho. 1. Na Listagem 7.12, linha 4, ser invocado o mtodo fazerRuido() de Carnivoro (listagem 7.9 linha 6); 2. Na listagem 7.12, linha 7, ser invocado o mtodo fazerRuido() para Cachorro (listagem 7.10 linha 6); 3. Na listagem 7.12 linha 10, ser invocado o mtodo fazerRuido() para Gato (listagem 7.11 linha 6); Podemos dizer que a JVM tenta localizar a assinatura do mtodo sendo invocado pelas classes mais especializadas, as que esto nos nveis mais baixo da hierarquia de classes. Se no encontrar uma verso do mtodo nessa classe, comear a retroceder, subir, na hierarquia at encontrar algo que atenda. A JVM determina o mtodo a ser invocado em tempo de execuo usando um recurso denominado de Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto ligao tardia, isso significa que durante o processo de compilao no feita qualquer ligao entre a chamada por uma referncia e mtodo a ser invocado, exceto se o mtodo for marcado pelos modificador static ou final.

2.3 Membros de Instncia 7.4.4.1 Invocando Mtodos Sobrepostos Cada objeto criado dever sua prpria instncia variveis muito til, pois o objetivo real ter da sobrescrita no substituirde a verso de (atributos) definidas pela classe. Os mtodos definem o comportamento de um mtodo da superclasse, mas estend-lo. objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da public Funcionario { com a implementao do mtodo, que classe. Porm noclass devemos confundir isto compartilhada por todas as instncias da classe.
Objetos se comunicam pela troca de mensagens, isto significa que um { objeto pode String ter que valoresCampos() mostrar um comportamento particular invocando uma return "Nome: " + nome + operao apropriada que foi"\nSalario: definida no objeto. Em Java, isto feito pela " + salario; chamada de um mtodo em um objeto usando o operador binrio "." (ponto), } devendo}especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado os argumentos Listagem 7.14 e Superclasse Funcionrio para o mtodo (se houver). O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

2.3.1

String nome; double salario; Invocao Mtodos Datede aniversario;

Os valoresinvocar das variveis Podemos em um objeto constituem mtodos da o seu estado superclasse, . Dois objetos distintos tm sobrescritos da o mesmo estado se suas subclasse, usando a variveis membro referncia super. tm os mesmos valores.

www.3way.com.br

69

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 78

Linguagem de de Programao Java Linguagem Programao Java


Na Listagem 7.15, linha 7, invocamos o mtodo valoresCampos() da superclasse Funcionarios.
//atribuindo valor a varivel referncia public class = Secretaria extends Funcionario { Carro carro1 new Carro(); carro1.ano = "2001"; String departamento; carro1.modelo= "fusca"; String chefe; carro1.cor = "prata";
String valoresCampos() { // chama mtodo da superclasse return super.valoresCampos() + "\nDepartamento: " + departamento + "\nChefe: "+ chefe; } }
Listagem 7.15 Subclasse Secretaria

Uma invocao de mtodo na forma super.algumMtodo() tem o mesmo efeito que a invocao feita por uma referncia do tipo da superclasse. O mtodo no precisa estar definido diretamente na superclasse, ele pode ter sido herdado de alguma classe mais alta na hierarquia.
Figura 2.4 Layout Memria aps inicializao

novo alias de Mtodos 7.4.4.2 //criando Regras sobre Sobreposio Carro carro2 = carro1; As seguintes regras para sobreposio de mtodos devem ser seguidas: 1 O tipo de retorno do mtodo na subclasse deve ser o mesmo ou um subtipo do tipo de retorno do mtodo sobreposto na superclasse. 2 O mtodo que est sobrepondo no pode ser menos acessvel que o seu mtodo sobreposto. 3 O mtodo que est sobrepondo no pode lanar excees de tipos diferentes das excees do mtodo sobreposto. Veremos detalhes no estudo de excees.

Estas regras resultam da natureza do polimorfismo combinado com as caractersticas de tipagem segura da linguagem Java. Considere este exemplo:
public class Pai { public void m() { } }
Listagem Superclasse Figura 2.57.16 Layout MemriaPai duas variveis referncia para o mesmo objeto

2.3

(atributos) definidas pela classe. Os mtodos definem o comportamento de um Listagem 7.17 Subclasse Filho objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da classe. Porm no devemos confundir isto com a implementao do mtodo, que public class UsaAmbos { compartilhada por todas as instncias da classe.

public class Filho extends Pai { private void m() {//problemas aqui, private Membros de Instncia } Cada objeto criado dever ter sua prpria instncia de variveis }

public void mo() { Pai p1 = new Pai(); 2.3.1 Invocao de Mtodos Pai p2 = new Filho(); p1.m(); pela troca de mensagens, isto significa que um Objetos se comunicam objeto pode ter que p2.m(); mostrar um comportamento particular invocando uma } operao apropriada que foi definida no objeto. Em Java, isto feito pela }

Lembrando que o nome do mtodo e ordem dos argumentos do mtodo na subclasse devem ser idnticos aos do mtodo da superclasse, para que a verso da Os valores das variveis superclasse seja sobreposta. em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

chamada de um mtodo em um objeto usando o operador binrio "." (ponto), Listagem 7.18 Testando sobreposio de mtodos devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). Um membro no marcado com o modificar private s esto acessvel de dentro da prpria classe, ou seja somente O mtodo invocado recebedor pode tambm enviar informaes volta ao mtodos e construtores definidos classe este membro. objeto chamador atravs de umna valor depodero retornousar . O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 70
Todos os direitos reservados a 3Way Networks

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 79

Linguagem de Programao Java Linguagem de Programao Java


Uma chamada a p2.m() (listagem 7.18, linha 6) resulta na execuo da verso//atribuindo do mtodo m() definido navarivel classe Filhoreferncia (Listagem 7.17, linha 2). Porm, valor a pela regra 2 (dois) o mtodo m() da classe Filho tem menor visibilidade que o Carro carro1 = new Carro(); mtodo m() na classe Pai, que viola a regra e portanto o cdigo no ir compilar. carro1.ano = o"2001";
carro1.modelo= "fusca"; = "prata"; 7.4.5 carro1.cor Modificador de Mtodo final Mtodos marcados como final so o que chamamos de mtodos finais. Para declarar um mtodo final, adicionamos a palavra-chave final na declarao do mtodo (na posio do modificador). Assim como uma classe final no pode ser herdada, gerando um erro de compilao caso o faamos. O mesmo acontecer ao se tentar fazer um override de um mtodo final.

Tambm possvel criar mtodos que no possam ser modificados pelos filhos, impedindo o override. Estes mtodos so o que chamamos de mtodos finais.

Quando estamos criando as nossas classes e definindo as suas propriedades e mtodos, queremos implementar algum tipo de restrio para acessar esses dados. Por exemplo, ao Figura necessitar que um certo atributo seja 2.4 Layout Memria aps inicializao modificado apenas pelos mtodos dentro da classe, possvel esconder isso dos outros objetos que estejam //criando alias usando a sua classe. novo Para implementar isso, com Java, temos os modificadores de acesso (veja seo 7.5.2). Carro carro2 = carro1; Existem quatro diferentes tipos de modificadores de acesso: public, private, protected e "default" ou pacote. Os trs primeiros modificadores so escritos explicitamente no cdigo para indicar o acesso, para o tipo default, no se utiliza nenhuma palavra-chave.

7.5

Encapsulamento

Existem quatro diferentes tipos de modificadores de acesso: public, private, protected e default.

7.5.1 Pacotes Esta uma caracterstica poderosa que oferece um mecanismo para gerenciamento de um grande grupo de classes e interfaces e evita possveis conflitos de nome, sendo tambm um modo de encapsulamento dessas estruturas. 7.5.1.1 Criando pacotes Para criar pacotes, declaramos como segue:
Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

package <nomeDoPacote>;

Suponha que desejamos criar um pacote onde colocaremos a nossa classe Funcionario juntamente, com outras classes relacionadas. Chamaremos o nosso pacote 2.3 Membros de Instncia de empresa.rh. A primeira coisa que que fazer criar as pastas (ou diretrios) chamadas Os valores das variveis Cada objeto criado temos dever ter sua prpria instncia de variveis empresa/rh, estes diretrios seOs encontram de algum diretrio onde esteja em um Pacotes (atributos) definidas pela classe. mtodos definem o outro comportamento de um so objeto constituem guardando arquivospois de denota classes que (arquivos com extenso ), por exemplo objeto. Isto seus importante, um mtodo pertence.class a cada objeto da [ utilizados para o seu estado . /opt/java/lib ]. devemos confundir isto com a implementao do mtodo, que classe. Porm no agrupar classes e Em seguida, copiar para a pasta rh todas as classes que pertenam a este Dois objetos distintos tm compartilhada por todas as instncias da classe. interfaces pacote. Adicione a seguinte instruo no arquivo da classe, esta linha deve ser a o mesmo estado se suas relacionadas em primeira linha dentro de seu arquivo fonte (rever seo 2.8 ). Agora vamos modificar a variveis membro tm os 2.3.1 Invocao de Mtodos uma nicavalores. unidade. classe Funcionario que a mesma do pacote:isto significa que um mesmos Objetos se para comunicam pela fique troca dentro de mensagens,

objeto pode ter que mostrar um comportamento particular invocando uma package empresa.rh; operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um mtodo um objeto usando o operador binrio "." (ponto), public class em Funcionario { devendo especificar a mensagem completa: o objeto que o recebedor da double salario; mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). java.util.Date dataContrato; //(1) O mtodo invocado no recebedor pode tambm enviar informaes de volta ao String nome; objeto chamador String atravs de um valor de retorno. O mtodo chamado deve ser cargo="indefinido"; um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

www.3way.com.br

71

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 80

Linguagem de de Programao Java Linguagem Programao Java

public Funcionario(){} //atribuindo valor a varivel referncia Carro public carro1 Funcionario(String = new Carro(); nome,double salario, carro1.ano = "2001"; java.util.Date dataContrato) { //(2) carro1.modelo= this"fusca"; .salario = salario; carro1.cor this = "prata"; .dataContrato = dataContrato; this.nome = nome; } void bonusSalario (double percentual) { salario *= 1 + percentual / 100; } }
Listagem 7.19 Definindo pacotes

Pacotes podem ser aninhados. Neste caso, o interpretador espera que a estrutura de diretrios contendo as classes combine com a hierarquia dos pacotes. Veja a figura abaixo:
Figura 2.4 Layout Memria aps inicializao

//criando novo alias Carro carro2 = carro1;

Figura 7.4 Diretrios Pacotes

7.5.1.2 Importando Pacotes Reveja a classe Funcionario que definimos anteriormente (Listagem 7.19), observe abaixo (Listagem 7.20), em (1, linha 6) e (2, linha 13). Quando precisamos fazer referncia a uma classe que pertence a outro pacote, Figura 2.5 Layout Memria duas variveis refernciaNo para o mesmo objeto utilizando a classe Date do devemos usar seu nome completo (nome completamente qualificado). caso estamos pacote java.util. Ter que usar o nome completamente qualificado de uma classe no Quando precisamos fazer 2.3 agradvel, Membros dede Instncia muito alm tornar as linhas de nosso cdigo-fonte bem grandes, referncia a uma classe tornandoCada sua leitura mais difcil, dever o que no bom parainstncia manuteno uma objeto criado ter nada sua prpria de de variveis Os valores das variveis programa. definidas pela classe. Os mtodos definem o comportamento de um queum pertence outro (atributos) em objetoaconstituem Para utilizar classes externas de uma forma amais objeto. Isto importante, pois denota ao quepacote, um mtodo pertence cada simples, objeto da pacote, devemos usar o seu estado. seu podemos importar pacotesconfundir dessas classes. Por padro, todos as suas Java classe. Porm no os devemos isto com a implementao do classes mtodo, que nome completo ou tm Dois objetos distintos importam o pacote implicitamente. por isso que possvel utilizar compartilhada por java.lang todas as instncias da classe. podemos importar ossuas o mesmo estado se classes como String e Integer dentro da sua classe, sem usar seu nome completo: pacotes dessas classes. variveis membro tm os java.lang.String , java.lang.Integer 2.3.1 Invocao de Mtodos . mesmos valores. Para importar pacotes voc usa a palavra-chave import seguido do que nome Objetos se comunicam pela troca de mensagens, isto significa um completamente qualificado da classe, veja: objeto pode ter que mostrar um comportamento particular invocando uma

operao apropriada que foi definida no objeto. Em Java, isto feito pela import empresa.rh.Gerente; chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendoou especificar mensagem completa: o objeto que curinga o recebedor voc pode a usar somente o nome do pacote e o caracter "*", da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo invocado no recebedor pode tambm enviar informaes de volta ao import empresa.rh.*; objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

www.3way.com.br

72

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 81

Linguagem de de Programao Java Linguagem Programao Java


A primeira forma importa especificamente a classe Gerente do pacote empresa.rh, enquanto que a seguinte, com o curinga, importa as classes do pacote empresa.rh. //atribuindo valor todas a varivel referncia Lembre-se, import colocado aps a clusula package e antes das definies de classe ou interface Carro carro1 = deve new ser Carro(); no arquivo de cdigo fonte seo 2.8). Refazendo o cdigo, carro1.ano =(ver "2001";
carro1.modelo= "fusca"; carro1.cor = "prata"; package empresa.rh;
import java.util.Date;

public class Funcionario { double salario; Date dataContrato; //(1) String nome; String cargo="indefinido"; public Funcionario(){} public Funcionario(String nome,double salario,Date dataContrato) { //(2) 2.4 Layout Memria aps inicializao this.salario =Figura salario; this .dataContrato = dataContrato; //criando novo alias this .nome = nome; Carro carro2 = carro1; } void bonusSalario (double percentual) { salario *= 1 + percentual / 100; } }
Listagem 7.20 Importando pacotes

7.5.1.3 Localizao de Classes e CLASSPATH Antes que voc possa executar sua aplicao a JVM precisa fazer o carregamento das classes (class loader). O class loader um mecanismo usado para carregar classes a partir de arquivos nos diretrios ou arquivos compactados (zip ou jar), especificados na propriedade de sistema java.class.path. Esta propriedade configurada quando a varivel de ambiente CLASSPATH est definida. As classes so localizadas seqencialmente atravs dos diretrios e arquivos jar (ou zip) que estejam especificados na propriedade java.class.path. A configurao padro Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto para propriedade java.class.path o subdiretrio jre/lib dentro do diretrio onde foi instalado o JDK( ou JRE). possvel definir a Voc pode usar java -verbose SuaClasse, para ver a seqncia da carga 2.3classes, Membros de sua Instncia varivel CLASSPATH com das ao executar aplicao. Cada objeto criado dever ter sua prpria instncia variveis Os valores das de variveis Quando surge o erro NoClassDefFoundError , significa que ode JVM no mais de um local (atributos) definidas pela classe. Os mtodos definem o comportamento de um conseguiu localizar sua classe ou alguma classe da qual ela depende. Voc deve em umbasta objeto constituem pesquisa; separobjeto. Isto importante, pois denota que um mtodo pertence a cada objeto da los por ponto-e-vrgula informar JVM onde procurar pelos pacotes, definindo a varivel CLASSPATH . o seu estado. classe. Porm no nosso devemos confundir isto com a implementao do que mtodo, que (no Windows) ou doisTomando pacote de exemplo, empresa.rh, e supondo nosso Dois objetos distintos tm compartilhada todas as instncias da classe. pacote est sob opor o diretrio /opt/java/lib (ou c:\opt\java\lib) escrevemos: pontos (nos sistemas

2.3.1 Invocao de Mtodos export CLASSPATH=/opt/java/lib (para sistemas baseados em UNIX); Objetos se comunicam pela troca de mensagens, isto significa que um set CLASSPATH=c:\opt\java\lib Windows); particular invocando uma objeto pode ter que mostrar um (para comportamento operao apropriada que foi definida no objeto. Em Java, isto feito pela Como dito, em seus pacotes podem oestar dentro de "." arquivos chamada de umfoi mtodo um objeto usando operador binrio (ponto), compactados jar ou zip, neste caso devemos incluir o nome do arquivo com da devendo especificar a mensagem completa: o objeto que o recebedor extenso: mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo invocado no recebedor pode tambm enviar informaes de volta ao export CLASSPATH=/opt/java/lib/aplicacao.jar objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

o mesmo estado se suas baseados Unix). tm os variveisem membro mesmos valores.

www.3way.com.br

73

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 83

Linguagem de de Programao Java Linguagem Programao Java

invocar um mtodo ou utilizar um atributo devemos proceder como no exemplo (Listagem 7.21, linha 4 e 5):
class Calcula1 { public static void main(String[] args) { double double double double } }
Figura 2.4 Layout Memria apsstatic inicializao Listagem 7.21 Sem importao

Voc tambm pode colocar seus pacotes ou arquivos jar no diretrio JAVA_HOME/jre/lib/ext, este //atribuindo valor a varivel referncia diretrio verificado antes CLASSPATH na seqncia de carga das classes. Carro carro1 =da new Carro(); carro1.ano = "2001"; "fusca"; 7.5.1.4 carro1.modelo= Importao Esttica carro1.cor = "prata"; Como vimos em captulos anteriores membros estticos so referenciados pelo nome da classe, assim antes de

x = 10.0, y = 20.5; raizquadrada = Math.sqrt(x); hipotenusa = Math.hypot(x, y); area = Math.PI * y * y;

(ou atributos da interface), alm dos tipos enumerados, desde que no estejam em pacotes no nomeados, ou seja, default package. Deste modo, voc pode importar os mtodos utilizados no exemplo anterior (Listagem 7.21, linha 4 e 5) e us-los diretamente, sem utilizar o nome da classe ou interface para referenci-los (Listagem 7.22, linha 5 e 6): Importando todos os membros estticos (Listagem 7.22, linha 1):
import static java.lang.Math.*;//curinga, qualquer membro esttico class Calcula2 {

//criando novo alias Carro = carro1; No Javacarro2 5.0 foi introduzido o static import, que importa mtodos e atributos estticos de qualquer classe

Apesar de poder importar todos os mtodos e double x = 10.0, y = 20.5; atributos estticos da double raizquadrada = sqrt(x); //membro esttico uma classe, a classe em si Figura 2.5= Layout Memria duas variveis referncia para o mesmo objeto double hipotenusa hypot (x, y); //membro esttico double area = PI * y * y; no foi importada, se } voc tentar instanciar um } objeto sem o nome 2.3 Membros de Instncia Listagem 7.22 Usando static import completamente Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis da classe, com (atributos) definidas pela classe. Os mtodos definem o comportamento de um qualificado em um objeto constituem operador new , o Voc pode importar um membro esttico especfico (Listagem 7.23, a linhas e 2): da objeto. Isto importante, pois denota que um mtodo pertence cada1 objeto o seu estado. compilador no classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm import static sqrt; // mtodo estatico compartilhada por todasjava.lang.Math. as instncias da classe. conseguiria localiz-la o mesmo estado se suas import static java.lang.Math.PI; // campo esttico precisando de um import variveis membro tm os 2.3.1 class Invocao de Mtodos normal parte. Calculate3 { mesmos valores. Objetos sestatic comunicam troca de mensagens, public voidpela main(String[] args) isto { significa que um double x = 10.0, y = 20.5; objeto pode ter que mostrar um comportamento particular invocando uma double raizquadrada = sqrt(x); operao apropriada que foi definida no objeto. Em Java, isto feito pela //requer nome completo chamada de double um mtodo em um objeto usando o (x, operador hipotenusa = Math. hypot y); binrio "." (ponto), devendo especificar mensagem double a area = PI * completa: y * y; o objeto que o recebedor da } o mtodo a ser invocado e os argumentos para o mtodo (se houver). mensagem, } invocado no recebedor pode tambm enviar informaes de volta ao O mtodo Listagem 7.23 Usando static import especfico objeto chamador atravs de um valor de retorno . O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 74
public static void main(String[] args) {
Todos os direitos reservados a 3Way Networks

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 84

Linguagem de de Programao Java Linguagem Programao Java

Por exemplo:

//atribuindo valor a varivel referncia Carro carro1 = new Carro(); 7.5.2.1 carro1.ano Pblico - public = "2001"; Define que os elementos da classe so acessveis tanto internamente quanto externamente classe. carro1.modelo= "fusca"; Qualquer objeto que interage com a classe pode ter acesso aos elementos pblicos a partir de qualquer pacote. carro1.cor = "prata";

7.5.2 Modificadores de Acesso

// Arquivo: SuperclassA.java package packageA; public class SuperclassA { public int superclassVarA; public void superclassMethodA() {/*...*/} } class SubclassA extends SuperclassA { void subclassMethodA() { superclassVarA = 10; } Figura 2.4 Layout Memria aps inicializao } //criando novo alias class carro2 AnyClassA { Carro = carro1; SuperclassA obj = new SuperclassA(); void anyClassMethodA() { obj.superclassMethodA(); } }
Listagem 7.24 Definindo classes no pacote A

(1)

// (2) // (3)

// (4) OK.

// (5) OK.

// Arquivo: SubclassB.java package packageB; import packageA.*;

(6)

Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

Cada AnyClassB objeto criado class { dever ter sua prpria instncia de variveis Os valores das variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem obj = new SuperclassA(); objeto. Isto SuperclassA importante, pois denota que um mtodo pertence a cada objeto da o seu estado. classe. Porm no devemos confundir isto { com a implementao do mtodo, que void anyClassMethodB() Dois objetos distintos tm compartilhada por todas as instncias da = classe. obj.superclassVarA 20; // (8) OK. o mesmo estado se suas }

2.3

public class SubclassB extends SuperclassA { void subclassMethodB() { superclassMethodA(); } }

// (7) OK.

Membros de Instncia

variveis membro tm os 2.3.1 Invocao de Mtodos } mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um Listagem 7.25 Definindo classes no pacote B objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada um mtodo em um objetofonte, usando o operador binrio 7.24 "." (ponto) , Ode exemplo contm dois arquivos mostrados na Listagem e na Listagem 7.45. A hierarquia dos pacotes definidas pelos est descrita na Figura 7.5, que mostrando o packageA e o packageB, dois pacotes que devendo especificar aarquivos mensagem completa: o objeto o recebedor da contm suaso respectivas classes. As classes do packageB fazem uso das(se classes definidas no pacote packageA. A mensagem, mtodo a ser invocado e os argumentos para o mtodo houver). classe SuperclassA dono packageA tempode duas subclasses: SubclassA no packageA e SubclassB no packageB. O mtodo invocado recebedor tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 75
Todos os direitos reservados a 3Way Networks

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 85

Linguagem de de Programao Java Linguagem Programao Java

//atribuindo valor a varivel referncia Carro carro1 = new Carro(); carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 7.5 Visibilidade Pblica Figura 2.4 Layout Memria aps inicializao

uso do modificador de acesso public para o campo superclassVarA e no mtodo Membro com superclassMethodA() na Listagem 7.24, linha 6 e 7 respectivamente, definidos na acessibilidade protegida classe SuperclassA. Estes membros podem ser usados por todos os clientes do so acessveis por todas exemplo, que so: as classes contidas no  Cliente 1: SubclassA (Listagem 7.24, linha 11), a partir da subclasse mesmo pacote. definida no mesmo pacote, ela tem acesso ao campo herdado.  Cliente 2: AnyClassA (Listagem 7.24, linha 17), uma classe no mesmo pacote, que tem-um objeto do tipo SuperclassA, pode invocar o mtodo de instncia superclassMethodA.  Cliente 3: SubclassB (Listagem 7.25, linha 6), uma subclasse em outro pacote, que chama o mtodo herdado.  Cliente 4: AnyClassB (Listagem 7.25, linha 11), uma classe definida em outro pacote, que tem-um objeto do tipo SuperclassA que acessa a varivel membro da classe. Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto 7.5.2.2 Protegido protected Membro com acessibilidade protegida so acessveis por todas as classes contidas no mesmo pacote e por 2.3 Membros de Instncia todas as subclasses desta classe em qualquer pacote em que a classe seja visvel. Em outras palavras, classes que Cada objeto criado dever ter sua prpria instncia de variveis Os valores variveis no so subclasses em outros pacotes no podem fazer uso de membros protegidos a partir de outros das pacotes. Ele (atributos) definidas pela classe. Os mtodos definem o comportamento de um emos um objeto da constituem menos restritivo que o modificador padro (default ou pacote). Por exemplo, redefinindo membros classe objeto. Isto importante, pois denota um mtodo pertence a cada objeto da o seu estado. SuperclassA na Listagem 7.24 (linhas 6 eque 7), para protected : classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm compartilhada por todas as instncias da public class SuperclassA { classe.
protected int superclassVarA; // (2) 2.3.1 Invocao de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um protected void superclassMethodA() {/*...*/} // (3) objeto } pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um em um objeto usando o operador binrio Assim, o mtodo mtodo anyClassMethodB() , na classe Client4 dentro"." do (ponto) pacote ,packageB no pode acessar o devendo especificar a mensagem completa: o recebedor da campo superclassVar, tambm no pode acessaro o objeto mtodoque superclassMethodA() definidos na classe SuperclassA mensagem, o mtodo a ser invocado os argumentos para o mtodo (se houver). dentro de packageA , com mostrado naeFigura 7.6. O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 76
Todos os direitos reservados a 3Way Networks

//criando novo alias Demonstramos Carro carro2 acessibilidade = carro1; pblica neste exemplo, onde observa-se o

o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 86

Linguagem de de Programao Java Linguagem Programao Java

//atribuindo valor a varivel referncia Carro carro1 = new Carro(); carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 7.6 Modificador Protected

7.5.2.3 Padro ou Pacote Figura 2.4 Layout Memria aps inicializao Define que os elementos da classe so acessveis somente aos mtodos das classes definidas dentro do //criando novo alias mesmo pacote. No h palavra chave para o modificador padro (default). aplicado na ausncia de um Carro carro2 = carro1; modificador de acesso. Por exemplo:
public class SuperclassA { int superclassVarA; void superclassMethodA() {/*...*/} } // (2) // (3)

No exemplo, os campos superclassVarA e o mtodo superclassMethodA esto definidos como default, ento eles esto acessveis para classes dentro do pacote packageA, mas no acessveis para classes em outro pacote (mesmo estando aninhado).

Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

Cada objeto criado dever ter sua prpria instncia de variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da classe. Porm no devemos confundir isto com a implementao do mtodo, que compartilhada por todas as instncias da classe.

2.3

Membros de Instncia

2.3.1 Invocao de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela Figure 7.7. Visibilidade Default chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a serdentro invocado e os argumentos para o mtodo (se houver). As classes clientes do pacote packageB (Client3 e Client4) no podem ter acesso aos membros de O mtodo invocado no recebedor pode tambm enviar informaes de volta ao SuperclassA. Observe as relaes demonstradas na Figura 7.7. objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 77
Todos os direitos reservados a 3Way Networks

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 87

Linguagem de de Programao Java Linguagem Programao Java


7.5.2.4 Privado - private Define que os elementos so acessveis somente na classe que o definiu. Por exemplo: //atribuindo valor da a classe varivel referncia
Carro carro1 = new Carro(); public class = SuperclassA { carro1.ano "2001"; carro1.modelo= "fusca"; private int superclassVarA; carro1.cor = "prata";
}

// (2) // (3)

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

Veja Figura 7.8, nenhum cliente pode acessar estes membros.

Figura 2.4 Layout Memria aps inicializao

//criando novo alias Carro carro2 = carro1;

Figura 7.8 Modificador Private

Um padro adotado como estratgia de desenvolvimento tornar todas as variveis membros privadas e construir mtodos de acesso pblico para elas (GET e SET). Mtodos auxiliares que no ofeream recursos para outras classes tambm devem ser declarados como privados.

(atributos) definidas pela classe. Os mtodos definem o comportamento de um funcionario.nome = "Ana"; objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da classe. Porm no devemos confundir isto com a implementao do mtodo, que Para que se possa implementar o princpio do encapsulamento, isto , no compartilhada por todas as instncias permitir que qualquer objeto acesse da os classe. dados de qualquer modo. Para isto

At agora vnhamos cometendo um grande erro na implementao de nossas classes. Nosso erro decorre do fato de deixarmos osInstncia dados de nossas classes exposto ao acesso externo. Isso significa que podemos alterar o 2.3 Membros de valor das Cada variveis de instncia doter operador ponto, como abaixo:de variveis objeto criado atravs dever sua prpria instncia

7.6

Mtodos de Configurao e Captura

Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

declaramos os campos ou atributos, da nossa classe com modificador de acesso 2.3.1 . Invocao de Mtodos private Entretanto, h momentos em que queremos que outros objetos acessem Objetos se comunicam pela troca de mensagens, isto significa que um alguns destes atributos, tanto para escrita quanto para leitura. Para que possamos objeto pode ter que mostrar um comportamento particular invocando uma fazer isso, criamos mtodos de configurao chamados de getter e setter, com operao apropriada que foi definida no objeto. Em Java, isto feito pela visibilidade pblica. chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o recebedor da 7.6.1 Mtodos Getter mensagem, o mtodo ser invocado e os para o mtodo (se houver). O mtodo dea captura recebe o argumentos nome de get<NomeDoAtributo>() . Ele O mtodo no recebedor pode tambm enviar informaes de atributo volta ao retorna uminvocado objeto do mesmo tipo do atributo e deve retornar o valor do objeto chamador atravs de um valor de retorno . O mtodo chamado deve ser desejado. Para o nosso exemplo, queremos um mtodo que possa ler o nome, um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

Os valores das variveis em um objeto constituem o seu estado . Mtodos getter so Dois objetos distintos usados para ler valorestm o mesmo estado se suas de atributos de objeto, variveis tm os ou seja,membro de classe. mesmos valores.

www.3way.com.br

78

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 88

Linguagem de Programao JavaJava Linguagem de Programao


endereo, nota de ingls, nota de matemtica e nota de cincias do estudante. Assim na classe Funcionario teramos//atribuindo para o campo nome o mtodo, valor a varivel referncia
Carro carro1 = new Carro(); private String=nome; carro1.ano "2001"; ... carro1.modelo= "fusca"; public String = getNome(){...}; carro1.cor "prata";

7.6.2 Mtodos Setter Para que outros objetos possam modificar os atributos da classe, disponibilizamos mtodos que possam gravar ou modificar os valores das variveis de instncia. Este mtodo escrito como set<NomeDoAtributoDeObjeto>(<tipo do atributo parametrizado>). Novamente, para o campo nome o mtodo ficaria:
private String nome; ... public void setNome(String nome){...};

Mtodos setter so usados para modificar os valores de atributos de objeto, ou seja, de classe.

7.6.3 Aplicando Encapsulando no Exemplo Funcionario/Gerente Figura 2.4 Layout Memria aps inicializao Vamos usar os novos conhecimentos adquiridos at aqui para aprimorar as classes Funcionario e Gerente, //criando novo alias que temos usado como exemplo ao longo do captulo.
Carro carro2 = carro1;
package empresa.rh; import java.util.Date; public class Funcionario { private double salario; private Date dataContrato; private String nome; public Funcionario() { } public Funcionario(String nome, double salario,Date dataContrato) { Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto this.salario = salario; this.dataContrato = dataContrato; this.nome = nome; Membros de Instncia }

Cada objeto criado dever ter sua prpria instncia de variveis public void bonusSalario(double percentual) { (atributos) definidas pela classe. Os mtodos definem o comportamento de um salario *= 1 + percentual / 100; objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da } classe. Porm no devemos confundir isto com a implementao do mtodo, que // mtodos configuracao compartilhada por todas as de instncias da classe. 2.3.1
public Date getDataContrato() { return dataContrato; Invocao } de Mtodos

2.3

Objetos se comunicam pela troca de mensagens, isto significa que um public void setDataContrato(Date dataContrato) { uma objeto pode ter que mostrar um comportamento particular invocando = dataContrato; operao apropriada this que .dataContrato foi definida no objeto. Em Java, isto feito pela } chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a String mensagem completa: public getNome() { o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). return nome; } O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

79

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 89

Linguagem de Programao Java Java Linguagem de Programao


public void setNome(String nome) { this.nome = nome; //atribuindo valor a varivel referncia } Carro carro1 = new Carro(); carro1.ano = "2001"; public double getSalario() { carro1.modelo= "fusca"; return salario; carro1.cor = "prata"; } public void setSalario(double salario) { this.salario = salario; } }
Listagem 7.26 Encapsulamento dos campos da classe Funcionrio

package empresa.rh; import java.util.Date; public class Gerente extends Funcionario { //criando novo alias private bonus; Carro carro2double = carro1; private String secretaria; public Gerente(String nome, double salario,Date dataContrato, String secretaria) { // invoca construtor superclasse super(nome, salario, dataContrato); this.secretaria = secretaria; bonus = 0.0; } void bonusLucro(double lucro) { bonus += lucro * 0.01; }
2.5 Layout Memria duas variveis referncia para o mesmo objeto // mtodos de Figura configuracao public double getBonus() { return bonus; } Figura 2.4 Layout Memria aps inicializao

Cada objeto void criado dever ter sua bonus) prpria { instncia de variveis public setBonus( double (atributos) definidas this pela .bonus classe. Os = mtodos bonus; definem o comportamento de um objeto. Isto } importante, pois denota que um mtodo pertence a cada objeto da classe. Porm no devemos confundir isto com a implementao do mtodo, que public String getSecretaria() { compartilhada por todas as instncias da classe. return secretaria; 2.3.1 Invocao de Mtodos public void setSecretaria(String secretaria) { que um Objetos se comunicam pela troca de mensagens, isto significa this.secretaria = secretaria; objeto pode }ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela } chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem Listagem completa: o objeto que o recebedor da 7.27 Encapsulamento da classe Gerente mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo invocado no recebedor pode tambm enviar informaes de volta ao package empresa.rh; objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

2.3

Membros de Instncia

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

80

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 90

Linguagem de Programao JavaJava Linguagem de Programao


import java.util.Calendar; import static java.util.Calendar.getInstance; //atribuindo valor a varivel referncia Carro carro1 = new Carro(); public 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 contratao // configura data de contratacao do funcionario dataBase.set(2005, 6, 10); // instancia de Gerente Gerente funcionario = new Gerente("Hide Otta", 1999.99, dataBase.getTime(),"Effe Ciente"); // invoca mtodo da heranca funcionario.bonusSalario(2);
Figura 2.4 Layout Memria aps inicializao // invoca mtodo da instancia funcionario.bonusLucro(10000.00); //criando novo alias Carro carro2 = carro1; // imprime estado desta instancia de Gerente System.out.println("Nome funcionario: " + funcionario.getNome()); System.out.println("Secretariado por : "+ funcionario.getSecretaria();

System.out.println("Salario base: " + String.format("%,.2f", funcionario.getSalario())); System.out.println("Salario + Comissao: " + String.format("%,.2f", (funcionario.getSalario() + funcionario.getBonus()))); } }
Listagem 7.28 -Usando getXXX() e setXXX() das classes Funcionario e Gerente

Siga instrues do laboratrio e tome cuidado com o tempo de execuo, sempre recorra ao instrutor em caso de dvida, nunca deixe uma dvida sem reposta.

7.7

Fazer Laboratrio 6 Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

(atributos) definidas pela classe. definem o comportamento de um o operador Quando queremos saber Os se mtodos duas variveis primitivas so iguais usamos ==. Como bem em um objeto constituem objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da sabemos, este mesmo operador quando utilizado com referncia de objetos nos diz se as variveis referenciam o seu estado. o classe. Porm mesmo objeto.no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm compartilhada todas instncias da classe. A classe por Object no as pacote java.lang define o mtodo equals(), que compara a igualdade (o estado) entre o mesmo estado se suas dois objetos. Se este mtodo no for sobreposto o mtodo equals() retorna true somente se as duas referncias variveis membro apontam para o mesmo objeto. Entretanto nosso objetivo ao utilizar equals() deve comparar o contedo entre tm dois os 2.3.1 Invocao de Mtodos mesmos valores.o objetos, se isso forse possvel. por isso que equals() freqentemente sobreposto em novas classes. Por exemplo, Objetos comunicam pela troca de mensagens, isto significa que um mtodo equals() na classe String retorna true se, e somente se, o argumento passado ao mtodo (uma referncia objeto pode ter que mostrar um comportamento particular invocando uma de Object),apropriada diferente de null eo objeto que sendo comparado contm a mesma operao que foi definida no est objeto. Em Java, isto feito pela seqncia de caracteres do objeto quede est invocando mtodo: chamada um mtodo o em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o recebedor da String str1 = "Igual"; mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). String str2 = new String("Igual"); O mtodo invocado no recebedor pode tambm enviar informaes de volta ao boolean iguais = str1.equals(str2); objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 81
Todos os direitos reservados a 3Way Networks

2.3 7.8

Membros de Instncia Cada objeto== criado dever ao terMtodo sua prpria instncia de variveis O operador comparado equals

Os valores das variveis

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 91

Linguagem de Programao JavaJava Linguagem de Programao


Uma implementao simples, mas decente, pode ser uma operao de ou-exclusivo (XOR operador ^), entre os camposreferncia da classe. O cdigo seguinte //atribuindo valor a varivel ilustra essas modificaes: Carro carro1 = new Carro();
carro1.ano = "2001"; package empresa.rh; carro1.modelo= "fusca"; carro1.cor = "prata"; import java.util.Date;
public class Funcionario { private double salario; private Date dataContrato; private String nome; public Funcionario() { } public Funcionario(String nome, double salario, Date dataContrato) { this.salario = salario; this.dataContrato = dataContrato; Figura 2.4 Layout Memria aps inicializao this.nome = nome; //criando novo alias } Carro carro2 = carro1; public void bonusSalario(double percentual) { salario *= 1 + percentual / 100; } // mtodos de configuracao public Date getDataContrato() { return dataContrato; } public void setDataContrato(Date dataContrato) { this.dataContrato = dataContrato; } public String getNome() { return nome; } // Equals e hashCode mtodos public boolean equals(Object o) {
Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

A documentao de Java recomenda sobrepor o mtodo hashCode() sempre que o mtodo equals() for sobreposto.

Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis if ((o != null) && (o instanceof Funcionario)) { (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem Funcionario f = (Funcionario) o; objeto. Isto importante, poisif denota que um mtodo pertence a cada objeto da (nome.equals(f.nome) && dataContrato.equals(f.dataContrato) o seu estado. classe. Porm no devemos confundir isto com implementao do mtodo,{ que &&a salario == f.salario) Dois objetos distintos tm resultado compartilhada por todas as instncias da classe. = true;
}

2.3

Membros de Instncia boolean resultado

= false;

2.3.1 Invocao de Mtodos return resultado; Objetos } se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma public que int foi hashCode() { objeto. Em Java, isto feito pela operao apropriada definida no return (nome.hashCode() ^ dataContrato.hashCode() chamada de um mtodo em um objeto usando o operador binrio "." (ponto), ^ Double.valueOf(salario).hashCode()); devendo especificar a mensagem completa: o objeto que o recebedor da } mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). } O mtodo invocado no recebedor pode tambm enviar informaes de volta ao Listagem 7.29 Implementando mtodo equals() e hashcode() objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

82

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 92

Linguagem de Programao JavaJava Linguagem de Programao

import static java.util.Calendar.getInstance; //atribuindo valor a varivel referncia Carro carro1 = new Carro(); public class TesteEquals { carro1.ano = "2001"; carro1.modelo= "fusca"; public static void main(String[] args) { carro1.cor = "prata"; Calendar cal = getInstance(); cal.set(2000, 10, 10); Date data = cal.getTime(); Funcionario emp1 = new Funcionario("Vagabo Undo", 3500.0f, data); Funcionario emp2 = new Funcionario("Vagabo Undo", 3500.0f, data); if (emp1 == emp2) { System.out.println("emp1 = emp2"); } else { System.out.println("emp1 <> emp2"); }
Figura 2.4 Layout Memria aps inicializao if (emp1.equals(emp2)) { System.out.println("emp1 = emp2"); //criando novo alias } = else { Carro carro2 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 Memria duas variveis referncia para o mesmo objeto

Classses Abstratas Reflita um pouco sobre a hierarquia de classes da Figura 7.9, ns vimos que podemos dizer que Gato ou Membros de Instncia Leo -um Animal, ou Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem Animal bichano = new Gato(); objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da o seu estado. Animal gatao = new Leao(); classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm compartilhada por todas as instncias classe. e tambm sabemos que Galinha da -um Animal, ou o mesmo estado se suas variveis membro tm os 2.3.1 Invocao de Mtodos Animal galinha = new Galinha(); mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um
Agora ter pense! O mostrar que umum objeto Animal? Que forma ele tem? Como ele anda? O que ele come? Que som objeto pode que comportamento particular invocando uma ele faz? apropriada que foi definida no objeto. Em Java, isto feito pela operao chamada de um mtodo em um objeto usando o operador binrio "." (ponto), bicho = new Animal(); //o que seria ? da devendoAnimal especificar a mensagem completa: o objeto que um o Animal recebedor mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 83
Todos os direitos reservados a 3Way Networks

7.9 2.3

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 93

Siga-nos tambm no Twitter! twitter.com/3waynet

Linguagem de Programao JavaJava Linguagem de Programao

//atribuindo valor a varivel referncia Carro carro1 = new Carro(); carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 Layout Memria aps inicializao

//criando novo alias Carro carro2 = carro1;


Figura 7.9 - Classe Abstrata

Percebe que no faz muito sentido ter um objeto da classe Animal. Precisamos sim de uma classe Animal para termos herana e polimorfismo, entretanto no vamos precisar de instncias de Animal. Pelo menos no neste exemplo. Volte sua ateno para classe Felino ou Aves, da mesma forma que Animal, no precisamos de instncias dessas classes, mas h uma caracterstica 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 no podemos dizer com certeza que todas as Aves emitem o mesmo som, ou que um Leo coma o mesmo que um Gato, e menos ainda que emitam o mesmo som. Para definir operaes em classes devemos, necessariamente, saber qual o seu comportamento. Entretanto, em muitos casos no sabemos como estas operaes se comportaro na classe que estamos criando, mas sabemos que elas possuemFigura este2.5 comportamento ou variveis pelo menos abstramos estas caractersticas da coisa real. Layout Memria duas referncia para o mesmo objeto Assim, desejvel que as subclasses que herdem desta classe possua, obrigatoriamente, estas operaes. Por exemplo, queremos criar uma superclasse chamada Animal. Esta classe tem certos mtodos como comer(), andar() e fazerRuido(). Entretanto, existem tantas diferenas entre os mtodos nestas subclasses que no podemos 2.3 Membros de Instncia generalizar este comportamento na superclasse. Para realizarmos isto, teremos que criar uma superclasse que Cada objeto criado dever ter sua prpria instncia de variveis Osclasse valores das variveis possua alguns mtodos com implementaes e outros no. Este tipo de classe chamada de abstrata . Uma (atributos) definidas pela classe. Os mtodos definem o comportamento de um em umcom objeto constituem classe abstrata uma classe que no pode ser instanciada. Ns definimos classes abstratas o modificar objeto. Isto de importante, pois denota que um mtodo pertence a cada objeto da o seu estado. abstract antes class. classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm compartilhada todas as instncias da classe. public por abastract class Animal{...}

chave }),pode e use a palavra-chave abstract Por exemplo: objeto ter que mostrar um .comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela public void fazerRuido(); chamada de um abstract mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o recebedor da ou o mtodo a ser invocado e os argumentos para o mtodo (se houver). mensagem, O mtodo invocado no recebedor pode tambm enviar informaes de volta ao abstract public void fazerRuido(); objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

o mesmo estado se suas variveis membro tm os 2.3.1 Invocao de Mtodos Os mtodos nas classes abstratas que no tm implementao so chamados de mtodos abstratos. Para mesmos Objetosabstrato, se comunicam pela troca de mensagens, isto sem significa que um um abre chaves criar um mtodo apenas escreva a assinatura do mtodo o corpo (sem { e valores. um fecha

www.3way.com.br

84

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 95

Linguagem de Programao JavaJava Linguagem de Programao


Podemos ter classes abstratas sem mtodos abstratos, mas toda classe com qualquer mtodo abstrato obrigatoriamente abstratavalor . Vamos a remodelar a classe Animal e defini-l como uma classe abstrata: //atribuindo varivel referncia
Carro carro1 = new Carro(); //superclasse = "2001"; carro1.ano public abstract "fusca"; class Animal { carro1.modelo= carro1.cor = "prata"; String ruido;

public Animal(String ruido){ this.ruido = ruido; } public abstract void fazerRuido(); public abstract void comer(); abstract public void andar(); }
Listagem 7.31 Implementando classes abstratas

Quando uma classe //criando novo estende alias a classe abstrata Animal, ela obrigada a implementar o mtodos abstratos, como comer(), ou tornar-se abstrata . Veja: Carro carro2 = carro1;
//superclasse public abstract class Felino extends Animal { public Felino(String ruido){ super(ruido); } public abstract void fazerRuido(); public abstract void comer(); public void andar(){ System.out.println("anda com quatro patas"); } }
Listagem 7.31 Herana de classes abstrados Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

Figura 2.4 Layout Memria aps inicializao

Se a classe Felino implementar o mtodo andar(), mas no implementar fazerRuido() e nem comer(), estes continuam sendo abstratos (Listagem 7.31, linhas 7 e 8), devendo a classe ser abstrata tambm. 2.3 mtodos Membros de Instncia J a classe Gato concreta, implementar todos mtodos abstratos definido na das superclasse Cada objeto criado deverdevendo ter sua prpria instncia de variveis Os valores variveis ((atributos) Listagem 7.32, linhas 6 e 9): definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da o seu estado. //subclasse - especializao carnivoro classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm public class Gato extends Felino { compartilhada por todas as instncias da classe. public Gato() {
} de Mtodos 2.3.1 Invocao public void comer(){ Objetos se comunicam pela troca de mensagens, isto significa que um System.out.println("come rato"); objeto pode ter que mostrar um comportamento particular invocando uma } operao apropriada que foi definida no objeto. Em Java, isto feito pela public void fazerRuido(){ chamada de um mtodo em um objeto usando o operador binrio "." (ponto), System. out .println("Miar ="+ ruido); } devendo especificar a mensagem completa: o objeto que o recebedor da } o mtodo a ser invocado e os argumentos para o mtodo (se houver). mensagem, Listagem 7.32 Implementando classes concretas que herdam de classes abstratas O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

super("Miauuuu,miauuu,miauuu");

o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

85

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 96

Linguagem de Programao JavaJava Linguagem de Programao


Vejamos como utilizar essas classes. A Listagem 7.33 no compilar, porque no podemos instanciar classes abstratas (Listagem 7.33, linhas 4 e 6). Mas perceba que mesmo no podendo ter instncias de classes //atribuindo valor a varivel referncia abstratas, podemos ter variveis de referncia do tipo da classe abstrata (Listagem 7.33, linha 11): Carro carro1 = new Carro();
carro1.ano = "2001"; public class Zoo { carro1.modelo= "fusca"; public static void main(String[] args) { carro1.cor = "prata";
//errado - abstrata no instancia Animal bicho = new Animal("sem ruido"); //errado - abstrata no instancia Felino bichanos = new Felino("sem ruido"); Gato gato = new Gato(); gato.fazerRuido(); //qualquer Gato bichanos = gato; //Gato um Felino - up-casting bichanos.fazerRuido();//polimofirmo de referncia bicho = bichanos;//Felino um Animal - up-casting bicho.fazerRuido();//polimofirmo referncia Figura 2.4 Layout Memria aps de inicializao } //criando novo alias } Carro carro2 = carro1;

Listagem 7.33 Reunindo a bicharada

Uma interface, a grosso modo, um tipo de classe abstrata que s pode conter mtodos abstratos ou atributos marcados com o modificador final. Interfaces, por natureza, so abstratas, no 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. 7.10.1 Porque utilizar Interfaces? Utilizamos interfaces quando queremos uma relao entre classes no relacionadas (semelhante a uma herana) que implementem mtodos similares. Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto Atravs de interfaces, podemos compartilhar esse comportamento entre as classes, mas sem forar um relacionamento entre elas. Tome como de exemplo a classe Linha, ela contm mtodos que obtm o 2.3 Membros Instncia tamanho Cada da linha e compara objeto ter Linha com objetos de mesma objeto criado o dever sua prpria instncia de classe. variveis Os valores das variveis Considere tambm que tenhamos outra classe, MeuInteger, que contm mtodos (atributos) definidas pela classe. Os mtodos 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 mtodo pertence a cada objeto da o seu estado. ver que ambas as classes tm mtodos similares que comparam objetos do classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm mesmo tipo, entretanto eles no esto relacionados. Para ter certeza de que as compartilhada por todas as instncias da classe. classes implementam os mesmos mtodos com as mesmas assinaturas, utilizamos o mesmo estado se suas as interfaces. Voc pode criar uma interface Relacao que tm alguns mtodos de comparao. A Figura 7.10 mostra variveis membro tm os 2.3.1 Invocao de Mtodos o diagrama UML desta interface Relacao e sua utilizao pelas classes Linha e MeuInteger: mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 86
Todos os direitos reservados a 3Way Networks

7.10 Interfaces

conter mtodos abstratos e/ou atributos marcados com o modificador final.

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 97

Linguagem de Programao JavaJava Linguagem de Programao

//atribuindo valor a varivel referncia Carro carro1 = new Carro(); carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 7.10 UML interface Relacao

Existem outros motivos para voc querer utilizar interfaces em seus programas: Usar referncias 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 Memria aps inicializao  Utilizar interfaces como mecanismo alternativo para herana mltipla, que permite s classes ter //criando novo alias Herana mltipla no est implementada em Java. mais de uma superclasse.


Carro carro2 = carro1;

7.10.2 Interface vs. Classe Abstrata A principal diferena entre uma interface e uma classe abstrata que a classe abstrata pode possuir mtodos implementados (concretos) ou no implementados (abstratos). Na interface, todos os mtodos so definidos com abstratos e pblicos, sendo que a palavra-chave abstract e public sendo opcional na declarao. 7.10.3 Criando Interfaces Para criarmos uma interface, utilizamos a sintaxe abaixo:
[public] [abstract] interface <NomeDaInterface> { < [public] [static] [final] <tipoAtributo> <atributo> = <valorInicial>; >* < [public] [abstract] <retorno> <nomeMetodo>(<parametro>*); >* }
Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

Como exemplo, criaremos uma interface que define o relacionamento entre dois objetos de acordo com a "ordem natural" dos objetos:

Cada objeto criado Relacao dever ter public interface { sua prpria instncia de variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um public boolean maiorQue(Object Object b); objeto da objeto. Isto importante, pois denota que um mtodoa, pertence a cada classe. Porm no devemos confundir isto com a implementao do mtodo, que public boolean menorQue(Object a, Object b); compartilhada por todas as instncias da classe.
public boolean igualA(Object a, Object b);

2.3

Membros de Instncia

} 2.3.1 Invocao de Mtodos Listagem Interface Relacao Java Objetos se comunicam pela troca de 7.34 mensagens, istoem significa que um objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada queesta foi interface definida voc no objeto. Em Java, isto feito pela na definio da classe. Por Para implementar deve usar a palavra chave implements chamada de um mtodo em um objeto usando o operador binrio "." (ponto) exemplo, esta a implementao da interface Relacao pela classe Linha (Figura 7.10):, devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para public class Linha implements Relacao { o mtodo (se houver). O mtodo invocado no recebedor pode tambm enviar informaes de volta ao private x1; de retorno. O mtodo chamado deve ser objeto chamador atravsdouble de um valor um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 87
Todos os direitos reservados a 3Way Networks

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 98

Linguagem de Programao JavaJava Linguagem de Programao


private double x2; private double y1; //atribuindo valor ay2; varivel referncia private double Carro carro1 = new Carro(); carro1.ano = "2001"; public Linha( double x1, double x2, double y1, double y2) { carro1.modelo= "fusca"; this.x1 = x1; carro1.cor this = .x2 "prata"; = x2; this.y2 = y2; this.y1 = y1; } public double tamanho() { double tamanho = Math .sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); return tamanho; } public boolean maiorQue(Object a, Object b) { double ca = ((Linha) a).tamanho();//casting double cb = ((Linha) b).tamanho();//casting Figura 2.4 Layout Memria aps inicializao return (ca > cb); } //criando novo alias Carro carro2 = carro1; public boolean menorQue(Object a, Object b) { double ca = ((Linha) a).tamanho();//casting double cb = ((Linha) b).tamanho();//casting return (ca < cb); } public boolean igualA(Object a, Object b) { double ca = ((Linha) a).tamanho();//casting double cb = ((Linha) b).tamanho();//casting return (ca == cb); } }
Listagem 7.35 Implementando interface Relacao na classe Linha

Quando a classe implementa uma interface ela aceita o contrato da interface, ento ela tm que Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto implementar todos os mtodos definidos na interface, caso contrrio o compilador Java emitir um erro de compilao. Da mesma forma tambm implementamos a classe MeuInteger:

Cada objeto criado dever ter sua prpria instncia de variveis Integer (atributos) definidas pelavalor; classe. Os mtodos definem o comportamento de um public MeuInteger(int valor){ objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da this.valor=valor; classe. Porm no devemos confundir isto com a implementao do mtodo, que } private int valor(){ compartilhada por todas as instncias da classe.

2.3

Membros de Instncia public class MeuInteger

implements Relacao {

return valor.intValue(); } 2.3.1 Invocao de Mtodos public boolean maiorQue(Object a, Object b) { Objetos se comunicam troca de mensagens, isto significa que um int ca = pela ((MeuInteger) a).valor();//casting objeto pode ter que int mostrar comportamento particular invocando uma cb = um ((MeuInteger) b).valor();//casting > cb); operao apropriada return que foi (ca definida no objeto. Em Java, isto feito pela } mtodo em um objeto usando o operador binrio "." (ponto), chamada de um public boolean menorQue(Object a, Object b) { devendo especificar a mensagem completa: o objeto que o recebedor da int ca = ((MeuInteger) a).valor();//casting mensagem, o mtodo int a ser cb invocado e os argumentos para o mtodo (se houver). = ((MeuInteger) b).valor();//casting return (capode < cb); O mtodo invocado no recebedor tambm enviar informaes de volta ao } atravs de um valor de retorno. O mtodo chamado deve ser objeto chamador

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

www.3way.com.br

88

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 99

Linguagem de Programao JavaJava Linguagem de Programao

public boolean igualA(Object a, Object b) { //atribuindo valor varivel referncia int ca = a ((MeuInteger) a).valor();//casting Carro carro1 = new Carro(); int cb = ((MeuInteger) b).valor();//casting carro1.ano return = "2001"; (ca == cb); carro1.modelo= "fusca"; } carro1.cor = "prata"; }
Listagem 7.36 Implementando interface Relacao na classe MeuInteger

7.10.4 Relacionamento de uma Interface para uma Classe Como vimos nas sees anteriores, a classe pode implementar uma interface e para isso, deve prover o cdigo de implementao para todos os mtodos definidos na interface. Uma classe que Outro detalhe a se notar na relao entre uma interface e uma classe, que a implementa uma classe pode apenas herdar uma nica superclasse, mas pode implementar diversas interface tem que interfaces. Um exemplo de uma classe que implementa diversas interfaces:

implementar o cdigo para todos os mtodos definidos na //criando novo interface. Carro carro2 =

public class Pessoa implements IPessoa, IVivente, IQualquerUm { Figura 2.4 Layout Memria aps inicializao // algumas linhas de cdigo alias } carro1;

Outro exemplo de uma classe que estende de outra superclasse e implementa interfaces:
public class EstudanteComputacao extends Estudante implements IPessoa,IVivente { // algumas linhas de cdigo }

Uma interface no faz parte de uma hierarquia de classes. Classes no relacionadas podem implementar a mesma interface. 7.10.5 Herana entre Interfaces Interfaces no so partes de uma hierarquia de classes. Entretanto, interfaces podem ter relacionamentos entre si. Por exemplo, suponha Figura que tenhamos duas interfaces, IEstudante e IPessoa. Se IEstudante estende IPessoa, 2.5 Layout Memria duas variveis referncia para o mesmo objeto esta herda todos os mtodos declarados em IPessoa.

Cada objeto criado dever ter sua prpria instncia de variveis } (atributos) definidas pela classe. Os mtodos definem o comportamento de um public interface IEstudante extends IPessoa { objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da ... classe. Porm no devemos confundir isto com a implementao do mtodo, que } compartilhada por todas as instncias da classe. Alm disto, interfaces podem ter herana mltipla, exemplo: 2.3.1 Invocao de Mtodos interface IPessoa{} pela troca de mensagens, isto significa que um Objetos se comunicam objeto pode ter que mostrar um comportamento particular invocando uma interface IQualquerOutroInterface{} operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), interface IEstudante extends devendo especificar aIPessoa,IQualquerOutroInterface mensagem completa: o objeto que { o recebedor da //... a ser invocado e os argumentos para o mtodo (se houver). mensagem, o mtodo } invocado no recebedor pode tambm enviar informaes de volta ao O mtodo objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

2.3

Membros ... de Instncia

public interface IPessoa {

Os valores das variveis Interface pode ser em um objeto constituem utilizada como o seu estado. declarao de um tipo Dois objetos distintos tm de vriavel, apesar de o mesmo estado se suas no poder ser variveis membro tm os instanciada. mesmos valores.

www.3way.com.br

89

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 100

Linguagem de Programao JavaJava Linguagem de Programao


7.10.6 Interface vs. Classe Uma caracterstica comum uma interface e uma classe que ambas so tipos. Isto significa que //atribuindo valor a entre varivel referncia uma interface ser usada noCarro(); lugar onde uma classe esperada. Por exemplo, dadas a classe Pessoa e a Carro pode carro1 = new interface IPessoa, as seguintes declaraes so vlidas: carro1.ano = "2001";
carro1.modelo= "fusca"; carro1.cor = "prata"; IPessoa ip = new Pessoa(); Pessoa cp = new Pessoa();

Entretanto, no se pode criar uma instncia de uma interface, assim como no podemos instanciar classes abstratas. Um exemplo disso :
IPessoa ip = new IPessoa(); //erro - no instancia interface !!!

Outra caracterstica comum que ambas, interfaces e classes, podem definir mtodos, embora uma interface no possa t-los implementados. J uma classe pode.

Figuraa 2.4 Layout Classe aninhada (nested class) surgiu partir daMemria versoaps 1.1 inicializao do Java. Assim como mtodos e propriedades, uma classe aninhada novo considerada //criando aliasum membro da classe.

7.11 Classes Aninhadas

Carro carro2 = carro1; public class Externa { class Interna { // ... } }

Uma classe aninhada utilizada para reforar sua dependncia com a sua classe externa, ou seja, ela depende dos outros membros da classe externa para funcionar. Por exemplo, suponha um cursor que depende totalmente de um editor de texto:
public class EditorDeTexto { class Cursor { // ... } Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto }

Classe aninhada um recurso que permite definir uma classe dentro de outra.

Alguns consideram que este novo recurso afetou a legibilidade do cdigo, tornando-o mais complexo, 2.3 Membros de Instncia inclusive aninhando uma outra de forma recursiva, como por exemplo: Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis public class { (atributos) definidas pelaAclasse. Os mtodos definem o comportamento de um em um objeto constituem class B {pois denota que um mtodo pertence a cada objeto da objeto. Isto importante, o seu estado. class C { classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm } compartilhada } por todas as instncias da classe.

classes um que permite organizar melhor o seu conjunto uma de classes. Especialmente classes objeto internas pode ter que recurso mostrar um comportamento particular invocando internas so muito teisque para:foi definida no objeto. Em Java, isto feito pela operao apropriada Tratamento deem eventos grficos: cliqueo de mouse, pressionamento de boto, etc. utilizado bastante chamada de um mtodo um objeto usando operador binrio "." (ponto) , este recurso quando se estuda a parte de tratamento de eventos grficos AWT. devendo especificar a mensagem completa: o objeto que o recebedor da  Classe aninhadas de teste: emargumentos vez de se criar uma classe (se externa uma classe, para testar as suas mensagem, o mtodo a ser invocado e os para o mtodo houver). funcionalidades, possvel e recomendvel criar uma classe aninhada que poder ter vrios mtodos O mtodo invocado no recebedor pode tambm enviar informaes de volta ao de teste. Iremos ver sobre isso mais frente. objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 90
Todos os direitos reservados a 3Way Networks

o mesmo estado se suas variveis membro tm os 2.3.1 Invocao de Mtodos mesmos valores. Apesar do recurso de classes a legibilidade (se for mal aplicado), a maioria aceita que Objetos se comunicam pelaaninhadas troca de dificultar mensagens, isto significa que um
}

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 101

Linguagem de Programao JavaJava Linguagem de Programao

7.11.1 Classe Aninhada valor a varivel referncia //atribuindo Veja o seguinte Listagem 7.37, ele define a classe ClasseExterna (linha 1), uma classe interna Carro carro1 exemplo, = new Carro(); (linha 3),carro1.ano e a instncia (linha : = 10) "2001";
carro1.modelo= "fusca"; public class ClasseExterna { carro1.cor = "prata";
public class ClasseInterna { public String toString() { return "Classe Interna"; } } // ClasseInterna public String toString() { ClasseInterna ci = new ClasseInterna(); return "Classe Externa com " + ci; } // toString public static void main(String[] args) { Figura Layout Memria aps inicializao ClasseExterna ce =2.4 new ClasseExterna(); System. out .println(ce); //criando novo alias // main Carro }carro2 = carro1; } // ClasseExterna
Listagem 7.37

Note neste exemplo, que possvel ter classes dentro de outras, onde a classe ClasseExterna, definiu uma classe internamente denominada ClasseInterna. Ambas sobrepe o mtodo toString(), que executado automaticamente toda vez que invocado (chamado) o mtodo System.out.print(). Note que quando se compila ClasseExterna.java, surgem dois arquivos .class:  ClasseExterna.class - este o resultado da compilao de ClasseExterna. Assim como outros  ClasseExterna$ClasseInterna.class - este o resultado da compilao de membros da classe, ClasseInterna, porm como ela interna, a sua classe externa tambm listada, separada pelo cifro ($). como mtodos e
Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto 7.11.2 Classes aninhadas estticas classes aninhadas Assim como outros membros da classe, como mtodos e propriedades, classes tambm pode ser aninhadas tambm pode ser estticas denominadas classes aninhadas estticas (static estticas. nested ) ou node estticas denominadas classes internas de instncia (instance 2.3 class Membros Instncia inner class ). Assim, quando dizemos classe nunca instncia referimos de a uma classeCada objeto criado dever ter interna sua prpria variveis Os valores das variveis membro esttica; enquanto que classe aninhada um termo geral tanto para classes(atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem membro estticas ou no. Vejamos o exemplo: objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da

propriedades,

classe. Porm no devemos confundir isto com a implementao do mtodo, que public class ClasseTopo { compartilhada por todas instncias daaninhada classe. // esta as uma classe esttica
// static nested class

public static class ClasseAninhadaEstatica { 2.3.1 Invocao de Mtodos public static void args) {que um Objetos se comunicam pela troca de main(String[] mensagens, isto significa System.out.println("Classe Aninhada Esttica"); objeto pode ter que }mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela } chamada de um mtodo em um objeto usando o operador binrio "." (ponto), // esta uma classe interna de instancia devendo especificar a mensagem completa: o objeto que o recebedor da // instance inner class mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). class ClasseInterna { O mtodo invocado no recebedor pode tambm enviar informaes depodem volta ao // somente classes aninhadas estticas ter membros estticos // de as um duas declaraes retornariam erro objeto chamador atravs valor de retorno. abaixo O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 91
Todos os direitos reservados a 3Way Networks

o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 102

Linguagem de Programao JavaJava Linguagem de Programao


//static int i = 1; //public static void main(String[] args) { } //atribuindo valor a varivel referncia } Carro public carro1static = new void Carro(); main(String[] args) { carro1.ano System. = "2001"; out.println("Classe Topo"); carro1.modelo= "fusca"; } carro1.cor = "prata"; }
Listagem 7.39 Classes Internas e classes estticas aninhadas

Note neste exemplo, que tanto a classe de mais alto nvel (ClasseTopo, linha 1) e a sua classe aninhada ClasseAninhadaEstatica (linha 4 ), possuem cada uma seu prprio mtodo main(). Voc pode usar cada classe de forma independente, experimente executar as classes como segue:
> java ClasseTopo > java ClasseTopo\$ClasseAninhadaEstatica

Note neste exemplo, que como regra de sintaxe as classes internas no-estticas (ClasseInterna, linha 12) no podem ter membros Figura 2.4 estticos. Layout Memria aps inicializao 7.11.3 Classes locais Carro internas carro2 = carro1; Classes internas locais (local inner classes) so aquelas que so definidas dentro de um bloco de mtodo ou de um comando (statement). Vejamos o exemplo:
//criando novo alias

Local inner classes so classes definidas dentro de um bloco de mtodo.

mesmos valores. Objetos se comunicam pela troca Listagem de mensagens, isto significa que um 7.40 Local inner class objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela Neste exemplo, veja que possvel criar classes internas locais tanto dentro de um bloco de mtodo (linha chamada de um mtodo em um objeto usando o operador binrio "." (ponto), 3) ou dentro de um bloco de comando (linha 15). Note tambm que no permitido criar classes estticas locais, devendo especificar a mensagem completa: o objeto que o recebedor da utilizando-se do modificador static. Tambm no permitido utilizar modificadores de acesso - como public, mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). protected e private - classes internas, somente permitido utilizar o padro - sem modificadores de acesso. O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 92
Todos os direitos reservados a 3Way Networks

public class ClasseInternaLocal { public static void main(String[] main) { class DentroDaMain { public String toString() { return "DentroDaMain"; } } DentroDaMain ddm = new DentroDaMain(); // erro: nao permitido classes aninhadas estticas locais //static class EstaticaDentroDaMain { } //erro: no permitido qualquer modificador de acesso // private class PrivadaDentroDaMain { } System. out2.5 .println(ddm); Figura Layout Memria duas variveis referncia para o mesmo objeto if (true) { class DentroDoIf { public String toString() { return "DentroDoIf"; 2.3 Membros de Instncia } Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis } (atributos) definidas pela classe. Os mtodos definem o comportamento de um DentroDoIf ddi = new DentroDoIf(); em um objeto constituem objeto. Isto importante, poisSystem. denota que um mtodo pertence a cada objeto da out.println(ddi); o seu estado. } classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm //erro: fora do escopo do if compartilhada por todas as instncias da classe. //DentroDoIf ddi1 = new DentroDoIf(); o mesmo estado se suas } variveis membro tm os 2.3.1 } Invocao de Mtodos

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 103

Linguagem de Programao JavaJava Linguagem de Programao


7.11.4 Classes internas annimas Classes internas annimas inner classes) em geral aumentam bastante a complexidade de //atribuindo valor a (anonymous varivel referncia entendimento de seu cdigo, portanto deve ser utilizado de forma comedida ou em situaes em que seu usa j Carro carro1 = new Carro(); seja esperado - por exemplo, tratamento de eventos grficos AWT. Vejamos o exemplo: carro1.ano = em "2001";
carro1.modelo= "fusca"; carro1.cor = "prata"; public class TesteClasseAnonima {
public static void main(String[] args) { class TesteDescendente extends Teste { public String toString() { return "TesteDescendente - filha de: " + super.toString(); } } // fim TesteDescendente Teste t1 = new Teste(); 2.4 Layout Memria aps inicializao Teste t2 = new Figura TesteDescendente(); Teste t3; //criando novo alias Carro carro2 = carro1; t3 = new Teste() { public String toString() { return "Classe anonima - filha de: " + super.toString(); }; // fim toString() }; // fim new Teste() System.out.println("t1:" + t1 + "\nt2:" + t2 + "\nt3:" + t3); } // fim main() } // fim TesteClasseAnonima class Teste {
Figura 2.5 Layout Memria public String toString() { duas variveis referncia para o mesmo objeto return "Classe Teste"; } // fim main()

Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis Listagem 7.41 Classes Internas Annimas (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da o seu estado. Na Listagem 7.41, a confundir instncia associada implementao varivel t2 (linha 13), foi criada classe. Porm no devemos isto com a do mtodo, que atravs da definio de uma DoisDe objetos classe interna denominada TesteDescendente (linha 5), que filha da classe Teste (linha 27). forma distintos anloga, etm compartilhada por todas as instncias da classe. o mesmo estado se suas com o mesmo efeito, foi criado uma nova definio de classe, porm sem utilizar nenhum nome novo, conforme podemos ver na declarao da varivel t3 (linhas 15-19). variveis membro tm os 2.3.1 Invocao de Mtodos Simplesmente foi includo um novo bloco que define a classe annima aps a chamada new Teste() (linha mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um 15), com uma sobreposio do mtodo toString() da classe pai Teste(). objeto pode ter que mostrar um comportamento particular invocando uma Como uma classe interna annima no tem nome, no possvel referenci-la alm do ponto de sua operao apropriada que foi sua definida no objeto. Eminstante Java, isto definio. feito pela declarao, ento, deve-se salvar referncia no mesmo de sua chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a completa: o objeto que o recebedor da 7.11.5 Modificadores demensagem acesso mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). Assim como outros membros, pode-se utilizar private , public ou protected na definio de classes O mtodo invocado no recebedor pode tambm enviar informaes de volta ao aninhadas. Vejamos o exemplo: objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 93
Todos os direitos reservados a 3Way Networks

2.3

Membros de Instncia } // fim Teste

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 104

Linguagem de Programao Java Java Linguagem de Programao


class TiposDeAcesso { static class AcessoPadrao { //atribuindo valor a varivel referncia args) { public static void main(String[] Carro carro1 = new Carro(); System.out.println("AcessoPadrao"); carro1.ano } = "2001"; carro1.modelo= "fusca"; } carro1.cor = "prata"; public static class AcessoPublico { public static void main(String[] args) { System.out.println("AcessoPublico"); } } private static class AcessoPrivado { public static void main(String[] args) { System.out.println("AcessoPrivado"); } } protected static class AcessoProtegido { Figura main(String[] 2.4 Layout Memria aps inicializao public static void args) { System.out.println("AcessoProtegido"); //criando novo alias } Carro carro2 = carro1; } } public class TesteDeAcesso { public static void main(String[] args) { TiposDeAcesso.AcessoPadrao.main(null); TiposDeAcesso.AcessoPublico.main(null); TiposDeAcesso.AcessoProtegido.main(null); // TiposDeAcesso.AcessoPrivado.main(null); //isto causa erro } } class TesteDescendente extends TiposDeAcesso { public static void main(String[] args) { AcessoPadrao.main(null); AcessoPublico.main(null); Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto AcessoProtegido. main (null ); // AcessoPrivado.main(null); // isto causa erro } }

Cada objeto criado dever ter sua prpria instncia de variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um Voc executar as classes como segue: objeto. Isto pode importante, pois denota que um mtodo pertence a cada objeto da java TesteDeAcesso classe. > Porm no devemos confundir isto com a implementao do mtodo, que AcessoPadrao compartilhada por todas as instncias da classe. AcessoPublico 2.3.1 AcessoProtegido Invocao de Mtodos > java TiposDeAcesso\$AcessoPadrao Objetos se comunicam pela troca de mensagens, isto significa que um AcessoPadrao objeto pode ter que mostrar um comportamento particular invocando uma > java TiposDeAcesso\$AcessoPublico operao apropriada que foi definida no objeto. Em Java, isto feito pela AcessoPublico chamada de um mtodo em um objeto usando o operador binrio "." (ponto), > java TiposDeAcesso\$AcessoPrivado devendo especificar a mensagem completa: o objeto que o recebedor da AcessoPrivado mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). > java TiposDeAcesso\$AcessoProtegido O mtodo invocado no recebedor pode tambm enviar informaes de volta ao AcessoProtegido objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

2.3

Membros de Instncia

Listagem 7.42 Classes aninhadas e modificadores de acesso

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

94

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 105

Linguagem de Programao JavaJava Linguagem de Programao

Quando voc precisar criar uma constante, voc utilizar definio de variveis esttica e final. Toda vez que usamos a palavra-chave final estamos informando que algo no pode mudar. Com classes, final significa que no podemos mais fazer herana, com mtodos no podemos mais sobrep-lo e com variveis significa que aps a inicializao o valor da varivel no pode mais ser alterado, exemplo:
static final int JANEIRO=1;

Aqui neste exemplo, apenas exemplificamos o acesso externo por uma classe de mesmo pacote e uma //atribuindo valor a varivel referncia classe descendente. H tambm situaes de teste de acesso externo, como: classe por pacote diferente e Carro carro1 = newoutras Carro(); classe descendente. carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata"; 7.12 Tipos Enumerados

Algumas vezes necessitamos de conjuntos de valores constantes - por exemplo, conjunto de estao do ano. Uma abordagem padro para definio de um conjunto com esta natureza, seria definir uma classe ou interface contendo as constantes como abaixo:
public class Estacoes { //criando novo alias final Carro public carro2 static = carro1; public static final public static final public static final }
Figura 2.4 Layout Memria aps inicializao

int int int int

PRIMAVERA = 1; VERAO = 2; OUTONO = 3; INVERNO = 4;

public class EstacoesDoAno { int estacao; public void setEstacao(int estacao){ this.estacao=estacao; } public static void main(String[] args) { EstacoesDoAno estacaoAtual = new EstacoesDoAno();
Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

Listagem 7.43 a Conjuntos de constantes em 1.4 classe. Porm no devemos confundir isto com implementao doJava mtodo, que Dois objetos distintos tm compartilhada por todas as instncias da classe. o mesmo estado se suas A abordagem utilizada apresenta algumas desvantagens: variveis membro tm os 2.3.1 Invocao de Mtodos  no segura quanto ao tipo qualquer inteiro pode ser passado ao mtodo setEstacao(). mesmos valores. Objetos se comunicam pela da troca de (ou mensagens, que um  devemos utilizar o nome classe interface) isto parasignifica referenciar a constante. objeto pode ter que mostrar uma comportamento particular invocando uma  o valor no representa informao textual do nome da constante. operao apropriada foi definida no objeto.devem Em Java, isto feitocaso pela as classesque que utilizam estas constantes ser recompiladas seus valores sofram mudana. chamada de um mtodo em um objeto usando o operador binrio "." (ponto), 5.0 implementa este conceito de o conjunto constantes com o da novo tipo enum. O tipo enum devendoJava especificar a mensagem completa: objeto de que o recebedor representa os enumerados ou conjuntos comumente vistos em outras mensagem, o tipos mtodo a ser invocado e os argumentos para o mtodo (se linguagens houver). de programao, ele define um conjunto de nomes e recebedor valores constantes. Vejamos como informaes fica nosso exemplo usando O mtodo invocado no pode tambm enviar de volta ao enum: objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 95
Todos os direitos reservados a 3Way Networks

estacaoAtual.setEstacao(Estacoes.PRIMAVERA);// (1) nome constante // qualificado pelo nome da classe estacaoAtual.setEstacao(1);// mesmo que anterior 2.3 Membros deestacaoAtual.setEstacao(5);// Instncia no existe mas aceito Cada objeto System. criado dever ter sua prpria instncia variveis "2", out.println(Estacoes. VERAO); de // Imprime evalores no "VERAO" Os das variveis } (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem } importante, pois denota que um mtodo pertence a cada objeto da objeto. Isto

o seu estado.

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 106

Linguagem de Programao JavaJava Linguagem de Programao


public enum Estacoes { PRIMAVERA,VERAO,OUTONO,INVERNO; //atribuindo valor a varivel referncia } Carro carro1 = new Carro(); carro1.ano = "2001"; public class EstacoesDoAno { carro1.modelo= "fusca"; Estacoes estacao; carro1.cor = "prata"; public void setEstacao(Estacoes estacao){ this.estacao=estacao; } public static void main(String[] args) { EstacoesDoAno estacaoAtual = new EstacoesDoAno();

O tipo enum representa os tipos enumerados ou conjuntos de nomes e valores constantes.

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 Memria aps inicializao Listagem 7.44 Usando tipos enumerados em Java 1.5

O tipo enum estende implicitamente a classe java.lang.Enum. Nossas enumeraes podem ter construtores, mtodos, variveis. Como as classes, as enumeraes podem ser declaradas dentro de classes, como enumeraes estticas e locais. Veja exemplo de um enumerado mais complexo:
public enum EEstacoes { PRIMAVERA(Mes.SETEMBRO,Mes.NOVEMBRO), VERAO(Mes.DEZEMBRO,Mes.FEVEREIRO), OUTONO(Mes.MARO,Mes.MAIO), INVERNO(Mes.JUNHO,Mes.AGOSTO); enum Mes { JANEIRO,FEVEREIRO,MARO,ABRIL,MAIO,JUNHO,JULHO, AGOSTO,SETEMBRO,OUTUBRO,NOVEMBRO,DEZEMBRO; }
Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

//criando novo alias Carro carro2 = carro1;

private Mes inicio, fim; //visibilidade so private ou package inicio,Mes fim){ .inicio=inicio; Cada objeto this criado dever ter sua prpria instncia de variveis this .fim=fim; (atributos) definidas pela classe. Os mtodos definem o comportamento de um } objeto. Isto importante, pois denota que um public Mes getInicio() { mtodo pertence a cada objeto da classe. Porm no devemos confundir isto com return inicio;a implementao do mtodo, que } por todas as instncias da classe. compartilhada public Mes getFim() { return fim; 2.3.1 Invocao de Mtodos } Objetos se comunicam pela troca de mensagens, isto significa que um }

2.3

Membros de Instncia private EEstacoes(Mes

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

objeto pode ter que mostrar um comportamento particular invocando uma public class EEstacoesDoAno operao apropriada que foi definida no {objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), public static void main(String[] args) { devendo especificar a mensagem completa: o objeto que o recebedor da String msg=""; mensagem, o mtodo for a ser (EEstacoes invocado e os estacao argumentos para o mtodo (se houver). : Eestacoes.values()){ switch (estacao) { O mtodo invocado no recebedor pode tambm enviar informaes de volta ao case PRIMAVERA : msg="Flores,Frutos objeto chamador atravs de um valor de retorno . O mtodo chamado deve ser e chuvas"; break; um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 96
Todos os direitos reservados a 3Way Networks

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 107

Linguagem de de Programao Java Linguagem Programao Java


case VERAO : msg="Calor e Chuvas"; break; case OUTONO : msg="Ventos e Seca"; break; //atribuindo valor a varivel referncia case INVERNO : msg="Frio e Seca"; break; Carro carro1 = new Carro(); } carro1.ano = "2001"; carro1.modelo= "fusca"; System.out.println(estacao + " comea no ms " carro1.cor = "prata"; + estacao.getInicio() + ", termina no ms " + estacao.getFim() + ", temos " + msg); } } }
Listagem 7.45 Enumerados com mtodos, construtores, etc

O tipo enumerado acrescenta dois mtodos implicitamente, static <tipo da sua enum>[] values() Retorna um array contendo as constantes desta enum, na ordem em que so declaradas

static <tipo da sua enum> valueOf(StringFigura nome) Retorna uma constante da enum com o argumento 2.4 Layout Memria aps inicializao nome passado. O comando switch, no Java 5, tambm pode ser usado com enumerados e no somente tipos integrais inteiros, o rtulo case pode ser acompanha da constante.
//criando novo alias Carro carro2 = carro1;

Siga instrues do laboratrio e tome cuidado com o tempo de execuo, sempre recorra ao instrutor em caso de dvida, nunca deixe uma dvida sem reposta

7.13 Fazer Laboratrio 7

7.14 Exerccios

Escreva, compile e execute todas listagens de cdigo apresentadas neste captulo.

Uma exceo um evento que interrompe o fluxo normal de processamento de uma classe. Este evento um erro de algum tipo. Isto causa o trmino inesperado da execuo de seu programa. Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto Estes so alguns dos exemplos de excees que podem ter ocorridos em exerccios anteriores:  ArrayIndexOutOfBoundsException: ocorre ao acessar um elemento inexistente de um array.  NumberFormatException: ocorre ao enviar um parmetro no-numrico para o mtodo 2.3 Membros de Instncia Integer.parseInt() . Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um Exceo um constituem evento em um objeto 8.1 Manipulando Excees objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da queo interrompe seu estadoo . Para tratar excees em Java utilizamos a declarao try-catch-finally. O que classe. Porm no devemos confundir isto com a implementao do mtodo, que fluxo normal de devemos fazer para proteger as instrues passveis de gerar uma exceo inser-las Dois objetos distintos tm compartilhada por todas as instncias da classe. processamento de dentro deste bloco. A forma geral de um try-catch-finally : 2.3.1 Invocao de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um try{ as instrues passveisparticular de gerar uma exceo objeto pode//escreva ter que mostrar um comportamento invocando uma //neste que bloco operao apropriada foi definida no objeto. Em Java, isto feito pela } catch (<exceptionType1> <varName1>){ chamada de um mtodo em um objeto usando o operador binrio "." (ponto), //escreva aqui o cdigo do seu programa, caso ocorra devendo especificar mensagem o objeto tipo que o recebedor da //umaa exceo de completa: um determinado } . . . mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). } invocado catch (<exceptionTypen> <varNamen>){ O mtodo no recebedor pode tambm enviar informaes de volta ao //escreva aqui o cdigo do seu programa, caso ocorra objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser //uma exceo de um determinado tipo um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

Excees

o mesmo estado se suas uma classe. Toda variveis membro tm os exceo de algum mesmos valores. tipo.

www.3way.com.br

97

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 108

Linguagem de Programao JavaJava Linguagem de Programao


} finally { //escreva a ao que o seu programa executar caso //atribuindo a um varivel //ocorra valor ou no erro oureferncia exceo Carro carro1 = new Carro(); } carro1.ano = "2001"; carro1.modelo= "fusca"; Excees geradas durante a execuo do bloco try podem ser detectadas e tratadas num bloco catch. O carro1.cor = "prata";

cdigo no bloco finally sempre executado, ocorrendo ou no a exceo. A seguir so mostrados os principais aspectos da sintaxe da construo de um try-catch- finally: 1. A notao de bloco obrigatria, 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 exceo de um tipo. 5. O cabealho do bloco catch recebe somente um argumento, que o tipo da exceo (Exception) que este bloco ir tratar. 6. A exceo deve ser da classe Throwable ou de uma de suas subclasses. Tomemos, por exemplo, uma classe que imprime o segundo argumento passado atravs da linha de comandos. Supondo que no h verificao no cdigo para o nmero de argumentos. Figura 2.4 Layout Memria aps inicializao
//criando novo alias public class ExceptionExample { Carro carro2 = carro1;
public static void main(String[] args) { System.out.println(args[1]); System.out.println("Finish"); } }

Ao executar esta classe sem informar nenhum argumento, ao tentar acessar diretamente - conforme o exemplo descrito - o segundo argumento args[1], uma exceo ser lanada e interromper a execuo normal do programa. A seguinte mensagem ser mostrada na console do sistema:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 at ExceptionExample.main(ExceptionExample.java:5)
2.5 Layout Memria duas variveis referncia para o mesmo objeto Para prevenir que isto Figura ocorra, podemos colocar o cdigo dentro de um bloco try-catch. O bloco finally opcional. Neste exemplo, no utilizaremos o bloco finally.

2.3

public class ExceptionExample Membros de Instncia

(atributos) definidas pela Os mtodos definem o comportamento de um try classe. { objeto. Isto importante, poisSystem. denota que um mtodo pertence a cada objeto da out.println(args[1]); } catch (ArrayIndexOutOfBoundsException exp) { classe. Porm no devemos confundir isto com a implementao do mtodo, que System. out .println("Exception caught!"); compartilhada por todas as instncias da classe.
} System.out.println("Finish");

{ public static void main(String[] { de variveis Cada objeto criado dever ter sua prpria args) instncia

2.3.1 Invocao } de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um } objeto pode ter que mostrar um comportamento particular invocando uma Listagem 8.1 Tratando exceo de runtime operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio (ponto), dos argumentos, a sada Assim, quando tentarmos rodar o programa novamente sem"." a informao devendo especificar a mensagem completa: o objeto que o recebedor da trataria a exceo e o fluxo do programa no ser interrompido, mostrando o resultado: mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo invocado no recebedor pode tambm enviar informaes de volta ao Exception caught! Finish objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 98
Todos os direitos reservados a 3Way Networks

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 110

Linguagem de Programao JavaJava Linguagem de Programao

Imediatamente abaixo daa classe java.lang.Throwable encontram-se as duas categorias gerais de excees: //atribuindo valor varivel referncia Carro carro1 e=java.lang.Exception new Carro(); . as classes java.lang.Error carro1.ano = "2001"; A classe Exception trata as excees que os usurios podem tratar. Em geral, estas condies so o carro1.modelo= "fusca"; resultado de algum erro lgico em sua programao - como diviso por zero e referncia invlida de ndice em um carro1.cor = "prata"; array ou erros imponderveis - como a falha de comunicao com um servidor de banco de dados. Por outro lado, a classe Error utilizada pela JVM para manipular os erros ocorridos no ambiente de execuo (JRE). Geralmente, estes erros esto alm do controle do programador Java, desde que sejam causados dentro do ambiente de execuo. Por exemplo: erro de falta de memria e erro de acesso ao disco rgido. Abaixo encontra-se a hierarquia das classes de excees. Todas essas excees esto definidas no pacote java.lang ou em outros pacotes, como java.io.

8.2

Categorias de Excees

Figura 2.4 Layout Memria aps inicializao

//criando novo alias Carro carro2 = carro1;

Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

Cada objeto criado dever ter sua prpria instncia de variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da classe. Porm no devemos confundir isto com a implementao do mtodo, que compartilhada por todas as instncias da classe. 2.3.1 Invocao de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo invocado no recebedor pode tambm enviar informaes de volta ao Figura 8.1 de Excees objeto chamador atravs de um valor de retorno . Hierarquia O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

2.3

Membros de Instncia

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

99

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 111

Linguagem de Programao JavaJava Linguagem de Programao

O bloco catch respeita das das classes de excees, mltiplos blocos catch devem ser //atribuindo valor a a hierarquia varivel referncia Carro carro1para = new Carro(); ordenados da subclasse a superclasse .
carro1.ano = "2001"; carro1.modelo= "fusca"; { class MultipleCatchError carro1.cor = "prata"; public static void main(String args[]) { try { int a = Integer.parseInt(args[0]); int b = Integer.parseInt(args[1]); System.out.println(a / b);
} catch (Exception e) { System.out.println(e); } catch (ArrayIndexOutOfBoundsException e2) { System.out.println(e2); } System.out.println("After try-catch-catch.");

Todas as excees so subclasses, direta ou indiretamente, da classe java.lang.Throwable.

Figura 2.4 Layout Memria aps inicializao } } //criando novo alias Listagem = 8.2 Pegue excees na ordem inversa da hierarquia Carro carro2 carro1;

A compilao desse cdigo produzir a mensagem de erro abaixo, j que a classe Exception superclasse da classe ArrayIndexOutOfBoundsException.
MultipleCatchError.java:9: exception java.lang.ArrayIndexOutOfBoundsException has already been caught } catch (ArrayIndexOutOfBoundsException e2) {

Uma exceo verificada aquela que o compilador Java exige o tratamento. O compilador se certifica que cada catch ou lista de excees encontram-se dentro da clusula throws. Se a exceo verificada no for capturada nem listada, ocorre um erro de 2.3 Membros de Instncia Cada objeto criado compilao. dever ter sua prpria instncia de variveis Os valores das variveis Ao contrrio das o excees verificadas, excees no-verificadas no (atributos) definidas pela classe. Os mtodos definem comportamento de as um em um objeto constituem tratamento de pertence excees ano momento da compilao. As classes de objeto. Isto importante, poisforam denotaoque um mtodo cada objeto da o seu estado. exceo no-verificadas so: Error, RuntimeException classe. Porm no devemos confundir isto com a implementao do mtodo, que , e suas subclasses. Error so Dois objetos distintos tm lanadas pela JVM, devendo se preocupar com elas quem estiver desenvolvendo compartilhada por todas as instncias da classe. o mesmo estado se do suas recursos para JVM. RuntimeException so erros de lgica, ficando a cargo programador se livrar delas. variveis membro tm os 2.3.1 Invocao de Mtodos mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um 8.3 Lanando Excees objeto pode ter que mostrar um comportamento particular invocando uma 8.3.1 A palavra-chave throw operao apropriada que foi definida no objeto. Em Java, isto feito pela Alm de capturar excees, Java tambm permite que os mtodos lancem chamada de um mtodo em um objeto usando o operador binrio "." (ponto) , excees. A sintaxe para o lanamento de excees : devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). throw <objetoExceo>; O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador de um valor de retorno. O mtodo chamado deve ser Considere atravs este exemplo: um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 100
Todos os direitos reservados a 3Way Networks

As exceo derivadas de Error so lanadas pela JVM, j as RuntimeException so normalmente erros de lgica.

O catch faz um entrevista com a referncia do objeto da exceo lanada, ele pergunta se a referncia -um objeto do tipo da exceo marcada em catch. No caso, qualquer exceo sempre uma subclasse de Exception, logo os blocos catch inferiores jamais sero alcanados.
Figura 2.5 Uma Layout Memria duas variveis referncia para o mesmo exceo pode ser verificada ou objeto no-verificada.

8.2.1 Excees Verificadas e No-verificadas

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 112

Linguagem de Programao JavaJava Linguagem de Programao

class ThrowDemo { //atribuindo valor a varivel referncia Carro public carro1static = new void Carro(); main(String args[]) { carro1.ano = "2001"; carro1.modelo= "fusca"; try { carro1.cor = "prata"; throw new RuntimeException("throw demo"); } catch (RuntimeException e) { System.out.println("Exceo capturada aqui."); System.out.println(e); } } }
Listagem 8.3 Lanando excees

Esta classe mostrar a seguinte sada: Exceo capturada aqui. java.lang.RuntimeException: throw demo 8.3.2 Desviando Excees //criando novo alias No casocarro2 de um mtodo causar uma exceo, mas no captur-la, deve-se utilizar a palavra-chave throws Carro = carro1; para repassar esta exceo para quem o mtodo que o chamou. Esta regra se aplica apenas para excees verificadas. Veremos mais sobre excees verificadas e no-verificadas mais a frente. Esta a sintaxe para o uso da palavra-chave throws:
<tipo>* <nomeMetodo> (<argumento>*) throws <listaExcecao> { <instruo>* }
Figura 2.4 Layout Memria aps inicializao

Este exemplo mostra o mtodo m() (linha 2) repassando a exceo ClassNotFoundException. O mtodo main() (linha 6), mtodo chamador de m(), tornou-se o responsvel por tratar a exceo lanada por Class.forName(), invocado por m() (linha 3).
public class TesteThrows { public static void m() Memria throws ClassNotFoundException { Figura 2.5 Layout duas variveis referncia para o mesmo objeto Class.forName("QQClase"); } main(String args[]) { try { Cada objeto criado dever ter sua prpria instncia de variveis m(); (atributos) definidas pela classe. Os mtodos definem o comportamento de um } catch (ClassNotFoundException e) { objeto. Isto importante, poisSystem. denota que um mtodo pertence a cada objeto da out.println(e); classe. Porm no devemos confundir isto com a implementao do mtodo, que } } compartilhada por todas as instncias da classe. }

2.3

Membros de Instncia public static void

Listagem 8.4 Repassando excees 2.3.1 Invocao de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um O mtodo esttico Class.forName() est marcado throwsinvocando ClassNotFoundException , este mtodo est objeto pode ter que mostrar um comportamento particular uma marcado para lanar excees dodefinida tipo ClassNotFoundException , que como sabemos operao apropriada que foi no objeto. Em Java, isto feito pela deveria ser trata em m() por um bloco try-catch-finally , mas caso optamos ignorar, temporariamente, relanando a exceo. chamada de um mtodo em neste um objeto usando por o operador binrio "." (ponto) , Existem quatro cenrios diferentes num bloco try-catch-finally : devendo especificar a mensagem completa: o objeto que o recebedor da 1. o Uma sada a forada ocorre e quando o fluxo de controle forado a sair do bloco try por uma instruo mensagem, mtodo ser invocado os argumentos para o mtodo (se houver). return , continue ou break . O mtodo invocado no recebedor pode tambm enviar informaes de volta ao 2. As instrues bloco try-finally normalmente sem ser que nenhum erro ocorra. objeto chamador atravsdentro de umdo valor de retorno.executam O mtodo chamado deve um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 101
Todos os direitos reservados a 3Way Networks

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 113

Linguagem de Programao JavaJava Linguagem de Programao


3. O cdigo pode ter um bloco catch especfico para tratar a exceo que foi lanada. 4. Temos o oposto do terceiro cenrio, onde a exceo no tratada. Nesse caso, a exceo lanada no //atribuindo valor a varivel referncia foi tratada por bloco catch. Carro carro1 = nenhum new Carro();
carro1.ano = "2001"; carro1.modelo= "fusca"; Estes cenrios so vistos na classe a seguir: carro1.cor = "prata"; public class CenariosExceptionsDemo {
static void myMethod(int n) throws Exception { 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 Memria aps inicializao System. out .println("quarto caso"); throw new Exception(" quarto caso demo"); //criando novo alias 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."); } } public static void main(String args[]) { for (int i = 1; i <= 4; i++) { try { CenariosExceptionsDemo.myMethod(i); } catch (Exception e) { Figura 2.5 Layout Memria duas variveis refernciatratada: para o mesmo objeto System. out.print("Exo "); System.out.println(e.getMessage()); } System.out.println();

Cada } objeto criado dever ter sua prpria instncia de variveis Os valores das variveis } definidas pela classe. Os mtodos definem o comportamento de um Para (atributos) criar classe de em um uma objeto constituem Listagem 8.5denota Cenriosque do bloca try-catch-finally objeto. Isto importante, pois um mtodo pertence a cada objeto da exceo, a tem que oclasse seu estado . classe. Porm no devemos confundir isto com a implementao do mtodo, que estender a classe Dois objetos distintos tm compartilhada todas as instncias da classe. RuntimeException 8.4 Criando por Excees o mesmo estado ou se suas Apesar de muitas classes de exceo j existirem no pacote java.lang, Exception. variveis membro tm os 2.3.1 classes Invocao de Mtodos essas de exceo no so suficientes para cobrir todas possibilidades de mesmos valores. se comunicam pela troca de mensagens, isto significa um excees Objetos que podem ocorrer na implementao de suas prprias classes. que Da a objeto ter que um comportamento particular invocando uma razo depode querermos criarmostrar nossas prprias classes de excees. operao apropriada que foi definida no objeto. Em Java, uma isto classe feito pela Para criar nossa prpria exceo, teremos que criar que chamada de um mtodo em um objeto usando o operador binrio "." (ponto) estenda a classe RuntimeException ou Exception, ou qualquer de suas subclasses. , devendo especificar a personalizar mensagem a completa: objetocom queo problema o recebedor Deste modo, devemos classe de oacordo a ser da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se classe houver). resolvido. Atributos de objeto e construtores podem ser adicionados na sua O mtodo no recebedor pode tambm enviar informaes de volta ao de exceo.invocado Veja um exemplo: objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 102
Todos os direitos reservados a 3Way Networks

2.3

Membros de}Instncia

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 114

Linguagem de Programao JavaJava Linguagem de Programao


public class ExemploException extends Exception { public ExemploException(String msg) { //atribuindo valor a varivel referncia super (msg); Carro } carro1 = new Carro(); carro1.ano = "2001"; } carro1.modelo= "fusca"; carro1.cor = "prata"; public class TesteExemploException { public static void main(String args[]) { try { throw new ExemploException( "Mensagem de ExemploException"); } catch (ExemploException e) { System.out.println("Mensagem exceo : " + e.getMessage()); } } }
Listagem 8.6 Criando suas prprias classes de excees

Figura 2.4 Layout Memria aps inicializao

Carro = carro1; Quandocarro2 sobrepomos um mtodo que contenham a clusula throws na sua definio, temos que tomar o cuidado de sobrescrevermos este mtodo com um subconjunto apropriado das excees j definidas no mtodo da superclasse :  As excees declaradas devem ser da mesma classe ou subclasse da excees marcadas na clusula throws. Por exemplo, se o mtodo da superclasse lana um IOException ento o mtodo sobreposto pode lanar um IOException ou FileNotFoundException (subclasse de IOException), mas no um Exception.  Podemos usar um subconjunto das excees declaradas na clusula throws do mtodo na superclasse  No podemos adicionar novos tipos de classes de excees - alm das que j esto definidas na clusula throws no mtodo da superclasse ao mtodo sobreposto na subclasse.

8.5

Sobrescrita Mtodos //criando de novo alias e Excees

Exemplos:
public class TesteA { public void Figura mtodoA() RuntimeException { 2.5 Layoutthrows Memria duas variveis referncia para o mesmo objeto // alguma operacao Sobrepor mtodos que } } contenham a clusula

throws em sua definio, Cada objeto criado dever ter sua prpria instncia de variveis Os valores variveis o mtodo devedas lanar a (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem public class TesteB1 extends TesteA { mesma exceo ou um objeto. Isto importante, pois mtodoA() denota que um mtodo pertence a cada objeto da public void throws ArithmeticException o seu estado . de suas subclasses e no { classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois distintos pode serobjetos adicionado tipos tm // alguma operacao compartilhada por todas as instncias da classe. o mesmo estado } diferentes. se suas
2.3.1 Invocao de Mtodos Listagem 8.8 Sobrepondo mtodos com subclasses de excees Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma public class TesteB2 extends TesteA { operao apropriada foi mtodoA() definida nothrows objeto. Exception Em Java, isto publicque void { feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), // alguma operacao devendo especificar a mensagem completa: o objeto que o recebedor da } } mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). Listagem Sobrepondo mtodos com superclasses de excees O mtodo invocado no8.9 recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

2.3

Membros de Instncia Listagem 8.7 Relanando excees em mtodos sobrepostos

variveis membro tm os mesmos valores.

www.3way.com.br

103

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 115

Linguagem de Programao JavaJava Linguagem de Programao


Aqui, TesteB1 (Listagem 8.8), vai compilar pois ArithmeticException subclasse de RuntimeException. J TesteB2 (//atribuindo Listagem 8.9), no compila, superclasse de RuntimeException. valor a Exception varivel referncia Mais exemplos, regras: Carro carro1seguindo = new as Carro();
carro1.ano = "2001"; import java.io.*; carro1.modelo= "fusca"; public class TestMultiA carro1.cor = "prata"; { public void metodoA() throws IOException, RuntimeException { // faz alguma operao IO } }
Listagem 8.10 Sobrepondo mtodos que relanam excees

import java.io.*; public class TestMultiB1 extends TestMultiA { public void metodoA() throws FileNotFoundException, UTFDataFormatException, ArithmeticException { // faz agluma operao de IO e nmerica } } Figura 2.4 Layout Memria aps inicializao

//criando novo Listagem alias8.11 Throws com subclasses de excees no mtodo da superclasse Carro carro2 = carro1;

A classe TesteMultiB1 (Listagem 8.9) compila, ambos FileNotFoundException e UTFDataFormatException so subclasses de IOException e ArithmeticException uma subclasse de RuntimeException. Observe atentamente que na linha 4, temos uma maior nmero de classes, mas no temos um novo tipo de classe de Exceo, todas a excees utilizadas so subclasses das excees declaradas no mtodo da superclasse.
import java.io.*; import java.sql.*; public class TestMultiB2 extends TestMultiA { public void metodoA() throws FileNotFoundException, UTFDataFormatException, ArithmeticException, SQLException { // faz algum IO, numero e SQL } Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto }
Listagem 8.12 Throws com novo tipo de excees no declarado no mtodo da superclasse

Ateno, no a quantidade mas o tipo da classe de exceo que faz a diferena para sobrepor um mtodo.

A classeobjeto TestMultiB2 (Listagem no compila, SQLException no foi sido declarada no mtodo Cada criado dever 8.12 ter ),sua prpria pois instncia de variveis Os valores das variveis em TestMultiA ; no pode ser acrescentado novosdefinem tipos de classes de excees ao sobreposto. (atributos) definidas pela classe. Os mtodos o comportamento demtodo um em um objeto constituem objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da o seu estado. import java.io.*; classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm public class TestMultiB3 extends TestMultiA { compartilhada por todas as instncias da classe. public void metodoA() throwsFileNotFoundException,

2.3

Membros de Instncia

2.3.1

objeto pode ter que mostrar um comportamento particular invocando uma Listagem 8.13 Subconjunto Excees declaradas operao apropriada que foi definida no objeto. Emdas Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o que recebedor da usar um conjunto menor de Por ltimo, a classe TestMultiB3 (Listagem 8.13) demonstra voc pode mensagem, o mtodo a ser invocado e havia os argumentos o mtodo (se houver). excees no mtodo sobreposto, do que no mtodopara da superclasse. O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 104
Todos os direitos reservados a 3Way Networks

UTFDataFormatException,ZipException { // faz algum IO/Arguivo Invocao de Mtodos } se comunicam pela troca de mensagens, isto significa que um Objetos }

o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 116

Linguagem de de Programao Java Linguagem Programao Java

Siga instrues do laboratrio e tome cuidado com o tempo de execuo, sempre recorra ao instrutor em //atribuindo valor a varivel referncia carro1 = uma new dvida Carro(); caso de Carro dvida, nunca deixe sem reposta carro1.ano = "2001"; carro1.modelo= "fusca"; 8.7 Exerccio carro1.cor = "prata"; Escreva, compile e execute todas listagens de cdigo apresentadas neste captulo.

8.6

Fazer Laboratrio 8

Uma grande inconvenincia da linguagem de programao Java era a necessidade constante de fazer typecast ou casting (converses de tipo explcitas) em expresses que necessitassem de referncias de objetos mais especficas. Por exemplo, um objeto ArrayList permite que voc adicione objetos de qualquer tipo coleo, mas quando voc quiser recuperar estes elementos, ter de fazer um typecast nos objetos para que o tipo de referncia seja mais especfico sua necessidade, ou seja, uma referncia para uma subclasse de Figura 2.4 Layout Memria aps inicializao Object. O casting um perigo em potencial, uma vez que no possvel, em //criando novo alias tempo de compilao, garantir qual o tipo do objeto poder ser referenciado Carro carro2 = podendo gerar uma exceo carro1; do tipo ClassCastException, em tempo de execuo. Adiciona-se a isto o fato de seu cdigo ficar mais poludo e, portanto, menos legvel. Alm disso, o casting destri os benefcios de uma linguagem com os tipos fortemente definidos, j que esse procedimento anula a segurana trazida pela checagem de tipos durante a compilao. O principal objetivo da adio de Generics ao Java solucionar problemas como os apresentados no pargrafo anterior. A adio de tipos Generics, em Java 5.0, permite definir o uso de um tipo especfico para uma classe, como ArrayList, que trabalha com uma grande variedade de tipos. Considere um objeto ArrayList para ver como Generics ajuda a melhorar nosso cdigo. Um objeto ArrayList possui a capacidade de armazenar referncias de objetos, elementos de qualquer tipo de referncia em uma coleo de objetos. Uma instncia de ArrayList, entretanto, sempre fora a realizar um casting nos objetos que recuperamos a partir da coleo. Considere a seguinte linha de instruo:
ArrayList umArrayList = new ArrayList(); 2.5 Layout Memria duas variveis referncia para o mesmo objeto String umaString Figura = (String) umArrayList.get(0);

9.1

Por que Generics?

Tipos Genricos

O principal objetivo da adio de Generics ao Java solucionar problemas como o casting que destri os benefcios de uma linguagem com os tipos fortemente definidos.

Agora note a verso utilizando Generics,

Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis String umaString = umArrayList.get(0); (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem objeto. Isto importante, denota que,um mtodo pertenceoatipo cadade objeto daque ser aceito A nova verso dapois classe ArrayList permite especificar objeto pela coleo. o seu estado . classe. node devemos confundir isto com a implementao do mtodo, que elemento que no satisfaa a Assim, Porm em tempo compilao, possvel verificar se estamos adicionando algum Dois objetos distintos tm compartilhada por todas instncias da classe.do tipo String. Desta forma voc pode eliminar o casting quando declarao - garantindo queas haja somente objetos o mesmo estado se suas recuperar um elemento da coleo e ter uma linha de instruo como a seguinte: variveis membro tm os 2.3.1 Invocao de Mtodos mesmos valores. Objetos comunicam troca de mensagens, isto significa que um String se umaString = pela umArrayList.get(0); objeto pode ter que mostrar um comportamento particular invocando uma o casting ser removido, isso no que voc possa operaoEmbora apropriada que possa foi definida no objeto. Emsignifica Java, isto feito pelaatribuir o valor de retorno do mtodo get() a uma varivel de referncia com tipo ao do objeto armazenado no ArrayList no caso de chamada de um mtodo em um objeto usando odiferente operador binrio "." (ponto) , objetos do tipo String . Ao atribuir o valor retornado pelo mtodo get() a uma referncia que no seja do tipo devendo especificar a mensagem completa: o objeto que o recebedor da String , voc receber um erro de equiparao de tipos em tempo de compilao, tal como indica a mensagem mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). seguinte: O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 105
Todos os direitos reservados a 3Way Networks

2.3

Membros de Instncia

ArrayList<String> umArrayList = new ArrayList<String>();

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 117

Linguagem de Programao JavaJava Linguagem de Programao


found: java.lang.String required: java.lang.Integer Integer data = umArrayList.get(0); //atribuindo valor a varivel referncia Carro carro1 = new Carro(); Para se ter uma = idia de como Generics usado, antes de entrarmos em mais detalhes, considere o carro1.ano "2001"; seguintecarro1.modelo= fragmento de cdigo: "fusca"; carro1.cor = "prata"; ArrayList <String> genArrList = new ArrayList <String>(); genArrList.add("A generic string"); String umaString = genArrList.get(0); JOptionPane.showMessageDialog(this, umaString);

A verso com generics de ArrayList usa o literal <String>, aparecendo imediatamente aps a referncia do tipo ArrayList. Assim declarada, a referncia genArrList ficar amarrada ao tipo String. Logo, somente objetos do tipo String podero ser usados com o mtodo add(), bem como, no ser possvel retornar objeto do tipo Integer ou qualquer outro tipo que no seja do tipo String, usando o mtodo get(). As prximas instrues no so vlidas:
int umInt = genArrList.get(); Integer umInteger = genArrList.get();

Figura 2.4 Layout Memria aps inicializao

9.2

//criando novo alias Utilizando Generics Declarando uma Classe

Carro carro2 = criar carro1; Voc tambm pode suas prprias classes utilizando Generics.

Ao invs de uma longa discusso sobre como declarar uma classe utilizando Generics, veja este exemplo:
public class Jaula<TipoValido> { private TipoValido variavel; public Jaula() {} public TipoValido get() { return variavel; } public void add(TipoValido variavel){ this.variavel = variavel; } }
Listagem 9.1 Uma classe Genrica

A partir da verso 5.0, Java fornece aos desenvolvedor as implementaes de Collection que fazem uso de Generics.

Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

Vamos dissecar a sintaxe de Generics, utilizada na declarao da classe Jaula. Na linha 1, voc declara a classe:

2.3

Membros de Instncia

(atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem o nome da classe pois seguido por um par de sinais < (menor que) e > (maior que) envolvendo o literal objeto. Isto importante, denota que um mtodo pertence a cada objeto da seu estado TipoValido: <TipoValido>. Isto chamado de parmetro de tipo, qualquer identificador vlido o em Java pode. ser classe. Porm no devemos confundir isto com a implementao do mtodo, que Doisindicam objetos distintos tm usado - por conveno utiliza-se a letra maiscula T de Type (ou Tipo). Os usos dos sinais <...> que a classe compartilhada por todas as instncias da classe. o mesmo estado se suas declarada uma no trabalha com um tipo especfico. Por isso, observe que o atributo da classe foi declarado para ser do tipo TipoValido : variveis membro tm os 2.3.1 Invocao de Mtodos mesmos valores. Objetos se comunicam variavel; pela troca de mensagens, isto significa que um private TipoValido objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito Essa declarao especifica que a varivel de instncia variavel de um pela tipo Generico, e depende do tipo chamada de um mtodo em um objeto usando o operador binrio "." (ponto) , de dado que ser usado na declarao da referncia de objeto da classe Jaula<TipoVariavel> . Quando declarar uma devendo da especificar a dever mensagem completa: quequal o recebedor da instncia classe, voc especificar o tipo o da objeto classe com voc deseja trabalhar. Por exemplo: mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). Jaula<Leao> = new Jaula<Leao>(); O mtodo invocado no jaulaLeao recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 106
Todos os direitos reservados a 3Way Networks

class Jaula<TipoValido> Cada objeto criado dever ter sua prpria instncia de variveis

Os valores das variveis

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 118

Linguagem de Programao JavaJava Linguagem de Programao


A sintaxe <Leao> aps a declarao de Jaula especifica que essa instncia da classe ir trabalhar com variveis//atribuindo do tipo Leao. Podemos trabalhar com variveis do tipo Integer ou qualquer outro tipo de referncia. Para valor a varivel referncia trabalhar com um Integer, = o fragmento do cdigo teria a seguinte instruo: Carro carro1 new Carro();
carro1.ano = Jaula<Integer> carro1.modelo= carro1.cor = "2001"; jaulaInteger = new Jaula<Integer>(); "fusca"; "prata";

Observe a declarao para o mtodo get() (linha 5):


public TipoValido get() { return variavel; }

O mtodo get() retorna um valor do tipo TipoValido, que um tipo Generic. Isso significa que o mtodo ter um tipo de dado em tempo de execuo, ou mesmo em tempo de compilao. Depois de declarar um objeto do tipo Jaula, TipoValido ser ligado a um tipo de dado especfico. Essa instncia atuar como se tivesse sido declarada para ter esse tipo de dado especfico, e apenas esse, desde o incio. No seguinte cdigo, duas instncias da classe Jaula foram criadas.
Jaula <String> jaulaString = new Jaula <String>(); //criando alias String str novo = jaulaString.get(); Carro carro2 = carro1; Jaula <Urso> jaulaUrso = new Jaula <Urso>(); Urso urso = jaulaUrso.get();
Figura 2.4 Layout Memria aps inicializao

Note que a criao de uma instncia de uma classe que utiliza Generics bem similar criao de uma classe normal, exceto pelo tipo de dado especfico entre os sinais <> logo aps o nome do construtor. Essa informao adicional indica o tipo de dado com que voc trabalhar para essa instncia da classe Jaula em particular. Depois de criada a instncia, torna-se possvel acessar os elementos da classe sem a necessidade do typecast no valor do retorno do mtodo get(), uma vez que j foi decidido que ele ir trabalhar com um tipo de dado de referncia especfico. 9.2.1 Limitao "Primitiva" Limitao em Uma limitao de Generics em Java, que eles so de uso restrito a tipos Generics para que referncia de Objetos, e no funcionaro com tipos primitivos. Por exemplo, o eles sejam de uso comando a seguir seria ilegal, uma vez que int Memria um tipo de dadoreferncia primitivo. Figura 2.5 Layout duas variveis para o mesmo objeto
Jaula <int> jaulaInt = new Jaula <int>();

Voc ter que empacotar os tipos primitivos com um a classe Wrapper, antes Cada objeto criado dever ter sua prpria instncia de variveis de us-los como argumentos Generics. (atributos) definidas pela classe. Os mtodos definem o comportamento de um objeto. Jaula Isto importante, denota que um mtodo pertence a cada objeto da <Integer>pois jaulaInteger = new Jaula <Integer>(); classe. Porm no devemos confundir isto com a implementao do mtodo, que compartilhada todas as instncias da classe. 9.2.2 Limitandopor Genricos

2.3

Membros de Instncia

No exemplo mostrado anteriormente, os parmetros de tipo da classe Jaula 2.3.1 ser Invocao de Mtodos podem referencias para qualquer tipo de classe. H casos, entretanto, onde voc Objetos se comunicam pela troca de em mensagens, isto de significa que um quer restringir os tipos que podero ser usados instanciaes uma classe do objeto pode . ter mostrar umo comportamento particular uma tipo Generics Javaque permite limitar conjunto de possveis tipos invocando que podem ser operao apropriada que foi definida no objeto. Em Java, isto feito pela utilizados. chamada deexemplo, um mtodo em um objeto usando o que operador "." (ponto),como um continer para um Por a classe Jaula (Listagem 9.2), utilizabinrio Generics , serviria devendo qualquer. especificar mensagem completa: objeto que de uma o recebedor carnvoro Ema tempo de execuo, T sero uma instncia subclasse da de Carnivoro, supondo que essa classe tenha o sido definida como subclasse de Animal. utilizado extends para fazer a limitao de classes que mensagem, mtodo a ser invocado e os argumentos para o mtodo (se houver). possam fazer uso da classe generica criada. O mtodo invocado no recebedor pode tambm enviar informaes de volta ao exemplo a seguir limita asvalor instanciaes da . classe Jaula para subclasses Carnivoro. objeto O chamador atravs de um de retorno O mtodo chamado devee ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 107
Todos os direitos reservados a 3Way Networks

restrito a tipos referncia de Objetos, e no funcionaro com Os valores das variveis tipos primitivos . em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 119

Linguagem de Programao JavaJava Linguagem de Programao

class Jaula <T extends Carnivoro> { //atribuindo valor a varivel referncia Carro private carro1 T = animal; new Carro(); carro1.ano = "2001"; carro1.modelo= "fusca"; public Jaula() {} carro1.cor = "prata"; public T get() { return animal; } public void add(T animal){ this.animal = animal; } }
Listagem 9.2 Limitando tipos genericos

class TesteJaula{ public static void main(String args[]) {


Figura 2.4 Layout Memria aps inicializao

Para limitar as instanciaes ao tipo de uma classe, ns usamos a clusula extends seguida pela nome da classe que limita (ou restringe) o tipo Generico.

Jaula <Gato> obj1 = new Jaula<Gato>(); //criando novo alias //O Carro carro2 = comando carro1; seguinte ilegal Jaula<Animal> obj2 = new Jaula<Animal>(); } }
Listagem 9.3 Testando classe Genrica limidata

A instanciao de obj1 (Listagem 9.3, linha 3) vlida, uma vez que Gato uma subclasse de Animal. Porm a criao de obj2 (linha 5) causar um erro em tempo de compilao, uma vez que Animal no uma subclasse de Carnivoro. Usar Generics limitados nos d um benefcio adicional, que a checagem esttica de tipos. Como resultado, ns temos a garantia de que toda instanciao de um tipo Generics respeita os limites (ou restries) que atribumos a ele. Uma vez que asseguramos que toda instncia do tipo uma subclasse do limite atribudo, e ento podemos chamar, de forma segura, qualquer mtodo do objeto. NOTA a ausncia do limite explcito no parmetro, <T> o mesmo que <T extends Object>.
Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

Alm de declarar classe Generics, tambm podemos declarar mtodos Mtodos genricos Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis Generics. Parametrizar mtodos til quando queremos realizar tarefas onde as so chamados de (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem dependncias de tipo entre os argumentos e o valor de retorno so Generics , mas objeto. Isto importante, denota que um mtodo pertence a cada objeto da polimrficos , e so pois oaseu estado . no depende de nenhuma informao do tipo da classe, e mudar cada chamada classe. Porm no devemos confundir isto com a implementao do mtodo, que definidos para serem ao mtodo. Dois objetos distintos tm compartilhada por todas as instncias da classe. suponha que queremos adicionar um mtodo make() em uma mtodos Por exemplo, o mesmo estado se suas parametrizados pelo classe que use ArrayList. Este mtodo esttico admitiria um nico argumento, variveis membro que tm os 2.3.1 Invocao tipo. de Mtodos seria o nico elemento do objeto ArrayList. Para fazer com que nosso ArrayList mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que receba qualquer tipo de elemento, o argumento e oum retorno do mtodo make() deve objeto pode ter que mostrar umGenerics comportamento particular invocando uma utilizar . operao apropriada que foi definida no objeto. Em Java, isto feito Veja como declarar mtodos genricos no pela exemplo a seguir: chamada de um mtodo em um objeto usando o operador binrio "." (ponto), publiccompleta: class Util { devendo especificar a mensagem o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). /* T extends Object implicitamente */ O mtodo invocado no recebedor pode tambm enviar informaes de volta ao public static <E> ArrayList<E> make(E e) { objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 108
Todos os direitos reservados a 3Way Networks

2.3

9.3 Declarando Mtodos Genricos Membros de Instncia

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 120

Linguagem de Programao JavaJava Linguagem de Programao


System.out.println("doidao"); ArrayList<E> lista = new ArrayList<E>(); //atribuindo valor a varivel referncia lista.add(e); Carro carro1 = newlista; Carro(); return 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 Mtodos genricos

Para construir uma nova instncia de ArrayList<Integer>, ns simplesmente teramos o seguinte comando:
Util.make(new Integer(0));
Figura 2.4 como Layout Memria O mtodo, aps a invocao, comporta-se se tive aps sidoinicializao declarado desta forma:

//criando novo alias publiccarro2 static=ArrayList<Integer> make(Integer i){ Carro carro1; ArrayList<Integer> lista = new ArrayList<Integer>(); lista.add(i); return lista; }

A coisa mais estranha na declarao de um mtodo genrico que devemos colocar o <T> antes do tipo de retorno do mtodo. O <T>, posto assim, implica que o mtodo retorna o que vem aps sua declarao, no caso, ArrayList<E>. Como voc j sabe, possvel atribuir a referncia de um objeto Integer a um Object, j que Object um supertipo de Integer:
Object umObject = new Object(); Integer umInteger = new Integer(10); Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto umObject = oumInteger; // OK

9.4

Subtipagem

Na terminologia de orientao a objetos, isto um relao do tipo -um. Uma vez que Integer um tipo 2.3 Membros de Instncia de Object, ento a atribuio permitida. Mas Integer tambm um tipo de Number, ento o cdigo seguinte Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis tambm vlido. (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da public void umMetodo(Number n){ o seu estado. //devemos corpo do mtodo omitido classe. Porm no confundir isto com a implementao do mtodo, que Dois objetos distintos tm } compartilhada por todas as instncias da classe.

2.3.1 Invocao de Mtodos Objetos se comunicam de. mensagens, isto Jaula significa que um O mesmo pode ser dito pela para troca generics Usando a classe (Listagem 9.2), tendo Number como seu objeto pode ter que mostrar um comportamento particular invocando uma argumento de tipo da classe, voc pode realizar uma invocao ao mtodo add() com qualquer argumento seja operao apropriada que foi definida no objeto. Em Java, isto feito pela compatvel com Number: chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendoJaula<Number> especificar a mensagem o objeto que o recebedor da jaula = completa: new Jaula<Number>(); jaula.add( Integer(10)); // OK mensagem, o mtodonew a ser invocado e os argumentos para o mtodo (se houver). jaula.add( new Double(10.1)); // OK O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 109
Todos os direitos reservados a 3Way Networks

umMetodo(new Integer(10)); // OK umMetodo(new Double(10.1)); // OK

o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 121

Linguagem de Programao JavaJava Linguagem de Programao


Agora considere o seguinte mtodo:
//atribuindo valor a varivel referncia public carro1 void jaulaTeste(Jaula<Number> n){ Carro = new Carro(); // corpo mtodo omitido carro1.ano = "2001"; } carro1.modelo= "fusca"; carro1.cor = "prata";

Que tipo de argumento ser aceito? Observando a assinatura do mtodo, voc sabe que ele aceita um argumento simples do tipo Jaula<Number>. Mas o que exatamente isto significa? Ento voc continua e passa um Jaula<Integer> ou Jaula<Double>, como era de se esperar, correto? Errado, porque Jaula<Integer> e Jaula<Double> no so subtipos de Jaula<Number>. A compreenso se torna mais fcil quando voc pensa em objetos tangveis coisas como uma imagem como uma Jaula.
// Uma jaula uma coleo de coisas, //com barras para prende-las interface Jaula<E> extends Collection<E>;

Um leo tipo de animal, ento Leo dever subtipo de Animal :


//criando novo extends alias Animal {} interface Leo Carro carro2 = carro1; Leo rei = ...;

Figura 2.4 Layout Memria aps inicializao

Onde voc precisar de algum animal voc poder fornecer um leo:


Animal a = rei;

A interface Collection a interface raiz na hierarquia de colees; ela representa um grupo de objetos. J que uma Jaula ser usado como um conjunto de objetos (de animais), ter sentido uslo neste exemplo.

Um leo pode, claro, ser colocado numa jaula para lees:


Jaula<Leo> jaulaLeo = ...; jaulaLeo.add(rei);

e um borboleta numa jaula para borboletas:


interface Borboleta extends Animal {} Borboleta monarca = ...; Figura 2.5 Layout Memria variveis referncia para o mesmo objeto Jaula<Borboleta> jaulaBorboleta = duas ...; jaulaBorboleta.add(monarca);

no deve ser simples de se construir, ento: variveis membro tm os 2.3.1 Invocao de Mtodos mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um jaulaAnimal.add(rei); jaulaAnimal.add(monarca); objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela Uma um leo um tipo de animal subtipo de"." Animal), a ,questo ento retorna, "Uma chamada de vez um que mtodo em um objeto usando o (Leo operador binrio (ponto) jaula de Leo um tipo de jaula de animal? Ou seja, Jaula<Leo> um subtipo de Jaula<Animal>?". Pela definio devendo especificar a mensagem completa: o objeto que o recebedor da de jaula de animal, dada acima, a resposta no. Ficou surpreso! Mas isto faz mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). muito sentido quando voc comea a pensar: no pode presumir que uma jaula informaes de leo pode O mtodo invocado nose recebedor pode tambm enviar dereter voltauma ao borboleta, e uma jaula de borboleta, certamente, no pode manter um leo. Na verdade, nem uma objeto chamador atravs de um valor de retorno. O mtodo chamado deve serjaula pode ser considerada um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 110
Todos os direitos reservados a 3Way Networks

(atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem Jaula<Animal> jaulaAnimal = ...; objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da o seu estado. classe. Porm no devemos confundir isto com a implementao do mtodo, que Esta jaula dever estar preparada para manter qualquer tipo de animal, todos eles juntos. Ela dever tertm Dois objetos distintos compartilhada todas instncias da classe. barras resistentes por para reteras uma leo e pouco espao entre elas de modo a reter uma borboleta. Tal tipo de jaula

Mas o que de uma jaula de animal? Voc poderia achar que uma jaula que serve para prender qualquer 2.3 Membros Instncia tipo de animal: Cada objeto criado dever ter sua prpria instncia de variveis

Os valores das variveis

o mesmo estado se suas

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 122

Linguagem de Programao JavaJava Linguagem de Programao


suficientemente adequada para qualquer tipo de animal:
//atribuindo valor a varivel referncia jaulaAnimal // erro compilao Carro carro1==jaulaLeo; new Carro(); jaulaAnimal = jaulaBorboleta; // erro compilao carro1.ano = "2001"; carro1.modelo= "fusca"; Sem generics os animais podem ser colocados em tipos inadequados de jaulas, de onde seria possvel que carro1.cor = "prata";

eles escapassem.

9.5

Usando o Coringa <?>


Observe o exemplo
import java.util.*; class Jaula<E> { private E animal; public Jaula() { }
Figura 2.4 Layout Memria aps inicializao

public E get() //criando novo alias{ return animal; Carro carro2 = carro1; } public void add(E animal) { this.animal = animal; } public void fill(List<Carnivoro> animais){ animais.add(new Cachorro()); // Ok,adiciona um Cachorro de //subtipo Carnivoro } }
Listagem 9.5 Nova Jaula com mtodo que Lista de carnivoros

public class JaulaDemo {


Figura 2.5 Layout Memria duas variveis referncia public static void main(String[] args) { para o mesmo objeto

Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis Jaula<Carnivoro> jaula = new Jaula<Carnivoro>(); (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem jaula.fill(listaCachorro); //Erro,esperava objeto. Isto importante, pois denota que um mtodo pertence a cada objeto daList<Carnivoro> o seu estado. //foi passado List<Cachorro> classe. Porm no } devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm compartilhada por todas as instncias da classe. } 2.3.1 Invocao de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um O compilador vai emitir a seguinte mensagem (Listagem 9.6, linha 8), objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela The method fill(List<Carnivoro>) in the type Jaula<Carnivoro> is not applicable for the arguments chamada de um mtodo em um objeto usando o operador binrio "." (ponto), (List<Cachorro>) devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, mtodo a ser invocado e os para mtodo (se houver). Esteoerro de compilao igual aoargumentos que ocorre a um o mtodo qualquer, que receba como argumento uma O mtodo invocado no recebedor pode tambm enviar informaes de volta referncia de tipo diferente do tipo do parmetro definido na assinatura do ao mtodo. Ou seja, como visto objeto chamador atravs de um valor de retorno . O mtodo chamado . deve anteriormente (seo 9.5), List<Cachorro> no subtipo de List<Carnivoro> Mas ser o que pesa neste exemplo que, um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 111
Todos os direitos reservados a 3Way Networks

2.3

Membros

List<Cachorro> listaCachorro = new ArrayList<Cachorro>(); listaCachorro.add(new Cachorro()); delistaCachorro.add( Instncia new Cachorro());

Listagem 9.6 Testa Jaula

o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 123

Linguagem de Programao JavaJava Linguagem de Programao


com genrics, parece que perdemos o que havia de melhor em Java, o polimorfismo de referncia. O que voc deve observar//atribuindo que a notao de genricos nos obrigareferncia a trabalhar com um nico tipo, no nos deixando manipular os valor a varivel mtodosCarro sobrepostos nas = subclasses a partir de referncias do tipo da superclasse, como vimos ser possvel ao carro1 new Carro(); estudarmos polimorfismo, = sem generics. carro1.ano "2001"; carro1.modelo= "fusca"; Para continuarmos com a segurana de tipo, trazida por generics, e ainda termos o nosso aclamado carro1.cor = "prata"; comportamento polimrfico, precisamos de uma maneira de dizer ao compilador que desejamos usar qualquer subtipo genrico do tipo do argumento declarado. Felizmente podemos utilizar o literal <?>, o coringa, como forma de dizer ao compilador que o mtodo aceita qualquer tipo, ou ainda <? extends AlgumaClasse>, para dizer que qualquer objeto do tipo da classe ou de suas subclasses sero aceitos. Vejamos nosso exemplo modificado:
public class Jaula<T> {

Quando utilizamos private T animal; <?>, sem extends public Jaula() { estamos dizendo } <? extends 2.4 Layout Object>, ou seja public Figura T get() { Memria aps inicializao return animal; qualquer objeto. novo alias //criando
} Carro carro2 = carro1; public void add(T animal) { this.animal = animal; } public void fill(List<? extends Carnivoro> listaCanivoros){ listaCanivoros.add(new Cachorro());//ERRO } }
Listagem 9.7 Usado o coringa

public class JaulaDemo { public static void main(String[] args) { List<Cachorro> listaCachorro = new ArrayList<Cachorro>(); listaCachorro.add(new Cachorro()); Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto listaCachorro.add( new Cachorro()); Jaula<Carnivoro> jaula = new Jaula<Carnivoro>(); jaula.fill(listaCachorro);//ok, Cachorro extends Carnivoro

} Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um Listagem 9.8 Testa Jaula com argumento coringa em um objeto constituem objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da o seu estado. classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos Nosso problema agora o mtodo add(E o) (Listagem 9.7, linha 15), de List. O mtodo add() , em suatm compartilhada por todas as instncias da classe. definio exige que o argumento deve ter o mesmo tipo utilizado por List, mas o problema reside justamente o mesmo estado seno suas fato de que o argumento pode ser de qualquer tipo ou subtipo da classe Carnivoro, assim add() se recusa a os variveis membro tm 2.3.1 Invocao de Mtodos adicionar algo desconhecido e que possa causar algum problema. Esse o preo a ser pago pelo benefcio de uma mesmos valores. Objetos se comunicam pela de mensagens, isto significa um mtodos tipagem segura (previsvel em tempo detroca compilao) e de podermos invocarque qualquer polimrfico. Voc objeto que um fill() comportamento particular invocando o uma ter que pode aceitarter o fato demostrar seu mtodo s poder fazer leitura. Reescrevendo exemplo, operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um class mtodo em um objeto usando o operador binrio "." (ponto), public Jaula<T> { private T animal; devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). public Jaula() { O mtodo invocado no recebedor pode tambm enviar informaes de volta ao } objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 112
Todos os direitos reservados a 3Way Networks

2.3

Membros de Instncia }

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 124

Linguagem de de Programao Java Linguagem Programao Java


public T get() { return animal; //atribuindo valor a varivel referncia } Carro carro1 = new Carro(); carro1.ano = "2001"; public void add(T animal) { carro1.modelo= this"fusca"; .animal = animal; carro1.cor = "prata"; } public void fill(List<? extends Carnivoro> listaCanivoros){ //animais.add(new Carnivoro("qq")); //no pode adicionar quando //usamos <? extends Carnivoro> for(Carnivoro bicho: listaCarnivoros) bicho.fazerRuido(); }
Listagem 9.9 Coringa torna sua referncia somente leitura

Outra situao que provavelmente voc esperaria encontrar uma declarao como a que se segue:
List<? extends Carnivoro> carnivoros = new ArrayList<? extends Carnivoro>(); Figura 2.4 Layout Memria aps inicializao

(ver seo 9.5). Ento, para criar uma instncia que possa ser atribuda referncia, voc deve criar um objeto genrico de um subtipo de Carnivoro, por exemplo:
List<? extends Carnivoro> carnivoros; //usando Carnivoro List<Carnivoro> listaCarnivoro = new ArrayList<Carnivoro>(); listaCarnivoro.add(new Cachorro()); listaCarnivoro.add(new Gato()); //ou um subtipo de Carnivoro List<Cachorro> listaC= new ArrayList<Cachorro>(); carnivoros = listaC;

//criando novo alias Pois , mais uma vez a resposta no, voc no pode criar instncias de algo que voc no sabe o que Carro carro2 = carro1;

Siga instrues do laboratrio e tome cuidado com o tempo de execuo, sempre recorra ao instrutor em Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto caso de dvida, nunca deixe uma dvida sem reposta

9.6

9.6 Fazer Laboratrio 9

captulo. Cada objeto criado dever ter sua prpria instncia de variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da 10 Java Collections classe. Porm no devemos confundir isto com a implementao do mtodo, que As estruturas de dados so muito utilizadas na programao em geral. compartilhada por todas as instncias da classe. Quando desenvolvemos algum programa, freqentemente utilizamos arrays. Em algoritmos complexos, listas (ligadas ou no), mapas, pilhas e filas so essenciais. 2.3.1 Invocao de Mtodos Por serem muito utilizadas, vrias estruturas j esto disponveis no pacote Objetos se comunicam pela troca de mensagens, isto significa que um java.util e so chamados de Java Collection Framework, ou simplesmente objeto pode ter classes que mostrar umcontar comportamento uma Colletion . Nestas podemos com vrias particular operaes invocando muito comuns , operao apropriada que foi definida no objeto. Em Java, isto feito pela como mtodos de ordenao, busca, interseo, unio, diferena e vrios outros. chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o recebedor da 10.1 Hierarquia Das Interfaces mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). O conjunto de classes Java para colees (Java Collection Framework) O mtodo de invocado no recebedor pode tambm enviar trs informaes volta ao composto vrias interfaces e classes concretas. Existem interfacesde principais: objeto chamador atravs de um valor de retorno . O mtodo chamado deve ser Collection, Map e Queue, que definem os mtodos comuns de estruturas de dados um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

9.7 2.3

9.7 Exerccio Membros de Instncia Escreva, compile e execute todas listagens de cdigo apresentadas neste

Java Collection Framework est Osdividido valores entre das variveis Interfaces e classe em um objeto constituem concretas que . o seu estado implementam as tm Dois objetos distintos interfaces o mesmoCollection, estado se suas Map, Queue e/ou suas variveis membro tm os sub-classes. mesmos valores.

www.3way.com.br

113

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 125

Linguagem de Programao JavaJava Linguagem de Programao


do tipo conjuntos, mapas e filas respectivamente. Caso voc precisevalor de alguma estrutura dereferncia dados, voc deve utilizar uma das classes concretas, que de uma //atribuindo a varivel forma ou outra herdam de= uma das trs interfaces citadas. Carro carro1 new Carro(); A seguir mostramos estas classes no formato hierrquico em rvore. As interfaces esto marcadas com carro1.ano = "2001"; "fusca"; italico e carro1.modelo= as classes concretas com linha tracejada, que significa implements:
carro1.cor = "prata";

Figura 2.4 Layout Memria aps inicializao

//criando novo alias Carro carro2 = carro1;

Figura 10.1: Hierarquia Bsica de Java Collections

As colees no se resumem somente a estas interfaces e classes concretas da Figura 10.1, na verdade estamos apresentando as que so mais utilizadas por programadores Java, uma lista mais detalhada pode ser verificada na documentao da API.

10.2 Generics e Colees Java

No JDK 1.5, os mtodos da interface Collection foram atualizados para suportar Generics, veja tabela:
Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

Mtodos da interface Collection public boolean add(E o)

Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis public void clear() Remove todos os elementos dessa coleo. (atributos) definidas pela classe. Os mtodos definem o comportamento de um em umele objeto constituem public boolean remove(Object Remove uma nica pertence instncia de Object o dessa estiver objeto. Isto importante, poiso) denota que um mtodo a cada objeto da coleo, seo seu estado . presente. Retorna true se o foi encontrado e removido da coleo. classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm public boolean contains(Object o) Retorna true se essa coleo contm o Object o. compartilhada por todas as instncias da classe.
public boolean isEmpty() Retorna true se essa coleo no contm nenhum objeto ou elemento. variveis membro tm os 2.3.1 Invocao de Mtodos public int size() Retorna o nmero de elementos nessa coleo. mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter iterator() que mostrar um Retorna comportamento particular invocando uma public Iterator<E> um iterator que nos permite acessar elementos da coleo. operao apropriada que foi definida no objeto. Em Java, isto feito pela public boolean equals(Object o) Retorna true se o Object o igual a essa coleo. chamada de um mtodo em um objeto usando o operador binrio "." (ponto), public int especificar hashCode() a mensagem completa: Retorna o valor do hash code (i.e., o ID) para essa coleo. Mesmos objetos devendo o objeto que o recebedor da ou coleestmomesmovalordehashcodeouID. mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo invocado no recebedor pode tambm enviar informaes Tabela 1 - mtodos da interface Collection JDK de 1.5 volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 114
Todos os direitos reservados a 3Way Networks

2.3

Membros de Instncia adicionado com sucesso coleo.

Insere o elemento especfico o nessa coleo. Retorna true se o foi

o mesmo estado se suas

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 126

Linguagem de Programao JavaJava Linguagem de Programao

No vamos apresentar o modelo tradicional, do JDK 1.4, que mais propenso a problemas de segurana //atribuindo valor a varivel referncia quanto ao tipo, j discutimos quando falamos sobre tipos genricos. Carro carro1 = este new assunto Carro(); Vejamos, uma vez um exemplo de uma classe que no utiliza a verso Generics para a criao de carro1.ano =mais, "2001"; carro1.modelo= "fusca"; uma lista, podemos incluir sem problemas objetos de qualquer tipo, no caso String, Integer entre os outros carro1.cor = "prata"; elementos.
import java.util.*; public class NaoGenericoDemo { public static void main(String args[]) { List list = new ArrayList(); list.add(new Integer(1)); list.add(new Integer(2)); list.add("String"); System.out.println(list); Collections.sort (list); Figura 2.4 Layout Memria aps inicializao System.out.println(list); //criando novo alias } Carro carro2 = carro1; }
Listagem 10.1 List no genrico

Ao executar esta classe gerada a seguinte sada: [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 motivo que o mtodo Collections.sort() invoca o mtodo de comparao - compareTo() da interface Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto Comparable do primeiro objeto, que recebe como argumento o objeto subseqente, este processo se repetir at o fim da coleo. Dessa forma, para nosso exemplo, haver uma comparao entre um objeto Integer e um objeto String, resultando no erro acima. Agora veja a mesma classe utilizando o tipo genrico:

2.3

Membros de Instncia

(atributos) definidas pela classe. Os mtodos definem o comportamento de um public class GenericoDemo { objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da classe. Porm no devemos confundir com a implementao do mtodo, que public static void isto main(String args[]) { compartilhada por todas as instncias da classe. List<Integer> list = new ArrayList<Integer>(); Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que System. mostrarout um comportamento particular invocando uma .println(list); sort (list); operao apropriada Collections. que foi definida no objeto. Em Java, isto feito pela System. out .println(list); chamada de um mtodo em um objeto usando o operador binrio "." (ponto), } devendo } especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). Listagem 10.2 Colees e genricos O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

import java.util.*; Cada objeto criado dever ter sua prpria instncia de variveis

2.3.1

list.add(new Integer(1)); list.add(new Integer(2)); Invocao de Mtodos list.add("String");

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

115

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 127

Linguagem de Programao JavaJava Linguagem de Programao


O que acontecer ser um erro de compilao na linha 8, ou seja, o Generics bloqueia os elementos estranhos a lista no permitindo que esta tenha elementos diversos, fora o especificado. Assim voc no ter //atribuindo valor a varivel referncia nenhuma surpresa durante execuo do seu programa. Carro carro1 =a new Carro();
carro1.ano = "2001"; carro1.modelo= "fusca"; The method add(Integer) in the type List<Integer> is not carro1.cor =arguments "prata"; applicable for the (String)

10.3 Percorrendo Collections

H duas maneiras de percorrer colees: 1. usando o lao for-enhanced (ou for-each) 2. ou usando Iteradores

10.3.1 Lao for-each O lao for-each permite voc percorrer uma coleo ou array, nos j o usamos para arrays. Sua sintaxe para colees similar.
for (Object o : collection) System.out.println(o);
Figura 2.4 Layout Memria aps inicializao

//criando novo alias Veja exemplo, Carro carro2 = carro1; import java.util.*;
public class PercorreArrayList { public static void main(String[] args) { ArrayList<String> lista1 = new ArrayList<String>(); ArrayList<Integer> lista2 = new ArrayList<Integer>(); lista1.add("a"); lista1.add("b"); lista1.add("c"); lista2.add(100);//auto-box lista2.add(110);//auto-box lista2.add(111);//auto-box // imprime lista1 for (String e : lista1) System.out.println(e); Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto // imprime lista2 for (Integer e : lista2) System.out.println(e); de Instncia

Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem Listagem 10.3 Enhanced For objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da o seu estado. classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm 10.3.2 Interface por Iterator compartilhada todas as instncias da classe. o mesmo estado se de suas Interface muito importante a interface Iterator, que permite navegar (iterar) pelos vrios elementos uma coleo. variveis membro tm os 2.3.1 Invocao de Mtodos mesmos valores. Objetos interface se comunicam pela troca de public Iterator<E> { mensagens, isto significa que um objeto pode ter que mostrar particular invocando //retorna trueum se comportamento houver mais elementos a iterar uma boolean hasNext(); operao apropriada que foi definida no objeto. Em Java, isto feito pela //retorna o um proximo na proxima iteracao chamada de um mtodo em objetoelemento usando o operador binrio "." (ponto), E next(); devendo especificar a mensagem completa: o objeto que o recebedor da //remove o ultimo elemento retornado pela iteracao mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). void remove(); O mtodo } invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 116
}
Todos os direitos reservados a 3Way Networks

2.3

Membros
}

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 129

Linguagem de Programao JavaJava Linguagem de Programao


A interface Iterator bastante simples, uma referncia a Iterator obtido da prpria coleo, que implementa Iterator, atravs do mtodo iterator() e depois podemos navegar pela coleo por meio dos mtodos //atribuindo valor a varivel referncia hasNext() , next()carro1 e remove() Carro = ;new Carro();
carro1.ano = "2001"; carro1.modelo= "fusca"; Veja exemplo : carro1.cor = "prata";
import java.util.*; public class PercorreArrayList2 { public static void main(String[] args) { ArrayList<String> lista1 = new ArrayList<String>(); ArrayList<Integer> lista2 = new ArrayList<Integer>(); lista1.add("a"); lista1.add("b"); lista1.add("c"); lista2.add(100);//auto-box lista2.add(110);//auto-box lista2.add(111);//auto-box //referncia a implementao de Iterator em ArrayList //criando novo aliasi1 = lista1.iterator(); Iterator Iterator i2 = lista2.iterator(); Carro carro2 = carro1; // imprime lista1 while (i1.hasNext()) { System.out.println(i1.next()); } // imprime lista2 while (i2.hasNext()) { System.out.println(i2.next()); } } }
Listagem 10.4 Iteradores de Colees

Figura 2.4 Layout Memria aps inicializao

Iterator uma interface que permite navegar (iterar) pelos vrios elementos de uma coleo.

Implementa listas de dados, onde os elementos (repetidos ou no) esto ordenados pelo ndice e no classificado.

10.4 Usando Listas Interface List

Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis 10.4.1 LinkedList (atributos) definidas pela classe. Os mtodos definem o comportamento de um implementao de uma lista encadeada. A classe LinkedList contm mtodos em que um permitem listas objetoque constituem objeto. Isto sejam importante, pois pilhas denota queou um mtodo pertence a cada objeto dauma insero encadeadas usadas como , filas algum outra estrutura de dados. Tem deleo muito oe seu estado . classe. Porm no devemos confundir isto com a implementao do mtodo, que mais rpidos que ArrayList e Vector . Dois objetos distintos tm compartilhada todas as instncias da classe. O cdigopor a seguir mostra como usar a classe LinkedList e vrios dos mtodos definidos em Collection:
import java.util.*; 2.3.1 Invocao de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um public class LinkedListDemo { objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada foi definida no objeto. Em Java, isto publicque static void main(String args[]) { feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), new LinkedList<Integer>(); devendo especificar aLinkedList<Integer> mensagem completa: olista objeto= que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). //adiciona elementos a lista O mtodo invocado no recebedor pode tambm enviar informaes de volta ao lista.add(new Integer(1)); objeto chamador atravs de um valor retorno. O mtodo chamado deve ser lista.add( new de Integer(2)); um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

2.3

Membros de Instncia

o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

117

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 130

Linguagem de Programao JavaJava Linguagem de Programao


lista.add(new Integer(3)); lista.add(new Integer(1)); //atribuindo valor a varivel referncia 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)); //imprime elementos com toString() de AbstractColletion System.out.println(lista); //imprime primeiro e ultimo elemento da lista System.out.println(lista.getFirst() + ", " + lista.getLast()); //retorna elemento por indice, comeca em 0 System.out.println(lista.get(2) + ", " + lista.get(3)); //remove primeiro elemento da lista lista.removeFirst(); Figura 2.4 Layout Memria aps inicializao //remove ultimo elemento da lista lista.removeLast(); //criando novo alias //imprime elementos com toString() de AbstractColletion Carro carro2 = carro1; System.out.println(lista); //auto-unboxing e remove elemento da lista lista.remove(new Integer(1)); //imprime elementos com toString() de AbstractColletion System.out.println(lista); //remove terceiro elemento da lista lista.remove(2); //imprime elementos com toString() de AbstractColletion System.out.println(lista); } }
Listagem 10.5 ListIterator

Vector apropriado para uso em multithread, porm mais lento que ArrayList. O ArrayList uma verso de um array redimensionvelFigura . Usa2.5 mtodos no-sincronizados, seu para acesso aleatrio Layout Memria duas variveis referncia o mesmo objeto rpido, prefira esta a LinkedList se precisar de iterao rpida que pouca insero ou remoo aleatria. Exemplo:

10.5 ArrayList

Cada objeto dever ter {sua prpria instncia de variveis public classcriado ArrayListDemo Os valores das variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem public static void que main(String { cada objeto da objeto. Isto importante, pois denota um mtodo args[]) pertence a o seu estado. classe. Porm no devemos confundir isto com a implementao do mtodo, que ArrayList<String> al = new ArrayList<String>(2); Dois objetos distintos tm compartilhada por todas as instncias da classe. + ", tamanho = " + al.size()); System. out.println(al 2.3.1
al.add("R"); variveis membro tm os al.add("U"); Invocao de Mtodos al.add("O"); mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um System.out.println(al + ", tamanho = " + al.size());

2.3

Membros de Instncia

import java.util.*;

o mesmo estado se suas

objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada al.remove("U"); que foi definida no objeto. Em Java, isto feito pela System. out .println(al ", tamanho = "." " + al.size()); chamada de um mtodo em um objeto usando o+operador binrio (ponto) , ListIterator li = al.listIterator(); devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). while (li.hasNext()) O mtodo invocado no recebedor pode tambm enviar informaes de volta ao System. out .println(li.next()); objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

www.3way.com.br

118

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 131

Linguagem de Programao JavaJava Linguagem de Programao


Object a[] = al.toArray();

//atribuindo valor for (int a i varivel = 0; i < referncia a.length; i++) Carro carro1 = new Carro(); System.out.println(a[i]); carro1.ano = "2001"; } carro1.modelo= "fusca"; } carro1.cor = "prata";

Listagem 10.6 Usando ArrayList

10.5.1 Teste de Desempenho Um exemplo para testar o desempenho das classes na insero e busca. No se deixe levar pelos resultados ao escolher uma implementao, siga as recomendaes de uso da documentao API:
import java.util.*; public class TestaEficienciaCollection { public void mensurar(Collection<Integer> c,int size){ long inicio=0; Figura 2.4 Layout Memria aps inicializao long fim=0; //criando novo alias double tempo=0.0; Carro carro2 = carro1; System.out.println("Iniciando teste ..."+c.getClass().getName()); System.out.println("Inserindo " +size+ " elementos..."); inicio = System.currentTimeMillis(); for (int i = 0; i < size; i++) { c.add(Math.i); } 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 Memria duas variveis referncia para o mesmo objeto

= System. (); Cada objeto fim criado dever currentTimeMillis ter sua prpria instncia de variveis tempo = (fim inicio) / 1000.0; (atributos) definidas pela classe. Os mtodos definem o comportamento de um System.out.println("Tempo : " + tempo); objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da } classe. Porm no devemos confundir isto com a implementao do mtodo, que public static void main(String[] args) { compartilhada por todas as instncias da classe.

objeto pode ter que Vector<Integer> mostrar um comportamento particular invocando uma c3 = new Vector<Integer>(); operao apropriada teste.mensurar(c1,1000); que foi definida no objeto. Em Java, isto feito pela teste.mensurar(c2,1000); chamada de um mtodo em um objeto usando o operador binrio "." (ponto), teste.mensurar(c3, 1000); devendo especificar a mensagem completa: o objeto que o recebedor da } mensagem, } o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo invocado no recebedor pode tambm enviar informaes Listagem 10.7 Teste de perfomance de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas TestaEficienciaCollection teste= new TestaEficienciaCollection() variveis membro tm os 2.3.1 Invocao de Mtodos 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>();

2.3

Membros de Instncia

for (int i = 0; i < size; i++) { c.contains(i); }

www.3way.com.br

119

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 132

Linguagem de Programao JavaJava Linguagem de Programao

Implementao de conjuntos que noreferncia permite elementos duplicados e no h preocupao com //atribuindo valor a varivel CarroO carro1 = new e Carro(); ordenamento. mtodo equals() hashCode() usado para saber se dois objetos so idnticos.
carro1.ano = "2001"; carro1.modelo= "fusca"; 10.6.1 HashSet carro1.cor = implementao "prata"; O HashSet uma da interface Set que usa uma tabela hash (espalhamento). O uso de uma tabela hash permite buscar os elementos de forma fcil e rpida. A implementao usa o cdigo de hash do objeto, chama o mtodo hashCode(), que determina onde um objeto ser ou est armazenado. Usamos HashSet quando quiser um conjunto com elementos nicos e quando a ordem dos elementos na iterao for irrelevante. Exemplo:
import java.util.*; public class HashSetDemo { public static void main(String args[]) { HashSet<String> hs = new HashSet<String>(5); Figura 2.4 Layout Memria aps inicializao System.out.println(hs.add("one")); System. out.println(hs.add("two")); //criando novo alias System. out.println(hs.add("one")); Carro carro2 = carro1; System.out.println(hs.add("three")); System.out.println(hs.add("four")); System.out.println(hs.add("five")); System.out.println(hs); } }
Listagem 10.8 Genric HashSet

10.6 Usando Conjuntos Interface Set

10.6.2 TreeSet O TreeSet uma implementao da interface Set que usa uma rvore de balanceamento. Esta classe assegura que o conjunto ser organizado em uma ordem ascendente, na regra de comparao padro. Veja o exemplo:
Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto import java.util.*;

public class TreeSetDemo {

Cada objeto TreeSet<String> criado dever ter ts sua instncia de variveis = prpria new TreeSet<String>(); ts.add("um"); (atributos) definidas pela classe. Os mtodos definem o comportamento de um ts.add("dois"); objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da ts.add("tres"); classe. Porm no devemos confundir isto com a implementao do mtodo, que ts.add("quatro"); compartilhada por todas as instncias da classe. ts.add("10");
System.out.println(ts);

2.3

Membros de Instncia public static void

main(String args[]) {

} de Mtodos 2.3.1 Invocao } Objetos se comunicam pela troca de mensagens, isto significa que um Listagem 10.9 TreeSet objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela 10.7 Usando Interface Map chamada de um Mapas mtodoem um objeto usando o operador binrio "." (ponto), Implementa mapeamentos entre chaves no-repetidas valores. Um devendo especificar a mensagem completa: o objeto que oa recebedor da mapa composto de uma associao entre objetoachave (Key) a um objeto valor (Value mensagem, o mtodo ser invocado e os argumentos para).o mtodo (se houver). O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 120
Todos os direitos reservados a 3Way Networks

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 133

Linguagem de Programao JavaJava Linguagem de Programao


10.7.1 HashMap Implementao de Mapa , modela mapas no ordenados, sem classificao e com mtodos no//atribuindo valor varivel referncia sincronizados. implementao o cdigo de hash do objeto, chama o mtodo hashCode(), que determina CarroA carro1 = new usa Carro(); onde um objeto ser ou est Veja exemplo: carro1.ano = armazenado. "2001";
carro1.modelo= "fusca"; carro1.cor = "prata"; import java.util.HashMap;
public class HashMapDemo { public static void main(String[] args) { HashMap<Integer, String> hm = new HashMap<Integer, String>(); hm.put(1, "um"); hm.put(2, "dois"); hm.put(3, "tres"); hm.put(4, "quatro"); hm.put(5, "10"); System.out.println(hm.size()); System.out.println(hm); Figura 2.4 Layout Memria aps inicializao System.out.println(hm.get( new Integer(3))); System. out .println(hm.get(0)); //criando novo alias Carro } carro2 = carro1; }
Listagem 10.10 - HashMap

Vimos anteriormente que as listas so percorridas de maneira pr determinada de acordo com a incluso dos itens. Mas muitas vezes queremos percorrer a nossa lista de maneira ordenada, classificando os elementos de acordo com nossa necessidade. A classe Collections (com s no final) nos permite ordenar colees, atravs do um mtodo esttico sort, que recebe um List como argumento e o ordena em sua ordem natural (nmeros = crescente, string = alfabtica). Exemplo:
import java.util.*; public class OrdenandoCollection { public static void main(String[] args) {
Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

10.8 Classificando Colees: Collections.sort

Cada objeto lista.add("Goinia"); criado dever ter sua prpria instncia de variveis lista.add("So Paulo"); (atributos) definidas pela classe. Os mtodos definem o comportamento de um lista.add("Aracaj"); objeto. Isto importante, pois denota um mtodo pertence a cada objeto da // lista sem que ordenao System. out.println(lista); classe. Porm no devemos confundir isto com a implementao do mtodo, que Collections. sort (lista); compartilhada por todas as instncias da classe. 2.3.1 Invocao } de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um } Listagem 10.11 Manipulando colees objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), Como resultado da execuo teremos: devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). [Goinia, So Paulo, Aracaj] O mtodo invocado no recebedor pode tambm enviar informaes de volta ao [Aracaj, Goinia, So Paulo] objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

2.3

Membros de Instncia

List<String> lista = new ArrayList<String>();

// lista ordenada System.out.println(lista);

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

121

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 134

Linguagem de Programao JavaJava Linguagem de Programao


O mtodo sort() utiliza a implementao do mtodo compareTo(), da interface Comparable, implementado pela classe valor String, para classificar um List ou arrays de objetos String. Se quisermos fazer com que //atribuindo a varivel referncia os elementos da nossa coleo ordenados devemos implementar a interface java.lang.Comparable, e Carro carro1 = new sejam Carro(); fornecer carro1.ano uma implementao para o mtodo int compareTo(Object), do objeto que ser colocado na coleo. Vejo = "2001"; carro1.modelo= "fusca"; o modo como invocamos o mtodo:
carro1.cor = "prata";

int x = esteObjeto.compareTo(outroObjeto); O mtodo compereTo() retorna um int que deve ter as seguintes caractersticas:  zero se esteObjeto for igual a outroObjeto.  negativo se esteObjeto for menor que outroObjeto.  positivo se esteObjeto for maior que outroObjeto. Veja exemplo de comparao entre objetos Funcionrios baseado na diferena das datas de contratao, ordenado pelo tempo de casa em ordem decrescente.
import java.util.*;
Figura 2.4 Layout Memria aps inicializao

public class Funcionario implements Comparable<Funcionario> { //criando novo alias Carro carro2 = carro1; private double salario; private Date dataContrato; private String nome; private String cargo = "indefinido"; public Funcionario() { } public Funcionario(String nome, double salario, Date dataContrato) { this.salario = salario; this.dataContrato = dataContrato; this.nome = nome; } public Date getDataContrato() { return dataContrato; Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto } public int compareTo(Funcionario o) { Calendar esteFuncionarioData = Calendar. getInstance(); Membros de Instncia esteFuncionarioData.setTime(dataContrato);

Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis Calendar outroFuncionarioData = Calendar.de getInstance (); (atributos) definidas pela classe. Os mtodos definem o comportamento um em um objeto constituem outroFuncionarioData.setTime(o.getDataContrato()); objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da o seu estado. classe. Porm no devemos isto com a implementao do mtodo, que long confundir esteFuncionarioTempo= esteFuncionarioData.getTimeInMillis(); Dois objetos distintos tm compartilhada por todas asoutroFuncionnarioTempo= instncias da classe. long outroFuncionarioData.getTimeInMillis();

2.3

objeto pode ter que mostrar um comportamento particular invocando uma public que String toString() { operao apropriada foi definida no objeto. Em Java, isto feito pela Calendar = Calendar. getInstance (); chamada de um mtodo em um cal objeto usando o operador binrio "." (ponto), cal.setTime(DataContrato); devendo especificar a mensagem completa: o objeto que o recebedor da return nome + " desde " mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). + String. format("%td-%tm-%tY", cal, cal, cal); O mtodo invocado no recebedor pode tambm enviar informaes de volta ao } objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

o mesmo estado se suas variveis return esteFuncionarioTempo > outroFuncionnarioTempo ? 1 membro tm os 2.3.1 Invocao de Mtodos : esteFuncionarioTempo > outroFuncionnarioTempo mesmos ? 0 : -1; valores. Objetos se comunicam pela troca de mensagens, isto significa que um
}

www.3way.com.br

122

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 135

Linguagem de de Programao Java Linguagem Programao Java


public static void main(String[] args) { List<Funcionario> funcList = new ArrayList<Funcionario>(); //atribuindo valor a dataContrato varivel referncia Calendar = Calendar.getInstance(); Carro carro1 = new Carro(); carro1.ano dataContrato.set(2005, = "2001"; 0, 02); carro1.modelo= "fusca"; new Funcionario("Haroldo",100,dataContrato.getTime())); funcList.add( carro1.cor = "prata"; dataContrato.set(2000, 1, 02); funcList.add(new Funcionario("Aroldo",2000,dataContrato.getTime())); 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())); //imprime lista pela ordem de insero System.out.println(funcList); Collections.sort(funcList);
Figura 2.4 Layout Memria inicializao de Funcionario //imprime lista pela ordem de aps compareTo System. out.println(funcList); //criando novo alias Carro } carro2 = carro1; }
Listagem 10.12 Permitindo comparaes de Objetos

Esta tipo de comparao sempre ocorre entre os objetos do mesmo tipo armazenados na lista, porm h outra maneira. Podemos criar classes que implementam a interface Comparator e chamar a sobrecarga do mtodo sort(List o, Comparator c), assim o mtodo sort() ir empregar o objeto que implementa Comparator ao invs de chamar compareTo() do objeto. Siga instrues do laboratrio e tome cuidado com o tempo de execuo, sempre recorra ao instrutor em caso de dvida, nunca deixe uma dvida sem reposta

10.9 Fazer Laboratrio 10

10.10

Escreva, compile e execute todas listagens de cdigo apresentadas neste captulo.

Exerccio

Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

Mesmo sem conhecer interface grfica com o usurio ou GUI (Graphical Cada objeto criado dever ter sua prpria instncia de variveis User Interface) possvel criar uma grande variedade de diferentes projetos. (atributos) definidas pela classe. Os mtodos definem o comportamento de um Entretanto, estas aplicaes no teriam grandes chances de serem agradveis aos objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da usurios, to acostumados aos ambientes grficos como Windows, Solaris e Linux. classe. Porm no devemos confundir isto com a implementao do mtodo, que Ter um projeto desenvolvido em GUI afeta o uso de sua aplicao pois compartilhada por todas as instncias daexperincia classe. resulta em facilidade de uso e melhor para os usurios de seus aplicativos. Java fornece ferramentas como Abstract Window Toolkit (AWT) e 2.3.1 para Invocao de Mtodos Swing desenvolver aplicaes GUI interativas. Objetos se comunicam pela troca de mensagens, isto significa que um objeto ter que mostrar umToolkit) comportamento particular invocando uma 11.1 pode AWT (Abstract Window vs. Swing operaoA apropriada que foi definida no objeto. Em Java, istode Java feitoSDK pela JFC (Java Foundation Classes) uma importante parte . chamada de um mtodo em um objeto usando o operador binrio "." (ponto) Refere-se a uma coleo de APIs que simplificam o desenvolvimento de aplicaes , devendo especificarbasicamente a mensagem objeto AWT que e Swing o recebedor da Java GUI. Consistem emcompleta: cinco APIs o incluindo . As outras mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). trs APIs so Java2D, Accessibility e Drag and Drop. Todas essas APIs do suporte O mtodo invocado no recebedor pode tambm enviar de volta ao aos desenvolvedores na criao e implementao de informaes aplicaes visualmente objeto chamador atravs de um valor de retorno . O mtodo chamado deve ser destacadas. um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

11 2.3

Construindo Interfaces Grficas com AWT/Swing Membros de Instncia

Os valores das variveis Projeto desenvolvido em umafeta objeto constituem em GUI o uso de o seu estado sua aplicao pois . Dois objetos distintos tm resulta em facilidade ode mesmo estado se suas uso e melhor experincia para ostm os variveis membro usurios mesmos . valores.

www.3way.com.br

123

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 136

Linguagem de Programao JavaJava Linguagem de Programao


Ambas AWT e Swing dispem de componentes GUI que podem ser usadas na criao de aplicaes Java e Applets. //atribuindo Diferentemente de alguns AWT que usam cdigo nativo, a API grfica de seu sistema valor a componentes varivel referncia operacional. Swing fornece uma Carro(); implementao independente de plataforma que assegura que aplicaes Carro carro1 = new desenvolvidas em diferentes plataformas tenham a mesma aparncia. AWT, entretanto, assegura que o look and carro1.ano = "2001"; carro1.modelo= "fusca"; feel (a aparncia) de uma aplicao executada em duas mquinas diferentes sejam compatveis. A API Swing carro1.cor = "prata"; construda sobre um nmero de APIs que implementa vrias partes da AWT. Como resultado, componentes AWT ainda podem ser usados com componentes Swing, mas no recomendado. Voc pode ver uma demonstrao de AWT e Swing com exemplos do JDK, veja em:

Swing escrito inteiramente em Java.

> $JAVA_HOME/demo/jfc/SwingSet2/ > java -jar SwingSet2.jar SwingSet2

Apesar de no ser mais to utilizada a AWT, ainda utilizada indiretamente por Swing, como gerenciadores de layouts e classes para controle de eventos. Assim apresentamos alguns componentes para que voc se Figura 2.4 Layout Memria aps inicializao familiarize com o processo de desenvolvimento e v //criando novo alias gradualmente aprendendo a utilizar a JFC.
Carro carro2 = carro1;

11.2 Componentes GUI AWT

Java fornece ferramentas como Abstract Window Toolkit (AWT) e Swing para desenvolver aplicaes GUI interativas.

11.2.1 Fundamental Window Classes No desenvolvimento de aplicaes GUI, os componentes como os botes ou campos de texto so localizados em containers. Essa uma lista de importantes classes containers fornecidas pela AWT. Classe AWT Component Container Panel Window Dialog Descrio Uma classe abstrata para objetos que podem ser exibidos no console interagir com o usurio. A raiz de todas as outras classes AWT. Uma subclasse abstrata da classe Component. Um componente que pode conter outros componentes. Herda a classe Container. Uma rea que pode ser colocada em um Frame, Dialog ou Figura 2.5 Layout duas variveis referncia para o mesmo objeto Window. Superclasse da Memria classe Applet.

Uma janela contendo a barra de ttulo e o boto de fechar, utilizada para criar janelas para Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis comunicao com o usurio. (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem Frame Isto importante, Uma janela completa com ttulo,pertence barra de menu, cantos redimensionveis. objeto. pois denota que umum mtodo a cadaborda, objetoeda o seu estado. Possui quatro construtores, deles possuemdo as mtodo, seguintesque assinaturas: classe. Porm no devemos confundir isto comdois a implementao Dois objetos distintos tm compartilhada porFrame() todas as instncias da classe. o mesmo estado se suas Frame(String title) variveis membro tm os Tabela 11.1: Classes Container AWT 2.3.1 Invocao de Mtodos mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que o mostrar um comportamento particular invocando uma Para configurar tamanho da janela, podemos utilizar o mtodo setSize() , do seguinte modo: operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um mtodo em width, um objeto usando o operador binrio "." (ponto), void setSize( int int height) devendo especificar a mensagem completa: o objeto que o recebedor da Reconfigura o tamanho da janela para o width(largura) height(altura) fornecidos como argumentos. mensagem, o mtodo a ser invocado e os argumentos para o e mtodo (se houver). O mtodo invocado no recebedor pode tambm enviar informaes de volta ao void setSize(Dimension d) objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 124
Todos os direitos reservados a 3Way Networks

2.3

Membros de Instncia

Tambm herda a classe Container. Uma janela top-level, que significa que ela no pode ser contida em nenhum outro objeto. No tem bordas ou barra de menu.

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 137

Linguagem de Programao JavaJava Linguagem de Programao


Reconfigura o tamanho da janela para os atributos d.width e d.height baseado em um objeto instanciado da classe//atribuindo Dimension especificado argumento. valor como a varivel referncia Por padro uma janela no visvel a no ser que seja configurada a sua visibilidade para true. Esta a Carro carro1 = new Carro(); sintaxe para o mtodo setVisible() : carro1.ano = "2001";
carro1.modelo= "fusca"; carro1.cor = "prata"; void setVisible( boolean b)

Ao criar aplicaes GUI, o objeto Frame o mais comumente utilizado. Aqui est um exemplo de como criar uma aplicao dessas:
import java.awt.*; public class FrameDemo extends Frame { public static void main(String args[]) { FrameDemo sf = new FrameDemo(); sf.setSize(100, 100); // Tente removendo esta linha sf.setVisible(true); // Tente removendo esta linha } Figura 2.4 Layout Memria aps inicializao

} //criando novo alias Listagem 11.1 Criando uma Janela com AWT Frame Carro carro2 = carro1;

Este o resultado esperado pela execuo da classe FrameDemo:

Figura 11.1: Executando Frame AWT em Ambiente Linux/Gnome 2

Note que o boto de fechar ainda no funciona porque nenhum mecanismo de suporte a eventos foi adicionado a classe at o momento. sobre suporte a eventos prximos FiguraConheceremos 2.5 Layout Memria duas variveis referncia para nos o mesmo objeto tpicos. 11.2.2 Graphics Vrios mtodos so encontrados na classe Graphics. Aqui est a lista de alguns desses mtodos. 2.3 Membros de grficos Instncia

Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis drawLine() definidas pela classe. Os mtodos drawPolyline() (atributos) definem o comportamento setColor() de um em um objeto constituem objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da fillRect() drawPolygon() getFont() o seu estado. classe. Porm no devemos confundir isto com a implementao do mtodo, que drawRect() fillPolygon() setFont() Dois objetos distintos tm compartilhada por todas as instncias da classe. o mesmo estado se suas clearRect() getColor() drawString() variveis membro tm os 2.3.1 Invocao de Mtodos Tabela 11.2: Alguns mtodos da classe Graphics mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma Relacionada a essa est a classe , que tem trs construtores. operao apropriada queclasse foi definida no Color objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), Formatodo Construtor devendo especificar a mensagem completa: o objeto Descrio que o recebedor da Color(int r, int g, int b) a ser invocado e os argumentos para Valor de 0a 255 mensagem, o mtodo o inteiro mtodo (se houver). O mtodo invocado no recebedor pode tambm enviar informaes de volta ao Color(float r, float g, float b) Valor decimal de 0.0 a 1.0. objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 125
Todos os direitos reservados a 3Way Networks

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 138

Linguagem de Programao JavaJava Linguagem de Programao


Color(int rgbValue) Valor varivel de 0 a 224-1 (preto a branco). Vermelho: bits 16-23 //atribuindo valor a varivel referncia Carro carro1 = new Carro(); Verde: bits 8-15 carro1.ano = "2001"; Azul: bits 0-7
carro1.modelo= "fusca"; carro1.cor = "prata";
Tabela 11.3: Construtores Color

Aqui est uma classe demonstrando a utilizao de alguns mtodos da classe Graphics:
import java.awt.*; public class GraphicsPanelDemo extends Panel { GraphicsPanelDemo () { // Constante na classe Color setBackground(Color.WHITE); } public void paint(Graphics g) { // vermelho //criando novo alias g.setColor( new Color(255, 0, 0)); Carro carro2 = carro1; 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 static void main(String args[]) { Frame f = new Frame("Testando Graphics/Panel"); GraphicsPanelDemo painel = new GraphicsPanelDemo(); f.add(painel); f.setSize(600, 300); f.setVisible(true); } }
Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto
Listagem 11.2 - Desenhando com Graphics no AWT Panel

Figura 2.4 Layout Memria aps inicializao

Para um panel se tornar dever visvel, ele deve ser colocado em uma janela visvel como um frame. Executando o Cada objeto criado ter sua prpria instncia de variveis Os valores das variveis cdigo apresentado temos o seguinte resultado esperado: (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da o seu estado. classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm compartilhada por todas as instncias da classe.

2.3

Membros de Instncia

2.3.1 Invocao de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). Figura 11.2: Executando GraphicsPanel O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

126

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 139

Linguagem de Programao JavaJava Linguagem de Programao


11.2.3 Mais Componentes AWT O exemplo apresenta os componentes controles AWT. Controles so componentes como botes ou //atribuindo valor a varivel de referncia campos textos permitem ao usurio interagir com a aplicao GUI. Essas so todas as subclasses da classe Carroque carro1 = new Carro(); Component . carro1.ano = "2001";
carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 11.3 - Executando ControlComponentDemo

//criando novo alias Carro = carro1; importcarro2 java.awt.*;

Cdigo que gerou a Figura 11.3:

Figura 2.4 Layout Memria aps inicializao

public class ControlComponentDemo extends Frame { 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 Rotulo")); Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto add(new Label("TextField ->")); add(new TextField()); add(new Label("CheckBox ->")); add( new Checkbox("chk1", true)); 2.3 Membros de Instncia add( newdever Label("CheckBoxGroup ->")); de variveis Cada objeto criado ter sua prpria instncia CheckboxGroup cbg = new CheckboxGroup(); (atributos) definidas pela classe. Os mtodos definem1", o comportamento add( new Checkbox("radios cbg, true));de um objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da add(new Label("List ->")); List confundir list = new List(3, false); classe. Porm no devemos isto com a implementao do mtodo, que list.add("item 1"); compartilhada por todas as instncias da classe. list.add("item 2"); add(list); 2.3.1 Invocao de Mtodos add(new Label("Choice ->")); Objetos se comunicam pela troca mensagens, isto significa que um Choice chooser = de new Choice(); 1"); particular invocando uma objeto pode ter que chooser.add("Opo mostrar um comportamento 2"); Em Java, isto feito pela operao apropriada chooser.add("Opo que foi definida no objeto. chooser.add("Opo 3"); chamada de um mtodo em um objeto usando o operador binrio "." (ponto), add(chooser); devendo especificar aadd( mensagem completa: o objeto que o recebedor da new Label("Scrollbar ->")); add( Scrollbar()); mensagem, o mtodo a ser new invocado e os argumentos para o mtodo (se houver). setBackground(Color. WHITE ); informaes de volta ao O mtodo invocado no recebedor pode tambm enviar setVisible(true); objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser }

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

www.3way.com.br

127

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 140

Linguagem de Programao JavaJava Linguagem de Programao


public static void main(String args[]) { new ControlComponentDemo(); //atribuindo valor a varivel referncia } Carro carro1 = new Carro(); } carro1.ano = "2001"; Listagem 11.3 Componentes AWT carro1.modelo= "fusca"; carro1.cor = "prata";

A posio e o tamanho dos componentes em cada Container determinado pelo gerenciador de layout. O gerenciador de layout gerencia a disposio dos componentes no container. Esses so alguns dos gerenciadores de layout includos na JFC.  FlowLayout  BorderLayout  GridLayout  GridBagLayout  CardLayout  BoxLayout O gerenciador de layout pode ser configurado usando o mtodo setLayout() da classe Container. O novo alias mtodo //criando possui a seguinte assinatura:
Carro carro2 = carro1; void setLayout(LayoutManager mgr)
Figura 2.4 Layout Memria aps inicializao

11.3 Gerenciadores de Layout

Caso no seja necessrio utilizar nenhum gerenciador de layout, possvel passar o layout do tipo nulo (NullLayout) como argumento para esse mtodo, ao se fazer isso ser necessrio posicionar todos os elementos manualmente com a utilizao do mtodo setBounds() da classe Component. Este mtodo possui a seguinte assinatura:
public void setBounds(int x, int y, int width, int height)

O mtodo controla a posio baseada nos argumentos x (esquerda) e y (topo), e o tamanho width (largura) e height (altura) especificados. Isso seria bastante difcil e tedioso de programar, principalmente ao se possuir um layout com diversos objetos Component e Container. Teramos de chamar esse mtodo para cada componente, alm de conhecer sua determinada posio em pixels. Sem falar que o resultado da apresentao em Figura 2.5 Layout Memria duas variveisno referncia para o mesmo objeto diferentes ambientes grficos ou resolues de vdeo diferentes pode ser garantido. 11.3.1 O Gerenciador FlowLayout O FlowLayout Instncia o gerenciador padro para a classe Panel e suas subclasses, incluindo a classe Applet. Ele 2.3 Membros de posicionaCada os componentes da esquerda para a direita e instncia de cima para baixo, comeando no canto superior objeto criado dever ter sua prpria de variveis Os valores das variveis esquerdo. Imagine como se utilizasse um editor de textos. assim que o gerenciador funciona. (atributos) definidas pela classe. Os mtodos definem o comportamento de umFlowLayout em um objeto constituem Ele possui trs construtores que so como os listados abaixo: objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da

classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm Construtores FlowLayout compartilhada por todas as instncias da classe. o mesmo estado se suas FlowLayout() Cria um novo objeto FlowLayout com o alinhamento centralizado e 5 unidades de variveis membro tm os 2.3.1 Invocao de Mtodos intervalo horizontal e vertical aplicado aos componentes por padro. mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um FlowLayout(int align) Cria um novo objeto FlowLayout com o alinhamento especificado e o intervalo padro objeto pode ter que mostrar um comportamento particular invocando uma de 5 unidades horizontal e vertical aplicado aos componentes. operao apropriada que foi definida no objeto. Em Java, isto feito pela FlowLayout(int align, Cria novo objeto FlowLayout com o primeiro argumento chamada de um mtodo emum um objeto usando o operador binrio "." (ponto), como o alinhamento int hgap, int vgap) aplicado, o intervalo horizontal hgap e o intervalo vertical devendo especificar a mensagem completa: o objeto que o recebedor davgap aplicado aos componentes. mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver).
Tabelaenviar 11.4 - Construtores FlowLayout O mtodo invocado no recebedor pode tambm informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

o seu estado.

www.3way.com.br

128

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 141

Linguagem de Programao JavaJava Linguagem de Programao


O intervalo se refere ao espaamento entre os componentes e medido em pixels. O argumento alinhamento deve ser um dos seguintes: //atribuindo valor a varivel referncia  FlowLayout.LEFT Carro carro1 = new Carro();  FlowLayout.CENTER carro1.ano = "2001"; carro1.modelo= "fusca";  FlowLayout.RIGHT
carro1.cor = "prata";

Veja exemplo:
import java.awt.*; public class FlowLayoutDemo extends Frame { public static void main(String args[]) { FlowLayoutDemo fld = new FlowLayoutDemo(); fld.setLayout(new FlowLayout(FlowLayout.RIGHT, 10, 10)); fld.add(new Button("ONE")); fld.add(new Button("TWO")); fld.add(new Button("THREE")); Figura 2.4 Layout Memria aps inicializao fld.add(new Button("FOUR")); //criando novo alias fld.add( new Button("FIVE")); Carro carro2 = carro1; fld.setSize(200, 100); fld.setVisible(true); } }
Listagem 11.4 - FlowLayout

O resultado da execuo sobre a plataforma Linux/Gnome apresentado abaixo.

Figura 11.4 - Executando FlowLayoutDemo Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

11.3.2 O Gerenciador BorderLayout 2.3 Membros de Instncia O BorderLayout divide o container em cinco partes north (norte), south (sul), east (leste), west (oeste) e center (centro) Cada componente adicionado uma regio especfica. regies north e valores south espalham-se Cada . objeto criado dever ter suaa prpria instncia de As variveis Os das variveis horizontalmente enquanto que as regies east edefinem west ajustam-se verticalmente A regio centro, por outro lado, (atributos) definidas pela classe. Os mtodos o comportamento de .um em um objeto constituem ajusta-se emambos , horizontalmente e que verticalmente. Esse layout padro para objetos Window, incluindo as objeto. Isto importante, pois denota um mtodo pertence ao cada objeto da o seu estado. subclasses Frame e Dialog . confundir isto com a implementao do mtodo, que classe. Porm no devemos Dois objetos distintos tm compartilhada por todas as instncias da classe. o mesmo estado se suas Construtores BorderLayout variveis membro tm os 2.3.1 Invocao de Mtodos BorderLayout() Cria um novo objeto BorderLayout sem valores. nenhum Objetos se comunicam pela troca de mensagens, isto significaaplicado que um sobre mesmos espaamento os diferentes objeto pode ter que mostrar um comportamento particular invocando uma componentes. operao apropriada que foi definida no objeto. Em Java, isto feito pela BorderLayout(int int em vgap) Cria um novo "." objeto BorderLayout com espaamento chamada de um hgap, mtodo um objeto usando o operador binrio (ponto) , horizontal hgap e vertical vgap aplicado sobre os devendo especificar a mensagem completa: o objeto que o recebedor da diferentescomponentes. mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo invocado no recebedor pode Tabela tambm enviar informaes 11.5 - Construtores BorderLayout de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 129
Todos os direitos reservados a 3Way Networks

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 142

Linguagem de Programao JavaJava Linguagem de Programao


Como no gerenciador FlowLayout, os parmetros hgap e vgap aqui tambm se referem ao espaamento entre os //atribuindo componentes no container. adicionar um componente a uma regio especfica, use o mtodo add() e valor a Para varivel referncia passe dois argumentos: componente a ser adicionado e a regio onde o componente deve ser posicionado. Carro carro1o = new Carro(); Adicionar mais de um componente a um container resulta em exibir apenas o ltimo componente adicionado. A carro1.ano = "2001"; carro1.modelo= "fusca"; lista a seguir apresenta as regies vlidas que so campos predefinidos na classe BorderLayout. carro1.cor = "prata";  BorderLayout.NORTH  BorderLayout.SOUTH  BorderLayout.EAST  BorderLayout.WEST Apenas um  BorderLayout.CENTER Aqui est uma classe demonstrando como a BorderLayout pode ser utilizada:
import java.awt.*; public class BorderLayoutDemo extends Frame { public static void main(String args[]) Figura 2.4 Layout Memria aps{ inicializao

componente pode ser colocado em uma regio.

//criando novo alias BorderLayoutDemo bld = new BorderLayoutDemo(); Carro carro2 = carro1; new BorderLayout(10, 10)); // pode remover bld.setLayout( bld.add(new Button("NORTH"), BorderLayout.NORTH); bld.add(new Button("SOUTH"), BorderLayout.SOUTH); bld.add(new Button("EAST"), BorderLayout.EAST); bld.add(new Button("WEST"), BorderLayout.WEST); bld.add(new Button("CENTER"), BorderLayout.CENTER); //bld.setSize(200, 200); bld.setSize(400, 400);//redimensione bld.setVisible(true); } }
Listagem 11.5 - BorderLayout

A figura mostra o resultado.


Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

Cada objeto criado dever ter sua prpria instncia de variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da classe. Porm no devemos confundir isto com a implementao do mtodo, que compartilhada por todas as instncias da classe.

2.3

Membros de Instncia

2.3.1 Invocao de Mtodos Figura 11.5 - Executando BorderLayoutDemo Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela 11.3.3 O gerenciador GridLayout chamada de um mtodo em um objeto usando o operador binrio "." (ponto), Com o gerenciador GridLayout, componentes tambm so posicionados da esquerda para a direita e de devendo especificar a mensagem objeto que o recebedor da cima para baixo como no gerenciador completa: FlowLayouto . Alm disso, o gerenciador GridLayout divide o container em um mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). nmero de linhas e colunas. Todas essas regies so do mesmo tamanho. Ele sempre ignora o tamanho preferido O mtodo invocado no recebedor pode tambm enviar disponveis informaes de a volta ao do componente. A seguir, so apresentados os construtores para classe GridLayout. objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 130
Todos os direitos reservados a 3Way Networks

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 143

Linguagem de Programao JavaJava Linguagem de Programao


Construtores GridLayout
//atribuindo valor a varivel referncia GridLayout() Cria um novo objeto GridLayout com uma nica linha e uma Carro carro1 = new Carro(); nica coluna por padro. carro1.modelo= GridLayout(int rows, int cols)"fusca"; carro1.cor = "prata"; carro1.ano = "2001";

Cria um novo objeto GridLayout com o nmero especificado de linhas e colunas. Cria um novo objeto GridLayout com o nmero especificado de linhas e colunas. Os espaamentoshorizontalhgap e verticalvgap soaplicadosaoscomponentes.

GridLayout(int rows, int cols, int hgap, int vgap)

Tabela 11.6 - Construtores GridLayout

Vejamos a seguinte classe:


import java.awt.*; public class GridLayoutDemo extends Frame {
Figura 2.4 Layout Memria aps inicializao

public static void main(String args[]) { //criando novo alias GridLayoutDemo gld = new GridLayoutDemo(); Carro carro2 = carro1; gld.setLayout(new GridLayout(2, 3, 4, 4)); gld.add(new Button("ONE")); gld.add(new Button("TWO")); gld.add(new Button("THREE")); gld.add(new Button("FOUR")); gld.add(new Button("FIVE")); gld.setSize(200, 200); gld.setVisible(true); } }
Listagem 11.6 - GridLayout

Esse o resultado da classe (observe o efeito do redimensionamento sobre o frame na segunda figura):
Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

Cada objeto criado dever ter sua prpria instncia de variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da classe. Porm no devemos confundir isto com a implementao do mtodo, que compartilhada por todas as instncias da classe.

2.3

Membros de Instncia

Figura 11.6 - Executando GridLayoutDemo 2.3.1 Invocao de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma 11.3.4 Painis e Layouts Complexos operao apropriada que foi definida no objeto. Em Java, isto feito pela Para layouts mais possvel diferentes gerenciadores de layout com o uso de chamada de criar um mtodo em complexos, um objeto usando o combinar operadoros binrio "." (ponto) , objetos do tipo Panel . Lembre-se que Panel um Container e um Component ao mesmo tempo. possvel inserir devendo especificar a mensagem completa: o objeto que o recebedor da Components em um Panel e adicionar este a uma regio especfica do Container . mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). Observe a tcnica utilizada na classe a seguir: O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 131
Todos os direitos reservados a 3Way Networks

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 144

Linguagem de Programao Java Java Linguagem de Programao


import java.awt.*;

//atribuindo valor a varivel referncia public class CompondoLayouts extends Frame { Carro carro1 = new Carro(); carro1.ano = "2001"; public static void main(String args[]) { carro1.modelo= "fusca"; carro1.cor = "prata"; cl = new CompondoLayouts(); CompondoLayouts Panel panelNorth = new Panel(); Panel panelCenter = new Panel(); Panel panelSouth = new Panel();
/* Painel North */ // Painis usam FlowLayout por padro 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 Layout Memria aps inicializao panelCenter.add( new 2.4 TextField("2nd")); new TextField("3rd")); //criando panelCenter.add( novo alias panelCenter.add( new TextField("4th")); Carro carro2 = carro1; /* 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); /* Adicionando os Panels ao Frame container */ // Frames usam BorderLayout por padro cl.add(panelNorth, BorderLayout.NORTH); cl.add(panelCenter, BorderLayout.CENTER); cl.add(panelSouth, BorderLayout.SOUTH); cl.setSize(300, 300); cl.setVisible(true); } }
Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto Listagem 11.7 Layout Complexos

Cada objeto criado dever ter sua prpria instncia de variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da classe. Porm no devemos confundir isto com a implementao do mtodo, que compartilhada por todas as instncias da classe. 2.3.1 Invocao de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo invocado no recebedor pode tambm enviar informaes de volta ao 11.7.- Executando Layout Complexo deve ser objeto chamador atravs de um valor de Figura retorno O mtodo chamado um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

o resultado da classe: 2.3 Este Membros de Instncia

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

132

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 146

Linguagem de Programao JavaJava Linguagem de Programao

referncia Como o carro1 pacote AWT o pacote Swing fornece classes para criar aplicaes GUI. O pacote encontrado em Carro = ,new Carro(); javax.swing . A diferena principal entre esses dois que o componente Swing escrito inteiramente usando Java enquanto o carro1.ano = "2001"; outro no. Como resultado, projetos GUI escritos utilizando classes do pacote Swing possuem a mesma aparncia mesmo carro1.modelo= "fusca"; quando executado sobre plataformas completamente diferentes. Alm disso, Swing fornece componentes mais interessantes. carro1.cor = "prata"; Os nomes dos componentes de Swing so quase similares aos componentes AWT. Uma diferena bvia a conveno de nomes dos componentes. Basicamente, os nomes dos componentes Swing so 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 JComponent Descrio A classe raiz para todos os componentes Swing, excluindo containers hierarquicamente superiores. Um boto do tipo "pressionar". Corresponde a classe Button no pacote AWT.
Figura 2.4 Layout Memria aps inicializao

11.4 Componentes Swing //atribuindo GUI valor a varivel

JButton

Um item que pode ser marcado ou desmarcado pelo usurio. Corresponde a classe JCheckBox //criando novo alias Carro carro2 = carro1; Checkbox no pacote AWT. JFileChooser Permite ao usurio que selecione um arquivo. Corresponde a classe FileChooser no pacote AWT. Permite a edio de uma nica linha de texto. Corresponde a classe TextField no pacote AWT. Herda e corresponde a classe Frame no pacote AWT, mas as duas so ligeiramente incompatveis em termos de adio de componentes a esse container. preciso pegar o contedo do pane atual antes de adicionar um componente. Herana de um JComponent. uma classe container simples. Corresponde a classe Panel no pacote AWT.
Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

JTextField

JFrame

JPanel

JApplet

Herana da classe Applet no pacote AWT. Tambm ligeiramente incompatvel com a classe Applet em termos de adio de componentes a esse container.

2.3 Membros JOptionPane

Herana da classe Dialog o no pacote AWT. Normalmente utilizado para informar o JDialog (atributos) definidas pela classe. Os mtodos definem comportamento de um em um objeto constituem usurio de alguma coisa oupertence alert-lo para uma entrada. objeto. Isto importante, pois denota que um mtodo a cada objeto da

Cada objeto criado dever ter sua prpria instncia de variveis

de Instncia Herda JComponent. Fornece uma maneira fcil de exibir caixas de dilogo pop-up.

Os valores das variveis

classe. Porm no devemos confundir isto com a implementao do mtodo, que JColorChooser Herda JComponent. Permite ao usurio selecionar uma cor. compartilhada por todas as instncias da classe.

Tabela 11.7 - Alguns componentes Swing 2.3.1 Invocao de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um a lista completa de componentes Swing, por favor recorra documentao API. objeto Para pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela 11.4.1 Configurando Containers JFrame e JApplet chamada de um mtodo um objeto usandocomo o operador binrio (ponto) Como mencionado, em os containers top-level o JFrame e o "." JApplet no ,pacote Swing so ligeiramente devendo especificar a mensagem completa: o termos objeto de o componentes recebedor da incompatveis com seus correspondentes AWT. Isso em deque adio ao container. Ao invs de adicionar mensagem,um o mtodo a ser os argumentos para o mtodo (seprimeiro houver). diretamente componente aoinvocado container e como nos containers AWT , necessrio pegar o contedo do ContentPane do container.invocado Para fazer isso utiliza-se o mtodo getContentPane() do container: de volta ao O mtodo no recebedor pode tambm enviar informaes objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 133
Todos os direitos reservados a 3Way Networks

o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 147

Linguagem de Programao JavaJava Linguagem de Programao


import javax.swing.*; import java.awt.*; //atribuindo valor a varivel referncia Carro carro1 new Carro(); public class = 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 Aplicao 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); } public static void main(String args[]) { new SwingDemo(); } } //criando novo alias Carro carro2 = carro1;
Listagem 11.8 - JFrame

Figura 2.4 Layout Memria aps inicializao

Note que o pacote java.awt ainda importado porque os gerenciadores de layout em uso so definidos neste pacote. Aqui est um resultado demonstrativo:

Figura 11.8 - Executando SwingDemo

11.5 Manipulao de Eventos

Os componentes Swing so construdos com base noreferncia padropara de oprojeto denominado Model Delegate Figura 2.5 Layout Memria duas variveis mesmo objeto (Modelo de Delegao). Este padro descreve o modo como sua classe pode responder a uma interao do usurio. Para compreender o modelo, devemos perceber a colaborao entre trs componentes: 1. Event Source (Gerador Evento) - O event source de refere-se ao Cada objeto criado dever de ter sua prpria instncia variveis componente da interface que origina o evento. Por exemplo, se o (atributos) definidas pela classe. Os mtodos definem o comportamento de um usurio pressiona um boto, o event source neste caso o boto. objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da classe. Porm no devemos confundir isto com a implementao do mtodo, que 2. Event Listener/Handler (Monitor de Eventos/Manipulador) - O event compartilhada por todas as instncias da classe. listener recebe informaes de eventos e processa as interaes do usurio. Quando um boto pressionado, o event listener pode trat2.3.1 Invocao de Mtodos lo exibindo uma informao til ao usurio. Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando 3. Event Object (Objeto Evento) - Quando um evento ocorre uma (por operao apropriada que foi definida no objeto. Em Java, isto feito pela exemplo, quando o usurio interage com um componente da interface chamada de um mtodo umde objeto usando o operador binrio "." (ponto) , grfica), um em objeto evento criado. Este objeto contm todas as devendo especificar a mensagem completa: o evento objeto gerado. que oAs recebedor da informaes necessrias sobre o informaes mensagem, o mtodo invocado e os argumentos para do o mtodo incluem a o ser tipo de evento, digamos, o clique mouse.(se Hhouver). diversas O mtodo invocado pode tambm enviar informaes de volta Um ao classes no de recebedor evento para diferentes categorias de aes do usurio. objeto chamador atravs de um valor de retorno . O mtodo chamado deve ser objeto de evento tem o tipo de dado de uma dessas classes. um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

2.3

Membros de Instncia

Os valores das variveis emcomponentes um objeto constituem Os Swing o seu estado tem uma interao .do Dois objetos distintos usurio atravs de tm o mesmo estado se suas eventos gerados pelos componentes atravs variveis membro tm os de aces do usurio mesmos valores. com a aplicao..

www.3way.com.br

134

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 148

Linguagem de Programao JavaJava Linguagem de Programao

Aqui est representado o modelo de delegao de eventos: //atribuindo valor a varivel referncia Carro carro1 = new Carro(); carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 11.9 - Modelo de Delegao de Eventos

Inicialmente, um listener dever ser registrado pelo event source. Assim ele poder receber informaes novo alias no event source. Somente um listener registrado poder receber notificaes sobre os //criando eventos quando ocorrerem Carro carro2 = carro1; dos eventos. Uma vez registrado, um listener simplesmente aguarda at que ocorra um evento. Quando alguma coisa acontece no event source, um objeto event, que descreve o evento, criado. O evento ento disparado pelo gerador para os listener registrados. Quando o listener recebe um objeto event (ou seja, uma notificao) de um event source, ele executa sua funo. Ele decifra a notificao e processa o evento ocorrido. 11.5.1 Registrando Classes Ouvintes (Listeners) O event source registra um listener atravs dos mtodos add<Tipo>Listener.
void add<Tipo>Listener(<Tipo>Listener listenerObj)

Figura 2.4 Layout Memria aps inicializao

<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 recepo de notificaes de eventos. Um listener registrado pode tambm ser removido atravs do mtodo remove<Tipo>Listener.
void remove<Tipo>Listener(<Tipo>Listener listenerObj)
Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

11.5.2 Classes Event 2.3 Membros de Instncia Um EventObject tem uma classe de evento que indica seu tipo. Na raiz da hierarquia das classes Event Cada EventObject objeto criado ter sua prpria instncia variveis Os valores das variveis esto a classe , que dever encontrada no pacote java.util . Umade subclasse imediata da classe EventObject (atributos) definidas. pela classe. Os mtodos definem ono comportamento de um a raiz a classe AWTEvent A classe AWTEvent est declarada pacote java.awt . Ela de todos os constituem eventos em um objeto objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da baseados em AWT. A seguir temos algumas das classes de evento AWT: o seu estado. classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm compartilhada porDescrio todas as instncias da classe. Classes de Evento

InputEvent Estende a classe abstrata de evento, raiz apartir da qual so objeto pode ter que mostrar umComponentEvent. comportamento Classe particular invocando uma implementadas todas as classes de componentesde entrada de operao apropriada que foi definida no objeto. Em Java, isto feito peladados. chamada de um mtodo em um objeto usando o operador binrio (ponto) , ActionEvent Estende a classe AWTEvent. Instanciada quando um"." boto pressionado, um item de uma devendo especificar a mensagem completa: o objeto omenu recebedor da lista recebe duplo-clique ou quando umque item de selecionado. mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). ItemEvent Estende a classe AWTEvent. Instanciada quando um item selecionado ou desmarcado pelo O mtodo invocado no recebedor pode tambm enviar informaes de volta ao usurio, seja numa lista ou caixa de seleo (checkbox). objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais 135
Todos os direitos reservados a 3Way Networks

o mesmo estado se suas ComponentEvent Estende a classe AWTEvent. Instanciada quando um componente movido, redimensionado, variveis membro tm os 2.3.1 Invocao de Mtodos tornado visvel ou invisvel. mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 149

Linguagem de de Programao Java Linguagem Programao Java


KeyEvent Estende a classe InputEvent. Instanciado quando uma tecla pressionada, liberada ou

digitada (pressionada e liberada). //atribuindo valor a varivel referncia Carro carro1 = new Carro(); MouseEvent Estende a classe InputEvent. Instanciada quando um boto do mouse pressionado, carro1.ano = "2001"; liberado, clicado (pressionado e liberado) ou quando o cursor do mouse entra ou sai de uma carro1.modelo= "fusca"; parte= visvel de um componente. carro1.cor "prata"; TextEvent WindowEvent Estende a classe AWTEvent. Instanciada quando o valor de um campo texto ou area de texto sofre alterao. 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 conveno de nomeao: <Tipo>Event 11.5.3 Listeners de Evento Listeners de evento so classes que implementam as interfaces <Tipo>Listener. A tabela a seguir algumas Figura 2.4 Layout Memria aps inicializao interfaces utilizadas com maior freqncia: Listeners de Evento ActionListener MouseListener MouseMotionListener WindowListener
//criando novo alias Carro carro2 = carro1;

Descrio Recebe eventos de ao, estes podem ser um pressionamento do mouse ou da barra de espao sobre o objeto. Recebe eventos do mouse. Recebe eventos de movimento do mouse, que incluem arrastar e mover o mouse. Recebe eventos de janela (abrir, fechar, minimizar, entre outros).
Tabela 2: Event Listeners

11.5.3.1 Mtodo de ActionListener Este o mtodo da interface ActionListener que deve ser implementado: Mtodos de ActionListener
Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto Descrio

public void actionPerformed(ActionEvent e)

Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis 11.5.3.2 Mtodos de MouseListener (atributos) definidas pela classe. Os mtodos definem o comportamento de um Estes so os mtodos da interface MouseListener que devem ser implementados:em um objeto constituem objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da o seu estado. classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm Mtodos de MouseListener Descrio compartilhada por todas as instncias da classe. o mesmo estado se suas public void mouseClicked(MouseEvent e) Chamado quando o mouse pressionado (pressionar e soltar).

2.3

Membros de Instncia

Chamado quando o mouse pressionado ou foi utilizada a barra de espao sobre um boto por exemplo.
Tabela 3: Mtodo de ActionListener

variveis membro tm os 2.3.1 Invocao de Mtodos public void mouseEntered(MouseEvent e) Chamado quando o cursor do mouse entra em um componente. mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um public void mouseExited(MouseEvent e) Chamado quando o cursor do mouse sai de um componente. objeto pode ter que mostrar um comportamento particular invocando uma Chamado quando o boto do mouse pressionado sobre um operao apropriada que foi definida public void mousePressed(MouseEvent e) no objeto. Em Java, isto feito pela componente (pressionar). chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa:Chamado o objeto que o o recebedor da solto sobre um quando boto do mouse public void mouseReleased(MouseEvent e)argumentos para o mtodo (se houver). mensagem, o mtodo a ser invocado e os componente (soltar). O mtodo invocado no recebedor pode tambm enviar informaes de volta ao Tabela 4: Mtodos de MouseListener objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 136
Todos os direitos reservados a 3Way Networks

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 150

Linguagem de de Programao Java Linguagem Programao Java

11.5.3.3 Mtodos de MouseMotionListener //atribuindo valor a varivel referncia Estes so os mtodos da interface MouseMotionListener que devem ser implementados: Carro carro1 = new Carro();
carro1.modelo= "fusca"; Mtodos MouseListener carro1.cor = "prata"; carro1.ano = "2001";

Descrio Chamado quando o mouse pressionado sobre um componente e ento arrastado (dragged). chamado tantas vezes quanto o mouse for arrastado. Chamado quando o cursor do mouse movido sobre um componente, sem que o mouse esteja pressionado. Ser chamado mltiplas vezes, tantas quantas o mouse for movido.
Tabela 5: Mtodos MouseMotionListener

public void mouseDragged(MouseEvent e)

public void mouseMoved(MouseEvent e)

11.5.3.4 Mtodos WindowListener Estes so os mtodos da interface WindowListener que devem ser implementados:
Figura 2.4 Layout Memria aps inicializao

Mtodos WindowListener //criando novo alias Carro carro2 = carro1; public void windowOpened(WindowEvent e) public void windowClosing(WindowEvent e) public void windowClosed(WindowEvent e) public void windowActivated(WindowEvent e) public void windowDeactivated(WindowEvent e) public void windowIconified(WindowEvent e) public void windowDeiconified(WindowEvent e)

Descrio Chamado quando uma janela aberta (quando o objeto Window torna-se visvel pela primeira vez) Chamado quando uma janela encerrada (objeto Window) Chamado quando a janela foi fechada aps a liberao de recursos utilizados pelo objeto (EventSource). Chamado quando uma janela ativada, ou seja, est em uso. Chamado quando uma janela deixa de ser a janela ativa. Chamado quando a janela iconificada

Chamado quando a janela retorna do estado iconificado o normal Figura 2.5 Layout Memria para duas variveis referncia para o mesmo objeto
Tabela 6: Mtodos WindowListener

2.3 Membros de Instncia 11.5.3.5 Roteiro para criao de Aplicaes Grficas com tratamento de eventos Cada objeto criado dever ter sua prpria de variveis Os valores das variveis Estes so os passos a serem lembrados ao criar uma instncia aplicao grfica com tratamento de eventos. (atributos) definidas pela classe. Os mtodos definem o comportamento de um 1. Criar uma classe que descreva e mostre a aparncia da sua aplicao grfica. em um objeto constituem objeto. Isto importante, pois denota que um pertence a cada objeto da 2. Criar uma classe que implemente a mtodo interface XXXListener apropriada. Esta classe poder estar inserida o seu estado . classe. Pormna no devemos confundir isto com a implementao do mtodo, que classe do primeiro passo. Dois objetos distintos tm compartilhada por todas as instncias da classe. 3. Na classe implementada, sobrepor todos os mtodos da interface XXXListener. o mesmo estado se suas 4. Descrever em cada mtodo como o evento deve ser tratado. Podemos deixar vazio um mtodo que variveis membro tm os 2.3.1 Invocao de Mtodos no desejamos tratar. valores. Objetos se comunicam pela troca de isto significa que umdo passo mesmos 5. Registrar o objeto XXXListener (amensagens, instncia da classe XXXListener 2) no EventSource objeto pode utilizando ter que o mostrar comportamento mtodo um add<Tipo>Listener . particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela Veja de uso do Evento Action: chamada de exemplo um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o recebedor da import java.awt.BorderLayout; mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). import java.awt.event.ActionEvent; O mtodo invocado no recebedor pode tambm enviar informaes de volta ao import java.awt.event.ActionListener; objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 137
Todos os direitos reservados a 3Way Networks

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 151

Linguagem de Programao Java Java Linguagem de Programao


import javax.swing.JButton; import javax.swing.JFrame; //atribuindo valor a varivel referncia import javax.swing.JTextField; Carro carro1 = new Carro(); carro1.ano = "2001"; extends JFrame implements ActionListener { public class ActionDemo carro1.modelo= "fusca"; private JTextField tf; carro1.cor = "prata"; private JButton bt; public ActionDemo(String title) { super(title); tf = new JTextField(); bt = new JButton("Cliqui Aqui"); add(tf, BorderLayout.SOUTH); add(bt, BorderLayout.NORTH); setSize(300, 300); bt.addActionListener(this);
Figura 2.4 Layout Memria aps inicializao //o evento windowClose e disparado .setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE); //criando this novo alias setVisible( true); Carro carro2 = carro1; }

public void actionPerformed(ActionEvent actionEvent) { //acao depende do conteudo do campo texto tf if (tf.getText().equals("Ao")) tf.setText("Cliquei e mudei"); else tf.setText("Ao"); } public static void main(String args[]) { new ActionDemo("Action Demo"); } }
Listagem 11.9 - Eventos Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

A seguir vemos algumas imagens da janela criada pela classe ActionDemo:

Cada objeto criado dever ter sua prpria instncia de variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da classe. Porm no devemos confundir isto com a implementao do mtodo, que compartilhada por todas as instncias da classe. 2.3.1 Invocao de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo invocado no Figura recebedor pode tambm enviar informaes de volta ao 11.10.1:2 Boto dispara maniupulador de Envento Action, na mesma classe objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

2.3

Membros de Instncia

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

138

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 152

Linguagem de Programao JavaJava Linguagem de Programao

11.5.4 Implementando Manipuladores de Eventos com Anonymous inner class //atribuindo valor a varivel referncia Como foi visto no=Captulo 7.14, as anonymous inner class, so classes internas que so declaradas sem Carro carro1 new Carro(); um nome. Normalmente so utilizadas carro1.ano = "2001"; em contextos onde o reuso da classe no importante. Por exemplo podemos declarar uma anonymous inner class como um argumento de mtodo ou atribuio de uma varivel. carro1.modelo= "fusca"; carro1.cor "prata"; Se voc observar = a listagem anterior ver que o manipulador de evento ActionListener foi implementado pela prpria classe ActionDemo, mas essa estratgia pode causar alguns transtornos quando voc tem que manipulador as aes de vrios botes. Voc consegue perceber a dificuldade? Voc ter que saber qual boto disparou o evento. Fazer isso no difcil, mas enfadonho, veja um exemplo com trs botes:
import import import import import import java.awt.BorderLayout; java.awt.event.ActionEvent; java.awt.event.ActionListener; javax.swing.JButton; javax.swing.JFrame; javax.swing.JTextField;

public class ActionDemo extends JFrame implements ActionListener { private JTextField tf; Figura 2.4 Layout Memria aps inicializao private JButton bt1; //criando novo alias bt2; private JButton Carro private carro2 JButton = carro1; bt3; public ActionDemo(String title) { super(title); tf = new JTextField(); bt1 = new JButton("boto 1"); bt2 = new JButton("boto 2"); bt3 = new JButton("boto 3"); add(tf, BorderLayout.SOUTH); add(bt3, BorderLayout.EAST); add(bt2, BorderLayout.CENTER); add(bt1, BorderLayout.WEST); setSize(300, 300); bt1.addActionListener(this); bt2.addActionListener( ); referncia para o mesmo objeto Figura 2.5 Layout Memriathis duas variveis bt3.addActionListener(this); //o evento windowClose e disparado this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible( de Instncia true);

Cada } objeto criado dever ter sua prpria instncia de variveis Os valores das variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um public void actionPerformed(ActionEvent actionEvent) { em um objeto constituem objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da if (actionEvent.getSource()== bt1) o seu estado. tf.setText("Cliquei no botodo 1"); classe. Porm no devemos confundir isto com a implementao mtodo, que Dois objetos distintos tm else (actionEvent.getSource()== bt2) compartilhada por todas asif instncias da classe.
tf.setText("Cliquei no boto 2");

2.3

Membros

2.3.1 Invocao de Mtodos JButton bt = (JButton) actionEvent.getSource(); Objetos se comunicam pela troca de mensagens, isto significa que um if (bt.getActionCommand().equals("boto 3")) tf.setText("Cliquei no botoinvocando 3"); objeto pode ter que mostrar um comportamento particular uma } operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), public static void main(String args[]) { devendo especificar a mensagem completa: o objeto o recebedor da new ActionDemo("Action Demo que 2"); } mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). } invocado no recebedor pode tambm enviar informaes de volta ao O mtodo Listagem 11.10 Eventos objeto chamador atravs de um valor de retorno .O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

139

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 153

Linguagem de Programao JavaJava Linguagem de Programao

Veja que no mtodo actionPerformed() voc tem que testar qual boto disparou o evento usando uma //atribuindo valor a varivel referncia das comparaes com actionEvent . getSource() , que retorna a referncia do objeto fonte do evento, ou fazendo Carro carro1 = new Carro(); casting desta referencia para inferir sobre o rtulo do boto. Voc pode utilizar uma anonymous inner class para carro1.ano = "2001"; carro1.modelo= "fusca"; fazer o mesmo, veja:
carro1.cor = "prata"; 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; public class ActionDemo3 extends JFrame { private JTextField tf; private JButton bt;
Figura 2.4 Layout Memria public ActionDemo3(String title) { aps inicializao super (title); //criando novo alias tf==carro1; new JTextField(); Carro carro2 bt = new JButton("Cliqui Aqui"); add(tf, BorderLayout.SOUTH); add(bt, BorderLayout.NORTH); setSize(300, 300); // usando anonymous inner class como argumento do mtodo bt.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent actionEvent) { // acao depende do conteudo do campo texto tf if (tf.getText().equals("Ao 3")) tf.setText("Cliquei e mudei"); else tf.setText("Ao 3"); } });

// o evento windowClose e disparado Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto ); this.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE setVisible(true); }

Cada objeto new criado dever ter sua prpria de variveis ActionDemo3("Action Demoinstncia 3"); Os valores das variveis } (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem } importante, pois denota que um mtodo pertence a cada objeto da objeto. Isto o seu estado. Listagem 11.11 Eventos de Ao classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm compartilhada por todas as instncias da classe. o mesmo estado se suas Voc cria um objeto em tempo de execuo para o evento, este far a chamada a um mtodo, que se variveis membro tm os encarregar de executar as instrues, desta forma cada boto tem seu prprio manipulador de evento, no sendo 2.3.1 Invocao de Mtodos mesmos valores. preciso testar qualse objeto disparou o evento, o objeto manipulador do evento nico para cada objeto fonte. Objetos comunicam pela troca pois de mensagens, isto significa que um Isto faz sentido, voc concorda? O objeto de boto realizar uma ao exclusiva, o cdigo do manipulador no objeto pode ter que mostrar um comportamento particular invocando uma necessitar ser reaproveitado em momento algum. operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), 11.6Classes Adaptadoras devendo especificar a mensagem completa: o objeto que o recebedor da Vamos implementar um exemplo de uso para da interface mensagem, o mtodo a ser invocado e os argumentos o mtodoMouseListener (se houver). e MouseMotionListener. Diferentemente da interface ActionListener , esta interface define cinco e dois mtodos O mtodo invocado no recebedor pode tambm enviar informaes de volta ao respectivamente, portanto voc deve implementar todos mtodos grafados nas interfaces, veja exemplo: objeto chamador atravs de os um valor de retorno .O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 140
Todos os direitos reservados a 3Way Networks

2.3

Membros de Instncia public static void

main(String args[]) {

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 154

Linguagem de Programao Java Java Linguagem de Programao

import java.awt.BorderLayout; //atribuindo valor a varivel referncia import java.awt.TextField; Carro carro1 = new Carro(); import java.awt.event.MouseEvent; carro1.ano = "2001"; import java.awt.event.MouseListener; carro1.modelo= "fusca"; import java.awt.event.MouseMotionListener; carro1.cor = "prata"; import javax.swing.JFrame; public class EventosMouseDemo extends JFrame { private TextField tf; public EventosMouseDemo(String titulo) { super(titulo); tf = new TextField(60); add(tf, BorderLayout.SOUTH); setSize(300, 300); this.addMouseListener(new MouseListener() { public void mouseClicked(MouseEvent mouseEvent) { Figura 2.4 Layout Memria aps inicializao eventoMouse1(mouseEvent); } //criando novo alias Carro carro2 = carro1; public void mouseEntered(MouseEvent mouseEvent) { eventoMouse2(mouseEvent); } public void mouseExited(MouseEvent mouseEvent) { eventoMouse3(mouseEvent); } public void mousePressed(MouseEvent mouseEvent) { eventoMouse4(mouseEvent); } public void mouseReleased(MouseEvent mouseEvent) { eventoMouse5(mouseEvent); } });
Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

2.3

(atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem public void mouseMoved(MouseEvent { objeto. Isto importante, pois denota que um mtodo pertence a cada mouseEvent) objeto da o seu estado. eventoMouse7(mouseEvent); classe. Porm no devemos confundir isto com a implementao do mtodo, que } Dois objetos distintos tm compartilhada por todas }); as instncias da classe.

this.addMouseMotionListener(new MouseMotionListener() { public void mouseDragged(MouseEvent mouseEvent) { Membros de Instncia eventoMouse6(mouseEvent); Cada objeto criado Os valores das variveis } dever ter sua prpria instncia de variveis

objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, feito pela public void eventoMouse1(MouseEvent me) isto { tf.setText("Cliquei no o Mouse."); chamada de um mtodo em um objeto usando operador binrio "." (ponto), } devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, opublic mtodo void a ser invocado e os argumentos para me) o mtodo (se houver). eventoMouse2(MouseEvent { O mtodo invocado tf.setText("Cursor no recebedor pode tambm enviar informaes de volta ao posicionado no componente."); objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser } um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

o mesmo estado se suas variveis membro tm os .setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 2.3.1 Invocao dethis Mtodos setVisible( true ); mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um
}

www.3way.com.br

141

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 155

Linguagem de Programao JavaJava Linguagem de Programao

public void eventoMouse3(MouseEvent me) { //atribuindo valor a varivel referncia tf.setText("Mouse saiu do componente."); Carro }carro1 = new Carro(); carro1.ano = "2001"; carro1.modelo= "fusca"; public void eventoMouse4(MouseEvent me) { carro1.cor tf.setText("Mouse = "prata"; foi pressionado."); } public void eventoMouse5(MouseEvent me) { tf.setText("Boto do Mouse liberado."); } public void eventoMouse6(MouseEvent me) { tf.setText("Mouse arrastado at " + me.getX() + "," + me.getY()); } public void eventoMouse7(MouseEvent me) { tf.setText("Mouse moveu para posio(x,y) =" + me.getX() + "," + me.getY()); Figura 2.4 Layout Memria aps inicializao } //criando novo alias void main(String args[]) { Carro public carro2static = carro1; new EventosMouseDemo("Demo Eventos de Mouse"); } }
Listagem 11.12 Classes adaptadoras de Eventos

Nem sempre voc precisar implementar todos os mtodos de uma interface, como no exemplo anterior onde implementamos MouseListener e MouseMotionListener. muito trabalhoso, freqentemente necessitaremos implementar somente alguns mtodos da interface. Felizmente, os engenheiros do Java fizeram a bondade de adicionar as classes adaptadores. Estas classes implementam todos os mtodos das interfaces XXXListener que possuem mais de um mtodo. As implementaes dos mtodos so vazias, ou seja, no fazem nada, simplesmente funcionam como um gabarito para sobrescrevermos os mtodos 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 Memria duas variveis referncia para o mesmo objeto import java.awt.event.WindowEvent;

Cada objeto criado dever ter sua prpria instncia de variveis public class FechaJanela extends JFrame { (atributos) definidas pela classe. Os mtodos definem o comportamento de um objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da private JLabel label; classe. Porm no devemos confundir isto com a implementao do mtodo, que public FechaJanela(String titulo) { compartilhada por todas as instncias da classe. 2.3.1
super(titulo); this.setSize(300, 300); Invocao de Mtodos label = new JLabel("Feche a Janela"); this.add(label, CENTER ); Objetos se comunicam pela trocajava.awt.BorderLayout. de mensagens, isto significa que um

2.3

import javax.swing.JLabel; Membros de Instncia

import javax.swing.JFrame;

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

objeto pode ter que mostrar um comportamento particular invocando uma this.addWindowListener(new WindowAdapter() { operao apropriada que foipublic definida no objeto. Em Java, isto feito pela void windowClosing(WindowEvent e) { chamada de um mtodo em um objeto usando o operador binrio "." (ponto), fechado(); devendo especificar a mensagem completa: o objeto que o recebedor da } }); mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). this.setVisible(true); O mtodo invocado no recebedor pode tambm enviar informaes de volta ao } objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto. Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

www.3way.com.br

142

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 156

Linguagem de de Programao Java Linguagem Programao Java


public void fechado() { System.exit(0); //atribuindo valor a varivel referncia } Carro carro1 = new Carro(); carro1.ano = "2001"; public static void main(String args[]) { carro1.modelo= new "fusca"; FechaJanela("Exemplo Fecha Janela"); carro1.cor = "prata"; } }
Listagem 11.13 Eventos de Janela

Usando a classe WindowAdapter voc pde sobrescrever somente o mtodo windowClosing() um dos sete mtodos grafados na interface WindowListener.

Siga instrues do laboratrio e tome cuidado com o tempo de execuo, sempre recorra ao instrutor em caso de dvida, nunca deixe uma dvida sem reposta

11.7Fazer Laboratrio 11

11.8Exerccio

Figura 2.4 Layout Memria aps inicializao

Escreva, compile e execute //criando novo alias todas listagens de cdigo apresentadas neste captulo. Carro carro2 = carro1;

12 Internacionalizao do cdigo

Em java a partir da verso 5.0 possvel fazer de forma adequada a internacionalizao do cdigo de uma aplicao desktop, com Swing utilizando recurso de formatao de Data e Nmeros, principalmente monetrio. A internacionalizao significa sua aplicao rodar em mais de um idioma, criando de forma parametrizada os dados de labels a serem mostrados em arquivos .properties. A formatao baseia-se na Localizao do idioma informada, seja pelo Sistema Operacional (SO) ou informado atravs de parametro pelo usurio. A classe java.util.Locale que responsvel por determinar o idioma a ser utilizado para internacionalizao. Locale voc define a regio conforme exemplo:

Internacionalizao significa voc ter umna aplicao com a possibilidade de mudar o seu idioma baseado no SO ou atravs de seleo do usurio, conhecido tambm como i18n.

Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto Locale local = new Locale(pt, BR); //Brasil

Cada objeto criado dever ter sua prpria instncia de variveis totalmente configurvel. Para recuperar a classe. localizao do SO, definem ou seja, o da JVM deve ser de feito (atributos) definidas pela Os mtodos comportamento um conforme exemplo abaixo: pois denota que um mtodo pertence a cada objeto da objeto. Isto importante, classe. Porm no devemos confundir isto com a implementao do mtodo, que Locale por local =as Locale.getDefault(); compartilhada todas instncias da classe.

utilizadas parater formatar datas e nmeros respectivamente. Para criao de objeto objeto pode que mostrar um comportamento particular invocando umadessas classes no se utiliza o operador new e sim o mtodo esttico de getInstance() conforme abaixo: operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), DateFormat dataFormatador = DateFormat.getInstance(); devendo especificar a mensagem completa: =o NumberFormat.getInstance(); objeto que o recebedor da NumberFormat numeroFormatador mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo invocado noacima recebedor pode tambm informaes de volta Para o exemplo o Locale utilizado o enviar padro, ou seja, da JVM. Para ao determinar um Locale especfico objeto chamador atravs de um valor de retorno . O mtodo chamado deve ser voc deve passar o Locale como parametro conforma abaixo: um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 143
Todos os direitos reservados a 3Way Networks

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os 12.1 2.3.1 Formatao Invocao de Mtodos mesmos valores. Existe a classe DateFormat e NumberFormat para trabalhar com formatao Locale informado, Objetos se comunicam pela troca de mensagens, isto significa que um baseado no

2.3 , isso Membros Instncia CODE porque de existe pas que fala dois idiomas, possibilitando ento ser

O primeiro parmetro define o idioma e o segundo o pas, conforme ISO-

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 157

Linguagem de Programao JavaJava Linguagem de Programao

utilizar o mtodo format() do objeto passando como parmetro o objeto que deseja formatar.
dateFormat.format(new Date()); numberFormat.format(13.23);

Locale ptBR = new Locale("pt", "BR"); //atribuindo valor a varivel referncia DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL, ptBR); Carro carro1 = new Carro(); NumberFormat numberFormat = NumberFormat.getNumberInstance(ptBR); carro1.ano = "2001"; carro1.modelo= "fusca"; Com o objeto de formatao criado para um Locale determinado o processo de formatao simples, basta carro1.cor = "prata";

com as respectivas sadas: Sexta-feira, 21 de Setembro de 2007 13,23 abaixo: Voc pode utilizar o objeto de formatao para converter textos em Objetos com o mtodo parse(), veja
Figura 2.4 Layout Memria aps inicializao

//criando novo alias dateFormat.parse("Sexta-feira, 21 de Setembro de 2007"); Carro carro2 = carro1; numberFormat.parse("13,23");

12.2ResourceBoundle

A classe ResourceBoundle a responsvel por acessar o arquivo .properties de internacionalizao baseado no Locale definido. Existe um padro para nomear os arquivos de internacionalizao, 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 Memria duas variveis referncia para o mesmo objeto welcome=Hello!

2.3 Membros de Instncia passando o nome inicial do arquivo e o Locale conforme abaixo:

Para carregar o arquivo do respectivo Locale definido necessrio utilizar o mtodo getBoundle() da classe

Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis (atributos) definidas classe. Os mtodos definem o comportamento de um Locale ptBRpela = new Locale("pt","BR"); em um objeto constituem objeto. ResourceBundle Isto importante, pois denota que um mtodo pertence a cada objeto da bundle = ResourceBundle.getBundle("messages", ptBR); o seu estado. System.out.println(bundle.getString("welcome")); classe. Porm no devemos confundir isto com a implementao do mtodo, que Dois objetos distintos tm compartilhada por todas as instncias da classe. o mesmo estado se suas A procura pelo arquivo .properties ocorre de trs formas, primeiro ele procura pelo nome completo membro definido pelo locale, se no encontrar ento procura com somente a definio do idioma variveis e caso no encontretm ele os 2.3.1 Invocao de Mtodos procura com somente o nome do arquivo. mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma messages_pt_BR.properties //pesquisa 1 operao apropriada que foi definida no objeto. messages_pt.properties //pesquisa 2 Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), messages.properties //pesquisa 3 devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). 12.3Mensagens Formatadas O mtodo no recebedor pode tambm enviar informaes de volta ao e nmero, existe a classe Da invocado mesma forma que existe as classes que ajudam a formatao de data objeto chamador atravs de um valor de retorno . O mtodo chamado deve ser MessageFormat que ajuda na formatao de mensagens. um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 144
Todos os direitos reservados a 3Way Networks

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 158

Linguagem de de Programao Java Linguagem Programao Java


O que formatao de mensagens? Quando se trabalha com internacionalizao e unificao de mensagens repetidas em todo o sistema, mas que trechos da mensagem precisa ser dinmico, ento se utiliza dos //atribuindo valor a varivel referncia arquivos ResourceBoundle as mensagens e utiliza-se de MessageFormat para trocar campos chaves da Carro carro1 = para newdefinir Carro(); mensagem por contedo dinmico conforme abaixo: carro1.ano = "2001";
carro1.modelo= "fusca"; carro1.cor = "prata"; String mensagem = "Este um curso de {0} com {1} horas da 3way."; String mensagemFormatada = MessageFormat.format(mensagem, "Java", "40"); System.out.println(mensagemFormatada);

a sada ser: Este um curso de Java com 40 horas da 3way.

12.4Fazer Laboratrio 12

Siga instrues do laboratrio e tome cuidado com o tempo de execuo, sempre recorra ao instrutor em caso de dvida, nunca deixe uma dvida sem reposta
Figura 2.4 Layout Memria aps inicializao

//criando 12.5Exerccio

novo alias Carro carro2 carro1; Escreva, compile = e execute todas listagens de cdigo apresentadas neste captulo.

13 Exportao de Aplicao

Para aplicaes Java construdas para rodar localmente na mquina do usurio existe duas formas indicada para exportar o projeto e enviar a aplicao para o usurio sem perder a portabilidade que java oferece.

Cada objeto criado dever ter sua prpria instncia de variveis Os valores das variveis 13.2Java Web Start (JWS) (atributos) definidas pela classe. Os mtodos definem o comportamento de um em um objeto constituem Java Web Start semelhante aoque exemplo anterior, do jar executvel. A diferena entre as duas objeto. Isto importante, pois denota um mtodo pertence a cada objeto da fundamental o seu estado . a suaPorm distribuio, quando gerado um isto jar executvel voc precisa enviar o arquivo classe. no devemos confundir com a implementao do mtodo, que.jar para o usurio e quando o Dois distintos tm mesmo for alterado voc precisar enviar novamente. Para aplicao JWS voc envia para o objetos usurio um arquivo compartilhada por todas as instncias da classe. o mesmo estado se suas com extenso jnlp, este arquivo possui instrues de onde a JVM do usurio deve baixar os arquivos e qual a classe deve ser executada para iniciar a aplicao. variveis membro tm os 2.3.1 Invocao de Mtodos Desta forma sempre que houver uma atualizao da aplicao necessrio 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 usurio executar a aplicao automaticamente ele identificar objeto pode ter que mostrar um comportamento particular invocando uma que foi atualizado o arquivo no servidor e baixar a nova verso, deixando a mquina do usurio sempre atualizada. operao apropriada que foi definidavia no objeto. Em precisa Java, isto feito pela O arquivo jar para ser executado Java Web Start ser assinado digitalmente, isso um modelo de chamada de um mtodo em um objeto usando o operador binrio "." (ponto) , segurana implementado por Java. A assinatura digital uma forma de identificar a origem do arquivo. A assinatura devendo especificar a mensagem completa: o objeto que o recebedor da pode ser criada por voc em sua mquina e assinar os arquivos para que o usurio consiga execut-los. mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 145
Todos os direitos reservados a 3Way Networks

Exportar a aplicao para um arquivo JAR uma tarefa simples utilizando IDEs de desenvolvimento, como Eclipse, a prpria IDE possui o recurso de exportar gerando o arquivo .jar. S exportar o projeto para um arquivo jar no o mais indicado, porque o usurio ter que iniciar a aplicao por prompt atravs do comando java e qual o nome a classe com os pacotes que possui o mtodo main. Este seria um trabalho tedioso para o usurio inicar a aplicao. A soluo criar um jar executvel, ou seja, com um duplo clique do usurio a aplicao j iniciada e o usurio no precisa digitar nenhum comando, ou muito menosreferncia saber qual classe que precisa ser chamada para Figura 2.5 Layout Memria duas variveis para oa mesmo objeto iniciar a aplicao. Quando voc for gerar o arquivo jar executvel necessrio que informe qual a classe que deve ser invocada quando o arquivo sofrer um duplo clique do usurio. 2.3 Membros de Instncia

13.1Jar executvel

www.3way.com.br

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 159

Linguagem de Programao JavaJava Linguagem de Programao

13.3Fazer Laboratrio 13

carro1.ano = "2001"; carro1.modelo= "fusca"; 13.4Exerccio carro1.cor = "prata";

Siga instrues do laboratrio e tome cuidado com o tempo de execuo, sempre recorra ao instrutor em //atribuindo valor a varivel referncia Carro nunca carro1 = uma new dvida Carro(); caso de dvida, deixe sem reposta

Escreva, compile e execute todas listagens de cdigo apresentadas neste captulo.

Figura 2.4 Layout Memria aps inicializao

//criando novo alias Carro carro2 = carro1;

Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

Cada objeto criado dever ter sua prpria instncia de variveis (atributos) definidas pela classe. Os mtodos definem o comportamento de um objeto. Isto importante, pois denota que um mtodo pertence a cada objeto da classe. Porm no devemos confundir isto com a implementao do mtodo, que compartilhada por todas as instncias da classe. 2.3.1 Invocao de Mtodos Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operao apropriada que foi definida no objeto. Em Java, isto feito pela chamada de um mtodo em um objeto usando o operador binrio "." (ponto), devendo especificar a mensagem completa: o objeto que o recebedor da mensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver). O mtodo invocado no recebedor pode tambm enviar informaes de volta ao objeto chamador atravs de um valor de retorno. O mtodo chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais
Todos os direitos reservados a 3Way Networks

2.3

Membros de Instncia

Os valores das variveis em um objeto constituem o seu estado. Dois objetos distintos tm o mesmo estado se suas variveis membro tm os mesmos valores.

www.3way.com.br

146

Seja um Profissional Aprendendo com Profissionais www.3way.com.br

12 160

Siga-nos tambm no Twitter! twitter.com/3waynet

Das könnte Ihnen auch gefallen