Linguagem Java COMPLETA

April 6, 2017 | Author: 3Way Networks | Category: N/A
Share Embed Donate


Short Description

Esta apostila faz parte do curso Java Web da 3WAY Networks. Objetivos do curso: Desenvolver aplicaçõ...

Description

Apostila

Linguagem Java Java OO

www.3way.com.br

Linguagem Linguagem de de Programação Programação Java Java

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

Carro carro1 = new Carro(); 1 Introdução à Linguagem Java 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 é necessário para aprender Java ? 1.3 O curso 1.3.1 Convenções de Código 1.3.2 Sobre os exercícios 1.4 Fazer Laboratório 0 2 Bases da Programação em Java 2.1 Classes 2.1.1 Declarando Membros: Variáveis e Métodos 2.2 Objetos Figura 2.4 – Layout Memória após inicialização 2.2.1 Instância de Classes 2.2.2 Referência de novo Objetosalias //criando 2.3 Membros de Instância Carro carro2 = carro1; 2.3.1 Invocação de Métodos 2.3.1.1 Chamando Métodos de Objeto 2.3.2 Envio de Argumentos para Métodos 2.3.2.1 Passagem de Parâmetros por valor 2.3.2.2 Passagem de Parâmetros por referência 2.4 Membros Estáticos 2.5 Herança - Relacionamentos do tipo "é-um" 2.6 Agregação - Relacionamentos do tipo "tem-um" 2.7 Princípios de Programação Com Java 2.8 Estrutura de Arquivos Fontes em Java 2.9 O método main() 2.10 Fazer Laboratório 1 2.11 Exercícios 3 Identificadores, Palavras-chave e Tipos Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto 3.1 Comentários 3.2 Ponto-e-Vírgula, Blocos e Espaço 3.3 Identificadores 3.4 Palavras Reservadas 2.3 Membros de Instância 3.5 Variáveis, Declarações e Atribuição Cada objeto criado deverá ter sua própria instância de variáveis 3.5.1 Declarando e inicializando Variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um 3.5.2 Exibindo o valor de uma Variável objeto. Isto é importante, pois edenota 3.5.3 Variáveis de Referência de Valorque um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que 3.6 Tipos Básicos em Java é compartilhada por todas as instâncias da classe. 3.6.1 Literais Java 3.6.2 Tipos Dados Primitivos 3.6.2.1 Lógico – boolean 2.3.1 Invocação de Métodos 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 operação apropriada que foie double definida no objeto. Em Java, isto é feito pela 3.6.2.5 de declarações e atribuições chamadaExemplos de um método em um objeto usando o operador binário "." (ponto), 3.7 Conversões devendo especificar a mensagem completa: o objeto que é o recebedor da 3.7.1 Casting de Tipos Primitivos mensagem, o método a ser invocado Numérica e os argumentos para o método (se houver). 3.7.2 Literais numéricos e Promoção O método invocado no recebedor pode 3.8 Classes Wrapper (Empacotadoras) também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser 3.8.1 Construtores Wrapper um que esteja definido 3.8.2 Método valueOfpelo objeto. 3.8.3 Conversões Todos os direitos reservados a 3Way Networks

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

67 67 67 67 67 78 78 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 variáveis21 26 em um objeto constituem 22 28 o seu estado. 22 28 23 29 Dois objetos distintos têm 29 o mesmo estado se suas23 23 29 variáveis membro têm os23 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

2121

Linguagem de Programação JavaJava Linguagem de Programação 3.9 AutoBoxing 3.9.1 Boxing e Unboxing Automático para Tipos Primitivos //atribuindo valor a variável referência 3.9.2 Ocorrência de Boxing e Unboxing automático Carro carro1 = new Carro(); 3.10 Fazer Laboratório 2 carro1.ano = "2001"; 3.11 Exercícios carro1.modelo= "fusca"; 4 Operadores carro1.cor = "prata"; 4.1 Operadores Aritméticos 4.2 Operadores de Incremento e Decremento 4.3 Operadores Relacionais 4.4 Operadores Lógicos 4.4.1 && (e lógico) e & (e binário) 4.4.2 || ( ou lógico) e | ( ou binário) 4.4.3 ^ (ou exclusivo binário) 4.4.4 ! (negação) 4.4.5 Operador Condicional ( ?: ) 4.5 Precedência de Operadores 4.6 Exercícios 5 Estruturas de controle 5.1 Estruturas de decisão if - else Figura 2.4 – Layout Memória após inicialização 5.2 Declaração switch //criando novo alias 5.3 Iterações (Laços) Carro carro2 = carro1; 5.3.1 while 5.3.2 do-while 5.3.3 Declaração for 5.4 Declarações de Interrupção e Desvio 5.4.1 Declaração break 5.4.1.1 Declaração unlabeled break 5.4.1.2 Declaração labeled break 5.4.2 Declaração continue 5.4.2.1 Declaração unlabeled continue 5.4.2.2 Declaração labeled continue 5.4.3 Declaração return 5.5 Fazer Laboratório 3 5.6 Exercícios 6 Array 6.1 Declarando Array Figura 2.5 – Layout Memória duas variáveis referência 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 Instância 6.6 Percorrendo Arrays com Enhaced-for Cada objeto criado deverá ter sua própria instância de variáveis 6.7 Manipulando Arrays com java.util.Arrays (atributos) definidas pela 6.8 Fazer Laboratório 4 classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da 6.9 Exercícios 7classe. Porém Programação Orientadaconfundir a Objetos isto com a implementação do método, que não devemos 7.1 Classes e Objetos é compartilhada por todas as instâncias da classe. 7.1.1 Definindo Classes 7.1.2 Definindo Métodos 2.3.1 Invocação de Métodos 7.1.2.1 Definindo Métodos na Classe ObjetosdeseInstância comunicam pela troca 7.1.3 Métodos e a Referência this de mensagens, isto significa que um objeto pode ter de que mostrar um comportamento particular invocando uma 7.1.4 Sobrecarga Métodos (Overloading) operaçãoConstrutores apropriada que foi definida no objeto. Em Java, isto é feito pela 7.1.5 7.1.6 Padrão (default) chamadaConstrutor de um método em um objeto usando o operador binário "." (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 método a ser invocado e os argumentos para o método (se houver). 7.1.9 Utilizando o Construtor this( ) O método invocado no recebedor pode também enviar informações de volta ao 7.2 Fazer Laboratório 5 objeto chamador através de um valor de retorno. O método chamado deve ser 7.3 Herança

um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais www.3way.com.br

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 variáveis 51 59 52 em um objeto constituem 60 60 o seu estado. 52 52 60têm Dois objetos distintos52 60 o mesmo estado se 52 suas 60 53 variáveis membro têm 61 os 54 mesmos valores.62 55 63 56 64 57 65 57 65 58 66 58 66 59 67 60 69 60 69 2

Todos os direitos reservados a 3Way Networks

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

312

