Download - Linguagem Java COMPLETA

Transcript
  • 7/27/2019 Linguagem Java COMPLETA

    1/161

    Linguagem Java

    www.3way.com.br

    Apostila

  • 7/27/2019 Linguagem Java COMPLETA

    2/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    2

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    Sumrio

    1 Introduo Linguagem Java 6

    1.1 O que a Tecnologia Java ? 61.1.1 JSE - Java Standard Edition 61.1.2 JEE - Java Enterprise Edition 61.1.3 JME - Java Micro Edition 61.1.4 Java Card 71.2 Quanto tempo necessrio para aprender Java ? 71.3 O curso 81.3.1 Convenes de Cdigo 81.3.2 Sobre os exerccios 81.4 Fazer Laboratrio 0 82 Bases da Programao em Java 92.1 Classes 92.1.1 Declarando Membros: Variveis e Mtodos 10

    2.2 Objetos 102.2.1 Instncia de Classes 102.2.2 Referncia de Objetos 112.3 Membros de Instncia 122.3.1 Invocao de Mtodos 122.3.1.1 Chamando Mtodos de Objeto 132.3.2 Envio de Argumentos para Mtodos 132.3.2.1 Passagem de Parmetros por valor 132.3.2.2 Passagem de Parmetros por referncia 142.4 Membros Estticos 152.5 Herana - Relacionamentos do tipo "-um" 162.6 Agregao - Relacionamentos do tipo "tem-um" 17

    2.7 Princpios de Programao Com Java 182.8 Estrutura de Arquivos Fontes em Java 182.9 O mtodo main() 192.10 Fazer Laboratrio 1 192.11 Exerccios 193 Identificadores, Palavras-chave e Tipos 193.1 Comentrios 193.2 Ponto-e-Vrgula, Blocos e Espao 203.3 Identificadores 203.4 Palavras Reservadas 203.5 Variveis, Declaraes e Atribuio 213.5.1 Declarando e inicializando Variveis 213.5.2 Exibindo o valor de uma Varivel 22

    3.5.3 Variveis de Referncia e de Valor 223.6 Tipos Bsicos em Java 233.6.1 Literais Java 233.6.2 Tipos Dados Primitivos 233.6.2.1 Lgico boolean 233.6.2.2 Textual char and String 233.6.2.3 Inteiro byte, short, int e long 243.6.2.4 Ponto Flutuante float e double 243.6.2.5 Exemplos de declaraes e atribuies 253.7 Converses 263.7.1 Casting de Tipos Primitivos 263.7.2 Literais numricos e Promoo Numrica 26

    3.8 Classes Wrapper (Empacotadoras) 273.8.1 Construtores Wrapper 283.8.2 Mtodo valueOf 283.8.3 Converses 28

    7

    7

    7

    7

    7

    8

    8

    10

    10

    10

    10

    11

    11

    12

    1212

    14

    15

    15

    16

    16

    16

    18

    19

    20

    22

    2323

    24

    24

    24

    24

    24

    23

    23

    23

    26

    26

    28

    2829

    29

    29

    29

    29

    30

    30

    31

    32

    32

    32

    3334

    34

    34

  • 7/27/2019 Linguagem Java COMPLETA

    3/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    3

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    3.9 AutoBoxing 293.9.1 Boxing e Unboxing Automtico para Tipos Primitivos 293.9.2 Ocorrncia de Boxing e Unboxing automtico 293.10 Fazer Laboratrio 2 30

    3.11 Exerccios 304 Operadores 304.1 Operadores Aritmticos 304.2 Operadores de Incremento e Decremento 314.3 Operadores Relacionais 324.4 Operadores Lgicos 334.4.1 && (e lgico) e & (e binrio) 344.4.2 || ( ou lgico) e | ( ou binrio) 354.4.3 ^ (ou exclusivo binrio) 364.4.4 ! (negao) 364.4.5 Operador Condicional ( ?: ) 374.5 Precedncia de Operadores 374.6 Exerccios 38

    5 Estruturas de controle 385.1 Estruturas de deciso if - else 385.2 Declarao switch 405.3 Iteraes (Laos) 415.3.1 while 415.3.2 do-while 425.3.3 Declarao for 435.4 Declaraes de Interrupo e Desvio 445.4.1 Declarao break 445.4.1.1 Declarao unlabeled break 445.4.1.2 Declarao labeled break 445.4.2 Declarao continue 455.4.2.1 Declarao unlabeled continue 45

    5.4.2.2 Declarao labeled continue 455.4.3 Declarao return 465.5 Fazer Laboratrio 3 465.6 Exerccios 466 Array 466.1 Declarando Array 466.2 Acessando um elemento do Array 476.3 Tamanho de Array 486.4 Arrays Multidimensionais 496.5 Copiando Arrays 506.6 Percorrendo Arrays com Enhaced-for 506.7 Manipulando Arrays com java.util.Arrays 516.8 Fazer Laboratrio 4 52

    6.9 Exerccios 527 Programao Orientada a Objetos 527.1 Classes e Objetos 527.1.1 Definindo Classes 527.1.2 Definindo Mtodos 537.1.2.1 Definindo Mtodos na Classe 547.1.3 Mtodos de Instncia e a Referncia this 557.1.4 Sobrecarga de Mtodos (Overloading) 567.1.5 Construtores 577.1.6 Construtor Padro (default) 577.1.7 Overloading de Construtores 587.1.8 Usando Construtores 587.1.9 Utilizando o Construtor this( ) 59

    7.2 Fazer Laboratrio 5 607.3 Herana 60

    35

    35

    35

    36

    3636

    36

    37

    38

    39

    40

    42

    43

    43

    44

    44

    45

    45

    45

    47

    48

    48

    49

    50

    51

    51

    51

    51

    52

    52

    5254

    54

    54

    54

    54

    55

    56

    57

    58

    58

    59

    60

    6060

    60

    60

    61

    62

    63

    64

    65

    65

    66

    66

    67

    6969

  • 7/27/2019 Linguagem Java COMPLETA

    4/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    4

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    7.3.1 Definindo Superclasses e Subclasses 607.3.2 Chamando Construtor super() e Referncia super 637.3.3 Modificador de Classe final 637.4 Polimorfismo 64

    7.4.1 Colees Heterogneas de Objetos 657.4.2 Determinando a Classe de um Objeto 657.4.3 Casting de Referncias de Objetos 667.4.4 Operaes Polimrficas por Sobreposio de Mtodos 687.4.4.1 Invocando Mtodos Sobrepostos 697.4.4.2 Regras sobre Sobreposio de Mtodos 707.4.5 Modificador de Mtodo final 717.5 Encapsulamento 717.5.1 Pacotes 717.5.1.1 Criando pacotes 717.5.1.2 Importando Pacotes 727.5.1.3 Localizao de Classes e CLASSPATH 737.5.1.4 Importao Esttica 74

    7.5.2 Modificadores de Acesso 757.5.2.1 Pblico - public 757.5.2.2 Protegido protected 767.5.2.3 Padro ou Pacote 777.5.2.4 Privado - private 787.6 Mtodos de Configurao e Captura 787.6.1 Mtodos Getter 787.6.2 Mtodos Setter 797.6.3 Aplicando Encapsulando no Exemplo Funcionario/Gerente 797.7 Fazer Laboratrio 6 817.8 O operador == comparado ao Mtodo equals 817.9 Classses Abstratas 837.10 Interfaces 86

    7.10.1 Porque utilizar Interfaces? 867.10.2 Interface vs. Classe Abstrata 877.10.3 Criando Interfaces 877.10.4 Relacionamento de uma Interface para uma Classe 897.10.5 Herana entre Interfaces 897.10.6 Interface vs. Classe 907.11 Classes Aninhadas 907.11.1 Classe Aninhada 917.11.2 Classes aninhadas estticas 917.11.3 Classes internas locais 927.11.4 Classes internas annimas 937.11.5 Modificadores de acesso 937.12 Tipos Enumerados 95

    7.13 Fazer Laboratrio 7 977.14 Exerccios 978 Excees 978.1 Manipulando Excees 978.2 Categorias de Excees 998.2.1 Excees Verificadas e No-verificadas 1008.3 Lanando Excees 1008.3.1 A palavra-chave throw 1008.3.2 Desviando Excees 1018.4 Criando Excees 1028.5 Sobrescrita de Mtodos e Excees 1038.6 Fazer Laboratrio 8 1058.7 Exerccio 105

    9 Tipos Genricos 1059.1 Por que Generics? 105

    69

    72

    72

    73

    7474

    75

    77

    78

    79

    80

    80

    80

    8081

    83

    84

    8585

    86

    87

    88

    88

    88

    89

    89

    91

    91

    93

    97

    9798

    98

    100

    100

    101

    101

    102

    102

    103

    104

    104

    106

    108108

    108

    108

    111

    112

    112

    112

    113

    114

    115

    117

    117

    117117

  • 7/27/2019 Linguagem Java COMPLETA

    5/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    5

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    9.2 Declarando uma Classe Utilizando Generics 1069.2.1 Limitao "Primitiva" 1079.2.2 Limitando Genricos 1079.3 Declarando Mtodos Genricos 108

    9.4 Subtipagem 1099.5 Usando o Coringa 1119.6 Fazer Laboratrio 9 1139.7 Exerccio 11310 Java Collections 11310.1 Hierarquia Das Interfaces 11310.2 Generics e Colees Java 11410.3 Percorrendo Collections 11610.3.1 Lao for-each 11610.3.2 Interface Iterator 11610.4 Usando Listas Interface List 11710.4.1 LinkedList 11710.5 ArrayList 118

    10.5.1 Teste de Desempenho 11910.6 Usando Conjuntos Interface Set 12010.6.1 HashSet 12010.6.2 TreeSet 12010.7 Usando Mapas Interface Map 12010.7.1 HashMap 12110.8 Classificando Colees: Collections.sort 12110.9 Fazer Laboratrio 10 12310.10 Exerccio 12311 Construindo Interfaces Graficas com AWT/Swing 12311.1 AWT (Abstract Window Toolkit) vs. Swing 12311.2 Componentes GUI AWT 12411.2.1 Fundamental Window Classes 124

    11.2.2 Graphics 12511.2.3 Mais Componentes AWT 12711.3 Gerenciadores de Layout 12811.3.1 O Gerenciador FlowLayout 12811.3.2 O Gerenciador BorderLayout 12911.3.3 O gerenciador GridLayout 13011.3.4 Painis e Layouts Complexos 13111.4 Componentes GUI Swing 13211.4.1 Configurando Containers JFrame e JApplet 13311.5 Manipulao de Eventos 13411.5.1 Registrando Classes Ouvintes (Listeners) 13511.5.2 Classes Event 13511.5.3 Listeners de Evento 136

    11.5.3.1 Mtodo de ActionListener 13611.5.3.2 Mtodos de MouseListener 13611.5.3.3 Mtodos de MouseMotionListener 13711.5.3.4 Mtodos WindowListener 13711.5.3.5 Roteiro para criao de Aplicaes Grficas com tratamento de eventos 13711.5.4 Implementando Manipuladores de Eventos com Anonymous inner class 13911.6 Classes Adaptadoras 14011.7 Fazer Laboratrio 11 14311.8 Exerccio 14312 Internacionalizao do cdigo 14312.1 Formatao 14312.2 ResourceBoundle 14412.3 Menssages Formatadas 144

    12.4 Fazer Laboratrio 12 14512.5 Exerccios 145

    118

    119

    119

    120

    121123

    125

    125

    125

    125

    126

    129

    129

    129

    130

    130

    131

    132133

    133

    133

    133

    134

    134

    136

    136

    136

    136

    137

    137

    138140

    141

    141

    142

    143

    144

    147

    147

    148

    149

    149

    150

    150150

    151

    151

    151

    153

    154

    157

    157

    157

    157

    158

    158

    159159

  • 7/27/2019 Linguagem Java COMPLETA

    6/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    6

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    13 Exportao de Aplicao 14513.1 Jar executvel 14513.2 Java Web Start 14513.3 Fazer Laboratrio 13 146

    13.4 Exerccios 146

    159

    159

    159

    160

    160

  • 7/27/2019 Linguagem Java COMPLETA

    7/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    7

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    1 Introduo Linguagem Java1.1 O que a Tecnologia Java?

    Talvez no seja a primeira vez que voc ouve falar em Java, Java 5, Java 6, JRE, Mquina Virtual, J2SE,

    J2EE, JSP, EJB e etc. Bom, a resposta muito longa e pouco proveitosa neste momento. Voc no vai encontrarneste material todas as explicaes para tantas siglas e nomes que esto 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 dasredes de computadores e capaz de serem executados (rodar) em diferentesmquinas, sistemas operacionais e dispositivos. Por diferentes dispositivosentendemos: PCs, servidores, notebooks, handhelds, PDAs (Palm), celulares,TV, geladeiras e tudo que for possvel instalar e executar uma JVM.

    Os programas feitos em Java rodam em diferentes ambientes graasa um componente da plataforma chamado JVM (Java Virtual Machine) que um tipo de tradutor de cdigo Java para instrues especficas de cadasistema operacional e/ou dispositivo.

    A tecnologia Java foi lanada em 1995 e desde ento tem crescidoem popularidade e se tornado uma plataforma muito estvel e madura.

    A Plataforma Java pode ser subdividida nos seguintes grupos:

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

    1.1.1 JSE - Java Standard EditionA JSE uma rica plataforma que oferece um completo ambiente para o desenvolvimento de aplicaes

    para clientes e servidores. A JSE tambm a base da tecnologia JEE e est dividida em dois grupos conceituais:Core Java e Desktop Java.

    Empresas como Sun, IBM, BEA, entre outras, distribuem a JSE na forma de um SDK (SoftwareDevelopment Kit), em conjunto com uma JRE (Java Runtime Environment).

    O pacote do SDK da JSE vem com ferramentas para: compilao, debugging, gerao de documentao(javadoc), empacotador de componentes (jar) e a JRE, que contm a JVM e outros componentes necessrios pararodar aplicaes Java.

    O JDK (SDK Java) usado para compilar e depurar programas, sendo utilizados pelos desenvolvedores desistemas.

    A JRE o ambiente de execuo, sendo utilizado por qualquer um que deseje executar um programa quetenha sido compilado como byte code Java.

    1.1.2 JEE - Java Enterprise EditionA tecnologia JEE no um produto, mas sim uma especificao definida por grandes empresas, atravs do

    JCP (Java Community Process). Simplifica o desenvolvimento de aplicaes empresariais e multi-camadas. baseado nos componentes padronizados, modulares e reusveis, como os EJB (Enterprise JavaBeans). Oferece umconjunto completo de servios para estes componentes. Define muitos comportamentos da aplicao. Voc noprecisa reaprender a programar pois voc vai utilizar os mesmo recursos do Java SE . Necessita de servidores deaplicaes JEE. A tecnologia JEE no est no escopo deste curso.

    1.1.3 JME - Java Micro EditionA tecnologia JME voltada para aplicaes que rodam em pequenos dispositivos como celulares, PDAs,

    smart cards e etc. Ela possui uma API bastante completa para o desenvolvimento de aplicaes de dispositivos

    mveis. A tecnologia J2ME no est no escopo deste curso.

    Os programas feitos emJavarodam em diferentes

    ambientes graas aJVM (JavaVirtual Machine).

  • 7/27/2019 Linguagem Java COMPLETA

    8/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    8

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    1.1.4 Java CardJava Card uma tecnologia que permite pequenos aplicativos (applets)

    baseados em plataforma Java sejam executados com segurana em smart cards edispositivos similares com limitaes de processamento e armazenamento, como

    o Java Ring. muito utilizado em cartes SIM (usados em celulares GSM) e emcaixas eletrnicos.

    Os produtos Java Card so baseados nas especificaes da plataformaJava Card desenvolvida pela Sun Microsystems, e suas principais caractersticasso portabilidade e segurana.

    1.2 Quanto tempo necessrio 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 umalinguagem de programao, um conjunto de ferramentas e bibliotecas de apoioao desenvolvimento de sistemas em diversas reas de tecnologia de software.

    Porm, mais importante que aprender a linguagem aprender a programar noparadigma de orientao a objetos.

    O texto abaixo uma traduo do artigo de autoria de Peter Norvig(http://norvig.com/21-days.html , para ver original ou busque na internet "Aprendaa programar em dez anos"), os conselhos apresentados servem para todos os quedesejam ou necessitam aprender programar.

    Abaixo est a receita de Peter Norvig para sucesso na programao:

    Aprenda ingls. Leia o texto original. Essa traduo s est aqui para exercitar o meu ingls, no o seu.(Nota do tradutor)

    Se interesse por programao e programe porque voc acha legal. Tenha certeza que isso continue aser legal para voc dedicar dez anos nisso. Converse com outros programadores; leia outros programas. Isso mais importante do que qualquer

    livro ou curso de treinamento. Programe. O melhor tipo de aprendizado aprender fazendo. Colocando de uma forma mais tcnica,

    "o nvel mximo de performance individual em um domnio no alcanado automaticamente emfuno de uma experincia estendida, mas sim aumentado, mesmo por indivduos extremamenteexperientes, por um esforo deliberativo de melhorar." (p. 366) e "o aprendizado mais efetivo requeruma tarefa bem definida com uma dificuldade apropriada para o indivduo em particular, dado queexista um retorno sobre a experincia e oportunidades de repetio e correes de erros." (p. 20-21)do livro Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life , que uma refernciainteressante deste ponto de vista.

    Se voc quiser, gaste quatro anos em uma universidade (ou mais em uma ps-graduao). Isso lhe daracesso a alguns empregos que requerem alguma formao e um grande entendimento do campo detrabalho, mas se voc no gosta muito de ir para escola, voc pode (com alguma dedicao) conseguiralguma experincia similar sobre esse tipo de trabalho. Em qualquer caso, apenas ler livros no sersuficiente. "Educao em cincias da computao no faz de ningum um gnio em programaotanto quanto estudar pincis e pigmentos no fazem um bom pintor." diz Eric Raymond, autor deThe New Hackers Dictionary. Um dos melhores programadores que eu j contratei tinha apenas osegundo grau, e ele produziu vrios softwares incrveis, tem seu prprio grupo de discusso, e fezdinheiro suficiente em aes para comprar seu prprio clube noturno.

    Trabalhe em projetos com outros programadores. Seja o melhor programador em alguns projetos, sejao pior em outros. Quando voc o melhor voc testa suas habilidades para liderar um projeto e para

    inspirar os outros com a sua viso. Quando voc for o pior aprender o que os mestres ensinam e oque eles no gostam de fazer (porque eles fazem voc fazer por eles). Trabalhe em projetos aps outros programadores. Esteja envolvido em entender um programa escrito

    No se preocupe com o

    quanto tempo, mas com oque devo aprender para

    programar emJava.Mais importante que

    aprender a linguagemJava aprender a

    programar no paradigmade orientao a objetos.

  • 7/27/2019 Linguagem Java COMPLETA

    9/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    9

    Todos os direitos reservados a 3Way Networks

  • 7/27/2019 Linguagem Java COMPLETA

    10/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    10

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    por outro. Veja o que preciso para entender e consertar quando o programador original no est porperto. Pense em como desenvolver seus programas para que seja fcil mant-los, se no for voc.

    Aprenda pelo menos meia dzia de linguagens de programao. Inclua na lista uma linguagemorientada a objetos (como Java ou C++), uma que seja de abstrao funcional (como Lisp ou ML),

    uma que suporte abstrao sinttica (como Lisp), uma que suporte especificao declarativa (comoProlog ou C++ com templates), uma que suporte co-rotinas (como Icon ou Scheme), e uma quesuporte paralelismo (como Sisal).

    Lembre-se que h um "computador" em "cincia da computao". Saiba quanto tempo leva para o seucomputador computar uma instruo, carregar uma palavra at a memria (com e sem cache), lerpalavras consecutivas do disco rgido, procurar por uma nova posio no disco.

    Se envolva no esforo de padronizao de uma linguagem. Pode ser o comit ANSI C++, ou napadronizao de programao na sua empresa, se utilizaram edentao com 2 ou 4 espaos. Emqualquer caso, voc aprende o que outras pessoas gostam em uma linguagem, o quanto elas gostam etalvez um pouco do porque elas gostam.

    Tenha o bom senso de cair fora desse processo de padronizao to rpido quanto possvel.

    1.3 O cursoEste curso abordado de forma bastante prtica, ou seja, construindo programas com a linguagem de

    programao o mximo possvel durante o treinamento.Voc tem um material com a teoria necessria e um conjunto de atividades prticas, denominadas

    laboratrios. Todo o contedo corresponde ao que j definimos como JSE.O material no e no deve ser adotado como sua nica referncia para estudos da linguagem, a

    aquisio de livros ou leitura do tutorial oficial da Sun recomendado.Seu material est ordenado numa seqncia didtica que consideramos a mais adequada para o seu

    aprendizado. A cada exemplo ou exerccio apresentado em um captulo tentamos no utilizar recursos dalinguagem que ainda no tenham sido apresentados no captulo corrente ou anterior. No entanto, sempre que

    possvel ns introduzimos vrios destes recursos em exemplos de cdigos com o objetivo de apresent-lodeliberadamente para voc ou simplesmente para simplificar o cdigo exemplo. Assim vamos apresentado algumasbibliotecas da linguagem, sem entrar em detalhes, para que voc v se familiarizando com uso das mesmas.

    1.3.1 Convenes de CdigoOs cdigos e exemplos apresentados neste material seguem as convenes de cdigo-fonte Java, sempre

    que possvel, mas podem sofrer adaptaes para melhorar a impresso.Voc deve se familiarizar com essa conveno veja em

    http://www.oracle.com/technetwork/java/codeconv-138413.html

    1.3.2 Sobre os exercciosNo curso Java e Orientao a Objetos, recomendado estudar em casa aquilo que foi visto durante a aula,

    fazendo os exerccios que no foram feitos ou refazendo os que j foram feitos em sala.Os laboratrios devero ser resolvidos durante o treinamento com objetivo de exercitar a linguagem de

    programao e no a sua capacidade de programar. Contudo eles apresentam uma pequena aplicao que sercompletada ao final de todos os laboratrios.

    Durante a execuo de um laboratrio o mesmo pode necessitar de listagem de cdigos que j foramconstrudos nos laboratrios anteriores, portanto no deixe de fazer o exerccio do laboratrio, especialmente astarefas que forem indicadas para voc fazer. Os laboratrios possuem uma durao estimada e o instrutor deversegui-la a fim de concluir os laboratrios com sucesso. No atrase o andamento do curso, se sentir dificuldadechame o instrutor.

    1.4 Fazer Laboratrio 0

    Siga instrues do Laboratrio 0 e tome cuidado com o tempo de execuo, sempre recorra ao instrutorem caso de dvida, nunca deixe uma dvida sem reposta.

  • 7/27/2019 Linguagem Java COMPLETA

    11/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    11

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    2 Bases da Programao em JavaAntes de comearmos nossa jornada no mundo da programao em

    Java, importante compreendermos a terminologia bsica e os conceitos em

    programao orientada a objetos. Neste captulo veremos os princpios bsicosda programao em Java sem aprofundamento dos temas, que sero revistoscom maior profundidade nos captulos subseqentes.

    2.1 ClassesAbstraes so o fundamento utilizado por ns, seres humanos, a fim de

    lidar com a complexidade. Uma abstrao demonstra o comportamento epropriedades essenciais de um objeto, que o diferencia de outro objeto qualquer.Por exemplo, ao utilizar um carro, voc no pensa nele como um conjunto dedezenas de milhares de peas individuais. Pensamos em um carro como um nicoobjeto sobre qual podemos realizar um determinado conjunto de operaes. Essaabstrao permite que as pessoas utilizem um carro sem nenhum conhecimentosobre mecnica de automveis. Podemos ignorar os detalhes do motor como:sistema de injeo de combustveis, transmisso, sistema de freios funcionamindividualmente ou em conjunto. Ao invs disso, utilizamos o objeto automvel como um elemento nico.

    A essncia da Programao Orientada a Objetos (POO) consiste modelaras abstraes usando Classes e Objetos. A parte difcil deste trabalho encontrar aabstrao mais correta. Uma Classe modela uma abstrao pela definio daspropriedades e comportamentos dos objetos representados pela abstrao. UmaClasse, ento, especifica a categoria dos Objetos e funciona como uma "plantabaixa"na criao desses objetos. Um Objeto qualquer coisa criada a partir dessaClasse, algo contendo as propriedades e comportamentos definidos na Classe.Voltando ao exemplo do carro, um grupo de engenheiros mecnicos criam o

    projeto de um carro (a Classe) e a partir deste projeto so reproduzidos milharesde automveis (os Objetos), praticamente idnticos entre si.

    Propriedades de um Objeto da Classe so chamados de atributos e sodefinidos usando variveis em Java, tambm denominado Campos da Classe. Ocomportamento de um Objeto, tambm conhecido por operaes, so definidosusando-se mtodos em Java. Variveis e mtodos utilizados na definio da classeso, juntos, denominados de Membros da Classe.

    Usando notao de Classe da UML (Unified Modeling Language),podemos descrever graficamente o exemplo de uma classe Carro, ver Figura 2.1.Ambos atributos (variveis) e mtodos so mostrados na forma expandida naFigura 2.1.

    Figura 2.1 Notao UML para Classe

    A essncia da

    Programao Orientada aObjetos (POO) consiste

    em modelar as abstraesusando Classes e Objetos.

    Um Objeto qualquercoisa criada a partir dessaClasse, algo contendo as

    propriedades ecomportamentos

    definidos na Classe.

  • 7/27/2019 Linguagem Java COMPLETA

    12/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    12

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    2.1.1 Declarando Membros: Variveis e MtodosNa Listagem 2.1 mostra a implementao em Java da definio da classe mostrada na Figura 2.1. O

    exemplo, apesar de no se preocupar com a utilidade desta implementao, mostra as principais caractersticas dadefinio de uma classe em Java.

    public class Carro { // nome da classe

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

    // Constructorpublic Carro() {

    modelo = "2000";}

    // Mtodospublic String acelerar() {return "acelerando !";

    }public String frear() {

    return "freando !";}public String abrirPorta() {

    return "abre porta !";}

    }

    Listagem 2.1 Elementos Bsicos da Definio de uma Classe

    A classe possui quatro variveis, toda varivel em Java deve ter um tipo, neste caso todas so do tipo String(linhas 4 a 7), possui trs mtodos (linhas 13 a 15) representado as operaes disponveis aos objetos da classe eum mtodo especial (linha 10) com o mesmo nome da classe, este mtodo denominado construtor e seupropsito inicializar o objeto quando este criado a partir da classe.

    String uma classe em Java, ela armazena um conjunto de caracteres.Como estamos aprendendo o que uma classe, detalharemos a classe Stringposteriormente.

    2.2 ObjetosUm objeto uma instncia de uma classe. Ele construdo usando-se a

    classe, da mesma maneira que usamos uma "planta baixa" para construir uma

    casa, uma entidade real da abstrao que a classe representa; usando o exemplodo carro, uma instncia representa um veculo criado a partir do projeto dosengenheiros mecnicos. Um objeto deve ser explicitamente criado a partir de umaclasse antes que possa ser utilizado em umprograma.

    2.2.1 Instncia de ClassesEm Java, objetos so manipulados atravs de referncias de objetos (ou

    simplesmente referncia). O processo de criao de um objeto normalmenteenvolve os seguintes passos:

    Declarao de uma varivel de referncia: isto corresponde a declararuma varivel de uma classe apropriada para armazenar a referncia aoobjeto criado.

    Um Objeto instncia deuma Classe.

    O propsito da chamadaao construtor inicializaro objeto que est sendo

    criado.

  • 7/27/2019 Linguagem Java COMPLETA

    13/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    13

    Todos os direitos reservados a 3Way Networks

  • 7/27/2019 Linguagem Java COMPLETA

    14/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    14

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    //declaracao de duas variaveis referncia que denota dois//objetos distintos, nomeando dois objetos carro respectivamenteCarro carro1, carro2;

    Criao do Objeto: para criar o objeto fazemos uso do operador new, juntamente com a chamada doconstrutor da classe, assim criamos uma instncia da classe.

    //criacao de dois Objetos distintoscarro1 = new Carro();carro2 = new Carro();

    O operador new retorna a referncia da nova instncia de uma classe Carro. Esta referncia pode seratribuda a uma varivel de referncia da classe apropriada. Cada objeto tem uma identidade nica e sua prpriacpia das variveis (atributos) declarados na definio da classe, ou seja, os dois objetos carro, referenciados porcarro1 e carro2 tm sua prpria cpia das variveis: cor, ano, modelo, nome.

    A declarao e instanciao tambm podem ser combinadas:

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

    Figura 2.2 Instncias da Classe em UML

    A Figura 2.2 mostra a notao UML para classe e objetos. A representao grfica de um objeto muitoparecida com a de um classe.

    2.2.2 Referncia de ObjetosCom j foi observado, uma referncia nos permite manipular objetos que foram criados e armazenados na

    memria do computador. Em Java, objetos s podem ser utilizados a partir de uma referncia que est armazenadaem uma varivel. Um objeto pode ter vrias referncias, tambm chamadas de aliases. O objeto pode sermanipulado por qualquer um desses aliases.

    //declaracaoCarro carro1;

    Figura 2.3 Layout Memria aps declarao

  • 7/27/2019 Linguagem Java COMPLETA

    15/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    15

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    //atribuindo valor a varivel refernciaCarro carro1 = new Carro();carro1.ano = "2001";

    carro1.modelo= "fusca";carro1.cor = "prata";

    Figura 2.4 Layout Memria aps inicializao

    //criando novo aliasCarro carro2 = carro1;

    Figura 2.5 Layout Memria duas variveis referncia para o mesmo objeto

    2.3 Membros de InstnciaCada objeto criado dever ter sua prpria instncia de variveis

    (atributos) definidas pela classe. Os mtodos definem o comportamento de umobjeto. Isto importante, pois denota que um mtodo pertence a cada objeto daclasse. Porm no devemos confundir isto com a implementao do mtodo, que compartilhada por todas as instncias da classe.

    2.3.1 Invocao de MtodosObjetos se comunicam pela troca de mensagens, isto significa que um

    objeto pode ter que mostrar um comportamento particular invocando umaoperao apropriada que foi definida no objeto. Em Java, isto feito pelachamada de um mtodo em um objeto usando o operador binrio "." (ponto),devendo especificar a mensagem completa: o objeto que o recebedor damensagem, o mtodo a ser invocado e os argumentos para o mtodo (se houver).O mtodo invocado no recebedor pode tambm enviar informaes de volta ao

    objeto chamador atravs de um valor de retorno. O mtodo chamado deve serum que esteja definido pelo objeto.

    Os valores das variveisem um objeto constituem

    o seu estado.Dois objetos distintos tmo mesmo estado se suas

    variveis membro tm osmesmos valores.

  • 7/27/2019 Linguagem Java COMPLETA

    16/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    16

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    //declaracaoCarro carro = new Carro();

    //invocando mtodo

    String retorno=carro.acelerar();

    //A sentena a baixo causa erro compilao,//mtodo no est definido no obejeto invocadorcarro.print();

    2.3.1.1 Chamando Mtodos de ObjetoPara ilustrar como chamar os mtodos, utilizaremos como exemplo a classe

    String. Pode-se usar a documentao da API Java para conhecer todos os atributos emtodos disponveis na classe String. Posteriormente, iremos criar nossos prpriosmtodos.

    Para chamar um mtodo a partir de um objeto, escrevemos o seguinte:

    nomeDoObjeto.nomeDoMtodo([argumentos]);

    Vamos pegar dois mtodos encontrados na classe String como exemplo:

    Declarao do mtodo Definio

    public char charAt(int index)

    Retorna o caractere especificado no ndice. Umndice vai de 0 at length() - 1. O primeirocaractere da seqncia est no ndice 0, o seguinte,no ndice 1, e assim sucessivamente por todo oarray.

    public boolean equalsIgnoreCase (String outraString)

    Compara o contedo de duas Strings, ignorandomaisculas e minsculas. Duas strings soconsideradas iguais quando elas tm o mesmotamanho e os caracteres das duas strings so iguais,sem considerar caixa alta ou baixa.

    Tabela 4: Exemplos de Mtodos da classe String

    Usando os mtodos:

    String str1 = "Hello";char x = str1.charAt(0);// retornar o caracter H e o armazenar no atributo x

    String str2 = "hello";// aqui ser retornado o valor booleano trueboolean result = str1.equalsIgnoreCase(str2);

    2.3.2 Envio de Argumentos para MtodosEm exemplos anteriores, enviamos atributos para os mtodos.

    Entretanto, no fizemos nenhuma distino entre os diferentes tipos de atributosque podem ser enviados como argumento para os mtodos.

    2.3.2.1 Passagem de Parmetros por valorQuando ocorre uma passagem por valor, a chamada do mtodo faz uma cpia do valor do atributo e o

    envia como argumento. O mtodo chamado no modifica o valor original do argumento mesmo que estes valoressejam modificados durante operaes de clculo implementadas pelo mtodo.

    Por exemplo:

    H duas formas para seenviarargumentos paraum mtodo, o primeiro

    envio porvalore osegundo envio por

    referncia.

    Em Java a chamadade um mtodo feito

    usando o operadorbinrio "." (ponto).

  • 7/27/2019 Linguagem Java COMPLETA

    17/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    17

    Todos os direitos reservados a 3Way Networks

  • 7/27/2019 Linguagem Java COMPLETA

    18/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    18

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    public class PassagemPorValor {

    public static void main(String[] args) {

    int i = 10;// exibe o valor de iSystem.out.println(i);// chama o mtodo teste// envia i para o mtodo testeteste(i);---------------------------------------+// exibe o valor de i no modificado |

    +---------->System.out.println(i); || } || public static void teste(int j) {

  • 7/27/2019 Linguagem Java COMPLETA

    19/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    19

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    A Figura 2.3 ilustra o resultado da execuo do cdigo na Listagem 2.3:

    Figura 2.6 - Exemplo de Envio por referncia

    2.4 Membros EstticosH casos em que voc precisar que alguns atributos sejam compartilhados por todos os objetos de uma

    classe em particular, ou seja, esses atributos devem pertencer somente Classe e no aos objetos criados a partir

    dessa classe. Por exemplo, imagine que voc queira manter um controle de quantos objetos de uma classe foramcriados e permitir que cada objetos consiga recuperar esta informao. Definir um contador como uma varivel deinstncia na definio da classe no resolveria o problema, pois j sabemos que so criadas cpias desta varivelpara cada objeto criado a partir da definio de uma classe. Ento como resolver o problema? A soluo usarvariveis estticas - usar a palavra chave static antes da declarao da varivel. Uma varivel esttica inicializadaquando a classe carregada em tempo de execuo. De forma similar, os mtodos tambm podem ser estticos.

    Figura 2.7 Diagrama Classe mostrando definio de membros estticos

    A Figura 2.7 mostra a redefinio da classe Carro que foi acrescentado dois membros estticos, ou

    membros da classe, marcado sublinhado abaixo do nome, conforme notao definida na UML. Em suaimplementao usamos a palavra reservada static como mostrado na Listagem 2.4 abaixo:

  • 7/27/2019 Linguagem Java COMPLETA

    20/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    20

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    public class Carro {// Variveis de InstnciaString modelo;String cor;

    String ano;// declarao varivel estticastatic int contador; // 1

    // construtor modificado para incrementar o contador// para cada objeto criadopublic Carro() { // 2

    contador = contador + 1;}

    // Mtodos de Instnciapublic String acelerar() {

    return "acelerando !";}

    public String frear() {return "freando !";

    }

    public String abrirPorta() {return "abre porta !";

    }

    // Mtodo Esttico //3static int getContadorInstancia() {

    return contador;}

    }

    Listagem 2.4 Exemplo de membros de classe

    A varivel esttica contador declarada em (1, linha 7), ela ser alocada e inicializada por padro com ovalor 0 (zero) quando a classe for carregada. Toda vez que um objeto Carro for criado o construtor da classe em (2,linha 10) ser executado. O construtor incrementa explicitamente o contador da classe. O mtodogetContadorInstancia() em (3, linha 18) esttico e um mtodo da classe, ele retorna o valor do contador quandofor invocado.

    O cdigo seguinte invoca o mtodo getContadorInstancia()da classe Carro:

    //Nome da classe invoca mtodo estaticoint retorno = Carro.getContadorInstancia();

    Membros estticos tambm podem ser acessados via referncia para objetos da classe:

    //Referencia de objeto invoca mtodo estaticoCarro carro1 = new Carro();int retorno = carro1.getContadorInstancia();

    Note que membros de classe podem ser acessados tanto pelo nome da classe quanto pela referncia deobjetos da classe, porm membros de instncia s so acessveis via referncia de objetos da classe.

    2.5 Herana - Relacionamentos do tipo "-um"Voc dispem de dois mecanismos fundamentais afim de se construir novas classes a partir de classes

    existentes: herana e agregao. Faz todo sentido construir nossa classe Carro herdando todas as caractersticas deuma classe Veculo que j exista, uma vez que um Carro um Veculo. Mas um Veculo constitudo de diversas

    Temos acesso aosmembros estticos de

    uma classe usandodiretamente o nome da

    classe seguido dooperadorponto (.), no

    precisamos de umainstncia.

  • 7/27/2019 Linguagem Java COMPLETA

    21/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    21

    Todos os direitos reservados a 3Way Networks

  • 7/27/2019 Linguagem Java COMPLETA

    22/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    22

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    partes, ento poderamos construir nossa classe Veculo pela agregao de outros objetos que constituem umveculo, assim podemos dizer que um Veculo tem um Motor, tem um Chassi e tem uma Carroceria.

    A Figura 2.7 mostra a relao entre as classes Veculo e Carro, ela mostra que um Carro -UM Veculo, aclasse Veculo denominada Superclasse enquanto a classe Carro chamada de Subclasse. A classe Veculo umageneralizao para todo Carro (neste caso veculos motorizados), enquanto a classe Carro representa aespecializao da classe Veculo, ou seja um tipo particular de veculo.

    Figura 2.8 Diagrama de Classe descrevendo a relao de Herana

    Em Java, essa relao representada pela palavra-chave extends. Uma subclasse s pode estender(herdar) somente uma nica superclasse. A listagem 2.4 de cdigo demonstra o uso de extends para criar asubclasse Carro a partir da superclasse Veculo.

    class Veiculo { // nome da classe

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

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

    // (3) Mtodospublic String acelerar() { return "acelerando !"; }public String frear() { return "freando !"; }public String abrirPorta() { return "abre porta !"; }

    }

    class Carro extends Veiculo {// declarao de Variveis e Mtodos da nova classe

    }

    Listagem 2.5 Exemplo Herana

    No se preocupe muito neste momento em compreender qual relao dever ser utilizada para criar suasclasses, foque na terminologia e nas palavras-chave que esto sendo apresentadas.

    2.6 Agregao - Relacionamentos do tipo "tem-um"Voc pode construir novas classes de objetos por agregao de objetos j existentes, o objeto agregado

    constitudo de outros objetos.Java implementa o conceito de agregao de objetos pelo uso da referncia. Objetos em Java no podem

    conter outros objetos explicitamente. Objetos somente podero conter variveis de tipos primitivos e referncias aoutros objetos.

    Uma relao de agregao demonstrada na Figura 2.8, este diagrama UML informa que objetos da classeVeculo TEM-UM objeto da classe Motor associado a ela.

  • 7/27/2019 Linguagem Java COMPLETA

    23/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    23

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    Figura 2.9 Diagrama de Classe descrevendo Agregao

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

    class Veiculo // nome da classe{

    // AgregaoMotor motor1 = new Motor();

    }

    2.7 Princpios de Programao Com Java Tudo em Java deve ser colocado dentro de uma classe; H dois tipos de valores em Java: valores atmicos de tipos primitivos e valores de referncia; Referncias indicam objetos que so criados a partir de uma classe; Objetos s podem ser manipulados via referncia; Objetos em Java no podem conter outros Objetos, ele somente tem referncias para outros objetos; Remoo de objetos gerida pelo sistema de tempo de execuo (runtime). Este processo conhecido

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

    2.8 Estrutura de Arquivos Fontes em JavaEm Java, um arquivo de cdigo-fonte tem os elementos especificados na seguinte ordem:

    A definio opcional de package para especificar o nome do pacote da classe. As classes e interfacesdefinidas em um arquivo fonte tornam-se parte deste pacote. Se omitida, as definies pertencem aopacote default. Veremos mais sobre pacotes posteriormente.

    Zero ou mais usos da sentena import. A sentena import ser discutida em detalhes posteriormente. Qualquer nmero de definies de classes e interfaces. Tecnicamente um arquivo de cdigo-fonte em

    Java no precisa conter qualquer definio, mas ele seria intil. Experimente compilar um arquivofonte sem nenhuma definio. As classes e interfaces podem ser definidas em qualquer ordem. Ocompilador Java impe a restrio de somente uma classe com modificador public por arquivo, sendoque se esta existir o nome do arquivo de cdigo-fonte deve ser nomeado obrigatoriamente com onome da classe pblica.

    Veja Figura 2.10 na prxima pgina, demonstrao da estrutura de um arquivo de cdigo-fonte vlido.

    // Nome do Arquivo: Aplicacao.java

    //PARTE 1: (Opcional)//Nome Pacotepackage com.nomeempresa.projeto.nomepacote;

    //PARTE 2: (Zero ou Mais)//Pacotes usados

    import java.util.*;import javax.swing.JOptionPane;

    //PATE 3: (Zero ou Mais)// Definies de classes e interfaces (em qualquer ordem)

    public class Aplicacao {}

  • 7/27/2019 Linguagem Java COMPLETA

    24/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    24

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    class C1{}interface I1{}

    // ...class Cn{}interface In{}

    //fim arquivo

    Figura 2.10 Estrutura do arquivo de cdigo-fonte

    2.9 O mtodo main()O interpretador Java executa uma chamada ao main() na classe especificada na linha de comando. Este o

    meio padro pelo qual aplicaes standalone so invocadas. O mtodo main() tem a seguinte assinatura:

    public static void main(String [] args)

    O comando java AlgumaClasse, resulta em uma chamada para o mtodo AlgumaClasse.main(). Assim

    qualquer classe pode ter um mtodo main() mas somente a classe especificada ao interpretador ser executada.

    2.10 Fazer Laboratrio 1Siga instrues do Laboratrio 1 e tome cuidado com o tempo de execuo, sempre recorra ao instrutor

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

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

    3 Identificadores, Palavras-chave e TiposAssim como outras linguagens, a linguagem de programao Java definida por uma regra gramatical, que

    especifica como construes sintaticamente legais podem ser formadas usando os elementos da linguagem, e poruma definio semntica que especifica o significado das construes sintaticamente corretas.

    3.1 ComentriosUm programa deve ser documentado com comentrios e notas em lugares relevantes. Comentrios tem

    como propsito a documentao, eles so ignorados pelo compilador.Para fazer um comentrio em Java, voc pode usar o // para comentar

    uma l inha s imples at o final, tudo aps o // ser ignorado pelocompilador:

    //isto comenta at o fim da linha

    ou ento usar o /* */ para comentarmltiplas linhas, tudo o que estiver entre eles serignorado pelo compilador.

    /*Um comentriocom varias linhas

    */

    Voc pode criar comentrios Javadoc comeando-os com /** eterminando-os com */, funciona como o exemplo anterior s que aoadicionarmos tags apropriadas (como @tag valor) podemos colocar maisinformao em nossos comentrios. Por exemplo:

    Um programa deve serdocumentado pela

    insero de comentrios.

    ComentriosJavadocsousados para gerar umadocumentao HTML

    para seus programas emJava.

  • 7/27/2019 Linguagem Java COMPLETA

    25/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    25

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    /**Este e um exemplo de comentrios especiais para documentao usado porjava para gerar uma documentao em html. Este usa tags como:@author Carlos Eduardo@version 1.2@see JavadocTutorial*/

    3.2 Ponto-e-Vrgula, Blocos e EspaoUma sentena constituda de uma ou mais linhas de cdigo terminadas por ponto-e-vrgula ( ; ). Uma

    exemplo de sentena simples :

    System.out.println("Hello");

    Um bloco uma ou mais sentenas cercadas por chaves ({) de abertura e outra (}) de fechamento. Blocosde sentenas podem ser aninhados indefinidamente. Qualquer quantidade de espaos so permitidos. Um exemplode bloco:

    public static void main( String[] args ){

    System.out.println("Hello");

    System.out.println("world");

    }

    Listagem 3.1 Blocos e sentenas

    3.3 IdentificadoresIdentificadores so tokens, elementos bsicos que constitui a linguagem,

    representa nomes de variveis, mtodos, classes, etc. Exemplos de identificadoresso: Hello, main, System, out, println.

    Com isto, significa que o identificador: MaIn no o mesmo que main.Identificadores devem comear com uma letra, ou um caractere sublinha "_", ouum caractere dlar "$". Letras podem ser maisculas ou minsculas. Os caracteressubsequentes podem usar nmeros de 0 a 9.

    Os identificadores criados por voc no podem ser iguais aosidentificadores reservados pela gramtica da linguagem (palavras reservadas)como: class, public, void, etc.

    Exemplos de identificadores vlidos:numero, nmero, var0001, a_com_b,_var01_, $$_100.

    Exemplos de identificadores invlidos:n^mero, 0001var, a-com-b, var/01, $$..100 .

    3.4 Palavras ReservadasSo identificadores reservados pela linguagem e que no devem ser utilizados como outra finalidade. Seu

    uso de forma incorreta gerar um erro de compilao.

    Identificadores em Javaso case-sensitive, ou

    seja, feito distino decaracteres maisculos e

    minsculos.

  • 7/27/2019 Linguagem Java COMPLETA

    26/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    26

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    abstract assert boolean break byte

    case catch char class continue

    const default do double else

    enum extends false float final

    finally for goto if implements

    import instanceof int interface long

    native new null package private

    protected public return short static

    strictfp super switch synchronized this

    throw throws transient true try

    void volatile while

    Figura 3.1 Palavras Reservadas

    Os identificadores const e goto no so utilizados atualmente em Java, mas palavra reservada porque emverses anteriores eles tinham utilidade e foi depreciado o seu uso. J null, true e false so literais reservados.

    3.5 Variveis, Declaraes e AtribuioVariveis em Java podem ser de: Instncia: um espao na memria usado para armazenar o estado de

    um objeto. Esttica ou de classe: que pertencem classe e no a uma instncia de

    um objeto. Local: tambm chamadas de variveis de mtodo, que so declaradas

    em blocos ou mtodos e so alocadas para cada invocao de mtodoou bloco.

    A varivel armazena valores de um tipo de dado. Uma varivel deve ter umnome, um tipo, um tamanho particular e um valor associado a ela.

    O tipo da varivel indica o tipo de dado que ela pode conter. O nome dasvariveis deve seguir as mesmas regras de nomenclatura que os identificadores.

    3.5.1 Declarando e inicializando VariveisA seguir, vemos como feita a declarao de uma varivel:

    [= valor inicial];

    Os valores colocados entre < > so obrigatrios, enquanto que os valores contidos entre [ ] so opcionais.Exemplos de declaraes e inicializaes vlidas:

    char caracter;double area;boolean flag;int idade = 10;float areaMesa = 4.5f;

    byte b1=2, b2=4;

    int i=10;

    int j=i;

    Variveis em Javapodem ser de instncia,

    esttica e local.Devem serdeclaradas e

    inicializadas antes de

    serem utilizadas.

  • 7/27/2019 Linguagem Java COMPLETA

    27/161

    Siga-nos tambm no Twitter!

    twitter.com/3waynet

  • 7/27/2019 Linguagem Java COMPLETA

    28/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    28

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    JAVA muito exigente com relao ao tipo de dado, uma linguagem fortemente tipada. O compiladorno permitir que voc use o operador de atribuio (=) para inserir uma referncia de objeto de uma classeElefante em uma varivel referncia do tipo da classe Coelho, nem permitir que se atribua um valor do tipo float auma varivel do tipo int:

    Coelho coelho = new Elefante(); //erroint i = 3.4f; //erro

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

    public class ExemploVariaveis {

    public static void main( String[] args ){

    //declara uma varivel com nome result e tipo booleanboolean result;

    //declara uma varivel com nome option e tipo charchar option;

    // atribui o smbolo C para a variveloption = 'C';

    //declara uma varivel com nome grade e tipo double// e a inicializa com o valor 0.0double grade = 0.0;

    }}

    Listagem 3.2 Declarao de variveis

    3.5.2 Exibindo o valor de uma VarivelPara exibirmos em qualquer dispositivo de sada o valor de uma varivel, podemos fazer uso dos seguintes

    comandos:

    System.out.println() ou System.out.print()

    Aqui est um simples programa como exemplo:

    public class ImprimeVariavel {

    public static void main(String[] args) {

    int value = 10;char x;x = 'A';System.out.println(value);System.out.println("O valor de x = " + x);

    }}

    Listagem 3.3 Imprimindo valor de variveis

    3.5.3 Variveis de Referncia e de ValorJava suporta duas classes de variveis, elas podem ser: de referncia ou de valor.As variveis de valor (ou primitivas) so aquelas que armazenam dados no exato espao de memria onde

    a varivel est.As variveis de referncia so aquelas que armazenam o endereo de memria onde o dado est

  • 7/27/2019 Linguagem Java COMPLETA

    29/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    29

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    armazenado. Ao declarar uma varivel do tipo de uma certa classe, se declara uma varivel que referencia umobjeto daquela classe.

    Por exemplo, vamos supor que se tenha estas duas variveis do tipo int e da classe String.

    int num = 10;String nome = "Hello";

    Suponha que o quadro abaixo represente a memria do computador, com seus endereos de memria, onome das variveis e os tipos de dados que ele pode suportar.

    Endereo Identificador Valor

    0x10001 num 10

    : : :

    0x20002 nome 0x30001

    : : :

    0x30001 "Hello"

    Figura 3.2 Memria aps inicializao de variveis.

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

    3.6 Tipos Bsicos em Java3.6.1 Literais Java

    Um literal um valor constante, este valor pode ser numrico (inteiros e

    ponto-flutuantes), caracteres, booleanos ou cadeia de caracteres (String) . H aindao literal null que representa uma referncia nula (sem destino).

    3.6.2 Tipos Dados Primitivos3.6.2.1 Lgico boolean

    O tipo booleano tem dois valores literais true e false, ele pode representardois estados: true (verdadeiro) ou false (falso). No exemplo abaixo declarada avarivel verdade do tipo boolean e atribuda a esta o valor true.

    boolean verdade = true;

    3.6.2.2 Textual char and String

    O tipo de dado caracter representa um CARACTER UNICODE, conjunto decaracteres de 16 bits sem sinal, em substituio ao conjunto de caracter ASCII de 8bits. Unicode permite o uso de smbolos e caracteres especiais das lnguas.

    Para usar um literal de caracter devemos cercar o caractere entre delimitadores de aspas simples. Porexemplo, a letra A, representada como o A. Ou podemos ainda usar o cdigo hexadecimal do caractereUNICODE, por exemplo \u0041, esta a representao hexadecimal do caractere unicode A.

    Para usar caracteres especiais, tais como um caractere de nova-linha, uma contra-barra usada seguidapelo cdigo do caracter. Por exemplo, '\n' para o caracter de nova-linha, '\r' para o retorno de "carro-do-carro", o'\b' para o "backspace".

    O tipo String, que no um tipo primitivo mas uma classe, usado para representar sequencias decaracteres. Por exemplo:

    "Um literal String pode conter caracter de escape \n".

    Para usar um literal decaracterdevemos

    cercar o caractere entredelimitadores de aspassimples. Por exemplo, aletraA, representada

    como o 'A'.

  • 7/27/2019 Linguagem Java COMPLETA

    30/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    30

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

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

    // declara e inicializa uma varivel char

    char ch = 'A';

    // declara e inicializa duas variveis charchar ch1,ch2;ch1='\U0020';ch2='B;

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

    // declara duas variveis StringString str1,str2;

    3.6.2.3 Inteiro byte, short, int e longH quatro tipos inteiros em Java, representados pelas palavras chaves byte,

    short, int e long. Os literais integrais podem ser escritos de trs formas diferentes:decimal (base 10), hexadecimal (base 16) e octal (base 8). Para nmeros decimaisbasta escrev-lo como ele exemplo: 2010.

    Para usar os outros literais inteiros em Java voc pode seguir algumas notaes especiais. Para nmeroshexadecimais devemos utilizar o prefixo "0x" (zero xis minsculo) ou "0X" (zero xis maisculo). Para nmeros emoctal ele deve ser precedido de "0" (zero).

    Por exemplo, considere o nmero 12 (em decimal):

    int valDecimal = 12;

    int valHexadecimal = 0xC;int valOctal = 014;

    Os literais inteiros so, por padro, do tipo de dados int (32-bit com sinal). Em alguns casos pode-sedesejar forar o literal inteiro para o tipo long (64-bit com sinal), isso pode ser feito usando o caractere "l" ou "L"como sufixo do literal.

    Tamanho (bits) Tipo Faixa

    8 byte -27a 27- 1

    16 short -215 a 215 - 1

    32 int -231 a 231 - 1

    64 long -263 a 263 - 1

    Tabela 3.1: T ipos e faixa de valores dos T ipos Integrais

    3.6.2.4 Ponto Flutuante float e doubleOs literais de ponto flutuante podem ser expressos em notao padro ou cientfica. Por exemplo, 123.4

    est na notao padro, enquanto 123.4e2 est na notao cientfica. Os literais dos tipos fracionrios so do tipode dados double (um valor 64-bit) por padro. Para inicializar uma varivel com o tipo de dados float (32-bit), demenor preciso, adicione o caractere "f" ou "F" ao literal: 3.1415F.

    Literais do tipo Stringso seqncias de

    caracteres que devemestar cercadas poraspas-duplas ("") edevem comear e

    terminar na mesmalinha.

  • 7/27/2019 Linguagem Java COMPLETA

    31/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    31

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    double d1 = 123.4;double d2 = 1.234e2; // mesmo valor de d1, mas em notao cientficafloat f1 = 123.4f;

    Tamanho (bits) Tipo Faixa

    32 float -231

    a 231

    - 1

    64 double -263 a 263 - 1

    Tabela 3.2: T ipos e faixa de valores dos Nmero Fracionrios

    3.6.2.5 Exemplos de declaraes e atribuiesO seguinte programa demonstra como declarar e atribuir valores para

    variveis dos tipos int, float, boolean, char e String:

    public class Atribui {

    public static void main (String args []) {

    // declara variavel integerint x, y;

    // declara variavel ponto-flutuantefloat z = 3.414f;

    // declare e atribui doubledouble w = 3.1415;

    // declare e atribui boolean

    boolean verdadeiro = true;

    // declare variavel caracterchar c;

    // declare variavel StringString str;// declare e atribui variavel StringString str1 = "bye";// atribui valor para variavel charc = 'A';// atribui valor a variavel Stringstr = "Pratique declaracoes!";// atribui valor a variaveis inteiras

    x = 6;y = 1000;//atribuies no permitidas// y = 3.1415926; // 3.1415926 no e inteiro

    // requer casting e decimal ser// truncado.

    //w = 175,000; // A vrgula (,) no pode aparecer,//em ponto-flutuante use (.);

    //verdadeiro = 1; // confuso comum feita por// ex-programadores C/C++

    //z = 3.14156; // No pode atribuir double dentro de um// float; Isto requer converso.

    }}

    Listagem 3.4 Exemplo atribuies

    Os literais dos tiposfracionrios so do tipode dados double e do

    tipofloat.

  • 7/27/2019 Linguagem Java COMPLETA

    32/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    32

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    3.7 ConversesJ dissemos que o Java bastante rigoroso quanto aos tipos das variveis, tudo tem haver com o tamanho

    de cada tipo, ou com quantidade de bits que cada tipo exige para representar o dado a ser armazenado na varivel.Enquanto um nmero fracionrio costuma ser armazenado em uma varivel do tipo double (64 bits), tentar atribui-

    lo a uma varivel do tipo int (32 bits) no funciona pois um cdigo que diz: "i deve receber tudo que est em d",mas no se sabe se d realmente um nmero inteiro ou no, ou seja, Java no consegue antecipar se o valorarmazenado em d vai caber em i.

    double d = 3.1415;int i = d; // no compila

    O mesmo ocorre no seguinte trecho:

    int i = 3.14;

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

    double d = 5; // ok, o double pode conter um nmero inteiroint i = d; // no compila

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

    int i = 5;double d2 = i;

    O cdigo acima compila sem problemas, j que um double pode guardar um nmero com ou sem pontoflutuante. Todos os inteiros representados por uma varivel do tipo int podem ser guardados em uma variveldouble, ento no haver problemas com o cdigo acima.

    3.7.1 Casting de Tipos Primitivoss vezes, precisamos que um nmero quebrado seja arredondado e armazenado em um nmero inteiro.

    Para fazer isso sem que haja o erro de compilao, preciso ordenar que o nmero quebrado seja moldado ( cast)como um nmero inteiro. Esse processo recebe o nome de casting.

    double d3 = 3.14;int i = (int) d3;

    O casting foi feito para moldar a varivel d3 como um int. O valor de i agora 3. O mesmo ocorre entrevalores int e long.

    long x = 10000;int i = x; // no compila, pois pode estar perdendo informao

    E, se quisermos realmente fazer isso, fazemos o casting:

    long x = 10000;int i = (int) x;

    3.7.2 Literais numricos e Promoo NumricaAlguns castings aparecem tambm quando atribumos valores literais numricos, por exemplo:

  • 7/27/2019 Linguagem Java COMPLETA

    33/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    33

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    float x = 0.0;

    O cdigo acima no compila pois todos os literais ponto flutuante so considerados double pelo Java. Efloat no pode receber um double sem perda de informao, para fazer isso funcionar podemos escrever o

    seguinte:

    float x = 0.0f;

    Como j vimos a letra f, que pode ser maiscula ou minscula, indica queaquele literal deve ser tratado como float.

    long l = 0.0L;

    A letra L, que tambm pode ser maiscula ou minscula, indica queaquele literal deve ser tratado como long.

    Outro caso, que mais comum:

    double d = 5;float f = 3;float x = (float) d + f;

    Voc precisa do casting porque o Java faz as contas e vai promovendo oresultado intermedirio sempre para o maior tipo que apareceu durante asoperaes, no caso o double. Em caso de tipos menores como byte e short o Javaos promove para int na hora de fazer as contas.

    At casting com variveis do tipo char podem ocorrer. O nico tipoprimitivo que no pode ser atribudo a nenhum outro tipo o boolean.

    3.8 Classes Wrapper (Empacotadoras)As classes wrapper que representam valores numricos so subclasses da classe Number.O objetivo das classes wrapper empacotar (boxing) tipos primitivos em objetos onde for necessrio. Por

    exemplo:

    public class TesteWrapper {

    public static void main(String[] args) {

    Float f1 = new Float("1.1f"); // compila, no considera double:Float f2 = new Float("1.1");Double d = new Double("1.2");// retorna erro:

    // Character c = new Character("e");Boolean b1 = new Boolean("false");Boolean b2 = new Boolean("True");// compila, no h diferenciao de maisculas:Boolean b3 = new Boolean("FaLsE");

    }}

    Listagem 3.5 Empacotando variveis

    Vejamos algumas situaes onde a classe wrapper exigida: As classes wrapper so essenciais em estruturas de dados chamadas de colees; Mtodos que retornam o tipo genrico Object; Outro objetivo facilitar a converso de/para o tipo String e/ou bases numricas diferentes (octal,

    binrio, hexadecimal, etc);

    Para converter um tipoprimitivo para o tipowrapper associado,

    basta usar o construtorda classe wrapper, uma

    vez que toda classe

    wrapper possui umconstrutor que recebe

    seu tipo primitivocorrespondente.

  • 7/27/2019 Linguagem Java COMPLETA

    34/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    34

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    Por outro lado, o tipo primitivo exigido em: Incrementos e decrementos; Frmulas matemticas;

    Assim o uso do valor primitivo ou da classe wrapper vai depender da necessidade, neste sentido vriosmtodos de converso de um tipo para outro foram criados.

    3.8.1 Construtores WrapperPara converter um tipo primitivo para o tipo wrapper associado, basta usar o

    construtor da classe wrapper, uma vez que toda classe wrapper possui um construtorque 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);

    A classe wrapper de Character a nica exceo que o construtor da classepermite receber um char, no permitindo receber uma String.

    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 no difere de

    maisculas ou minsculas.

    3.8.2 Mtodo valueOfOutra forma de embrulhar tipos primitivos usando o mtodo esttico valueOf(), que recebe um valor

    String como parmetro. Veja o exemplo:

    public class TesteValueOf {

    public static void main(String[] args) {

    Float f1 = Float.valueOf("1.1f"); // ok, no considera como double:Float f2 = Float.valueOf("1.1");Double d = Double.valueOf("1.2"); // retorna erro:

    // Character c = Character.valueOf("e");Boolean b1 = Boolean.valueOf("false");Boolean b2 = Boolean.valueOf("True"); // Ok, no sensvel ao casoBoolean b3 = Boolean.valueOf("FaLsE");

    }}

    Listagem 3.6 Mtodo valueOf()

    3.8.3 ConversesPara transformar uma String em nmero utilizamos as classes Wrappers para os tipos primitivos

    correspondentes. Por exemplo, para transformar a String em um nmero inteiro utilizamos o mtodo estticoparseInt() da classe Integer:

    Alm do construtor querecebe o tipo primitivo

    associado, todo tipowrapper possui um

    construtor que recebeuma String.

  • 7/27/2019 Linguagem Java COMPLETA

    35/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    35

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    String s = "101";int i = Integer.parseInt(s);

    As classes Double, Short, Long, Float, etc contm os mesmos mtodos, como parseDouble() e

    parseFloat() que retornam um double e float respectivamente, parse() onde seja igual o nome da classe Wrapper correspondente, com exceo das classes Character e Boolean.

    3.9 AutoBoxingEsse processo de wrapping e unwrapping entediante. O Java 5.0 traz um recurso chamado de

    autoboxing, que faz isso sozinho para voc, porm o preo a se pagar a perda de legibilidade do cdigo:

    Integer x = 5;int y = x;

    No Java 1.4 esse mesmo cdigo invlido. No Java 5.0 ele compilaperfeitamente. importante ressaltar que isso no quer dizer que tipos primitivos

    e referncias agora so a mesma coisa, isso simplesmente um artifcio parafacilitar a codificao.

    Agora voc pode fazer todos os tipos de operaes matemticas com asclasses wrappers, porm voc corre o risco de seu programa retornar um exceodo tipo NullPointerException.

    O autoboxing tambm pode ser feito diretamente para Object:

    Object o = 5;

    Isto seria til, por exemplo, se voc precisar passar o valor de um tipoprimitivo para um mtodo que espera receber um Object como argumento.

    3.9.1 Boxing e Unboxing Automtico para Tipos Primitivos

    int i = 10;

    Integer iRef = new Integer(i); // Boxing Explicito

    int j = iRef.intValue(); // Unboxing Explicit

    iRef = i; // Boxing Automatico

    j = iRef; // Unboxing Automatico

    A converso do Boxing converte valores primitivos em objetos da classewrappers do tipo de dado correspondente. A converso do Unboxing converte objetoswrappers para tipo de dado primitivo correspondente.

    3.9.2 Ocorrncia de Boxing e Unboxing automticoSe aplica em vrias situaes: comparao, atribuio, em estruturas de

    repetio, etc.Comparaes podem ser realizadas atravs do operador == (igualdade) ou

    pelo mtodo equals(); o primeiro, quando aplicado entre objetos, compara se as variveis referenciam o mesmoobjeto, enquanto que o segundo avalia se os objetos possuem o valores significativamente iguais. Veremos nocdigo-fonte do exemplo a seguir, que as comparaes entre tipos diferentes podem ser realizadas:

    O boxing automtico eas converses unboxingaliviam nosso trabalho

    de converter valores detipos primitivos emobjetos das classes

    wrapperscorrespondentes e vice-

    versa.

    Autoboxing ouautounboxing ocorresempre que houver a

    necessidade deconverso de tipos

    primitivos em objetoswrappers e vice-versa.

  • 7/27/2019 Linguagem Java COMPLETA

    36/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    36

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    public class AutoBoxing {

    public static void main(String[] args) {

    Integer a = new Integer(2);

    Integer b = new Integer(2);int c = 2;

    // compara se a e b referenciam o mesmo objeto:if (a == b)

    System.out.println("1:a e b so os mesmos objetos");else

    System.out.println("1:a e b no os mesmos objetos");

    // compara se a e b possuem o mesmo valor:if (a.equals(b))

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

    // a convertido para tipo primitivo// os dois valores so comparados como tipos primitivosif (a == c)

    System.out.println("3: a e c tem valores iguais");

    // c convertido para objeto// os dois valores so comparados como objetosif (a.equals(c))

    System.out.println("4: a e c tem valores iguais");}

    }

    Listagem 3.7 Boxing e Unboxing implcitos

    3.10 Fazer Laboratrio 2Siga instrues do laboratrio 2 e tome cuidado com o tempo de execuo, sempre recorra ao instrutor

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

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

    4 OperadoresEm Java temos diferentes tipos de operadores. Existem operadores aritmticos, operadores relacionais,

    operadores lgicos e operadores condicionais. Estes operadores obedecem a uma ordem de precedncia para queo compilador saiba qual operao executar primeiro, no caso de uma sentena possuir grande variedade destes.

    4.1 Operadores AritmticosAqui temos a lista dos operadores aritmticos que podem ser utilizados na criao de expresses

    matemticas:

    Operador Uso Descrio

    * op1 * op2 Multiplica op1 por op2

    / op1 / op2 Divide op1 por op2

    % op1 % op2 Resto da diviso de op1 por op2

  • 7/27/2019 Linguagem Java COMPLETA

    37/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    37

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    - op1 - op2 Subtrai op2 de op1

    + op1 + op2 Soma op1 e op2

    Tabela 4.1 - Operadores aritmticos e suas funes

    Aqui temos um programa que exemplifica o uso destes operadores:

    public class Aritimetica {

    public static void main(String[] args) {

    // alguns numerosint i = 37, j = 42;double x = 27.475, y = 7.22;

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

    // adio dos nmerosSystem.out.println( " Adicao... ");System.out.println( " i + j = " + (i + j) );System.out.println( " x + y = " + (x + y) );

    // subtrao dos nmerosSystem.out.println( " Subtracao... ");System.out.println( " i - j = " + (i j) );

    System.out.println( " x - y = " + (x y) );

    // multiplicao dos nmerosSystem.out.println( " Multipicacao... ");System.out.println( " i * j = " + (i * j) );System.out.println( " x * y = " + (x * y) );

    // diviso dos nmerosSystem.out.println( " Divisao... ");System.out.println( " i/j = " + (i / j) );System.out.println( " x/y = " + (x / y) );

    // resto da divisoSystem.out.println( " Resto da Divisao... ");

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

    // misturando operaesSystem.out.println(" Tudo Junto... ");System.out.println(" j + y = " + (j + y) );System.out.println(" i * x = " + (i * x) );

    }}

    Listagem 4.1 Operadores aritmticos

    4.2 Operadores de Incremento e DecrementoAlm dos operadores aritmticos bsicos, Java d suporte ao operador unrio de incremento (++) e ao

    operador unrio de decremento (--). Operadores ++ ou --, respectivamente aumentam ou diminuem em 1 o valor

  • 7/27/2019 Linguagem Java COMPLETA

    38/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    38

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    da varivel. Por exemplo, a expresso:

    count = count + 1; // incrementa o valor de count em 1

    equivalente a, count++;

    Operador Uso Descrio

    ++ op++ Incrementa op em 1; avalia aexpresso antes do valor ser acrescido

    ++ ++op Incrementa op em 1; incrementa o valor antes da expresso seravaliada

    -- op--Decrementa op em 1; Avalia a expresso antes do valor serdecrescido

    -- --op Decrementa op em 1; decrementa op em 1 antes da expresso seravaliada

    Tabela 4.2- Operadores de incremento e decremento

    Como visto na tabela acima, os operadores de incremento e decremento podem ser usados tanto antescomo aps o operando. E sua utilizao depender disso. Quando usado antes do operando, provoca acrscimo oudecrscimo de seu valor antes da avaliao da expresso em que ele aparece. Por exemplo:

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

    Quando utilizado depois do operando, provoca, na varivel, acrscimo ou decrscimo do seu valor aps aavaliao da expresso na qual ele aparece. Por exemplo:

    int i = 10;int j = 3;int k = 0;k = j++ + i; // resultar em k = 3+10 = 13

    4.3 Operadores RelacionaisOs operadores relacionais so usados para comparar dois valores e determinar o relacionamento entre

    eles. A sada desta avaliao ser fornecida com um valor lgico: true ou false.

    Operador Uso Descrio

    > op1 > op2 op1 maior do que op2

    >= op1 >= op2 op1 maior ou igual a op2

    < op1 < op2 op1 menor do que op2

  • 7/27/2019 Linguagem Java COMPLETA

    39/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    39

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    O programa a seguir, mostra a utilizao destes operadores:

    public class OperadoresRelationais {

    public static void main(String[] args) {

    // declara nmerosint i = 37, j = 42, k = 42;System.out.println("Variaveis...");System.out.println("i =" + i);System.out.println("j =" + j);System.out.println("k =" + k);

    // maior queSystem.out.println("maior que...");System.out.println("i >j =" + (i > j)); // falseSystem.out.println("j >i =" + (j > i)); // true

    System.out.println("k >j =" + (k > j)); // false

    // maior ou igual aSystem.out.println("maior ou igual a...");System.out.println("i >=j =" + (i >= j)); // falseSystem.out.println("j >=i =" + (j >= i)); // trueSystem.out.println("k >=j =" + (k >= j)); // true

    // menor queSystem.out.println("menor que...");System.out.println("i

  • 7/27/2019 Linguagem Java COMPLETA

    40/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    40

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    | OU binrio,^ OU exclusivo binrio ,! negao.

    A operao bsica para um operador lgico :

    x1 op x2

    Onde x1 e x2 podem ser expresses, variveis ou constantes lgicas, e op pode tanto ser &&, &,||,| ou ^.

    4.4.1 && (e lgico) e & (e binrio)

    x1 x2 Resultado

    true true true

    true false false

    false true false

    false false false

    Tabela 4.4 - Tabela para && e &

    A diferena bsica do operador && para & que o && suporta uma avaliao de curto-circuito (ouavaliao parcial), enquanto que o & no. O que isso significa?

    Dado o exemplo:

    exp1 && exp2

    o operador E ir avaliar a expresso exp1, e, imediatamente, retornar um valor false seaexpressoexp1forfalsa.Se aexpressoexp1 resultar em um valorfalseooperador nunca avaliar a expresso exp2, pois o valor detoda a expresso ser falsa mesmo que o resultado isolado de exp2 seja verdadeiro. J o operador & sempreavalia as duas partes da expresso, mesmo que a primeira tenha o valor false.

    O programa a seguir, mostra a utilizao destes operadores:

    public class TesteAnd {

    public static void main(String[] args) {int i = 0;int j = 10;boolean test = false;

    // usando o operador && em curto circuitotest = (i > 10) && (j++ > 9);System.out.println(i);System.out.println(j);System.out.println(test);

    // usando o operador &test = (i > 10) & (j++ > 9);System.out.println(i);System.out.println(j);System.out.println(test);

    }}

    Listagem 4.3 Operador E

  • 7/27/2019 Linguagem Java COMPLETA

    41/161

  • 7/27/2019 Linguagem Java COMPLETA

    42/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    42

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    Note que o comando j++, na linha 8 contendo &&, nunca ser executado, pois o operador no o avalia,visto que a primeira parte da expresso (i>10) retorna um valor booleano false.

    4.4.2 || ( ou lgico) e | ( ou binrio)

    x1 x2 Resultado

    true true true

    true false true

    false true true

    false false false

    Tabela 4.5 - Tabela para || e |

    A diferena bsica entre os operadores || e |, que, semelhante ao operador &&, o || tambm suporta aavaliao parcial. O que isso significa?

    Dada a expresso,

    exp1 || exp2

    O operador OU lgico ir avaliar a expresso exp1, imediatamente retornar um valor lgico true paratoda a expresso se a primeira parte for avaliada como verdadeira. Se a expresso exp1 resultar em verdadeira asegunda parte exp2 nunca ser avaliada, pois o valor final da expresso ser true independentemente do resultadoda segunda expresso.

    O programa a seguir, mostra a utilizao destes operadores:

    public class TesteOr {

    public static void main(String[] args) {

    int i = 0;int j = 10;boolean test = false;

    // uso do operador ||test = (i < 10) || (j++ > 9);System.out.println(i);System.out.println(j);System.out.println(test);

    // uso do operador |test = (i < 10) | (j++ > 9);System.out.println(i);System.out.println(j);System.out.println(test);

    }

    }

    Listagem 4.4 Operador OU

    Note que a expressoj++, nas linhas 9 e 15, nuncaseravaliada na instruo que usa o operador ||,pois aprimeira parte da expresso (i

  • 7/27/2019 Linguagem Java COMPLETA

    43/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    43

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    4.4.3 ^ (ou exclusivo binrio)

    x1 x2 Resultado

    true true false

    true false true

    false true true

    false false false

    Tabela 4.6 - Tabela para o operador ^

    O resultado de uma expresso usando o operador ou exclusivo binrio ter um valor true somente se umadas expresses for verdadeira e a outra falsa. Note que ambos os operandos so necessariamente avaliados pelooperador ^.

    O programa a seguir, mostra a utilizao deste operador:

    public class TesteXOR {

    public static void main(String[] args) {

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

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

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

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

    }}

    Listagem 4.5 Operador OU exclusivo

    4.4.4 ! (negao)

    x1 Resultado

    true f a l s e

    false true

    Tabela 4.7 - Tabela para o operador !

    O operador de negao inverte o resultado lgico de uma expresso, varivel ou constante, ou seja, o queera verdadeiro ser falso e vice-versa.

    O programa a seguir, mostra a utilizao deste operador:

  • 7/27/2019 Linguagem Java COMPLETA

    44/161

  • 7/27/2019 Linguagem Java COMPLETA

    45/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    45

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    Ordem Operador Associativo

    6 >, >>> esquerda

    7 =, instanceof

    8 != , ==

    9 & (binrio) esquerda

    10 ^ (OU exclusivo binrio) esquerda

    11 | (binrio) esquerda

    12 && esquerda

    13 || esquerda

    14 ?: condicional esquerda

    15 =, +=, -=, *=, /=, %=, =, >>>=, &=, |=, ^= direita

    Tabela 4.7: Precedncia de operadores

    No caso de dois operadores com mesmo nvel de precedncia, ter prioridade o que estiver mais esquerda da expresso. Veja exemplo de uma expresso complexa:

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

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

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

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

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

    5 Estruturas de controleEstruturas de controle de deciso so instrues em linguagem Java que permite que blocos especficos de

    cdigo sejam escolhidos para serem executados, redirecionando determinadas partes do fluxo do programa.

    5.1 Estruturas de deciso if - else

    A declarao ifespecifica que uma instruo ou bloco de instrues seja executado se, e somente se, umaexpresso lgica for verdadeira.

    A declarao ifpossui a seguinte forma:

    if ()

    ou:if () {

    }

    onde, expresso_lgica representa uma expresso ou varivel lgica (que retorna false ou true). Por exemplo, dado o

    trecho de cdigo:

  • 7/27/2019 Linguagem Java COMPLETA

    46/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    46

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    int nota = 68;if (nota > 60)System.out.println("Parabns!");

    ou: int nota = 68;if (nota > 60) {

    System.out.println("Parabns!");System.out.println("Voc passou!");

    }

    A declarao if-else usada quando queremos executar determinado conjunto de instrues se a condiofor verdadeira e outro conjunto se a condio for falsa.

    Possui a seguinte forma:

    if ()

    else

    Tambm podemos escrev-la na forma abaixo:

    if () {

    } else {

    }

    Por exemplo, dado o trecho de cdigo:

    int nota = 68;if (nota > 60)

    System.out.println("Parabns! Voc passou!");else

    System.out.println("Lamento ! Reprovado");

    ou:int nota = 68;if (nota > 60) {

    System.out.println("Parabns!");System.out.println("Voc passou!");

    } else {

    System.out.println("Lamento !");System.out.println("Reprovado");

    }

    A declarao else pode conter outra estrutura if-else. Este aninhamento de estruturas permite ter deciseslgicas muito mais complexas.

    A declarao if-else-ifpossui a seguinte forma:

    if ()

    else if ()

    else

    Em uma expresso if-else if - else, se a

    primeira condio falsa, o fluxo de

    controle segue para aanlise da segunda

    condio.

  • 7/27/2019 Linguagem Java COMPLETA

    47/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    47

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    Podemos ter vrias estruturas else-ifdepois de uma declarao if. A estrutura else opcional e pode seromitida. No exemplo mostrado acima, se a primeira condio verdadeira, o programa executa a esalta as outras instrues. Caso contrrio, se a condio falsa, o fluxo de controle segue para a anlise da segunda

    condio. Se esta for verdadeira, o programa executa a e salta a . Caso contrrio, se asegunda condio falsa, ento a executada.

    Observe um exemplo da declarao if-else-ifno seguinte trecho de cdigo:

    public class TesteIfElse {

    public static void main(String[] args) {

    int mesDoAno = 13;

    if (mesDoAno == 12 || mesDoAno == 1 || mesDoAno == 2) {System.out.println("Vero");

    } else if (mesDoAno == 3 || mesDoAno == 4 || mesDoAno == 5) {

    System.out.println("Outono");} else if (mesDoAno == 6 || mesDoAno == 7 || mesDoAno == 8) {System.out.println("Inverno");

    } else if (mesDoAno == 9 || mesDoAno == 10 || mesDoAno == 11) {System.out.println("Primavera");

    } else {System.out.println("Ms no vlido: " + mesDoAno);

    }}

    }

    Listagem 5.1 Testando IF-ELSE

    5.2 Declarao switchOutra maneira de indicar uma condio atravs de uma declarao switch. A construo switch permite

    que uma nica varivel tenha mltiplas possibilidades de avaliao. O switch trabalha sobre os tipos primitivos byte,short, char e int, ele tambm pode operar sobre tipos enumerados (a serem vistos posteriormente) sobre classesempacotadoras Characater, Byte, Short e Integer.

    A declarao switch possui a seguinte forma:

    switch () {case :

    [instruo1;][instruo2;][... ][break;]

    case :[instruo1;][instruo2;][...][break;]

    case :[instruo1;][instruo2;][...][break;]

    default:[instruo1;][instruo2;][...][break;]

    }

    O programa executatodas instrues a

    partir do primeiro case,at encontrar uma

    instruo break, queinterromper a

    execuo do switch,nada aps o breakser

    executado.

  • 7/27/2019 Linguagem Java COMPLETA

    48/161

    Seja um Profissional Aprendendo com Profissionais

    www.3way.com.br

    12

    48

    Todos os direitos reservados a 3Way Networks

    Linguagem de Programao Java

    onde, compreende os tipos de dados citados anteriormente e soconstantes literais dos tipos de dados citados.

    Quando a declarao switch encontrada, o fluxo de controle avalia inicialmente a

    e segue para o case que possui o valor igual ao da varivel. O programa executatodas as instrues a partir deste ponto, mesmo as dos prximos case, at encontrar uma instruo break, queinterromper a execuo do switch, nada aps o break ser executado.

    Se nenhum dos valores case for satisfeito, o bloco default ser executado. Este um bloco opcional. Obloco default no obrigatrio na declarao switch.

    Exemplo para switch:

    public class TesteSwitch {

    public static void main(String[] args) {

    int mesDoAno = 11;

    switch (mesDoAno) {case 12:case 1:case 2:

    System.out.println("Vero");break;

    case 3:case 4:case 5:

    System.out.println("Outono");break;

    case 6:case 7:case 8:

    System.out.println("Inverno");break;

    case 9:case 10:case 11:

    System.out.println("Pr