Apostila PCIA

180
ETEC - SP / ETEC- PJ Escola Técnica de São Paulo Escola Técnica Parque da Juventude APOSTILA DE Programação de Computadores I PC I Professor: Osvaldo Rodrigues Sérgio PDF created with pdfFactory trial version www.pdffactory.com

description

Apostila de programação de computadores, apresenta a programa em java de maneira fácil e produtiva.

Transcript of Apostila PCIA

  • ETEC - SP / ETEC- PJ

    Escola Tcnica de So Paulo Escola Tcnica Parque da Juventude

    APOSTILA DE

    Programao de Computadores I

    PC I

    Professor: Osvaldo Rodrigues Srgio

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 2

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    Captulo 1: Conceitos Gerais 1. Introduo 2. Caractersticas 2.1. Orientada a objetos 2.2. Interpretada e compilada 2.2.1. Bytecode 2.2.2. JVM 2.2.3. JavaAPI 2.3. MuIti-plataforma 2.4. Robusta e confivel 2.4.1. Carbage collector 2.4.2. Exception handling 2.5. Segura 2.6. Portvel 2.7. Multithreaded 3. Princpios da linguagem 3.1. Case sensitive 3.2. Nome do arquivo 3.3. Nomenclatura 3.4. Estrutura 3.5. Comentrios 3.6. Identificadores reservados 4. Estrutura bsica de uma classe 5. Verses do Java 6. JSDK e JRE 7. Ambientes de desenvolvimento 8. Compilando e executando 9. Path Captulo 2: Tipos de Dados, Valores Literais e Variveis 1. Introduo 2. Tipos Primitivos 3. type casting 3.1. Promoo automtica 3.2. Upcast e downcast 4. Valores Literais 4.1. Literais Inteiros 4.2. Literais de Ponto Flutuante 4.3. Literais Booleanos 4.4. Literais de Caracteres 4.5. Literais de Strings 5. Variveis 5.1. Declarao 5.2. Escopo de Variveis 5.2.1. Aninhamento de Escopos 6. Exibindo Dados na Tela

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 3

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    Captulo 3: Operadores 1. Introduo 2. Operadores de atribuio 3. Operadores aritmticos 3.1. Operadores aritmticos de atribuio reduzida 4. Operadores incrementais e decrementais 5. Operadores relacionais 6. Operadores lgicos bit a bit 6.1. Operador and 6.2. Operador or 6.3. Operador xor 6.4. Operador not bit a bit 7. Operadores lgicos 8. Operador instanceof 9. Operador ternrio 10. Precedncia dos operadores Captulo 4: Controle de Fluxo 1. Introduo 2. Comandos de deciso 2.1. if/ else 2.2. switch / case 3. Comandos de laos de repetio 3.1. While 3.2. Do / while 3.3. For 3.4. Break 3.5. Continue 3.6. Instrues rotuladas 3.7. Instrues no-rotuladas Captulo 5: Orientao a objetos 1. Introduo 2. Abstrao 3. Objetos 4. Classes 5. Princpios da orientao a objetos Captulo 6: Classes 1. Introduo 2. Encapsulamento 3. Tipos construdos 4. Instanciao 5. Atribuio entre objetos de tipos construdos 6. Inicializao dos atributos de uma classe 7. Acesso

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 4

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    7.1. Padro 7.2. Pblico 8. Superclasse 9. Classe Object 10. Classes abstratas 10.1. Mtodos abstratos 11. Classes finais Captulo 7: Mtodos 1. Introduo 2. Estrutura dos mtodos 3. Criando mtodos 4. Chamada de mtodos 5. Passagem de parmetros: por valor e por referncia 6. Comando return 7. Acesso a mtodos 8. Modificadores de mtodos 9. Membros estticos 9.1. Atributos estticos 9.2. Mtodos estticos 10. Mtodo main() 11. Sobrecarga de mtodos 12. Uso do this 1 3. Mtodos recursivos Captulo 8: Construtores 1. Introduo 2. Construtor padro 3. Princpios dos construtores Captulo 9: Herana 1. Introduo 2. Criando uma herana 2.1. Acesso aos membros da classe pai 2.2. Acesso aos Membros da classe pai com super 2.3. A Classe pai com sobrecarga do mtodo construtor 3. Relacionamento baseado na herana 4. Relacionamento baseado na utilizao Captulo 10: Polimorfismo 1. Introduo 2. Run-time binding 3. O uso do polimorfismo Captulo 11: Arrays 1. Introduo

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 5

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    2. Construo de arrays 2.1. Acesso aos elementos do vetor 2.1.1. Acesso aos elementos do vetor atravs do for aprimorado 2.2. Array com vrias dimenses 2.3. Passando um array como parmetro 2.4. Criando array com tipos construdos Captulo 12: Interfaces 1. Introduo 2. Varivel de referncia 3. Variveis inicializadas Captulo 13: Pacotes 1. Introduo 2. Package 3. Import Captulo 14: Classes String, Math e Wrapper 1. Introduo 2. Classe String 2.1. Inalterabilidade 2.2. Alguns mtodos da classe String 2.3. Classe StringBuffer 2.3.1. Alguns mtodos da classe StringBuffer 2.4. Mtodos encadeados 3. Classe Math 3.1. Alguns mtodos da classe Math 4. Classe Wrapper 4.1. Construtores Wrapper 4.2. Mtodos de converso 4.2.1. Mtodos valueOf() 4.2.2. parseOf() 4.2.3. Value() 5. Autoboxing e auto-unboxing Captulo 15: Swing 1. Introduo 2. Eventos 2.1. Event Listener 2.2. Eventos do teclado 2.3. Eventos do mouse 2.3.1. Tratamento de eventos 2.3.2. Classes adaptadoras 2.3.3. Classes internas 3. Criando componentes utilizando o swing 4. Gerenciadores de layout 5. Componentes

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 6

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    Captulo 16: Applets 1. Introduo 2. Principais mtodos 3. Restries de applets 4. Applet x Awt x Swing 5. Passando parmetros para um applet 6. Imagens e sons Captulo 17 Excees Clusula try ... catch ... finally Captulo 18 Acesso Banco de Dados

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 7

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    Captulo 1

    1. Introduo

    Java uma linguagem de programao resultante de um projeto desenvolvido em 1991 por um grupo de engenheiros da empresa Sun Microsystems. Na verdade, inicialmente, esses engenheiros tinham a misso de criar uma linguagem que seria utilizada em diversos aparelhos, tais como fornos e telefones. Eles deveriam criar uma linguagem que permitisse a comunicao entre os aparelhos de uma casa e que gerasse pequenos cdigos para serem executados nos mais diversos aparelhos. A fim de desenvolver esse projeto, os engenheiros optaram por utilizar a linguagem C++ em conjunto a um conceito de mquinas virtuais. A opo por essa linguagem deve-se ao fato de ela ser muito poderosa e ser orientada a objetos, caractersticas que indicavam a escolha mais adequada. Quanto ao conceito de mquinas virtuais, esta foi a soluo encontrada para a execuo de diversas arquiteturas, em que cada um dos fabricantes seria responsvel por suportar determinadas funes do programa. No entanto, a linguagem que, em princpio, seria desenvolvida para ambientes residenciais com a finalidade de permitir que aparelhos eletrodomsticos fossem capazes de se comunicar, tornou-se uma das linguagens de programao mais conhecidas e utilizadas no mundo. Os criadores de Java, ento, desenvolvem a primeira plataforma de software em carter mundial, a qual permite que os aplicativos desenvolvidos sejam executados em quaisquer micros. O objetivo desses criadores desenvolver uma linguagem que apresente as seguintes caractersticas: Fcil aprendizado A linguagem Java foi criada com poucas construes a fim de permitir que eventuais desenvolvedores sejam capazes de aprend-la de forma simples e rpida. Familiaridade Esses criadores tambm tinham como objetivo desenvolver uma linguagem familiar aos programadores de outras linguagens, uma vez que isso ajudaria na migrao entre linguagens. Contudo, para criar uma linguagem familiar e com poucas construes, eles optaram por excluir recursos presentes em C e C++, essencialmente aqueles pouco utilizados e que no auxiliam em boas prticas de programao. Dentre os recursos excludos que permitiram a simplificao de Java, temos a possibilidade de manipulao dos ponteiros, bem como sua aritmtica. Esses ponteiros, que tm a funo de alocar memria, permitem o constante surgimento de problemas, tais como bugs. Alm disso, os ponteiros so desnecessrios linguagem Java na medida em que ela no conta com structures, e os objetos representam seus arrays e strings. Embora a linguagem Java apresente simplicidade, ela bastante completa e poderosa, e pode ser utilizada em trs frentes de programao distintas, que so:

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 8

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    Frentes de Programao

    Descrio

    Applets Os applets so programas criados por meio de recursos oferecidos somente pela linguagem Java. Como esses programas no podem ser executados sozinhos, eles devem ser inseridos em pginas da Web. Uma vez inseridos em uma pgina HTML, esses programas so executados de forma automtica no momento em que tal pgina aberta. Essa pgina, porm, deve ser aberta em um navegador que esteja habilitado para a linguagem Java, dentre os quais temos o Internet Explorer e o Mozilla FireFox.

    Aplicativos Os aplicativos escritos em diversas linguagens, como C, C++, Visual Basic, entre outras, tambm podem ser facilmente escritos em Java. A vantagem dessa criao deve-se ao fato que um aplicativo escrito em Java pode ser executado em quase todos os micros disponveis no mercado atualmente.

    Sistemas Embutidos Sistemas embutidos so aqueles utilizados em outros aparelhos eletrnicos diferentes dos microcomputadores, e Java, devido aos seus recursos e caractersticas, uma linguagem utilizada para o desenvolvimento desses sistemas.

    2. Caractersticas Aps termos visto alguns detalhes a respeito da criao da linguagem Java, teremos, nos subtpicos seguintes, uma breve apresentao de suas caractersticas. 2.1. Orientada a objetos Uma linguagem orientada a objetos aquela na qual os programas so formados por objetos capazes de executar suas prprias operaes e propriedades. Isso significa dizer que essa linguagem possui dados cuja estrutura determinada em conjunto s funes e mtodos que podem ser executados. 2.2. Interpretada e compilada Quando desenvolvemos programas utilizando a linguagem de programao Java, para que esses programas sejam executados em um micro, preciso realizar dois processos distintos: a interpretao e a compilao, diferentemente das outras linguagens, cujos programas precisam ser ou compilados, ou interpretados. A compilao um processo por meio do qual o programa transformado em bytecode, uma linguagem intermediria. O cdigo gerado por essa transformao interpretado posteriormente por um interpretador Java. Destacamos que ao passo que a compilao do programa realizada somente uma vez, sua interpretao ocorre a cada execuo desse programa. Devido ao fato de ser uma linguagem interpretada, Java independente de plataforma. Mais especificamente, temos que o compilador Java responsvel por gerar o bytecode, um cdigo cuja execuo realizada por uma JVM (Java Virtual Machine), uma mquina virtual. Nesta JVM encontra-se o interpretador Java, o qual utilizado na execuo do bytecode para rodar o programa.

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 9

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    Por conta de o cdigo bytecode no ser dependente de plataforma, a execuo dos programas Java pode ocorrer em quaisquer plataformas para as quais a JVM seja suportada. Em Java, o processo correspondente linkagem envolve somente o carregamento de novas classes no ambiente de execuo da JVM, o que efetuado em tempo de execuo. Destacamos que, em uma mquina virtual JVM, encontramos no apenas o interpretador, mas tambm o sistema de run-time Todo o processo que envolve compilao, linkagem e execuo de um programa, o qual comum em diversas linguagens de programao, no ocorre com o Java, o que possibilita minimizar o tempo utilizado para o desenvolvimento de programas nesta linguagem. Isso possvel porque a linkagem um processo quase inexistente em ambientes interpretados. Entendemos por bytecode um cdigo resultante da compilao de uma programa desenvolvido em Java. O bytecode um cdigo que pertence a uma mquina virtual, cuja idealizao dos criadores da linguagem de programao Java. Por conta desse cdigo, Java tornou-se uma linguagem mais rpida do que aquelas que so simplesmente interpretadas. Ainda, temos o arquivo bytecode que possui a extenso .CLASS e gerado aps a realizao do processo de compilao de uma classe. Esse arquivo pode ser portado para uma outra plataforma sem que um novo processo de compilao do cdigo fonte tenha que ser realizado. 2.2.2. JVM JVM refere-se a uma mquina virtual que cada uma das mquinas deve possuir a fim de que, depois de realizado o processo de compilao, as classes sejam executadas. Alm da mquina JVM, tambm podemos ter o JDK (Java Development Kit) instalado nas mquinas para a execuo de classes. 2.2.3. JavaAPI Definimos Java API (Application Programming Interface) como sendo uma coleo de componentes de software, os quais englobam: Estruturas que permitem o desenvolvimento de aplicaes grficas; Estruturas que permitem manipular arquivos; Entre outros. A organizao de uma API realizada como um conjunto de bibliotecas, as quais contm interfaces e classes, e so chamadas tambm de pacotes. Nota: O arquivo src.zip que est contido dentro do Kit (JSDK) possui todas as classes e interfaces da Linguagem Java 2.3. Multiplataforma A execuo de uma aplicao Java pode ocorrer em qualquer sistema para o qual haja uma implementao da mquina virtual JVM. Isso possvel porque a compilao de um programa desenvolvido em Java gera um bytecode. Essa caracterstica de ser executada em diversos sistemas essencial para as aplicaes que so distribudas atravs de redes heterogneas e, inclusive, que so distribudas atravs da Internet. 2.4. Robusta e confivel Os softwares que so desenvolvidos em linguagem Java apresentam um grau considervel de confiabilidade e robustez, embora isso no permita desconsiderar a utilizao de procedimentos capazes de manter o software em segurana. A linguagem de programao Java apenas elimina alguns tipos de erros de programao comuns, facilitando o desenvolvimento de softwares confiveis.

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 10

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    Os itens que caracterizam bastante a confiabilidade e a robustez da linguagem Java so o manuseio de excees e o gerenciamento de memria automtico (garbage collector). Observemos, a seguir, outros itens capazes de justificar essas caractersticas de Java; Robustez A robustez da linguagem Java deve-se ausncia de ponteiros e sua aritmtica, bem como s checagens realizadas em tempo de execuo. Uma vez que no possui ponteiros, diversos bugs relacionados aos mesmos so eliminados, o que permite a otimizao da robustez apresentada por essa linguagem. Quanto checagem em tempo de execuo, esta realizada sobre todos os acessos efetuados a arrays e strings e sobre as converses de tipos de objetos. A checagem de arrays e strings realizada com a finalidade de verificar se ambos encontram-se dentro dos limites corretos e, portanto, no h a possibilidade de que a memria seja sobrescrita e que os dados sejam corrompidos. J a checagem das converses dos tipos de dados realizada no intuito de verificar se as mesmas so adequadas. Confiabilidade A confiabilidade da linguagem Java envolve a declarao explcita de mtodos e a tipagem forte, conhecida por strong typing. Esta tipagem permite que, em tempo de compilao, seja realizada uma verificao capaz de eliminar eventuais problemas ocorridos na combinao de tipos. Em se tratando da declarao explcita de mtodos, esta exigida pela linguagem Java a fim de que o compilador possa detectar eventuais erros ocorridos durante uma chamada ao mtodo. Alm disso, diversas tolerncias em tempo de compilao esto presentes em Java. Essas tolerncias foram implementadas para que a linguagem Java preservasse sua compatibilidade com outras linguagens, como C e C++. Todas essas caractersticas de Java fazem com que ela se torne uma linguagem mais confivel. 2.4.1. Garbage collector Antes de definirmos o que vem a ser garbage collector, preciso compreender o processo de criao de objetos em uma linguagem orientada a objetos. Sendo assim, temos que esse processo de criao faz com que diversos segmentos de memria sejam ocupados de forma dinmica. No entanto, para que a dimenso do desenvolvimento de aplicaes por meio dessa linguagem no seja limitada, o espao utilizado deve retornar ao sistema a fim de que seja utilizado novamente. O garbage collector, tambm chamado de gerenciamento automtico de memria, uma das caractersticas mais essenciais de Java. Ele adotado por essa linguagem a qual aps verificar se os objetos no possuem referncias vlidas, recupera os espaos que no so mais utilizados pelos objetos para que os programadores no tenham preocupaes quanto remoo dos mesmos. Isso permite que eventuais problemas com relao alocao e desalocao de memria sejam evitados, bem como impede que ocorra o vazamento de memria, chamado de memory leak. O memory leak ocorre da seguinte maneira: Depois de o programa ter sado, a memria no desalocada pelo objeto; Ento, esse espao permanece reservado, porm, sem que esteja sendo utilizado. Vale destacar que a JVM responsvel por manter em um contador as informaes relacionadas a todas as referncias que so feitas a um determinado objeto a fim de que, dessa maneira, ela saiba a quantidade de referncias que esto apontando para uma certa parte da memria. Assim que o contador zerado, isso indica que o objeto para o qual as referncias foram feitas pode ser eliminado da memria.

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 11

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    Embora os programadores no sejam capazes de atuar sobre o garbage collector de forma explcita, eles podem invocar o mtodo gc() pertencente classe java.lang.System a fim de recomendar ao sistema que o garbage colletorseja executado. Outra recomendao que pode ser feita ao sistema por parte dos programadores envolve a execuo do mtodo finalize() referente aos objetos que foram eliminados. Para isso, preciso que os programadores utilizem o mtodo runFinalization pertencente mesma classe do mtodo gc(), a java.lang.System. Os programadores tambm so capazes de indicar ao garbage collector o fato de um determinado objeto no mais ser necessrio e, portanto, poder ser excludo. Para isso, preciso que eles removam a referncia a esse objeto de forma explcita. Em suma, o garbage collector o responsvel por remover os objetos que no so utilizados a fim de tornar disponvel a memria alocada que est armazenada. Quando trabalhamos com a linguagem Java, a memria alocada com operaes medida que o programa executado. 2.4.2. Exception handling A robustez dos programas desenvolvidos em Java tambm se deve ao exception handling, ou manuseio de excees, que uma caracterstica bastante importante para essa linguagem porque permite simplificar as tarefas de manipulao e recuperao de erros. A simplificao dessas tarefas possvel no somente por conta do exception handling, mas tambm com o auxlio dos comandos try, catch e finally, os quais possibilitam o agrupamento em um s local do cdigo de manipulao de erros como um todo. Definimos excees como sendo sinais de ocorrncias inesperadas, tais como '\.M': . \ erros e problemas. 2.5 Segura A segurana uma das caractersticas mais difundidas de Java. Essa linguagem possui diversas camadas de controle de segurana que so responsveis por oferecer proteo contra cdigos maliciosos. Embora no exista uma linguagem ou um ambiente que oferea segurana total, Java capaz de se defender contra grande parte das tcnicas que vm sendo utilizadas com a finalidade de quebrar a segurana de um programa. Ainda, importante ressaltar que a segurana oferecida pela linguagem Java foi testada no somente por vrios especialistas da rea de segurana, mas tambm por hackers, o que permitiu identificar brechas na segurana das primeiras verses e consert-las. Dessa forma, eventuais brechas que venham a surgir futuramente tambm sero reparadas. A seguir. Veremos quais so as camadas de controle de segurana presentes na linguagem Java: Acesso memria Tendo em vista que, no nvel mais baixo, no possvel acessar a memria de forma direta, diversos ataques contra a segurana e cdigos maliciosos so evitados. Como principais recursos de defesa, os programas desenvolvidos em Java no tm permisso para forjar ponteiros, acessar a memria que se encontra alm de arrays e strings, bem como no podem estourar os arrays. Assinatura digital A assinatura digital um recurso de segurana que foi implementado somente a partir da verso 1.1 da linguagem Java. Essa assinatura, quando anexada ao cdigo Java, permite que a origem desse cdigo seja assegurada contra falsificaes na medida em que ele criptografado. Sendo assim, torna-se possvel determinar se algum ou alguma instituio confivel.

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 12

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    Uma vez determinado como pessoa ou organizao confivel, seus cdigos que possuem assinatura digital podem ser executados em uma sandbox sem quaisquer problemas ou restries. Sandbox (modelo de caixa de areia) Em uma sandbox, os cdigos cuja origem desconhecida podem ser executados sem que haja quaisquer riscos para o ambiente Java. Isso possvel porque a execuo desse cdigo ocorre em uma sandbox, a qual o mantm isolado, fazendo com que ele tenha diversas restries. A implementao de tais restries realizada pela classe SecurityManager, qual todas as classes de Java que executam operaes arriscadas pedem suas permisses. Sendo assim, para qualquer chamada que realizada por um cdigo de origem desconhecida, uma exceo lanada, evitando que a operao seja realizada. Verificao do bytecode A verificao do bytecode um processo realizado pelo interpretador da linguagem Java. Essa verificao, que realizada sobre os cdigos de origem desconhecida que so carregados, garante que esses cdigos formem-se de maneira adequada. Garantir que o cdigo seja formado de maneira adequada significa garantir que o mesmo no ultrapasse os limites da pilha, tanto o limite inferior (stack underflow) quanto o superior (stack overflow), bem como significa assegurar que um bytecode ilegal no seja implementado. A verificao de bytecode capaz de impedir que um cdigo corrompido tire proveito de eventuais brechas presentes na implementao do interpretador. Por conta de sua associao com a Internet, a segurana da linguagem de programao Java de suma importncia, uma vez que sem a mesma, os usurios no poderiam confiar nos cdigos de sites desconhecidos que so baixados da Internet, o que ocorre com freqncia. 2.6. Portvel Uma das caractersticas da linguagem Java ser portvel. Isso significa dizer que, alm de ser interpretada, ela uma linguagem capaz de definir um formato bytecode que seja padro e, ainda, que apresente neutralidade em relao s arquiteturas existentes. Destacamos; tambm; que em sua especificao, Java no contm aspectos que dependem de implementao. importante ter em mente que o fato de a linguagem Java ser independente de plataforma deve-se gerao dos bytecodes. Esses arquivos so resultado da transformao do cdigo em alto nvel realizada a partir da compilao do cdigo Java. Essa compilao efetuada pelo compilador javac ou javac_g. 2.7. Multithreaded Dentre as caractersticas de Java, temos que ela uma linguagem mutithreaded, o que facilita a criao de aplicativos tambm multithreaded, nos quais diversas linhas de execuo so rodadas simultaneamente. Quando diversas linhas de execuo (threads) so utilizadas, a performance interativa de aplicativos grficos otimizada.

    3. Princpios da linguagem essencial que os princpios da linguagem Java, os quais sero descritos a seguir, sejam considerados no momento em que o programador estiver desenvolvendo aplicaes nesta linguagem.

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 13

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    3.1. Case sensitive Case sensitive um princpio da linguagem de programao Java que indica que esta capaz de distinguir letras em caixa alta (maisculas) e letras em caixa baixa (minsculas). 3.2. Nome do arquivo O nome do arquivo tem a extenso .java e, preferencialmente, deve ser o mesmo nome de uma das classes declaradas dentro deste arquivo, por exemplo, para a class Cliente teremos o arquivo com o nome Cliente.Java. Seria um erro definir a classe como class Cliente e o nome do arquivo como cliente.Java. 3.3. Nomenclatura Os nomes atribudos aos identificadores devem ser iniciados plos caracteres underline (_), pelo cifro ($), ou por letras. Dentre os identificadores, temos as classes, os mtodos, as variveis, entre outros. 3.4. Estrutura O incio de um bloco de cdigo ou de uma classe sempre ser marcado pela abertura de chaves - {, e o trmino, pelo fechamento de chaves }. Quanto ao trmino dos comandos, este, em geral, marcado pelo sinal de ponto-e-vrgula 3.5. Comentrios As linhas de comentrio podem ser iniciadas de formas distintas, dependendo dos seguintes fatores: Comentrio de somente uma linha Comentrios que no ultrapassam uma linha devem ser iniciados por duas barras (//). Comentrio de mais de uma linha Comentrios que ultrapassam uma linha ou, ainda, blocos que no devem ser executados so marcados por barra e asterisco no incio (/*), e asterisco e barra no final (*/). Ajuda em HTML Comentrio para gerar arquivo de ajuda em HTML com o Javadoc. Inicia com uma barra e dois asteriscos (/** ) e termina com um asterisco e uma barra ( */). 3.6. Identificadores reservados Os identificadores reservados em Java so palavras especiais que tm uma funcionalidade para o compilador e que no podem ser utilizadas como nome de classes, mtodos ou variveis. Nota: As palavras reservadas so escritas em caixa baixa.

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 14

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    A seguir, listamos as palavras reservadas da verso 5.0:

    Palabras reservadas abstract instanceof jassert (introduzida no Java 1.4) int boolean interface break long byte native case new catch null char package class private const (no utilizada) protected continue public default return do short double static else strictfp enum (introduzida no Java 5.0) super extends switch false synchronized final this finally throw float throws for transient goto (no utilizada) true if try implements void import volatile while

    Literais reservados De acordo com a Java Language Specification, null, true e false so tecnicamente chamados de valores literais. Se tentarmos criar algum identificador com estes valores, haver um erro de compilao.

    4. Estrutura bsica de uma classe Apresentaremos, a seguir, a estrutura bsica de uma classe: 1. class 2. { 3. public static void main(String args[ ]) 4. { 5. // declaraes; 6. // comandos; 7. } 8. } Em que as linhas:

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 15

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    1. Define o nome da classe; 2. Primeira chave aps a definio do nome da classe e que especifica o corpo (incio do bloco) da classe. Tudo o que fizer referncia classe dever estar entre o primeiro abrir de chaves e o ltimo fechar de chaves; 3. Definio do mtodo main(). As instrues public, static, String, args[ ] sero explicadas oportunamente; 4. Abertura da chave (bloco) referente aos comandos que estaro dentro do mtodo main(); 5. Declaraes de variveis dentro do mtodo main(); 6. Comandos dentro do mtodo main(); 7. Fecha chave (bloco) do mtodo main(); 8. Fecha chave (bloco) da classe.

    5. Verses do Java A verso mais atual de Java a 1.6. Vale destacar que, a partir da verso 1.2, na qual as alteraes foram consideravelmente grandes, o nome que denomina a linguagem em questo passou a ser Java 2, indicando, assim, o incio de sua segunda edio. A ltima verso.do Java conhecida como Java 6. A partir da segunda edio de Java, seus pacotes sofreram grandes alteraes a fim de que fossem reestruturados. Trs so os tipos de pacotes com os quais a linguagem Java pode contar atualmente: Java EE 5; J2ME; e Java SE 5.0. Na tabela a seguir, teremos a descrio de cada um desses pacotes:

    Pacotes Descrio Java EE 6.0 (Java Enterprise Edition 6.0)

    Este pacote conta com os servlets e destinado ao desenvolvimento de grandes aplicaes, as quais utilizam os servidores de aplicao e o EJB (EnterpriseJava Beans). O Java 2 Software Development Kit Enterprise Edition, tambm chamado de J2SDKEE, o responsvel pela implementao padro deste pacote.

    J2ME (Java 2 Micro Edition) Este pacote a especificao da linguagem Java na qual esto contidas APIs. Essas APIs apresentam as funcionalidades necessrias para que sejam desenvolvidas aplicaes aos dispositivos de pequeno porte. Dentre esses dispositivos temos telefones celulares, agendas eletrnicas e diversos aparelhos que possuem a KVM, ou seja, a Mquina Virtual destinada aos dispositivos de pequeno porte.

    Java SE 6u1 (Java Standard Edition 6.0)

    Este pacote destinado criao da maioria das aplicaes referentes s estaes de trabalho e aos desktops. a verso bsica e, portanto, a normalmente utilizada.

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 16

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    A fim de que possamos saber qual a verso de Java que se encontra instalada no micro, preciso realizar o seguinte: 1. Abrir o prompt do DOS; 2. Digitar java -version; 3. Pressionar a tecla ENTER. As verses de Java para os sistemas Windows, Solaris e Linux encontram-se no site http://java.sun.com e podem ser obtidas a partir do mesmo. Os endereos da Web para baixar os Kits so: J2SE: http://java.sun.com/javase J2ME: http://java.sun.com/javame J2EE: http://java.sun.com/javaee

    6. JSDK e JRE

    Para que possamos desenvolver aplicativos a partir da linguagem Java, precisamos contar com o conjunto de ferramentas JSDK (Java Servlet Development Kit) instalado na mquina. Esse JSDK j contm o JRE (Java Runtime Environment). Definimos JRE como sendo uma mquina responsvel por realizar as interpretaes Java, e por meio da qual no possvel realizar a compilao do cdigo Java. Sendo assim, uma mquina JRE indicada queles que somente necessitam executar aplicaes Java e contam com um pacote em cujo contedo encontram-se a mquina virtual e as bibliotecas necessrias para essa execuo. Alm da mquina JRE, o conjunto de ferramentas de desenvolvimento Java tambm contm o compilador, a JVM, algumas bibliotecas, cdigos utilizados como exemplos e o appletviewer, o qual permite a execuo de applets.

    7. Ambientes de desenvolvimento A linguagem de programao Java conta com IDEs, que so ambientes de desenvolvimento grfico capazes de auxiliar no desenvolvimento de sistemas de maneira adequada. A seguir, relacionaremos alguns dos principais ambientes de desenvolvimento de Java: Symantec Caf (www.symantec.com): Inprise Jbuilder (http://www.borland.com/jbuilder); Kawa (www.tek-tools.com): Sun ONE (http://java.sun.com); Ecl i ps (http ://www. ed i pse. o rg); NetBeans (http://www.netbeans.org).

    8. Compilando e executando Para que possamos compreender o processo de compilao e execuo de uma classe em Java, preciso abrir um editor de texto e digitar o exemplo descrito a seguir:

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 17

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    class Exemplo1 {

    public static void main(String args[ ]) {

    System.out.println("Meu Primeiro Programa em Java!"); }

    } Aps digitar o exemplo, salv-lo como Exemplo1.java. J para a compilao desta classe, devemos abrir o prompt do DOS e digitar javac Exemplei.java, em que: javac o comando do compilador Java. Exemplo1.java Refere-se ao nome do arquivo a ser compilado. Uma vez concludo o processo, o compilador javac gera um arquivo de classe chamado Exemplo1.class no diretrio atual. Caso no haja erros aps o processo de compilao, digitar java Exemplo1 ainda no prompt do DOS para executar o programa.

    9. Path Caso seja exibida uma mensagem de erro no momento da execuo do javac ou do java, isso significa que esses programas no foram encontrados pelo sistema. Normalmente isso ocorre devido falta da informao no path do computador. Para solucionar esse problema, preciso procurar ajuda no menu do sistema operacional com relao aos processos de alterao ou adio de elementos no path. Quando trabalhamos com os sistemas operacionais Windows XP/2000, basta efetuar os seguintes passos: 1. Clicar no menu Iniciar. Em seguida, clicar em Configuraes, Painel de Controle e Sistemas; 2. Na janela Propriedades do Sistema, clicar na guia Avanado e depois no boto Variveis de Ambiente; 3. Para alterar o path, basta edit-lo (muito provavelmente ele j existe) e mudar o valor para %PATH%;%JAVA_HOME%\bin; Por exemplo, levando em considerao que o Java foi instalado no diretrio c:\j2sdk1.4.0_05, a diretiva ficar assim; %SystemRoot%\system32;%SystemRoot%;j2sdk1.4.2_05\bin 4. Clicar em OK e reiniciar o micro.

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 18

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    Exerccios complementares 1. Quais so as frentes de programao para Java? 2. Cite as caractersticas do Java: 3. Qual a funo do Garbaget Collector? 4. O que significa Multithreaded? 5. Qual a diferena entre JSDK e JRE?

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 19

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    Captulo 2

    1. Introduo O Java, assim como outras linguagens de programao utilizadas atualmente, trabalha com diversos tipos de dados, como byte e char. Ainda, lidamos com valores literais, usados para a criao de valores constantes, e variveis, utilizadas por um programa em Java como unidade bsica de armazenamento. Nos tpicos que seguem, estudaremos em detalhes os tipos de dados, valores e variveis empregados pelo Java. Aprenderemos, tambm, como usar o comando System.out.println() para visualizar dados na tela.

    2. Tipos Primitivos O Java tido como uma linguagem de programao de grande robustez, uma qualidade adquirida pelo fato dela apresentar como caracterstica a tipagem forte. A linguagem em questo tem a capacidade de trabalhar com uma grande variedade de tipos de dados, cuja faixa de valores altamente definida. Um inteiro no Java, por exemplo, no sofre variaes conforme ele executado em ambientes diferentes. Por apresentar valores bem definidos, o Java mostra-se uma linguagem de grande portabilidade. A portabilidade a capacidade que o programa possui de ser executado em outras arquiteturas de computador. No caso de programas em Java, podemos presenciar uma ligeira queda de desempenho quando os mesmos so executados em alguns tipos de ambientes. Contudo, esta perda de performance, provocada pela complexa checagem do tamanho de um inteiro, vista como uma consequncia normal da portabilidade. Outro motivo que explica a popularidade do Java a baixa probabilidade de ocorrncia de erros de cdigo. A diminuio de erros de cdigo est relacionada ao trabalho de verificao que o compilador Java exerce sobre as atribuies. Sem levar em considerao se estas ltimas so explcitas ou por passagens de parmetro com uso de mtodos e chamadas, o compilador inspeciona se os tipos de expresses e parmetros so compatveis. Caso estejamos acidentalmente tentando atribuir um valor de ponto flutuante a um inteiro, tarefa no aceita pelo Java, somos informados pelo compilador que um tipo de erro foi detectado. Depois que um possvel erro tenha sido detectado, cabe a ns sanar tal irregularidade, a fim de que o compilador seja capaz de concluir o processo de compilao da classe. Apesar do Java ser uma linguagem orientada a objetos, os tipos elementares no so objetos, e sim valores individuais, muito semelhantes aos tipos simples utilizados por boa parte das linguagens de programao estruturadas Na tabela a seguir, so apresentados os oito tipos de dados, alm de um especial, utilizados em Java:

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 20

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    Tipo Descrio byte 1byte-8bits -128a 127 Nmeros inteiros short 2 bytes - 16 bits -32768 a + 32767 Nmeros inteiros Int 4 bytes-32 bits -2147483648 a 2147483647 Nmeros inteiros long

    8 bytes - 64 bits

    -922337203685477808 a 922337203685477807

    Nmeros inteiros

    float

    4 bytes - 32 bits

    Aproximadamente 3.40282347E+38

    Ponto flutuante

    double

    8 bytes - 64 bits

    Aproximadamente 1.79769313486231570E+308

    Ponto flutuante

    char

    Caracteres Unicode 16 bits

    0 a 256

    Caracteres

    boolean Possuem valores true e false Boleano String Classe

    3. Type Casting

    O Java dispe de uma operao especial chamada type casting, por meio da qual podemos provocar uma converso que no pode ser feita diretamente. Um tipo bsico pode normalmente ser promovido a um outro tipo caso no haja perda de informaes durante o processo. Neste caso, temos uma converso por alargamento, que s acontece quando temos dois tipos compatveis envolvidos na converso e quando o tipo de destino grande o suficiente para armazenar os valores do tipo original. J na converso de um tipo mais simples para um mais complexo, devemos fazer uso do type casting. Pelo processo normal, geraramos uma exceo ao tentar converter um caractere (tipo mais simples) para seu tipo inteiro (tipo mais complexo), como a seguinte: int i = 66; char c = i; Com o type casting, informaremos ao compilador do Java o fato de que estamos cientes dos riscos de uma possvel perda de informao. Assim, a converso realizada. int i = 66; char c = (char) i; Para criarmos um caractere baseado em seu cdigo ASCII, que o valor inteiro correspondente, executamos a operao que segue: class Cap2_Ex1 {

    public static void main(String args[]) {

    int i = 66; char c = (char)i; System.out.println("o numero " + i +

    " corresponde a letra " + c); } }

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 21

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    O uso da operao especial em questo s ser possvel quando os tipos envolvidos na converso obedecerem a uma relao de hierarquia. Quando fazemos a diviso de um inteiro por outro inteiro no Java, temos como resultado um outro inteiro, mesmo quando utilizada uma varivel real. Tomemos como exemplo os seguintes valores: class Cap2_Ex2 {

    public static void main(String args[ ]) {

    int x = 7, y = 2; float resultado = x / y; System.out.println (" Resultado:"+ resultado);

    } }

    Considerando a conduta do Java em gerar um inteiro a partir da diviso de um inteiro por outro, temos 3 como varivel resultado de 7/2, sendo que pela lgica seria 3.5 (metade de 7). Se quisermos obter um resultado real desta diviso de variveis ou valores inteiros, preciso usar o type casting, por meio do qual o numerador ou o denominador ser convertido para um tipo real, forando para que o resultado seja um valor do mesmo tipo real. Isto feito por meio da seguinte operao (o tipo para o qual desejamos fazer a converso, tratado como operador cast, deve ser especificado entre parnteses): class Cap2_Ex3 {

    public static void main(String args[]) {

    int x = 7, y = 2; float resultado = (float)x/y; System.out.println("Resultado: " + resultado);

    } }

    3.1. Promoo automtica

    Quando, em uma expresso, temos um resultado do termo intermedirio que apresenta um alcance maior do que o resultado dos operandos byte, podemos empregar a promoo automtica. Consideremos o seguinte exemplo:

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 22

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    class Cap2_Ex4 {

    public static void main(String args[]) {

    byte x = 30; byte y = 70; byte z = 100; int i = (x * y)/z; System.out.println ("Resultado:" + i);

    } } De acordo com o cdigo anterior, os operandos byte tm um alcance menor do que o apresentado pelo resultado do termo intermedirio. Ao aplicarmos a promoo automtica, teremos o resultado x * y, cujo valor 2100 (30 * 70). Este resultado utiliza tipos ints, e no bytes.

    3.2. Upcast e downcast

    Outro mecanismo a ser destacado o upcast, o qual est diretamente relacionado ao uso do polimorfismo. Por meio desse mecanismo, uma parte das informaes a respeito de um objeto permanece inacessvel durante um certo perodo. De acordo com a perspectiva da orientao a objetos, o processo oferecido pelo mecanismo upcast fornece segurana na medida em que o tamanho apresentado pela interface da classe base nunca maior do que o tamanho apresentado pela interface referente classe derivada. J o mecanismo downcast deve ser utilizado com o intuito de recuperar a referncia para o tipo original de um determinado objeto. Com isso, possvel obter acesso funcionalidade desse objeto como um todo. Vale destacar, porm, que o mecanismo downcast deve ser utilizado somente aps termos assegurado que o objeto cuja referncia est sendo convertida , de fato, do tipo especificado. Caso no seja do tipo determinado, a manipulao desse objeto no ser adequada depois de realizada a converso no ser adequada. Por meio do mtodo getClass(), indicaes a respeito da classe qual um determinado objeto pertence podem ser obtidas, bem como por meio do mecanismo RTTI (Run-Time Type Identification), por sua vez, permite verificar quaisquer operaes referentes ao downcast so checadas. A sintaxe do mecanismo downcast a seguinte: Ref_orig = (Tipo_orig) Ref_upcast;

    4. Valores Literais O valor literal utilizado para que possamos criar um valor constante em Java, tambm conhecido como constantes em outras linguagens de programao. Trata-se de uma representao literal do valor, constante, e pode ser aplicada em qualquer parte cujo tipo aceitvel.

    4.1. Literais Inteiros Um valor literal inteiro definido como qualquer valor numrico inteiro, e os tipos mais utilizados so os decimais (base10), octais (base 8) e hexadecimais (base 16).

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 23

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    A base hexadecimal bastante empregada por programadores. Tamanhos de palavras mltiplas de 8, como 8, 16, 32 e 64 bits se encaixam muito bem nesta base. Os algarismos utilizados para representar a base hexadecimal so 0,1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Usamos um 0 (zero) antes do valor para indicar que se trata de um constante hexadecimal e aplicamos as letras de A a F, maisculas ou minsculas, para representar dgitos hexadecimais, que variam de 10 a 15. Um valor octal representado pelo 0 em frente ao algarismo, que pode compreender os nmeros 0, 1, 2, 3, 4, 5, 6 e 7. Toda vez que um valor literal inteiro declarado, um tipo int criado. Este tipo int representado por um inteiro de 32 bits. Caso um literal esteja de acordo com a regra de valores do tipo byte ou long, podemos atribuir normalmente um literal inteiro a uma varivel, como byte ou long, sem que haja problemas de incompatibilidade de tipos. Da mesma forma, podemos atribuir uma varivel long a um literal inteiro, desde que o literal long seja explicitamente especificado ao compilador do Java. Para tal, inclumos a letra L, seja em caixa baixa ou alta, ao valor literal.

    4.2. Literais de Ponto Flutuante

    Em um programa em Java, uma prtica comum ter que representar valores decimais compostos de frao. Para esta tarefa, contamos com nmeros de ponto flutuante. Em Java, o valor padro dos literais de ponto flutuante o tipo double. Contudo, podemos acrescentar constante um F, maisculo ou minsculo, para especificar um literal como float, cujo tipo padro usa 32 bits de armazenamento contra 64 bits do tipo padro double. Os nmeros de ponto flutuante podem ser exibidos em: Notao comum; Caracterizada por um componente inteiro, seguido de um ponto decimal e pelo componente fracional. Exemplo: 3.692. Notao cientfica: Trata-se de um nmero de ponto flutuante em notao comum acompanhado de um sufixo indicando a potncia de 10 pela qual o nmero ser multiplicado. A letra E, maiscula ou minscula, representa o expoente, e seguida por um nmero decimal, positivo ou negativo. Exemplo: 4.0E+05, o mesmo que 4 * 10^5.

    4.3. Literais Booleanos Os valores literais boolean em Java envolvem apenas os valores lgicos true (verdadeiro) e false (falso), sendo que estes no so convertidos para nenhuma representao numrica. Os literais boolean s podem ser utilizados em expresses com operadoras boolean ou, ento, atribudos a variveis declaradas como boolean.

    4.4. Literais de Caracteres Como citado anteriormente, uma das aplicabilidades do Java a criao de Applets, que podem ser utilizados por pessoas de qualquer parte do mundo. Esta versatilidade dos Applets desenvolvidos com a linguagem em questo garantida pela presena do Unicode, um padro internacional unificado capaz de representar os caracteres de todas as lnguas humanas. O Unicode faz do Java uma linguagem globalmente portvel, ainda que lnguas como portugus, francs, espanhol e ingls, cujos caracteres podem ser tranquilamente contidos em 8 bits, no sejam to beneficiadas com a presena do Unicode. A fim de possibilitar que dezenas de conjuntos de caracteres - dentre eles o latim arbico,

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 24

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    grego, hebraico, hangui, cirlico e o katakana - sejam reunidos ao conjunto Unicode, o tipo char em Java foi criado com 16 bits. Este tipo possui alcance de 0 a 65.536 e no adota valores negativos. Com relao aos caracteres utilizados na linguagem Java, importante consider-los como ndices de 16 bits que apontam para caracteres Unicode. fundamental, tambm, considerar que h possibilidade de tais ndices serem convertidos e manipulados. A converso, neste caso, transforma os valores em inteiros. A manipulao, por sua vez, ocorre, por exemplo, com os operadores de subtrao e adio, ambos tidos como operadores de inteiros. Utilizamos um par de aspas simples (') para representar um valor literal de caractere. Podemos digitar entre aspas simples todos os caracteres visveis ASCII. Exemplos: f e'?'. Contudo, existem caracteres que no podem ser representados diretamente dentro de aspas simples, para os quais devemos usar sequncias de escape. Exemplos: \ Representa o prprio caractere de aspa simples; "\n" Representa um caractere de nova linha. Podemos entrar diretamente com um valor octal ou hexadecimal. Neste caso, devemos considerar as seguintes informaes: Para digitar diretamente uma notao octal, usamos uma barra invertida seguida de um nmero de trs dgitos. Exemplo: '\156', que representa a letra 'n'; Para digitar diretamente uma notao hexadecimal, usamos uma barra invertida e a letra u, seguidas de quatro dgitos hexadecimais. Exemplo:

    '\u0078', que representa a letra 'x' ISO-Latin-1

    Na tabela a seguir, esto descritas as sequncias utilizadas por alguns caracteres de escape: Seqncia de escape Descrio

    \ddd Caractere em octal (ddd) \uxxxx Caractere Unicode hexadecimal (xxxx) V Aspa simples \" Aspa dupla \\ Barra invertida \r Caractere de retorno \n Nova linha (alimentao de linha) \f Alimentao de formulrio \t Tabulao \v Tabulao vertical \b Backspace

    A seguir, apresentado o uso de dois dos exemplos de caracteres da tabela anterior:

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 25

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    class Cap2_Ex5 {

    public static void main(String args[]) {

    System.out.println("Vai saltar uma linha \n " + "saltou...."); System.out.println("Texto sem aspas, \agora texto" + " com aspas\", sem aspas");

    } }

    4.5. Literais de Strings

    Nos itens que seguem, temos as principais consideraes sobre literais de strings em Java: Comeam e terminam na mesma linha, ao contrrio de outras linguagens, em que h uma sequncia de escape de continuao de linha; So includos entre "" (aspas duplas). Exemplo: "Linguagem Java" e "ETESP"; So tipos de objeto e no arrays de caracteres. Por causa disso, a linguagem Java dispe de prticos e avanados recursos de gerenciamento de strings.

    5. Variveis Varivel um espao da memria utilizado para armazenar temporariamente um valor. Identificada por um nome, a varivel combina um identificador, um tipo e um inicializador opcional. O responsvel por definir a visibilidade de uma varivel e por quanto tempo a mesma ir durar o escopo. A varivel pode receber um valor, que determinado por um programa. Conforme este programa utilizado, o valor que a varivel previamente recebeu pode sofrer alteraes.

    5.1. Declarao

    Antes de utilizarmos as variveis em uma aplicao Java, devemos declar-las, pois s assim elas sero vlidas. Observemos: ; = ; = , ; Exemplos de declaraes de variveis: int num; int idade = 22; char sexo = f; String curso = "Linguagem Java", escola = "Etesp"; double VAL_PI = 3.1415; float faixa = 4.21f; boolean resposta = true; A seguir, apresentado um exemplo de classe utilizando declaraes de variveis:

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 26

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    class Cap2_Ex6 {

    public static void main(String args[]) {

    int a, b; char sexo = 'f';

    String curso = "Linguagem Java", escola = "ETESP"; double VAL_PI =3.1415; float faixa =4.21f; boolean resposta = true; a = 10; b = 20; System.out.println("O valor de a : " + a); System.out.println("O valor de b : " + b); System.out.println("O valor de sexo : " + sexo); System.out.println("O valor de VAL_PI : " + VAL_PI); System.out.println("O valor de faixa : " + faixa); System.out.println("O valor de resposta : " + resposta);

    } }

    5.2. Escopo de Variveis Quando falamos em escopo, estamos nos referindo ao limite ou ciclo de vida de um objeto. Um escopo criado cada vez que um novo bloco iniciado e permite que outros programas possam visualizar os objetos, alm de estipular o tempo de durao destes. Qualquer bloco iniciado pode ser utilizado como local para que uma varivel seja declarada. Se declararmos uma varivel dentro de um escopo, estamos tornando-a uma varivel local, protegida contra acessos e alteraes no-autorizadas. Por outro lado, a varivel torna-se inacessvel para um cdigo definido fora deste escopo. Ressaltamos que as regras de escopo so a base para encapsulamento. Os escopos utilizados pelo modelo orientado a objetos do Java so diferentes das categorias gerais de escopo global e local definidas pela maioria das linguagens de programao. Embora seja possvel manter algo parecido com um escopo global, este no se enquadra como regra em Java. Os dois escopos empregados em Java so o definido por classe e o definido por mtodo. Uma varivel criada assim que seu escopo acessado por um programa. Ao sair do escopo, a varivel destruda, consequentemente no preservando seu valor. O valor de uma varivel tambm no mantido quando esta sai de um bloco, o que significa que o escopo o fator decisivo para a durao da varivel. Quando temos variveis declaradas dentro de um mtodo, estas no preservam seus valores para duas chamadas feitas a um mesmo mtodo. Como citado anteriormente, para que uma varivel seja vlida, preciso declar-la. Dentro de um bloco, podemos escolher qualquer ponto para declarar a varivel. Uma varivel declarada no incio de um mtodo estar acessvel para o cdigo completo deste mtodo. Uma varivel declarada que possua um inicializador ser reinicializada toda vez que uma execuo entrar no bloco onde a varivel estiver localizada.

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 27

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    5.2.1. Aninhamento de Escopos

    Quando criamos um bloco de cdigo, o Java encarrega-se de gerar um novo escopo aninhado. A regra geral diz que, como resultado da criao do escopo aninhado, o escopo externo engloba o escopo interno, o que significa que o cdigo contido no escopo Interno poder visualizar os objetos que foram declarados no escopo externo. J os objetos declarados no escopo interno no podem ser vistos fora do mesmo. A seguir, temos uma representao de blocos, com as variveis declaradas dentro dos mesmos: { | int var1; | { | | int var2; 1 | 2 | { | | 3 | int var3; | | } | } } De acordo com o exemplo anterior, os nmeros 1, 2 e 3 indicam os blocos existentes. O bloco 1 contm o bloco 2, que por sua vez contm o bloco 3. O bloco 1 o mais externo, e contm os outros dois blocos. O bloco 3 o mais interno. Seguindo a regra geral, var1 pode ser referenciado dentro dos blocos 2 e 3 e var2 s pode ser referenciado dentro do bloco 3. Na primeira condio, temos uma varivel declarada em um bloco mais externo, com referncia em um bloco mais interno. Na segunda condio, teremos um erro de compilao caso tentemos referenciar var2 no bloco 1.

    6. Exibindo Dados na Tela O comando System.out.printIn() utilizado para exibir dados na tela. Por meio de um nico comando System.out.printIn(), possvel mostrar mais de um dado, de tipos iguais ou diferentes. Esta concatenao feita atravs do sinal de +. O exemplo que segue mostra a concatenao de dados: class Cap2_Ex7 {

    public static void main(String args[]) {

    int seculo; String cidade, estado; seculo = 21; cidade=Santos"; estado="SP"; System.out.println("Cidade = " + cidade + " - " + estado); System.out.println(seculo); System.out.println("Cidade = " + cidade); System.out.println("Sculo = " + seculo);

    } }

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 28

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    Exerccios complementares Os cdigos a seguir contm erros, identifique-os e solucione-os. class Exercicio1 {

    public static void main(String args[]) {

    String cidade, estado cidade = "Curitiba"; estado = "PR"; System.out.print(cidade) ; System.out.print(estado) ;

    } }

    class Exercicio2 {

    public static void main(String args[]) {

    int valorl ==50, valor2 == 100, result; result = valori + valor2; System.out.println("Resultado da soma = " + result); System.out.println("Resultado da soma = " valor1 + valor2);

    } }

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 29

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    Captulo 3

    1. Introduo

    Os operadores indicam o tipo de operao matemtica que ser executada, gerando novos valores a partir de um ou mais operandos (itens direita ou esquerda do operador). Normalmente, o resultado do tipo booleano ou numrico.

    2. Operador de atribuio O smbolo de igualdade (=) representa a atribuio de um valor a uma varivel, em que a varivel e o valor atribudo devem ser de tipos compatveis, ou seja: uma varivel do tipo char no pode receber um valor do tipo boolean (true ou false). Observemos: varivel = atribuio; Exemplo; class Cap3_Ex1 {

    public static void main (String args[]) {

    char resp = 'n'; //atribui o valor 'n' para a //varivel resp boolean flag; //indica que a varivel flag tem //valor boolean System.out.println(resp); System.out.println(flag = false);

    } } possvel atribuirmos uma varivel primitiva outra varivel primitiva. Vejamos como isso ocorre no exemplo a seguir: int x = 3; int y = x; Em que: x recebe o valor 3; y recebe a varivel x, logo y contm o valor 3. Neste momento, as duas variveis (x, y) tm o mesmo valor, porm, se alterarmos o valor de uma delas, a outra no ser alterada.

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 30

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    Exemplo:

    class Cap3_Ex2 {

    public static void main (String args[]) {

    int x = 3; // o valor 3 atribudo varivel x System.out.println("x = " + x); int y = x; //a varivel y recebe a varivel x System.out.println("y = " + y); y = 5; System.out.println("y =" + y);

    } }

    3. Operadores aritmticos Os operadores aritmticos so utilizados nos clculos matemticos e so os seguintes:

    Operador Descrio + Adio - Subtrao * Multiplicao / Diviso

    % Mdulo (resto da diviso) Exemplo: class Cap3_Ex3 {

    public static void main(String args[]) {

    int a = 10, b = 25, c = 40, d = 55; System.out.println(a + b); System.out.println(b - a); System.out.println(c * d); System.out.println(c / a); System.out.println(d % a);

    } } Aps a compilao e a execuo do cdigo anterior, o resultado ser o seguinte: 35 15 2200 4 5

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 31

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    3.1. Operadores aritmticos de atribuio reduzida

    Os operadores aritmticos de atribuio reduzida so utilizados para compor uma operao aritmtica e uma atribuio.

    Operador aritmtico Descrio += mais igual -= menos igual *= vezes igual /= dividido igual

    %= mdulo igual No exemplo a seguir, acrescentado o valor 3 varivel x: Exemplo: class Cap3_Ex4 {

    public static void main (String args[]) {

    int x = 4; x += 3; // o mesmo que x = x + 3 System.out.println("Valor de x = " + x);

    } } Ao utilizarmos os operadores de atribuio, contamos com dois benefcios. Alm de serem implementados de forma mais eficiente pelo sistema runtime de Java, o trabalho gasto com a digitao do cdigo reduzido. Isso ocorre porque os operadores de atribuio funcionam como se fossem uma verso mais reduzida das operaes equivalentes.

    4. Operadores incrementais e decrementais Os operadores incrementais e decrementais tm a funo de aumentar ou diminuir exatamente o valor 1 em uma varivel. Eles podem ser pr ou ps incremental e pr ou ps decremental. Vejamos: Incremental (++) Pr-incremental ou prefixo

    Significa que se o sinal for colocado antes da varivel, primeiramente ser somado o valor 1 para essa varivel, continuando em seguida a resoluo da expresso.

    Ps-incremental ou sufixo Significa que se o sinal for colocado aps a varivel, primeiro ser resolvida toda a expresso (adio, subtrao, multiplicao, etc) para em seguida ser adicionado o valor 1 varivel.

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 32

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    Decremental (--) Pr-decremental ou prefixo

    Significa que se o sinal for colocado antes da varivel, primeiramente ser subtrado o valor 1 dessa varivel, continuando em seguida a resoluo da expresso.

    Ps-decremental ou sufixo Significa que se o sinal for colocado aps a varivel, primeiro ser resolvida toda a expresso (adio, subtrao, multiplicao, etc) para em seguida ser subtrado o valor 1 da varivel.

    Exemplo:

    class Cap3_Ex5 {

    public static void main(String args[]) {

    int a = 5; System.out.println("a = " + a); System.out.print("++a + 2 = "); System.out.println(++a +2); //exemplo de //pr-incremento System.out.println("a = " + a); System.out.println(); // pula uma linha a = 5; // volta ao valor inicial System.out.println("a = " + a); System.out.print("a++ + 2 = "); System.out.println(a++ + 2); //exemplo de // ps-incremento System.out.println(a = " + a); System.out.println(); a=5; System.out.println("a =" + a); System.out.print("a + 2 = "); System.out.println(--a +2); //exemplo de //pr-decremento System.out.println(a = " + a); System.out.println();

    a=5; System.out.println("a = " + a); System.out.print("a-- + 2 = "); System.out.println(a-- +2); //exemplo de // ps-decremento System.out.println("a = " + a);

    } }

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 33

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    5. Operadores relacionais

    Os operadores relacionais comparam dois valores e retornam um valor booleano (true ou false). Vejamos quais so esses operadores na tabela a seguir:

    Operador relacional Descrio = = Igual a != Diferente de > Maior do que < Menor do que

    >= Maior do que ou igual a b); System.out.println(a != d); System.out.println(a < d); System.out.println(a = b);

    } }

    6. Operadores lgicos bit a bit Os operadores lgicos bit a bit atuam sobre os bits individuais de seus operandos, comparando-os bit a bit e resultando em 1 ou 0. Sempre sero avaliados os dois lados da expresso. Vejamos a tabela a seguir:

    Operador lgico bit a bit Descrio ~ NOT unrio bit-a-bit & AND bit-a-bit | OR bit-a-bit ^ OR exclusivo bit-a-bit

    &= AND bit-a-bit com atribuio |= OR com atribuio ^= OR exclusivo bit-a-bit com atribuio

    Nota: Operadores unrios atuam apenas sobre uma varivel, modificando-a ou no, e retornam o seu valor final. Os operadores binrios utilizam duas variveis e retornam um terceiro valor, sem alterar as variveis originais.

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 34

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    6.1. Operador and (&)

    O operador & (and) retorna o valor 1 somente quando todos os bits comparados forem iguais a 1. A tabela a seguir demonstra que a comparao bit a bit utilizando o operador & (and) entre os nmeros binrios, que correspondem aos decimais 12 e 10, retorna o nmero binrio correspondente ao decimal 8:

    OPERADOR DECIMAL BINRIO 12 1 1 0 0 10 1 0 1 0 AND 8 1 0 0 0

    Exemplo:

    class Cap3_Ex7 {

    public static void main(String args[]) {

    int a = 12 & 10; //1100 e 1010 System.out.println("a = " + a); //o resultado 8

    } }

    6.2. Operador or ( | )

    Para que o operador | (or) retorne o valor 1, basta que apenas um dos bits comparados tenha o valor 1. A tabela a seguir demonstra que a comparao bit a bit utilizando o operador | (or) entre os nmeros binrios, que correspondem aos decimais 12 e 10, retorna o nmero binrio correspondente ao decimal 14:

    OPERADOR DECIMAL BINRIO 12 1 1 0 0 10 1 0 1 0 OR 14 1 1 1 0

    Exemplo:

    class Cap3_Ex8 {

    public static void main(String args[]) {

    int a = 12 | 10; // 1100 ou 1010 System.out.println("a = " + a); //o resultado 14

    } }

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 35

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    6.3. Operador xor ( ^ )

    O objetivo do operador ou exclusivo (^) (xor) fazer a comparao bit a bit entre dois nmeros, retornando o valor 1 caso eles sejam diferentes. Vejamos a tabela a seguir;

    OPERADOR DECIMAL BINRIO 12 1 1 0 0 10 1 0 1 0 ^ 6 0 1 1 0

    Exemplo:

    class Cap3_Ex9 {

    public static void main(String args[]) {

    int a= 12 ^ 10; //1100 xor 1010 System.out.println("a = " + a); // o resultado 6

    } }

    6.4. Operador not bit a bit ( ~ )

    Utilizado para inverso de bits, o operador unrio not (~), troca o dgito 1 por 0 e vice-versa. Exemplo: class Cap3_Ex10 {

    public static void main(String args[]) {

    int a = 12 ; a = ~a; System.out.println("a = " + a); //o resultado -13

    } }

    7. Operadores lgicos Os operadores lgicos trabalham com operandos booleanos, e seu resultado tambm ser booleano (true ou false). Eles so utilizados somente em expresses lgicas e so os seguintes:

    Operador lgico Descrio && AND

    || OR ! NOT

    Em um teste lgico utilizando o operador && (and), o resultado somente ser verdadeiro (true) se todas as expresses lgicas forem avaliadas como verdadeiras. Porm, se o operador

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 36

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    utilizado for || (or), basta que uma das expresses lgicas seja verdadeira para que o resultado tambm seja verdadeiro. O operador lgico not (!) utilizado para gerar uma negao, invertendo a lgica de uma expresso. Exemplo: class Cap3_Ex11 {

    public static void main(String args[]) {

    int a = 20, b = 30, c = 1, d = 20; System.out.println(b < a || c == 1); System.out.println(a == d && d != a); System.out.println(!(c > b));

    } } As diferenas entre os operadores bit a bit e os operadores lgicos so as seguintes: Se o operando esquerda do sinal de igualdade for falso, && (and) no avaliar o operando direita, pois s resultar verdadeiro (true) se todos os argumentos forem verdadeiro (true); Se o operando esquerda do sinal de igualdade for verdadeiro, || (or) retornar o valor verdadeiro (true) sem que o operando direita seja avaliado; Os operadores bit a bit sempre faro a avaliao entre os operandos; Os operadores lgicos s avaliam expresses lgicas e seu resultado ser sempre do tipo booleano (true ou false); Os operadores bit a bit so utilizados para avaliar nmeros inteiros e podem resultar tanto em valor numrico como em valor booleano (true ou false).

    8. Operador instanceof O operador instanceof utilizado para verificar, dinamicamente, se um objeto pertence a uma classe, e seu resultado ser do tipo booleano (true ou false). Sua sintaxe a seguinte: objeto instanceof class Apenas podemos utilizar o instanceof com variveis de referncia de objeto. Pode ser, contudo, que o objeto testado no corresponda a uma instanciao do tipo de classe. Neste caso, o resultado apresentado pelo operador instanceof ser verdadeiro caso o objeto possa ser atribudo ao tipo. Para testarmos a referncia a um objeto, podemos confront-la com o tipo de classe ou, ento, com uma das superdasses. A partir disso, utilizando o instanceof com o tipo Object, temos que qualquer referncia a um objeto avaliada como verdadeira. Caso uma das superclasses implemente a interface, o objeto considerado um tipo de interface especfico. Quando uma superclasse de objeto implementa uma interface, porm a classe da instncia

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 37

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    no o implementa, temos uma implementao indireta. Se isso ocorrer, recomendamos que sejam realizadas perguntas com o operador instanceof para testar se o objeto realmente a instncia de uma interface. Adicionalmente, recomendamos testar se um objeto nulo refere-se instncia de uma classe. O resultado, neste caso, ser sempre falso. Exemplo: class Cap3_Ex12 {

    public static void main(String args[]) {

    String a = "teste"; if (a instanceof String)

    System.out.println("A varivel a " + "uma String");

    else System.out.println("A varivel a no " + "uma String");

    } }

    9. Operador ternrio

    O operador ternrio ou operador condicional composto por trs operandos separados plos sinais (?) e (:), e tem o objetivo de atribuir um valor a uma varivel de acordo com o resultado de um teste lgico. Sua sintaxe a seguinte: teste lgico ? valor se verdadeiro : valor se falso Em que: teste lgico qualquer valor ou expresso que pode ser avaliado como verdadeiro ou falso; valor se verdadeiro o valor atribudo se o teste lgico for avaliado como verdadeiro; valor se falso o valor atribudo se o teste lgico for avaliado como falso. Exemplo: class Cap3_Ex13 {

    public static void main(String args[]) {

    int a = 2, b = 4; String verdade = "sim", falso = "no"; System.out.println(a + b > b - a ? verdade : falso);

    } }

    10. Precedncia dos operadores

    Em uma expresso com vrios operadores e operandos, a precedncia dos operadores que determina a ordem em que essa expresso ser resolvida. Sendo assim, a operao de maior

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 38

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    precedncia deve ser efetuada primeiro. Observemos a ordem de prioridade dos operadores na tabela a seguir;

    Operadores em ordem de prioridade ( ) [ ] .

    ++ -- ~ ! * / %

    + - > >= < B) b) (A * B == C) || (A > D) c) (B < C) && (B > D) d) (A > D) || (A * B == C) e) !(A + B < D) && D > C f) (D % B < 2)

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 39

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    2. Encontre os erros e corrija o cdigo a seguir: class ExercicioCap3_2 {

    public static void main(String args[]) {

    int A = 3, B = 7, C = 2, D = 5 System.out.println(A >= B) ; System.out.println( (A * B = C) || (A > D); System.out.println (B < C) && (B > D)) ; System.out.println( (A > D) || (A * B = C) ); System.out.println( (A + B < D) && (D > c) ); System.out.println(D % B < 2)

    } } 3. O cdigo a seguir est usando o operador ternrio. Rode-o e analise cada linha retornada. class ExercicioCap3_3 {

    public static void main(String args [ ]) {

    int a = 3, b - 90, c = 12; System.out.println (a > b ? a : b) ; System.out.println (a < b ? a - 2 : b + 1); System.out.println (c < b && c > a ? c : a); System.out.println (a > b ? b : b < a ? b : a) ; // aninhamento b = 12; System.out.println (b = b - (c < 10 ? 10 : c) );

    } }

    4. Depois de compilado e executado, o cdigo a seguir resultar em: a) false b) true c) 5 d) 7 e) Erro de compilao class ExercicioCap3_4 {

    public static void main(String args[]) {

    int a = 5, b == 7; boolean n = (a == b); System.out.println(n);

    }

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 40

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    } 5. Desenvolva um cdigo que retorne o valor a pagar de uma compra, utilizando o operador ternrio, de acordo com o seguinte cenrio: Valor da compra = 2000;

    Faixa % Desconto 0 1000 0%

    1001 3000 5% Acima de 3000 10%

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 41

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    Captulo 4

    1. Introduo Para controlarmos o fluxo de um programa, escrevemos uma sequncia de comandos entre chaves ({}). A essa sequncia chamamos de comandos em blocos, os quais podem ser aninhados dentro de outro bloco de comandos. Nos tpicos e subtpicos a seguir, estudaremos a respeito dos comandos de deciso e de laos de repetio, que constituem um bloco de comandos.

    2. Comandos de deciso

    Para decidirmos qual ao dever ser tomada em determinada parte de um programa, solicitamos a este que avalie uma expresso. Caso esta expresso seja avaliada como verdadeira, uma sequncia de comandos ser executada. As seguintes instrues de deciso devem ser consideradas:

    if / else switch / case 2.1. if/ else

    Quando utilizamos uma instruo if, apenas expresses com resultados booleanos podem ser avaliadas. Para definirmos uma instruo if, utilizamos a seguinte sintaxe: if (Teste Condicional) {

    Comandos; }

    Onde, a instruo avaliar a expresso booleana. Em caso verdadeiro, o bloco de instrues que se encontra entre as chaves ({}) ser executado. Se o resultado for falso, o bloco de comandos no ser executado, ou pode haver um outro bloco de comandos para ser executado. Repare que a condio a ser avaliada est entre parnteses. Exemplo: class Cap4_Ex1 {

    public static void main(String args[]) {

    int x= 10; if (x < 15) {

    System.out.println ("X menor que 15"); System.out.println ("O valor de x : " + x );

    } }

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 42

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    } importante sabermos que as chaves ({}) no so obrigatrias quando existir apenas uma instruo dentro do bloco de comandos. Porm, por motivos de melhor legibilidade, interessante que as chaves sejam utilizadas. Adicionalmente, recomendamos que as instrues if / else sejam aninhadas em quantidade moderada, tambm por ser mais legvel. Para executar comandos caso a condio seja falsa, necessrio digitar a clusula else aps as instrues da condio verdadeira e, na linha abaixo, inserir o bloco de instrues a serem executados. A estrutura ser: if (Teste Condicional)

    Comandos; else

    Comandos;

    O comando if, quando utilizado em conjunto com o comando else, bastante similar forma de como utilizado em outras linguagens de programao. Vejamos, agora, um exemplo prtico com a instruo if / else: class Cap4_Ex2 {

    public static void main(String args[]) {

    int x= 10; if(x < 15)

    { System.out.println("X menor que 15"); System.out.println("O valor de x : " +x);

    } else {

    System.out.println("x maior que 15"); System.out.println("Como x maior que 15, " + " seu valor : " + x);

    } } }

    2.2. switch / case A instruo switch pode ser um outro modo para simular a utilizao de vrias instrues if, e ela somente pode verificar uma relao de igualdade. Os tipos de dados que podem ser utilizados na instruo switch so os seguintes:

    byte; char; int; short.

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 43

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    Com relao instruo case, ela avalia apenas o argumento que apresenta o mesmo tipo definido na instruo switch. Mas devemos ter ateno ao fato de que o argumento da instruo case final, ou seja, ele precisa ser resolvido no tempo de compilao. Devido a isso, utilizamos uma varivel final constante com um valor literal na instruo case. Caso mais de uma instruo case apresente o mesmo valor, ela no ser vlida. Nota: A instruo switch apenas verifica igualdades, o que no o caso de operadores relacionais, tais como menor ou igual que (

  • Programao de Computadores I Linguagem Java Pgina 44

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    class Cap4_Ex3 {

    public static void main(String args[]) {

    int hora = 7; switch(hora) {

    case 1 : System.out.println("Uma hora"); break;

    case 2 : System.out.println("Duas horas"); break;

    case 3 : System.out.println("Trs horas"); break;

    case 4 : System.out.println("Quatro horas"); break;

    case 5 : System.out.println(" Cinco horas"); break;

    case 6 : System.out.println("Seis horas"); break;

    case 7 : System.out.println("Sete horas"); break;

    case 8 : System.out.println("Oito horas"); break;

    case 9 : System.out.println("Nove horas"); break;

    case 10 : System.out.println("Dez horas"); break;

    case 11 : System.out.println("0nze horas"); break;

    case 12 : System.out.println("Doze horas"); break;

    } }

    } Nesse exemplo, utilizamos o comando break, que serve para separar o que restrito para ser executado em cada case. O break finaliza o case anterior. Podemos completar o uso da instruo switch / case com o comando default. Este ser executado sempre que o valor assumido pela varivel no encontrar um valor case correspondente. Observemos o exemplo a seguir;

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 45

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    class Cap4_Ex4 {

    public static void main(String args[]) {

    int hora=33; switch(hora) {

    case 1 : System.out.println("Uma hora"); break;

    case 2 : System.out.println("Duas horas"); break;

    case 3 : System.out.println("Trs horas"); break;

    case 4 : System.out.println("Quatro horas"); break;

    case 5 : System.out.println("Cinco horas"); break;

    case 6 : System.out.println("SeJs horas"); break;

    case 7 : System.out.println("Sete horas"); break;

    case 8 : System.out.println("0ito horas"); break;

    case 9 : System.out.println("Nove horas"); break;

    case 10 : System.out.println("Dez horas"); break;

    case 11 : System.out.println("0nze horas"); break;

    case 12 : System.out.println("Doze horas"); break;

    default: System.out.println("Hora incorreta"); }

    } }

    3. Comandos de laos de repetio Muitas vezes, precisamos repetir a execuo de um bloco de cdigos do programa at que uma determinada condio seja verdadeira, ou mesmo at que uma quantidade de vezes seja satisfeita. Para que essa repetio seja possvel, utilizamos os laos de repetio de linguagem que, em Java, so os seguintes:

    while; do/while; for;

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 46

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    Nos subtpicos seguintes, veremos cada um deles mais detalhadamente, e tambm estudaremos outros comandos utilizados em conjunto com as instrues for, while e do/while.

    3.1. while

    Quando no sabemos quantas vezes um determinado bloco de instrues precisa ser repetido, utilizamos o lao de repetio while. Com ele, a execuo das instrues vai continuar at que uma condio seja verdadeira. A condio a ser analisada para execuo do lao de repetio dever retornar um valor booleano. Vejamos a sintaxe do lao de repetio while: while (teste condicional)

    comando; // ser executado enquanto teste condicionai = true

    while (teste condicional) {

    comando1; comando2;

    } Nesse exemplo, somente se a condio for verdadeira que o corpo do lao de repetio ser executado. Assim sendo, o contedo vai se repetir at essa condio no ser mais verdadeira. Vejamos mais um exemplo: class Cap4_Ex5 {

    public static void main(String args[]) {

    int num = 10; while(num < 1500)

    num*=10; System.out.println("Valor de num = " +num);

    } } Devemos saber que o lao de repetio white pode no ser executado. Isso ocorrera quando, na primeira verificao da condio, esta for falsa. Ento, o programa passar para a execuo da prxima instruo aps o lao.

    3.2. do / while

    O comando do/while tem basicamente o mesmo funcionamento do while, com uma diferena de que utilizando-se o do/while teremos os comandos executados ao menos uma nica vez. Isso acontecer mesmo se a condio no for verdadeira. Vejamos a sua sintaxe: do {

    comando;

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 47

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    } while (condio); do {

    System.out.println("Estamos dentro do loop"); } while(false); Observemos o exemplo a seguir: class Cap4_Ex6 {

    public static void main(String args []) {

    Int num = 10; do {

    System.out.println ("num maior que 500! "); } while (num >= 100);

    } }

    3.3. For

    Quando sabemos exatamente quantas vezes queremos repetir um bloco de instrues, utilizamos o lao de repetio for. Ele possui o corpo do lao e mais as seguintes partes principais:

    Declarao e inidalizao de variveis Nesta primeira parte da instruo for, podemos declarar e inicializar uma ou mais variveis, quando houver. Elas so colocadas entre parnteses, aps a palavra-chave for e, se houver mais de uma varivel do mesmo tipo, elas so separadas por vrgulas, conforme o seguinte:

    For (inta = 1, b = 1; ...){}

    importante lembrarmos que a declarao e a inicializao das variveis na instruo for acontecem sempre antes de outros comandos. Ainda, elas acontecem apenas uma vez no lao de repetio, sendo que o teste booleano e a expresso de iterao so executados a cada lao do programa.

    Expresso condicional

    Na segunda parte da instruo do lao de repetio for, temos a expresso condicional. Ela refere-se a um teste que ser executado e dever retornar um valor booleano. Por esse motivo, somente vlido especificarmos nesta parte da instruo for uma expresso lgica Devemos observar que a expresso lgica pode ser complexa. muito importante termos cuidado com os cdigos que utilizam diversas expresses lgicas. Observemos:

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 48

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    class Cap4_Ex7 {

    public static void main(String args []) {

    for (int a = 1, b = 10; ((a < 10) && (b > 5)); a++, b--) {

    System.out.println("a = " + a); System.out.println("b = " + b);

    } } } No exemplo anterior, a expresso condicional vlida, porm, mostraremos um exemplo em que ela no vlida:

    for (int a = 1, b = 10; (a < 10), (b > 5)); a++)

    Nesse exemplo, h dois testes booleanos separados por vrgulas, o que faz com que a instruo no seja executada e gere um erro. Isso ocorre porque podemos ter apenas uma expresso de teste na sintaxe desse comando.

    Expresso de iterao

    Na expresso de iterao, indicamos o que dever ocorrer aps cada execuo do corpo do lao de repetio. Ela sempre ser processada aps o corpo do lao ser executado, mas ser a ltima execuo da instruo do lao for. Na linha seguinte, temos a sintaxe completa da instruo for:

    for (declarao e inicializao de varivel; condio; iterao) {

    instruo do corpo do lao for; }

    Vejamos o exemplo a seguir: for (int a = 1, b = 1; a < 4; a--) {} Em que: int refere-se ao tipo de varivel que ser declarada; a = 1 e b = 1 referem-se s variveis que esto sendo inicializadas; a < 4 refere-se ao teste booleano que ser feito na varivel a; a-- indica a iterao da varivel a. Aps verificarmos todas essas informaes, destacamos que apesar de no ser uma boa

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 49

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    prtica, podemos deixar de declarar uma das trs partes descritas do lao de repetio for. Nesse caso, o lao ser infinito, e no havendo sees de declarao e inicializao no lao de repetio for ele agir como um lao de repetio while. Observemos: class Cap4_Ex8 {

    public static void main(String args []) {

    for (;;) {

    System.out.println("Este e um lao for sem " + " declarao " + "ou inicializao de " + "variveis");

    } }

    } Com relao ao escopo das variveis que foram declaradas no lao de repetio for, ele finalizado juntamente com o lao. Sendo assim, devemos observar o seguinte: A varivel declarada no lao for pode ser utilizada apenas no prprio lao de repetio for; A varivel declarada fora do lao de repetio for, mas inicializada na instruo for, pode ser utilizada fora do lao de repetio. No exemplo a seguir, mostramos a declarao de uma varivel fora da instruo for, mas a sua inicializacao ocorre dentro da instruo for: class Cap4_Ex9 {

    public static void main(String args[]) {

    int a = 3; for (a = 9; a < 15; a++)

    System.out.println("a = " + a); }

    } Isso nos mostra que as sees da instruo for no so dependentes e, por isso, no precisam operar sobre as mesmas variveis. Quanto expresso de iterao, ela no precisa, necessariamente, configurar ou incrementar algo, como mostramos no exemplo a seguir: class Cap4_Ex10 {

    public static void main(String args[]) {

    int x = 10; for(int y = 1; x != 1;

    System.out.println("Aqui no tem incremento")) {

    x = x - y; }

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 50

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    } } Ainda na instruo do lao de repetio for, utilizamos dois comandos: break e continue. Eles podem ser rotulados ou no-rotulados, sendo que sero rotulados quando existir um lao de repetio aninhado e precisarmos indicar qual dos laos queremos finalizar, ou mesmo para indicar a partir de qual lao queremos que a prxima iterao continue. Geralmente, quando um desses comandos utilizado, um teste if executado dentro do lao de repetio for. Caso uma das condies verificadas seja verdadeira ou falsa, conforme o desejado na instruo, o lao de repetio ou a iterao ser finalizado e a prxima instruo do programa ser executada.

    3.4. break O comando break utilizado em laos de repetio while, do/while, for e com os

    comandos switch/case. Quando utilizado em lao de repetio, causa uma interrupo imediata do mesmo, continuando a execuo do programa na prxima linha aps o lao. Isso acontece caso a condio imposta seja atendida.

    Vejamos o exemplo a seguir: class Cap4_Ex11 {

    public static void main(String args[]) {

    for (int i = 1; i < 11; ++i) {

    if(i == 5) break; //interrompe o loop

    System.out.println("Valor de i = " + i); } System.out.println("Proxima linha aps o loop...");

    } }

    3.5. continue O comando continue utilizado somente em laos de repetio. Quando ele executado, o lao volta imediatamente para o teste de condio do lao de repetio. Normalmente, utilizamos o comando continue em um teste if. Observemos, a seguir: while (!EOF) {

    if (erro) {

    continue; }

    }

    PDF created with pdfFactory trial version www.pdffactory.com

  • Programao de Computadores I Linguagem Java Pgina 51

    ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

    Quando esse cdigo for executado, ser verificado se h um erro. Se a condio for verdadeira, o prximo campo do arquivo ser lido at que no seja o final de arquivo (!EOF). A instruo continue ser utilizada para voltar ao lao de repetio e fazer com que os outros campos continuem a serem lidos at o final de arquivo. Nota: EOF simula uma varivel de leitura de um recordset O exemplo a seguir nos mostra outra utilizao do comando continue com o lao de repetio while: class Cap4_Ex12 {

    public static void main(String args[]) { int num = 0;

    while (num + num);

    } } } Nota: Quando o comando continue utilizado, precisamos levar em considerao os efeitos que ele pode causar sobre a iterao do lao de repetio.

    3.6. Instrues rotuladas Apenas quando temos laos de rep