Linguagem de Programação JavaJava Linguagem de Programação 7.3.1 Definindo Superclasses e Subclasses 7.3.2 Chamando Construtor super() e Referência super //atribuindo valor a variável referência 7.3.3 Modificador de Classe final Carro carro1 = new Carro(); 7.4 Polimorfismo carro1.ano = "2001"; 7.4.1 Coleções Heterogêneas de Objetos carro1.modelo= "fusca"; 7.4.2 Determinando a Classe de um Objeto carro1.cor = "prata"; 7.4.3 Casting de Referências de Objetos 7.4.4 Operações Polimórficas por Sobreposição de Métodos 7.4.4.1 Invocando Métodos Sobrepostos 7.4.4.2 Regras sobre Sobreposição de Métodos 7.4.5 Modificador de Método final 7.5 Encapsulamento 7.5.1 Pacotes 7.5.1.1 Criando pacotes 7.5.1.2 Importando Pacotes 7.5.1.3 Localização de Classes e CLASSPATH 7.5.1.4 Importação Estática 7.5.2 Modificadores de Acesso 7.5.2.1 Público - public Figura 2.4 – Layout Memória após inicialização 7.5.2.2 Protegido – protected novo alias 7.5.2.3 //criando Padrão ou Pacote Carro carro2 7.5.2.4 Privado - private = carro1; 7.6 Métodos de Configuração e Captura 7.6.1 Métodos Getter 7.6.2 Métodos Setter 7.6.3 Aplicando Encapsulando no Exemplo Funcionario/Gerente 7.7 Fazer Laboratório 6 7.8 O operador == comparado ao Método 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 Herança entre Interfaces 7.10.6 Interface vs. Classe Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto 7.11 Classes Aninhadas 7.11.1 Classe Aninhada 7.11.2 Classes aninhadas estáticas 7.11.3 Classes internas locais 2.3 Membros de Instância 7.11.4 Classes internas anônimas Cada objetode criado 7.11.5 Modificadores acesso deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um 7.12 Tipos Enumerados objeto. Isto importante, 7.13 FazeréLaboratório 7 pois denota que um método pertence a cada objeto da 7.14 Exercícios classe. Porém não devemos confundir isto com a implementação do método, que 8é compartilhada Exceções por todas as instâncias da classe. 8.1 Manipulando Exceções 8.2 Categorias de Exceções 2.3.1 Invocação de Métodos 8.2.1 Exceções Verificadas e Não-verificadas Objetos Exceções se comunicam pela troca de mensagens, isto significa que um 8.3 Lançando objeto pode ter quethrow mostrar um comportamento particular invocando uma 8.3.1 A palavra-chave operaçãoDesviando apropriada que foi definida no objeto. Em Java, isto é feito pela 8.3.2 Exceções 8.4 Exceções chamadaCriando de um método em um objeto usando o operador binário "." (ponto), 8.5 Sobrescrita de Métodos e Exceções devendo especificar a mensagem completa: o objeto que é o recebedor da 8.6 Fazer Laboratório 8 mensagem, o método a ser invocado e os argumentos para o método (se houver). 8.7 Exercício O método invocado no recebedor pode também enviar informações de volta ao 9 Tipos Genéricos objeto chamador através de um valor de retorno. O método chamado deve ser 9.1 Por que Generics?

um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais www.3way.com.br

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 variáveis 93 104 95 106 em um objeto constituem 108 o seu estado. 97 97 108 Dois objetos distintos 97têm 108 o mesmo estado se108 suas 97 99 os 111 variáveis membro têm 100 112 mesmos valores. 100 112 100 112 101 113 102 114 103 115 105 117 105 117 105 117 105 117 3

Todos os direitos reservados a 3Way Networks

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

412

Linguagem de Programação JavaJava Linguagem de Programação 9.2 Declarando uma Classe Utilizando Generics 9.2.1 Limitação "Primitiva" //atribuindo valor a variável referência 9.2.2 Limitando Genéricos Carro carro1 = new Carro(); 9.3 Declarando Métodos Genéricos carro1.ano = "2001"; 9.4 Subtipagem carro1.modelo= "fusca"; 9.5 Usando o Coringa carro1.cor = "prata"; 9.6 Fazer Laboratório 9 9.7 Exercício 10 Java Collections 10.1 Hierarquia Das Interfaces 10.2 Generics e Coleções Java 10.3 Percorrendo Collections 10.3.1 Laço 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 Memória após inicialização 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 Coleções: Collections.sort 10.9 Fazer Laboratório 10 10.10 Exercício 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 Memória duas variáveis referência para o mesmo objeto 11.3.4 Painéis e Layouts Complexos 11.4 Componentes GUI Swing 11.4.1 Configurando Containers JFrame e JApplet 11.5 Manipulação de Eventos 2.3 Membros de Instância 11.5.1 Registrando Classes Ouvintes (Listeners) Cada Event objeto criado deverá ter sua própria instância de variáveis 11.5.2 Classes (atributos) definidas pela classe. Os métodos definem o comportamento de um 11.5.3 Listeners de Evento objeto. Isto é importante, pois denota que um método pertence a cada objeto da 11.5.3.1 Método de ActionListener 11.5.3.2 Métodos de devemos MouseListener classe. Porém não confundir isto com a implementação do método, que 11.5.3.3 Métodos de MouseMotionListener é compartilhada por todas as instâncias da classe. 11.5.3.4 Métodos WindowListener 11.5.3.5 Roteiro para criação de Aplicações Gráficas com tratamento de eventos 2.3.1 Invocação de Métodos 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 Laboratório 11 operaçãoExercício apropriada que foi definida no objeto. Em Java, isto é feito pela 11.8 12 código chamadaInternacionalização de um métododo em um objeto usando o operador binário "." (ponto), 12.1 Formatação devendo especificar a mensagem completa: o objeto que é o recebedor da 12.2 ResourceBoundle mensagem, o método a ser invocado e os argumentos para o método (se houver). 12.3 Menssages Formatadas O método invocado no recebedor pode também enviar informações de volta ao 12.4 Fazer Laboratório 12 objeto chamador através de um valor de retorno. O método chamado deve ser 12.5 Exercícios

um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais www.3way.com.br

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 variáveis 149 135 150 136 em um objeto constituem 150 136 o seu estado.150 136 Dois objetos distintos 151têm 137 o mesmo estado se137 suas 151 137 151 os variáveis membro têm 139 153 mesmos valores. 140 154 143 157 143 157 143 157 143 157 144 158 144 158 145 159 145 159 4

Todos os direitos reservados a 3Way Networks

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

512

Linguagem de Programação JavaJava Linguagem de Programação 13 13.1 13.2 13.3 13.4

Exportação de Aplicação Jar executável //atribuindo valor a variável referência Java Web Start Carro carro1 = new Carro(); Fazer Laboratório 13 carro1.ano = "2001"; Exercícios carro1.modelo= "fusca"; carro1.cor = "prata";

159 145 145 159 145 159 146 160 146 160

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

//criando novo alias Carro carro2 = carro1;

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

2.3

Membros de Instância

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

Os valores das variáveis em um objeto constituem o seu estado. Dois objetos distintos têm o mesmo estado se suas variáveis membro têm os mesmos valores.

5

Todos os direitos reservados a 3Way Networks

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

612

Linguagem Linguagem de de Programação Programação Java Java

1

Introdução à Linguagem Java

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

Os programas feitos em Java rodam em diferentes ambientes graças a JVM (Java Virtual Machine).

Carro carro2 = carro1;

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

6

712

Linguagem Linguagemde deProgramação ProgramaçãoJava Java 1.1.4 Java Card Java Card é umavalor tecnologia que permite pequenos aplicativos (applets) //atribuindo a variável referência carro1 Java = new Carro(); baseadosCarro em plataforma sejam executados com segurança em smart cards e carro1.ano "2001";de processamento e armazenamento, como dispositivos similares com=limitações carro1.modelo= "fusca"; o Java Ring. É muito utilizado em cartões SIM (usados em celulares GSM) e em carro1.cor = "prata"; caixas eletrônicos. Os produtos Java Card são baseados nas especificações da plataforma Java Card desenvolvida pela Sun Microsystems, e suas principais características são portabilidade e segurança.

1.2

Quanto tempo é necessário para aprender Java?

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 programação, é um conjunto de ferramentas e bibliotecas de apoio ao desenvolvimento de sistemas em diversas áreas de tecnologia de software. Porém, mais importante que aprender a linguagem é aprender a programar no Figura 2.4 – Layout Memória após inicialização paradigma de orientação a objetos. //criando novo alias O texto abaixo é uma tradução do artigo de autoria de Peter Norvig Carro carro2 = carro1; (http://norvig.com/21-days.html, para ver original ou busque na internet "Aprenda a programar em dez anos"), os conselhos apresentados servem para todos os que desejam ou necessitam aprender programar.

Não 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 orientação a objetos.

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

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

7

812

Linguagem de Programação Java

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

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

//criando novo alias Carro carro2 = carro1;

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

2.3

Membros de Instância

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

Os valores das variáveis em um objeto constituem o seu estado. Dois objetos distintos têm o mesmo estado se suas variáveis membro têm os mesmos valores.

Todos os direitos reservados a 3Way Networks

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

912

Linguagem Linguagemde deProgramação ProgramaçãoJava Java por outro. Veja o que é preciso para entender e consertar quando o programador original não está por

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

1.3

O curso

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

//criando alias Este curso énovo abordado de forma bastante prática, ou seja, construindo programas com a linguagem de Carro carro2 = carro1; programação o máximo possível durante o treinamento.

Você tem um material com a teoria necessária e um conjunto de atividades práticas, denominadas laboratórios. Todo o conteúdo corresponde ao que já definimos como JSE. O material não é e não deve ser adotado como sua única referência para estudos da linguagem, a aquisição de livros ou leitura do tutorial oficial da Sun é recomendado. Seu material está ordenado numa seqüência didática que consideramos a mais adequada para o seu aprendizado. A cada exemplo ou exercício apresentado em um capítulo tentamos não utilizar recursos da linguagem que ainda não tenham sido apresentados no capítulo corrente ou anterior. No entanto, sempre que possível nós introduzimos vários destes recursos em exemplos de códigos com o objetivo de apresentá-lo deliberadamente para você ou simplesmente para simplificar o código exemplo. Assim vamos apresentado algumas bibliotecas da linguagem, sem entrar em detalhes, para que você vá se familiarizando com uso das mesmas. 1.3.1 Convenções de Código Os códigos e exemplos apresentados neste material seguem as convenções de código-fonte Java, sempre Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto que possível, mas podem sofrer adaptações para melhorar a impressão. Você deve se familiarizar com essa convenção veja em http://www.oracle.com/technetwork/java/codeconv-138413.html

2.3

Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis Os valores das variáveis 1.3.2 Sobre os exercícios (atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem No curso Java e Orientação a Objetos, é recomendado estudar em casa aquilo que foi visto durante a aula, objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado. fazendo os exercícios que não foram feitos ou refazendo os que já foram feitos em sala. classe. Porém não devemos confundir isto com a implementação do método, que Dois objetosa distintos Os laboratórios deverão ser resolvidos durante o treinamento com objetivo de exercitar linguagemtêm de é compartilhada por todas as instâncias da classe. programação e não a sua capacidade de programar. Contudo eles apresentam uma pequena aplicação será o mesmo estado que se suas completada ao final de todos os laboratórios. variáveis membro têm os 2.3.1 Invocação de Métodos Durante a execução de um laboratório o mesmo pode necessitar de listagem demesmos códigos que já foram valores. Objetos se comunicam pela troca de mensagens, isto significa que um construídos nos laboratórios anteriores, portanto não deixe de fazer o exercício do laboratório, especialmente as objeto que podeforem ter que mostrar particular invocando uma estimada e o instrutor deverá tarefas indicadas paraum vocêcomportamento fazer. Os laboratórios possuem uma duração operação apropriada que foi definida no objeto. Em Java, isto é feito pela do curso, se sentir dificuldade segui-la a fim de concluir os laboratórios com sucesso. Não atrase o andamento chamada de um método em um objeto usando o operador binário "." (ponto), chame o instrutor. devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). 1.4 Fazer Laboratório 0 O método invocado no recebedor pode enviar informações dede volta ao Siga instruções do Laboratório 0também e tome cuidado com o tempo execução, sempre recorra ao instrutor objeto chamador através de um valor de retorno. O método chamado deve ser em caso de dúvida, nunca deixe uma dúvida sem reposta. um que esteja definido pelo objeto. os direitos reservados a 3Way Seja Todos um Profissional Aprendendo comNetworks Profissionais Seja um Profissional Aprendendo com Profissionais www.3way.com.br www.3way.com.br

8

12 10

Linguagem Linguagem de deProgramação ProgramaçãoJava Java

2

Bases da Programação em Java

//atribuindo valor nossa a variável Antes de começarmos jornada referência no mundo da programação em Carro carro1 = new Carro(); Java, é importante compreendermos a terminologia básica e os conceitos em carro1.ano = "2001"; programação orientada a objetos. Neste capítulo veremos os princípios básicos carro1.modelo= "fusca"; da programação em Java= sem aprofundamento dos temas, que serão revistos carro1.cor "prata";

com maior profundidade nos capítulos subseqüentes.

2.1

Classes

A essência da Programação Orientada a Objetos (POO) consiste em modelar as abstrações usando Classes e Objetos.

Abstrações são o fundamento utilizado por nós, seres humanos, a fim de lidar com a complexidade. Uma abstração demonstra o comportamento e propriedades essenciais de um objeto, que o diferencia de outro objeto qualquer. Por exemplo, ao utilizar um carro, você não pensa nele como um conjunto de dezenas de milhares de peças individuais. Pensamos em um carro como um único objeto sobre qual podemos realizar um determinado conjunto de operações. Essa abstração permite que as pessoas utilizem um carro sem nenhum conhecimento sobre mecânica de automóveis. Podemos ignorar os detalhes do motor como: Figura 2.4 – Layout Memória após inicialização sistema de injeção de combustíveis, transmissão, sistema de freios funcionam //criando novo aliasAo invés disso, utilizamos o objeto automóvel como um elemento único. individualmente ou em conjunto. Carro carro2 = carro1; A essência da Programação Orientada a Objetos (POO) consiste modelar as abstrações usando Classes e Objetos. A parte difícil deste trabalho é encontrar a abstração mais correta. Uma Classe modela uma abstração pela definição das Um Objeto é qualquer propriedades e comportamentos dos objetos representados pela abstração. Uma coisa criada a partir dessa Classe, então, especifica a categoria dos Objetos e funciona como uma "planta Classe, algo contendo as baixa" na criação desses objetos. Um Objeto é qualquer coisa criada a partir dessa propriedades e Classe, algo contendo as propriedades e comportamentos definidos na Classe. comportamentos Voltando ao exemplo do carro, um grupo de engenheiros mecânicos criam o definidos na Classe. projeto de um carro (a Classe) e a partir deste projeto são reproduzidos milhares de automóveis (os Objetos), praticamente idênticos entre si. Propriedades de um Objeto da Classe são chamados de atributos e são definidos usando variáveis em Java, também denominado Campos da Classe. O comportamento de um Objeto, também conhecido por operações, são definidos usando-se emvariáveis Java. referência Variáveis e ométodos utilizados na definição da classe Figura 2.5 – Layoutmétodos Memória duas para mesmo objeto são, juntos, denominados de Membros da Classe. Usando notação de Classe da UML (Unified Modeling Language), podemos descrever graficamente o exemplo de uma classe Carro, ver Figura 2.1. 2.3 Membros de Instância Ambos ter atributos (variáveis) e métodos são mostrados na forma expandida na Cada objeto criado deverá sua própria instância de variáveis Os valores das variáveis Figura 2.1. (atributos) definidas pela classe. Os métodos definem o comportamento de um

objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela chamada de um método em um objeto usando o operador binário "." (ponto), devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao Figura 2.1 Notação UML para Classe objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto. Seja Todos um Profissional Aprendendo comNetworks Profissionais os direitos reservados a 3Way www.3way.com.br Seja um Profissional Aprendendo com Profissionais www.3way.com.br

em um objeto constituem o seu estado. Dois objetos distintos têm o mesmo estado se suas variáveis membro têm os mesmos valores.

9

12 11

Linguagem Linguagem de de Programação Programação Java Java 2.1.1 Declarando Membros: Variáveis e Métodos Na Listagem 2.1valor mostraa avariável implementação em Java da definição da classe mostrada na Figura 2.1. O //atribuindo referência Carro = preocupar new Carro(); exemplo, apesarcarro1 de não se com a utilidade desta implementação, mostra as principais características da carro1.ano = "2001"; definição 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"; } // Métodos public String acelerar() Figura 2.4 – { Layout Memória após inicialização return "acelerando !"; //criando novo alias } Carro carro2 carro1; public =String frear() { return "freando !"; } public String abrirPorta() { return "abre porta !"; } } Listagem 2.1 – Elementos Básicos da Definição de uma Classe

A classe possui quatro variáveis, toda variável em Java deve ter um tipo, neste caso todas são do tipo String (linhas 4 a 7), possui três métodos (linhas 13 a 15) representado as operações disponíveis aos objetos da classe e um método especial (linha 10) com o mesmo nome da classe, este método é denominado construtor e seu propósito é inicializar o objeto quando este é criado a partir da classe. String é uma classe em Java, ela armazena um conjunto de caracteres. Figura 2.5 – Layout Memória duas variáveis referência o mesmo objetodetalharemos a classe String Como estamos aprendendo o que éparauma classe, posteriormente. Um Objeto é instância de

2.3

uma Classe.

Membros de Instância2.2

Objetos

Cada objeto criado deverá ter própria variáveis valores dasusando-se variáveisa Umsua objeto é umainstância instância de de uma classe. EleOs é construído (atributos) definidas pela classe.classe, Os métodos 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 métodoreal pertence a cadaque objeto da representa; casa, éque umaum entidade da abstração a classe usando o exemplo o seu estado. classe. Porém não devemos confundir isto com implementação do método, que criado a partir do projeto dos do carro, uma ainstância representa um veículo Dois objetos distintos têm é compartilhada por todas as instâncias da classe. engenheiros mecânicos. Um objeto deve ser explicitamente criadoestado a partirse desuas uma o mesmo classe antes que possa ser utilizado em um variáveis membro têm os 2.3.1 Invocação de Métodos programa. mesmos da valores. O propósito 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 Instância Classes operação Em apropriada que são foi manipulados definida no através objeto. de Emreferências Java, istodeé objetos feito pela Java, objetos (ou o objeto que está sendo chamada de um método em um objeto usando o operador binário "." (ponto), simplesmente referência). O processo de criação de um objeto normalmente criado. devendo a mensagem completa: o objeto que é o recebedor da envolve osespecificar seguintes passos: mensagem, o métododea ser os argumentos paracorresponde o método (sea houver). Declaração umainvocado variávele de referência: isto declarar O método invocado pode também para enviararmazenar informações de volta ao uma variávelnoderecebedor uma classe apropriada a referência ao objeto chamador através de um valor de retorno. O método 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

10 12 12

Linguagem de Programação Java

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

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

//criando novo alias Carro carro2 = carro1;

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

2.3

Membros de Instância

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

Os valores das variáveis em um objeto constituem o seu estado. Dois objetos distintos têm o mesmo estado se suas variáveis membro têm os mesmos valores.

Todos os direitos reservados a 3Way Networks

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

12 13

Linguagem Linguagem de de Programação Programação Java Java //declaracao de duas variaveis referência que denota dois //objetos distintos, nomeando dois objetos carro respectivamente //atribuindo valor a variável referência Carro Carro carro1, carro1 =carro2; new Carro();

carro1.ano = "2001"; Criação do Objeto:"fusca"; 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 instância da classe. //criacao de dois Objetos distintos carro1 = new Carro(); carro2 = new Carro();

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

Figura 2.2 – Instâncias da Classe em UML

A Figura 2.2 mostra a notação UML para classe e objetos. A representação gráfica de um objeto é muito parecida com a de um classe. Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto 2.2.2 Referência de Objetos Com já foi observado, uma referência nos permite manipular objetos que foram criados e armazenados na 2.3 Membros de Instância memória Cada do computador. Em Java, objetos podem ser utilizados de uma referência que está armazenada objeto criado deverá tersósua própria instânciaa partir de variáveis Os valores das variáveis em uma variável. Um objeto pode ter váriasdefinem referências, também chamadas O objeto pode ser (atributos) definidas pela classe. Os métodos o comportamento de um de aliases. em um objeto constituem manipulado por qualquer um desses aliases. objeto. Isto é importante, pois denota que um método pertence a cada objeto da

classe. Porém não devemos confundir isto com a implementação do método, que //declaracao é compartilhada por todas as instâncias da classe. Carro carro1;

2.3.1 Invocação de Métodos Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela chamada de um método em um objeto usando o operador binário "." (ponto), devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto. Figura 2.3 – Layout Memória após declaração Todos os direitos reservados a 3Way Networks

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

o seu estado. Dois objetos distintos têm o mesmo estado se suas variáveis membro têm os mesmos valores.

11

12 14

Linguagem Java Linguagem de de Programação Programação Java

//atribuindo //atribuindo valor valor a a variável variável referência referência 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 Figura 2.4 2.4 –– Layout Layout Memória Memória após após inicialização inicialização

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

alias alias carro1; carro1;

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

2.3 2.3

Membros de de Instância Instância Membros

Cada Cada objeto objeto criado criado deverá deverá ter ter sua sua própria própria instância instância de de variáveis variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um um (atributos) definidas pela classe. Os métodos definem o comportamento de objeto. Isto é importante, pois denota que um método pertence a cada objeto da objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém Porém não não devemos devemos confundir confundir isto isto com com aa implementação implementação do do método, método, que que classe. éé compartilhada compartilhada por por todas todas as as instâncias instâncias da da classe. classe. 2.3.1 Invocação Invocação de de Métodos Métodos 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 operação apropriada apropriada que que foi foi definida definida no no objeto. objeto. Em Em Java, Java, isto isto éé feito feito pela pela operação chamada de um método em um objeto usando o operador binário "." (ponto), chamada de um método em um objeto usando o operador binário "." (ponto), devendo especificar especificar aa mensagem mensagem completa: completa: o o objeto objeto que que éé o o recebedor recebedor da da devendo mensagem, o método a ser invocado e os argumentos para o método (se houver). mensagem, o método a ser invocado e os argumentos para o método (se houver). O método método invocado invocado no no recebedor recebedor pode pode também também enviar enviar informações informações de de volta volta ao ao O objeto chamador chamador através através de de um um valor valor de de retorno. retorno. O O método método chamado chamado deve deve ser ser objeto um que esteja definido pelo objeto. um que esteja definido pelo objeto. Todos os direitos reservados a 3Way Networks

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

Os Os valores valores das das variáveis variáveis em um objeto constituem em um objeto constituem o o seu seu estado. estado. Dois objetos distintos têm têm Dois objetos distintos o o mesmo mesmo estado estado se se suas suas variáveis membro têm variáveis membro têm os os mesmos valores. mesmos valores.

12

12 15

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

Em Java a chamada de um método é feito usando o operador binário "." (ponto).

2.3.1.1 Chamando Métodos de Objeto Para ilustrar como chamar os métodos, utilizaremos como exemplo a classe String. Pode-se usar a documentação da API Java para conhecer todos os atributos e métodos disponíveis na classe String. Posteriormente, iremos criar nossos próprios métodos. Para chamar um método a partir de um objeto, escrevemos o seguinte: nomeDoObjeto.nomeDoMétodo([argumentos]); Figura 2.4 – Layout Memória após inicialização

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

Declaração do método

Definição

public char charAt(int index)

Retorna o caractere especificado no índice. Um índice vai de 0 até length() - 1. O primeiro caractere da seqüência está no índice 0, o seguinte, no índice 1, e assim sucessivamente por todo o array.

public boolean equalsIgnoreCase (String outraString)

Compara o conteúdo de duas Strings, ignorando maiúsculas e minúsculas. Duas strings são consideradas iguais quando elas têm o mesmo tamanho e os caracteres das duas strings são iguais, sem considerar caixa alta ou baixa.

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto Tabela 4: Exemplos de Métodos da classe String

Usando os métodos:

2.3

Membros de Instância

Stringcriado str1 deverá = "Hello"; Cada objeto ter sua própria instância de variáveis Os valores das variáveis char x = str1.charAt(0); (atributos) definidas pela classe. Os métodos definem o comportamento de um // retornará o caracter H e o armazenará no atributo xem um objeto constituem objeto. Isto é importante, pois denota que um método pertence a cada objeto da o seu estado. String str2 = "hello"; classe. Porém não devemos confundir isto com a implementação do método, que Dois objetos distintos têm retornado o valor booleano true é compartilhada// poraqui todas será as instâncias da classe. boolean result = str1.equalsIgnoreCase(str2);

2.3.1 Invocação de Métodos 2.3.2 Envio de Argumentos para Métodos Objetos se comunicam pela troca de mensagens, isto significa que um Em exemplos anteriores, enviamos atributos para invocando os métodos. objeto pode ter que mostrar um comportamento particular uma Entretanto, não fizemos nenhuma distinção entre os diferentes tipos operação apropriada que foi definida no objeto. Em Java, isto de é atributos feito pela que podem argumento para os ométodos. chamada deser umenviados métodocomo em um objeto usando operador binário "." (ponto),

Há duas formas se o mesmo estadopara se suas enviar argumentos paraos variáveis membro têm um método, o primeiro mesmos valores. é envio por valor e o segundo é envio por referência.

devendo especificar a mensagem completa: o objeto que é o recebedor da 2.3.2.1 Passagem deaParâmetros valor mensagem, o método ser invocadopor e os argumentos para o método (se houver). Quando ocorre uma passagem valor,enviar a chamada do método faz uma O método invocado no recebedor pode por também informações de volta ao cópia do valor do atributo e o envia como argumento. O método chamado não modifica o valor original do argumento mesmo que estes valores objeto chamador através de um valor de retorno. O método chamado deve ser sejam modificados durante operações de cálculo implementadas pelo método. um que esteja definido pelo objeto. Por exemplo: 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

13

12 16

Linguagem de Programação Java

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

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

//criando novo alias Carro carro2 = carro1;

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

2.3

Membros de Instância

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

Os valores das variáveis em um objeto constituem o seu estado. Dois objetos distintos têm o mesmo estado se suas variáveis membro têm os mesmos valores.

Todos os direitos reservados a 3Way Networks

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

12 17

Linguagem de Linguagem de Programação Programação Java Java

public classvalor PassagemPorValor { //atribuindo a variável referência 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 método teste // envia i para o método teste teste(i);---------------------------------------+ // exibe o valor de i não modificado | +---------->System.out.println(i); | | } | | public static void teste(int j) { são obrigatórios, enquanto que os valores contidos entre [ ] sãodistintos opcionais.têm Dois objetos é compartilhada por todas as instânciasválidas: da classe. Exemplos de declarações e inicializações

2.3.1 char Invocação de Métodos 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; operação apropriada que foi definida no objeto. Em Java, isto é feito pela float areaMesa = 4.5f; chamada de um método em um objeto usando o operador binário "." (ponto), b1=2, b2=4; devendobyte especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). int i=10; O método invocado no recebedor pode também enviar informações de volta ao int j=i; objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais www.3way.com.br

o mesmo estado se suas variáveis membro têm os mesmos valores.

21

Todos os direitos reservados a 3Way Networks

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

12 26

Siga-nos também no Twitter! twitter.com/3waynet

Linguagem de Programação JavaJava Linguagem de Programação JAVA é muito exigente com relação ao tipo de dado, é uma linguagem fortemente tipada. O compilador não permitirá que você use o operador de atribuição (=) para inserir uma referência de objeto de uma classe //atribuindo valor a variável referência Elefante em uma carro1 variável referência do tipo da classe Coelho, nem permitirá que se atribua um valor do tipo float a Carro = new Carro(); uma variável 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 variáveis: public class ExemploVariaveis { public static void main( String[] args ){ //declara uma variável com nome result e tipo boolean boolean result; //declara uma variável com nome option e tipo char char option; Figura 2.4 – Layout Memória após inicialização

//criando novo alias // atribui o símbolo C para a variável Carro carro2 = carro1; option = 'C'; //declara uma variável com nome grade e tipo double // e a inicializa com o valor 0.0 double grade = 0.0; } } Listagem 3.2 – Declaração de variáveis

3.5.2 Exibindo o valor de uma Variável Para exibirmos em qualquer dispositivo de saída o valor de uma variável, podemos fazer uso dos seguintes comandos: System.out.println() ou System.out.print()

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

Aqui está um simples programa como exemplo:

2.3

public class ImprimeVariavel Membros de Instância

{

Cada objeto criado deverá ter sua própria instância de variáveis public static void main(String[] args) { (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, poisint denota que =um10; método pertence a cada objeto da value char x;isto com a implementação do método, que classe. Porém não devemos confundir x = 'A';da classe. é compartilhada por todas as instâncias

Os valores das variáveis em um objeto constituem o seu estado. Dois objetos distintos têm o mesmo estado se suas System.out.println(value); System.out.println("O valor de x = " + x); variáveis membro têm os 2.3.1 Invocação de Métodos } mesmos valores. Objetos } se comunicam pela troca de mensagens, isto significa que um

objeto pode ter que mostrar um comportamento particular invocando uma Listagem 3.3 – Imprimindo valor de variáveis operação apropriada que foi definida no objeto. Em Java, isto é feito pela chamada de um método em um objeto usando o operador binário "." (ponto), 3.5.3 Variáveis de Referência e de Valor devendo especificar a mensagem completa: o objeto que é o recebedor da Java suporta duas classes de variáveis, elas podem ser: de referência ou de valor. mensagem, o método a ser invocado e os argumentos para o método (se houver). As variáveis de valor (ou primitivas) são aquelas que armazenam dados no exato espaço de memória onde O método invocado no recebedor pode também enviar informações de volta ao a variável está. objeto chamador através de um valor retorno. método chamado deve de ser memória onde o dado está As variáveis de referência são de aquelas queOarmazenam o endereço um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 22 www.3way.com.br

Todos os direitos reservados a 3Way Networks

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

12 28

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

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

Identificador

Valor

0x10001

num

10

:

:

:

0x20002

nome

0x30001

:

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

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

"Hello"

Figura 3.2 – Memória após inicialização de variáveis.

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

3.6

Tipos Básicos em Java

3.6.1 Literais Java Um literal é um valor constante, este valor pode ser numérico (inteiros e ponto-flutuantes), caracteres, booleanos ou cadeia de caracteres (String). Há ainda o literal null que representa uma referência nula (sem destino). 3.6.2 Tipos Dados Primitivos 3.6.2.1 Lógico – boolean Figuravalores 2.5 – Layout Memória duas referência o mesmo objeto O tipo booleano tem dois literais true e variáveis false, ele podepara representar dois estados: true (verdadeiro) ou false (falso). No exemplo abaixo é declarada a variável verdade do tipo boolean e é atribuída a esta o valor true.

2.3

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

Membros de Instância

boolean verdade = true;

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos 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 ummétodo CARACTER UNICODE, conjunto classe. Porém não devemos confundir isto com a implementação do método, que caracteres de 16 bits sem sinal, em substituição ao conjunto de caracter ASCII de 8 ébits. compartilhada por todas classe. especiais das línguas. Unicode permite o uso as deinstâncias símbolos edacaracteres

Os valores das variáveis em um objeto constituem o seu estado. Dois objetos distintos têm o mesmo estado se suas Para usar um literal de caracter devemos cercar o caractere entre delimitadores de aspasmembro simples.têm Por os variáveis 2.3.1 Invocação exemplo, a letra A,deéMétodos representada como o 'A'. Ou podemos ainda usar o código hexadecimal do caractere mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um

UNICODE, por exemplo '\u0041', esta é a representação 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 operação foi definida no objeto. EmdeJava, isto é '\r' feito pelo códigoapropriada do caracter.que Por exemplo, '\n' para o caracter nova-linha, parapela o retorno de "carro-do-carro", o chamada de um método em um objeto usando o operador binário "." (ponto), '\b' para o "backspace". devendoOespecificar mensagem completa: o objeto o recebedor da representar sequencias de tipo String,a que não é um tipo primitivo mas que uma éclasse, é usado para mensagem, o método a ser invocado e os argumentos para o método (se houver). caracteres. Por exemplo: O método invocado no recebedor pode também enviar informações de volta ao "Um literal String caracter de escape objeto chamador através de umpode valorconter de retorno. O método chamado\n". deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 23 www.3way.com.br

Todos os direitos reservados a 3Way Networks

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

12 29

Linguagem de de Programação JavaJava Linguagem Programação

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

//atribuindo valor a variável referência Carro carro1 = new Carro(); // declara e inicializa carro1.ano = "2001"; uma variável char char ch = 'A'; carro1.modelo= "fusca"; carro1.cor = "prata"; // declara e inicializa duas variáveis char char ch1,ch2; ch1='\U0020'; ch2='B;

// declara duas variáveis String e as inicializa String deseja = "Bom dia !! \n"; String lembre = "Strings são imutáveis !"; // declara duas variáveis String String str1,str2;

Literais do tipo String são seqüências de caracteres que devem estar cercadas por aspas-duplas ("") e devem começar e terminar na mesma linha.

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

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

2.3

Tamanho (bits)

Membros de Instância

Tipo

Faixa

7 Cada objeto criado deverá ter sua 8 byte própria instância -27 a 2de - 1 variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um 16 short -215 a 215 - 1 objeto. Isto é importante, pois denota que um método pertence a cada objeto da 31 classe. Porém não devemos que a 2método, -1 32 confundir isto com int a implementação -231do é compartilhada por todas as instâncias da classe. 64 long -263 a 263 - 1

Os valores das variáveis em um objeto constituem o seu estado. Dois objetos distintos têm o mesmo estado se suas variáveis membro têm os mesmos valores.

2.3.1 Invocação de Métodos 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 operação apropriada que– float foi definida 3.6.2.4 Ponto Flutuante e double no objeto. Em Java, isto é feito pela chamadaOsdeliterais um método em um objeto usando o operador (ponto), de ponto flutuante podem ser expressos em binário notação"." padrão ou científica. Por exemplo, 123.4 devendo especificar a enquanto mensagem123.4e2 completa: o notação objeto que é o recebedor da tipos fracionários são do tipo está na notação padrão, está na científica. Os literais dos mensagem, o método a ser64-bit) invocado os argumentos para ouma método (se houver). de dados double (um valor porepadrão. Para inicializar variável com o tipo de dados float (32-bit), de O método invocado no recebedor enviar informações de volta ao menor precisão, adicione o caracterepode "f" outambém "F" ao literal: 3.1415F. objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 24 www.3way.com.br

Todos os direitos reservados a 3Way Networks

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

12 30

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

double

63

de dados double e do tipo float.

63

-2 a 2 - 1

Tabela 3.2: Tipos e faixa de valores dos Número Fracionários

3.6.2.5 Exemplos de declarações e atribuições O seguinte programa demonstra como declarar e atribuir valores para variáveis dos tipos int, float, boolean, char e String: public class Atribui { Figura 2.4 – Layout Memória após inicialização

public static void main (String args []) { //criando novo alias Carro carro2//= declara carro1;variavel integer int x, y; // declara variavel ponto-flutuante float z = 3.414f; // declare e atribui double double w = 3.1415; // declare e atribui boolean boolean verdadeiro = true; // declare variavel caracter char c;

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

O método invocado no recebedor pode também enviar informações de volta ao Listagem 3.4 O – Exemplo atribuições objeto chamador através de um valor de retorno. método chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais www.3way.com.br

25

Todos os direitos reservados a 3Way Networks

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

12 31

Linguagem de Programação JavaJava Linguagem de Programação

3.7

Conversões

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

O mesmo ocorre no seguinte trecho: int i = 3.14;

O mais interessante, é que nem mesmo o seguinte código compila: Figura 2.4pode – Layoutconter Memória após double d = 5; // ok, o double um inicialização número inteiro

int i = d; // alias não compila //criando novo Carro carro2 = carro1;

Apesar de 5 ser um bom valor para um int, o compilador não tem como saber que valor estará dentro desse double no momento da execução, mesmo que você esteja lendo o valor literal de d no seu código fonte, o compilador não tem como garantir que essa atribuição ocorra sem perda de valores. É como colocar uma xícara de café grande numa xícara pequena, alguma coisa vai derramar. Já no caso a seguir é o contrário: int i = 5; double d2 = i;

O código acima compila sem problemas, já que um double pode guardar um número com ou sem ponto flutuante. Todos os inteiros representados por uma variável do tipo int podem ser guardados em uma variável double, então não haverá problemas com o código acima. 3.7.1 Casting de Tipos Primitivos Às vezes, precisamos que um número quebrado seja arredondado e armazenado em um número inteiro. Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto Para fazer isso sem que haja o erro de compilação, é preciso ordenar que o número quebrado seja moldado (cast) como um número inteiro. Esse processo recebe o nome de casting.

2.3

Membros double d3 de = Instância 3.14;

int = (int) d3; deverá ter sua própria instância de variáveis Cadai objeto criado

Os valores das variáveis

(atributos) definidas pela classe. Os métodos definem o comportamento de um em um objeto constituem O casting foi feito pois para denota moldar que a variável d3 como um int.aOcada valorobjeto de i agora ocorre entre objeto. Isto é importante, um método pertence da é 3. O mesmo o seu estado. valores int e long. classe. Porém não devemos confundir isto com a implementação do método, que Dois objetos distintos têm é compartilhada por todas as instâncias da classe.

o mesmo estado se suas long x = 10000; int i = x; // não compila, pois pode estar perdendo informação variáveis membro têm os

2.3.1 Invocação de Métodos mesmos valores. Objetos se comunicam de mensagens, isto significa que um E, se quisermos realmentepela fazertroca isso, fazemos o casting: objeto pode ter que mostrar um comportamento particular invocando uma operaçãolong apropriada que foi definida no objeto. Em Java, isto é feito pela x = 10000; i =método (int) em x; um objeto usando o operador binário "." (ponto), chamadaint de um devendo especificar a mensagem completa: o objeto que é o recebedor da 3.7.2 Literais numéricos e Promoção mensagem, o método a ser invocado eNumérica os argumentos para o método (se houver). Alguns castings quando atribuímos valores literais numéricos, por exemplo: O método invocado no aparecem recebedortambém pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 26 www.3way.com.br

Todos os direitos reservados a 3Way Networks

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

12 32

Linguagem de Programação JavaJava Linguagem de Programação float x = 0.0;

//atribuindo valor a variável referência O código acima não compila pois todos os literais ponto flutuante são considerados double pelo Java. E Carro carro1 = new Carro(); float não pode receber um double sem perda de informação, 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 maiúscula ou minúscula, indica que aquele literal deve ser tratado como float. long l = 0.0L;

A letra L, que também pode ser maiúscula ou minúscula, indica que aquele literal deve ser tratado como long. Outro caso, que é mais comum: double d = 5; Figura 2.4 – Layout Memória após inicialização 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 intermediário sempre para o maior tipo que apareceu durante as operações, no caso o double. Em caso de tipos menores como byte e short o Java os promove para int na hora de fazer as contas. Até casting com variáveis do tipo char podem ocorrer. O único tipo primitivo que não pode ser atribuído a nenhum outro tipo é o boolean.

3.8

Classes Wrapper (Empacotadoras)

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

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

public static void main(String[] args) { = new Float("1.1f"); // compila, não considera double: = new Float("1.1"); Cada objeto criado ter Double("1.2"); sua própria instância de variáveis Os valores das variáveis Doubledeverá d = new (atributos) definidas pela Os métodos //classe. retorna erro: definem o comportamento de um em um objeto constituem //pois Character c = Character("e"); objeto. Isto é importante, denota que umnew método pertence a cada objeto da o seu estado. Boolean b1 = new Boolean("false"); classe. Porém não devemos confundir isto com a implementação do método, que Dois objetos distintos têm Boolean b2 = new Boolean("True"); é compartilhada por todas instâncias não da classe. // as compila, há diferenciação de maiúsculas: o mesmo estado se suas Boolean b3 = new Boolean("FaLsE"); variáveis membro têm os } 2.3.1 Invocação de Métodos mesmos valores. }Objetos se comunicam pela troca de mensagens, isto significa que um

2.3

Float f1 Membros de Instância Float f2

Listagem 3.5 – Empacotando variáveis objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela chamadaVejamos de um algumas método situações em um objeto o operador binário "." (ponto), onde a usando classe wrapper é exigida: devendo especificar mensagem completa:emo estruturas objeto que é o recebedor dacoleções; As classesawrapper são essenciais de dados chamadas de mensagem, método que a serretornam invocadoo etipo os genérico argumentos para  oMétodos Object ; o método (se houver). O método invocado no recebedor pode também enviar volta ao numéricas diferentes (octal, Outro objetivo é facilitar a conversão de/parainformações o tipo Stringdee/ou bases objeto chamador através de um valor de retorno. O método chamado deve ser binário, hexadecimal, etc); um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 27

www.3way.com.br

Todos os direitos reservados a 3Way Networks

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

12 33

Linguagem de Programação JavaJava Linguagem de Programação

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

métodos de conversão de um tipo para outro foram criados.

3.8.1 Construtores Wrapper Para converter um tipo primitivo para o tipo wrapper associado, basta usar o 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);

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

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

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

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

Note no exemplo anterior que a classe Boolean recebe um construtor de String que não difere de maiúsculas ou minúsculas. 3.8.2 Método valueOf Outra forma de embrulhar tipos primitivos é usando o método estático valueOf(), que recebe um valor String como parâmetro. Veja o exemplo: Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

public class TesteValueOf {

2.3

public static void main(String[] args) {

Membros de Instância

Cada objeto Float criado f1 deverá ter sua própria instância //deok, variáveis = Float.valueOf("1.1f"); não considera comodas double: Os valores variáveis Float f2 Os = Float.valueOf("1.1"); (atributos) definidas pela classe. métodos definem o comportamento de um em um objeto constituem Double d = Double.valueOf("1.2"); //objeto retorna objeto. Isto é importante, pois denota que um método pertence a cada da erro: o seu estado. classe. Porém não devemos confundir isto a implementação do método, que // Character c =com Character.valueOf("e"); Dois objetos distintos têm é compartilhada por todas as instâncias da classe. Boolean b1 = Boolean.valueOf("false");

o mesmo estado se suas

Boolean b2 = Boolean.valueOf("True"); // Ok, não é sensível ao caso variáveis membro têm os Boolean b3 = Boolean.valueOf("FaLsE"); 2.3.1 Invocação de Métodos } mesmos valores. Objetos se comunicam pela troca de mensagens, isto significa que um }

objeto pode ter que mostrar um comportamento particular invocando uma Listagem 3.6 – Método valueOf() operação apropriada que foi definida no objeto. Em Java, isto é feito pela 3.8.3 Conversões chamada de um método em um objeto usando o operador binário "." (ponto), Para transformar uma String em número utilizamos Wrappers para os tipos primitivos devendo especificar a mensagem completa: o objeto que éaso classes recebedor da correspondentes. Por exemplo, para transformar a String em um número inteiro utilizamos o método estático mensagem, o método a ser invocado e os argumentos para o método (se houver). parseInt() da classe Integer: O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 28 www.3way.com.br

Todos os direitos reservados a 3Way Networks

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

12 34

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

3.9

AutoBoxing

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

No Java 1.4 esse mesmo código é inválido. No Java 5.0 ele compila perfeitamente. É importante ressaltar que isso não quer dizer que tipos primitivos e referências agora são a mesma coisa, isso é simplesmente um artifício para Figura 2.4 – Layout Memória após inicialização facilitar a codificação. Agora vocênovo pode fazer todos os tipos de operações matemáticas com as //criando alias classesCarro wrappers, porém= você corre o risco de seu programa retornar um exceção carro2 carro1; do tipo NullPointerException. O autoboxing também pode ser feito diretamente para Object:

O boxing automático e as conversões unboxing aliviam nosso trabalho de converter valores de tipos primitivos em objetos das classes wrappers correspondentes e viceversa.

Object o = 5;

Isto seria útil, por exemplo, se você precisar passar o valor de um tipo primitivo para um método que espera receber um Object como argumento. 3.9.1 Boxing e Unboxing Automático para Tipos Primitivos int

i = 10;

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

Todos os direitos reservados a 3Way Networks

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

12 35

Linguagem de de Programação JavaJava Linguagem Programação public class AutoBoxing {

//atribuindo valor avoid variável referência public static main(String[] args) { Carro carro1 = new Carro(); carro1.ano Integer = "2001"; a = new Integer(2); carro1.modelo= "fusca"; Integer b = new Integer(2); carro1.cor int = "prata"; c = 2; // compara se a e b referenciam o mesmo objeto: if (a == b) System.out.println("1:a e b são os mesmos objetos"); else System.out.println("1:a e b não os mesmos objetos"); // compara se a e b possuem o mesmo valor: if (a.equals(b)) System.out.println("2: a e b tem valores iguais"); // a é convertido para tipo primitivo // os dois valores são comparados como tipos primitivos Figura 2.4 – Layout Memória após inicialização 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 são comparados como objetos if (a.equals(c)) System.out.println("4: a e c tem valores iguais"); } } Listagem 3.7 – Boxing e Unboxing implícitos

3.10 Fazer Laboratório 2

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

3.11 Exercícios

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

4

2.3

Operadores

Membros de Instância Em Java temos diferentes tipos de operadores. Existem operadores aritméticos, operadores relacionais,

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

Todos os direitos reservados a 3Way Networks

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

12 36

Linguagem de Programação JavaJava Linguagem de Programação

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

Aqui temos um programa que exemplifica o uso destes operadores: public class Aritimetica { public static void main(String[] args) { // alguns numeros int i = 37, j = 42; double x = 27.475, y = 7.22; System.out.println(" Valor Variavel... "); System.out.println( = Memória " + i após );inicialização Figura 2.4 –"i Layout System.out.println( "j = " + j ); //criando novo alias System.out.println( "x = " + x ); Carro carro2 = carro1; System.out.println( "y = " + y ); // adição dos números System.out.println( " Adicao... "); System.out.println( " i + j = " + (i + j) ); System.out.println( " x + y = " + (x + y) ); // subtração dos números System.out.println( " Subtracao... "); System.out.println( " i - j = " + (i – j) ); System.out.println( " x - y = " + (x – y) ); // multiplicação dos números System.out.println( " Multipicacao... "); System.out.println( " i * j = " + (i * j) ); System.out.println( " x * y = " + (x * y) ); Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3

Membros

// divisão dos números System.out.println( " Divisao... "); System.out.println( " i/j = " + (i / j) ); deSystem.out.println( Instância " x/y = " + (x / y) );

Cada objeto criado deverá ter sua própria instância de variáveis // resto da divisão (atributos) definidas pela classe. Os métodos definem o comportamento de um System.out.println( " Resto da Divisao... "); objeto. Isto é importante, pois denota que um método da System.out.println( " i%j pertence = " a+cada (i objeto % j) ); classe. Porém não devemos confundir isto com a implementação do método, que System.out.println( " x%y = " + (x % y) ); é compartilhada por todas as instâncias da classe. // misturando operações System.out.println(" Tudo Junto... "); 2.3.1 Invocação de Métodos System.out.println(" j + y = " + (j + y) ); Objetos se comunicam pela troca de mensagens, System.out.println(" i * x = "isto + significa (i * x)que);um } que mostrar um comportamento particular invocando uma objeto pode ter operação} apropriada que foi definida no objeto. Em Java, isto é feito pela

Os valores das variáveis em um objeto constituem o seu estado. Dois objetos distintos têm o mesmo estado se suas variáveis membro têm os mesmos valores.

Listagem 4.1 – Operadores aritméticos

chamada de um método em um objeto usando o operador binário "." (ponto), devendo especificar a mensagem completa: o objeto que é o recebedor da 4.2 Operadores Incremento mensagem, o métodode a ser invocado e e osDecremento argumentos para o método (se houver). Além dos operadores aritméticos básicos, Java dá informações suporte ao operador de incremento (++) e ao O método invocado no recebedor pode também enviar de volta unário ao operador unário deatravés decremento Operadores ++ ou respectivamente aumentam objeto chamador de um(--). valor de retorno. O --, método chamado deve ser ou diminuem em 1 o valor um que esteja definido pelo objeto.Seja um Profissional Aprendendo com Profissionais 31 www.3way.com.br

Todos os direitos reservados a 3Way Networks

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

12 37

Linguagem de Programação JavaJava Linguagem de Programação da variável. Por exemplo, a expressão: //atribuindo valor a variável referência 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

Descrição

++

op++

Incrementa op em 1; avalia a expressão antes do valor ser acrescido

++

++op

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

--

op--

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

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

--op

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

i = j = k = ++j

10; 3; 0; + i;

// resultará em k = 4+10 = 14

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

2.3 4.3

i = 10; j = 3; k = 0; j++ + i;

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

// resultará em k = 3+10 = 13

Membros de Instância Operadores Cada objetoRelacionais criado deverá ter sua própria instância de variáveis

Os valores das variáveis

Os definidas operadores relacionais sãométodos usados para comparar dois valores ede determinar o relacionamento entre (atributos) pela classe. Os definem o comportamento um em um objeto constituem eles. A saída avaliaçãopois serádenota fornecida valor lógico: trueaou false. objeto. Isto édesta importante, quecom umum método pertence cada objeto da o seu estado. classe. Porém não devemos confundir isto com a implementação do método, que Dois objetos distintos têm é compartilhada por todas as instâncias da Uso classe. Operador Descrição >

op1 > op2

op1 é maior do que op2

2.3.1 Invocação de Métodos >= 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 operação apropriada que no j)); // false System.out.println("j >i =" + (j > i)); // true System.out.println("k >j =" + (k > j)); // false Figura 2.4 – Layout Memória após inicialização

// maior ou igual a //criando novo alias System.out.println("maior 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
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF