Programacao Basica Em Java_homepage

Embed Size (px)

Citation preview

  • 5/26/2018 Programacao Basica Em Java_homepage

    1/124

    Programao Bsica em Java

    Apostila de

    Patrcia Augustin Jaques

  • 5/26/2018 Programacao Basica Em Java_homepage

    2/124

    2

    Programao Bsica em Java

    Autoria: Patrcia Augustin Jaques - [email protected]

    ltima atualizao: Outubro de 2007.

    Nenhuma parte desta apostila pode ser utilizada ou reproduzida, em qualquer meio ou forma, seja mecnicoou eletrnico, fotocpia, gravao, ou outros, sem autorizao, prvia, expressa e especfica do Autor. Essa apostilaest protegida pela licena Creative Communs. Voc pode us-la para seus estudos, mas no pode us-la para finscomerciais ou modific-la. Bons estudos em Java!

    Programao Bsica em Java byPatrcia Augustin Jaquesis licensed under a Creative Commons Atribuio-Uso No-Comercial-Vedada a Criao de Obras Derivadas 2.5 Brasil License.

    Meus agradecimentos a aluna Natali Silverio que me permitiu conhecer a licena Creative Commons.

    Um especial agradecimento ao aluno Leandro Medeiros que ajudou na reviso do texto.

    http://www.inf.unisinos.br/~pjaqueshttp://www.inf.unisinos.br/~pjaqueshttp://www.inf.unisinos.br/~pjaqueshttp://creativecommons.org/licenses/by-nc-nd/2.5/br/http://creativecommons.org/licenses/by-nc-nd/2.5/br/http://creativecommons.org/licenses/by-nc-nd/2.5/br/http://creativecommons.org/licenses/by-nc-nd/2.5/br/http://creativecommons.org/licenses/by-nc-nd/2.5/br/http://www.inf.unisinos.br/~pjaques
  • 5/26/2018 Programacao Basica Em Java_homepage

    3/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    3

    Sumrio

    1Introduo Linguagem Java ............................................................................................ 71.1Caractersticas da Linguagem Java ...................................................................................................... 7

    1.1.1Parecida com C, C++: .................................................................................................................................... 71.1.2Orientada a Objetos:....................................................................................................................................... 71.1.3Compilada e Interpretada: .............................................................................................................................. 71.1.4Segura: .......................................................................................................................................................... 81.1.5Suporta concorrncia: ..................................................................................................................................... 8

    1.2O Ambiente de Programao Java ....................................................................................................... 91.2.1Instalando e configurando o ambiente de programao Java ............................................................................. 91.2.2Onde encontro o ambiente de programao Java? ............................................................................................ 91.2.3Verso Java 1.1.x ........................................................................................................................................... 91.2.4Verso Java 1.2.x ........................................................................................................................................... 91.2.5Outras opes .............................................................................................................................................. 101.2.6Que ferramenta uso para criar os meus programas? ....................................................................................... 10

    1.3O Primeiro Programa Java ................................................................................................................ 101.3.1Passo a Passo ............................................................................................................................................... 101.3.2Que nome dar ao arquivo? ............................................................................................................................ 111.3.3Compilando o cdigo .................................................................................................................................... 111.3.4Executando o programa HelloWorld ............................................................................................................... 11

    1.4A Mquina Virtual Java ..................................................................................................................... 121.4.1O Ciclo de Vida de uma Mquina Virtual Java ................................................................................................. 12

    1.5Exerccios ........................................................................................................................................ 132Estruturas Fundamentais de Programao em Java ........................................................ 14

    2.1Espao em Branco ........................................................................................................................... 142.2Comentrios em Java ....................................................................................................................... 142.3Palavras-chave reservadas ................................................................................................................ 142.4Identificadores................................................................................................................................. 152.5Convenes para nomes de identificadores ........................................................................................ 15

    2.5.1Variveis e mtodos ...................................................................................................................................... 152.5.2Constantes ................................................................................................................................................... 152.5.3Classes ........................................................................................................................................................ 15

    2.6Declarao Import ........................................................................................................................... 152.7Tipos Primitivos de Dados (Tipos Nativos de Dados) .......................................................................... 152.8Converses entre Tipos Numricos .................................................................................................... 162.9Declarao e Inicializao de Valores ................................................................................................. 172.10Constantes .................................................................................................................................... 172.11Operadores ................................................................................................................................... 17

    2.11.1

    Operadores Aritmticos ............................................................................................................................... 18

    2.11.2Operadores Relacionais ............................................................................................................................... 182.11.3Operadores Lgicos .................................................................................................................................... 182.11.4Operadores Bit-a-Bit ................................................................................................................................... 192.11.5Operador if-then-else ternrio ..................................................................................................................... 202.11.6Precedncia de Operadores ......................................................................................................................... 21

    2.12Controle de Fluxo ........................................................................................................................... 212.12.1if-else ......................................................................................................................................................... 212.12.2switch ........................................................................................................................................................ 222.12.3while .......................................................................................................................................................... 232.12.4do-while ..................................................................................................................................................... 232.12.5for ............................................................................................................................................................. 242.12.6continue ..................................................................................................................................................... 242.12.7break ......................................................................................................................................................... 25

    2.13Exerccios ...................................................................................................................................... 26

  • 5/26/2018 Programacao Basica Em Java_homepage

    4/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    4

    3Fundamentos da Orientao a Objetos ............................................................................ 273.1Classes e Objetos............................................................................................................................. 27

    3.1.1Variveis ...................................................................................................................................................... 283.1.2Mtodos ....................................................................................................................................................... 283.1.3Mtodos Construtores ................................................................................................................................... 293.1.4Finalizao de um Objeto .............................................................................................................................. 30

    3.1.5Instanciando uma classe ............................................................................................................................... 303.1.6Operador this ............................................................................................................................................... 303.1.7Acessando mtodos e variveis de um objeto ................................................................................................. 30

    3.2Sobrecarga de Mtodos (Overloading) ............................................................................................... 313.3Passagem de Parmetros em Java ..................................................................................................... 313.4Visibilidade ...................................................................................................................................... 323.5Herana .......................................................................................................................................... 33

    3.5.1super ........................................................................................................................................................... 343.6Sobreposio (Overriding) ................................................................................................................ 34

    3.6.1Dinamic Binding............................................................................................................................................ 353.7O Modificador final........................................................................................................................ 363.8Classes Abstratas ............................................................................................................................. 363.9Interfaces ....................................................................................................................................... 38

    3.9.1Utilizando as Interfaces ................................................................................................................................. 393.10Inner Classes ................................................................................................................................. 393.11Classes Annimas (Anonymous Class) .............................................................................................. 403.12Garbage Collection ......................................................................................................................... 413.13Exerccios ...................................................................................................................................... 41

    4Strings .............................................................................................................................. 444.1Criando uma string .......................................................................................................................... 44

    4.1.1Criando uma string vazia: .............................................................................................................................. 444.1.2Criando uma string a partir de um array de caracteres: ................................................................................... 444.1.3Criando uma String a partir de um array de bytes:.......................................................................................... 44

    4.2Substituio de Caracteres ................................................................................................................ 454.3Concatenao de Strings .................................................................................................................. 454.4Substring ........................................................................................................................................ 454.5Alterando os caracteres de uma String para maisculo ........................................................................ 464.6Alterando os caracteres de uma String para minsculo ........................................................................ 464.7Retirando espaos em branco ........................................................................................................... 464.8Extrao de Caractere ...................................................................................................................... 464.9Comparao de Strings..................................................................................................................... 464.10Tamanho de uma string .................................................................................................................. 474.11Identificando a posio de caracteres ou substrings em uma String .................................................... 474.12Ordem .......................................................................................................................................... 474.13Converses de tipos primitivos de dados para Strings ........................................................................ 484.14Converso de String para tipos primitivos: ........................................................................................ 484.15As classes Wrappers ....................................................................................................................... 494.16StringTokenizer .............................................................................................................................. 494.17Exerccios ...................................................................................................................................... 49

    5Arrays ............................................................................................................................... 515.1Criando um array ............................................................................................................................. 515.2Inicializando arrays .......................................................................................................................... 51

    5.2.1Inicializao Default ...................................................................................................................................... 525.3Acessando um elemento de uma Array .............................................................................................. 525.4Obtendo tamanho de um array ......................................................................................................... 53

  • 5/26/2018 Programacao Basica Em Java_homepage

    5/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    5

    5.5Copiando o contedo de um array para outro array ............................................................................ 535.6Arrays Multidimensionais .................................................................................................................. 53

    5.6.1Criando arrays multidimensionais ................................................................................................................... 535.6.2Inicializando um array multidimensional ......................................................................................................... 53

    5.7Array de Objetos .............................................................................................................................. 545.8Exerccios ........................................................................................................................................ 54

    6Vector ............................................................................................................................... 556.1Criando um Vector ........................................................................................................................... 556.2Inserindo objetos em um Vector ....................................................................................................... 55

    6.2.1Inserindo um elemento em uma determinada posio..................................................................................... 556.2.2Inserindo um elemento no final do Vector ...................................................................................................... 55

    6.3Verifica a existncia de um elemento no Vector .................................................................................. 556.4Retornando um elemento ................................................................................................................. 566.5Retornado a posio de um elemento ................................................................................................ 566.6Substituindo um objeto em uma determinada posio ......................................................................... 566.7

    Removendo um elemento do Vector .................................................................................................. 56

    6.8Tamanho de um Vector .................................................................................................................... 566.9Convertendo um Vector para array .................................................................................................... 566.10Exerccios ...................................................................................................................................... 57

    7Gerando documentao HTML do cdigo com javadoc .................................................... 588Interfaces em JavaA biblioteca AWT ............................................................................ 60

    8.1Frame ............................................................................................................................................. 608.2Gerenciadores de Layout .................................................................................................................. 61

    8.2.1FlowLayout ................................................................................................................................................... 618.2.2BorderLayout ................................................................................................................................................ 628.2.3

    GridLayout ................................................................................................................................................... 63

    8.2.4CardLayout ................................................................................................................................................... 638.2.5GridBagLayout .............................................................................................................................................. 648.2.6Compreendendo os campos do GridBagConstraints ......................................................................................... 65

    8.3Dispondo Componentes sem Usar um Gerenciador de Layout .............................................................. 678.4Panel .............................................................................................................................................. 688.5O Modelo de Delegao de Eventos ................................................................................................... 698.6Adaptadores .................................................................................................................................... 708.7Label .............................................................................................................................................. 718.8Definindo Fontes e Cores de Texto .................................................................................................... 718.9Button ............................................................................................................................................ 738.10Checkbox ...................................................................................................................................... 738.11CheckboxGroup ............................................................................................................................. 748.12Choice........................................................................................................................................... 748.13Canvas .......................................................................................................................................... 758.14TextField ....................................................................................................................................... 768.15TextArea ....................................................................................................................................... 778.16List 788.17Dialog ........................................................................................................................................... 798.18FileDialog ...................................................................................................................................... 808.19ScroollPane ................................................................................................................................... 818.20Menu ............................................................................................................................................ 82

    8.20.1Adicionando Atalhos para os Menus ............................................................................................................. 838.21CheckBoxMenuItem ....................................................................................................................... 83

  • 5/26/2018 Programacao Basica Em Java_homepage

    6/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    6

    8.22Imprimindo um Frame .................................................................................................................... 848.23Exerccios ...................................................................................................................................... 85

    9Applets ............................................................................................................................. 879.1Restries de Segurana de um Applet .............................................................................................. 879.2Hierarquia de Java ........................................................................................................................... 879.3Carregando um Applet ..................................................................................................................... 889.4O Ciclo de Vida de um Applet ............................................................................................................ 889.5O primeiro exemplo de um applet...................................................................................................... 899.6Criando programas Java aplicativos e applets ..................................................................................... 909.7Exibindo Som e Imagem em um Applet.............................................................................................. 91

    10Interface GrficaBiblioteca Swing .............................................................................. 9310.1Determinando o Look-and-Feel de uma Interface Grfica em Java ...................................................... 9310.2JFrame .......................................................................................................................................... 94

    10.2.1Capturando os eventos de fechar janela no JFrame ...................................................................................... 9610.3Capturando eventos nos componentes Swing ................................................................................... 9610.4Determinando o Layout Manager do Frame ...................................................................................... 9610.5JPanel ........................................................................................................................................... 9710.6JButton ......................................................................................................................................... 97

    10.6.1Um exemplo simples de boto: .................................................................................................................... 9710.6.2Desenhando botes com Imagens: .............................................................................................................. 98

    10.7JLabel ........................................................................................................................................... 9910.8JTextField e JTextArea .................................................................................................................... 9910.9JCheckBox ................................................................................................................................... 10010.10JRadioButton ............................................................................................................................. 10210.11JComboBox................................................................................................................................ 10410.12JList .......................................................................................................................................... 10410.12.1ListModel ................................................................................................................................................ 106

    10.12.2 ListCellRendering .................................................................................................................................... 10910.13Caixas de Dilogo (JDialog e JOptionPane) ................................................................................... 110

    10.13.1 JOptionPane ........................................................................................................................................... 11010.14JDialog ...................................................................................................................................... 11110.15JFileChooser .............................................................................................................................. 11310.16Menu ........................................................................................................................................ 11410.17JApplet ...................................................................................................................................... 117

    10.17.1Applet Context ........................................................................................................................................ 11911Endereos teis na Internet ......................................................................................... 12212Referncias Bibliogrficas ............................................................................................ 123

  • 5/26/2018 Programacao Basica Em Java_homepage

    7/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    7

    1 Introduo Linguagem Java

    A linguagem Java surgiu em 1991 quando cientistas da Sun, liderados por Patrick Naughton e JamesGosling, projetaram uma linguagem pequena para ser utilizada em eletrodomsticos em geral. O projeto sechamava Green.

    Como o pessoal da Sun vinha de uma gerao UNIX, eles basearam a linguagem em C++ e ela foichamada originalmente de Oak. Oak um tipo de rvore e a linguagem foi assim denominada porque haviauma rvore deste tipo, a qual Gosling gostava de apreciar, e que podia ser vista da janela de sua sala na Sun.Porm, posteriormente, eles verificaram que Oak era o nome de uma linguagem de programao existente e, porisso, trocaram o nome para Java.

    O projeto Green passou os anos de 1993 e 1994 procurando uma empresa que quisesse comprar a suatecnologia, mas no encontraram ningum. Dizem que Patrick Naughton, uma das pessoas responsveis pelomarketing, conseguiu acumular 300.000 milhas areas de bnus tentando vender a tecnologia Java.

    Enquanto isso a World Wide Web crescia mais e mais. A chave para a Web o browser que recebe apgina hipertexto e o converte para a tela. Ento, para mostrar o poder de Java, Patrick Naughton e JonathanPayne construram o browser HotJava. Este browser reconhecia applets e, por isso, tinha uma mquina virtualJava embutida em si. Em 1995, a Netscape decidiu tornar a prxima verso do seu browser (verso 2.0) apta areconhecer applets Java. A partir de ento, todas as verses posteriores do Netscape, inclusive do InternetExplorer, reconhecem Java.

    1.1 Caractersticas da Linguagem Java

    1.1.1 Parecida com C, C++:

    A sintaxe da linguagem Java muito semelhante a da linguagem C ou de C++. Logo, o programadorque j conhece a linguagem C achar a transio para Java simples e fcil.

    A sintaxe de Java fornece uma verso mais limpa do que C++. Em Java no existe aritmtica deponteiros, estruturas, unies e etc.

    1.1.2 Orientada a Objetos:

    Java uma linguagem voltada para a programao orientada a objetos e, por isso, todo o cdigo est

    contido dentro de classes.Java suporta herana simples, mas no herana mltipla. A ausncia de herana mltipla pode ser

    compensada pelo uso de herana e interfaces, onde uma classe herda o comportamento de sua superclasse almde oferecer uma implementao para uma ou mais interfaces.

    1.1.3 Compilada e Interpretada:

    Todo programa Java compilado e interpretado. Um programa em Java compilado para um cdigocomposto por instrues chamadas de bytecode. O bytecode um cdigo de uma mquina virtual, chamadaMquina Virtual Java (Java Virtual Machine - JVM), idealizada pelos criadores da linguagem. Os bytecodes soindependentes de plataforma e so interpretados pela JVM para serem executados no computador.

  • 5/26/2018 Programacao Basica Em Java_homepage

    8/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    8

    Todo o interpretador Java ou browser que execute applets Java uma implementao de uma MquinaVirtual Java. A JVM tambm pode ser implementada em hardware.

    Alm da JVM, a plataforma Java composta tambm pela Java Application Programming Interface (JavaAPI). A API Java uma grande coleo de componentes de software disponibilizados que fornecem muitas

    capacidades interessantes e teis, tais como, componentes de interface grfica, conexo via sockets, etc. A APIJava agrupada em bibliotecas (packages ou pacotes) de componentes relacionados.

    O cdigo Java compilado uma nica vez, porm o programa interpretado toda vez que forexecutado. Esse processo pode ser mais bem visualizado na figura a seguir.

    1.1.4 Segura:

    A presena de coleta automtica de lixo (Garbage Collection) evita erros comuns que os programadorescometem quando so obrigados a gerenciar diretamente a memria (C, C++, Pascal). A eliminao do uso deponteiros, em favor do uso de vetores, objetos e outras estruturas substitutivas, traz benefcios em termos desegurana. O programador proibido de obter acesso memria que no pertence ao seu programa, alm deno ter chances de cometer erros comuns tais como uso indevido de aritmtica de ponteiros.

    A presena de mecanismos de tratamento de excees torna as aplicaes mais robustas, nopermitindo que elas abortem, mesmo quando rodando sob condies anormais.

    1.1.5 Suporta concorrncia:

    Java suporta Multithreading que a capacidade de um programa fazer mais de uma coisa ao mesmotempo como, por exemplo, imprimir enquanto l um fax. A linguagem permite a criao, de maneira fcil, devrios threads de execuo, que eliminam o perodo de inatividade do processador executandoconcorrentemente ou tomando vantagem da execuo paralela real em sistemas multiprocessadores.

  • 5/26/2018 Programacao Basica Em Java_homepage

    9/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    9

    1.2 O Ambiente de Programao Java

    1.2.1 Instalando e configurando o ambiente de programao Java

    O ambiente de programao Java disponibilizado pela Sun composto basicamente pelas seguintesferramentas:

    Ferramenta Descrio

    java.exe O interpretador Java que ser usado para executar os aplicativos Java.

    javac.exe O compilador Java que transforma programas fonte escritos em Java (.java) em bytecodes (.class).

    jdb.exe Java Language Debuggerpermite visualizar a execuo passo-a-passo.

    appletviewer.exe Ferramenta que permite visualizar e testar os applets sem a necessidade de um browser.

    Existem verses do ambiente Java para as plataformas mais conhecidas: Windows, Linux, UNIX e etc.Embora o cdigo do Java seja portvel, a Mquina Virtual Java dependente de plataforma. Por isso, tenhasempre o cuidado de copiar o ambiente de programao compatvel com o Sistema Operacional que voc est

    usando.

    1.2.2 Onde encontro o ambiente de programao Java?

    O ambiente de programao Java pode ser copiado da pgina da SUNhttp://java.sun.com/products/.Neste sitevoc encontrar as ltimas verses do ambiente de programao Java, bem como a documentao dabiblioteca Java. A seguir, encontram-se instrues de como instalar este ambiente.

    1.2.3Verso Java 1.1.x

    At a verso 1.1.x do Java, o ambiente de programao se chamava Java Development Kit (JDK)e

    quando instalado ficava armazenado no diretrio JDK1.1.x. Para essa verso era necessrio configurar algumasvariveis de ambientes (pathe classpath) para uso adequado. No Windows 95 e 98, essas variveis deveriamser alteradas no arquivo autoexec.bat que se encontra localizado no diretrio raiz do seu HD.

    As seguintes linhas de cdigo deveriam ser adicionadas ao seu arquivo autoexec.bat para a verso 1.1.xdo JDK:

    PATH=%path%;jdk1.1.x\binset CLASSPATH=.;c:\jdk1.1.x\lib

    Na primeira linha descrito o diretrio em que as ferramentas Java (java, javac, etc) podem serencontradas. O %path% usado para as configuraes anteriores de PATH no serem perdidas. A varivelCLASSPATH (segunda linha) contm o diretrio em que esto instaladas as bibliotecas Java.

    Sempre que declarar a varivel CLASSPATH importante colocar o ponto como um dosargumentos. Com isso voc est definindo que o Java deve procurar por classes Java nodiretrio local.

    1.2.4Verso Java 1.2.x

    Atualmente o ambiente de programao Java encontra-se na verso 1.4.2 (junho de 2004). A partir daverso 1.2.x este ambiente passou a se chamar Java 2 Software Development Kit, Standard Edition(J2SE).

    http://java.sun.com/products/http://java.sun.com/products/http://java.sun.com/products/http://java.sun.com/products/
  • 5/26/2018 Programacao Basica Em Java_homepage

    10/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    10

    A partir desta verso necessrio apenas configurar a varivel de ambiente PATH. A localizao dasbibliotecas Java encontrada automaticamente pela Mquina Virtual Java atravs do diretrio fornecido no PATH.A varivel PATH definida no arquivo autoexec.bat da seguinte maneira:

    PATH=%PATH%;c:\jdk1.3\binSe for necessrio utilizar uma outra biblioteca alm das bibliotecas padres fornecidas com oJava2 SDK (por exemplo, servlets), necessrio que voc a defina no CLASSPATH.

    1.2.5 Outras opes

    A IBM disponibiliza gratuitamente na sua homepagehttp://oss.software.ibm.com/developerworks/projects/jikes o compilador Java IBM Jikes. Atualmente, o Jikesencontra-se na verso 1.21. Voc vai observar que ele bem mais rpido que o compilador javac da SUN. Vale apena experimentar!

    Para o Jikes importante definir a varivel de ambiente classpath no arquivo autoexec.bat, alm decopiar o jikes para o diretrio bin onde foi instalado o jdk:

    PATH=%PATH%; c:\jdk1.3\binset CLASSPATH=.;c:\jdk1.3\jre\lib\rt.jar

    1.2.6 Que ferramenta uso para criar os meus programas?

    O cdigo do programa Java que voc criar pode ser digitado em qualquer editor de texto padro como,por exemplo, o WordPad e o NotePad. Atualmente, existem alguns editores de texto especficos para criao deprogramas Java.

    O Kawa, por exemplo, um shareware e pode ser copiado do sitehttp://www.allaire.com/.

    Um outro bom editor que pode ser encontrado na verso freeware o JCreator. Ele pode ser copiado dositehttp://www.jcreator.com.

    1.3 O Primeiro Programa Java

    Neste captulo vamos escrever, compilar e executar o tradicional aplicativo Hello World. O cdigo desteprograma ser explicado posteriormente para que voc possa comear a entender os fundamentos daprogramao Java.

    1. /* Meu programa Java */2. public class HelloWorld3. {4. public static void main (String args[ ])5. {6. System.out.println (Hello, World!);7. } // da rotina main8. } // da class

    1.3.1 Passo a Passo

    Linha 2:public class HelloWorld

    http://oss.software.ibm.com/developerworks/projects/jikeshttp://oss.software.ibm.com/developerworks/projects/jikeshttp://www.tek-tools.com/kawahttp://www.tek-tools.com/kawahttp://www.tek-tools.com/kawahttp://www.jcreator.com/http://www.jcreator.com/http://www.jcreator.com/http://www.jcreator.com/http://www.tek-tools.com/kawahttp://oss.software.ibm.com/developerworks/projects/jikes
  • 5/26/2018 Programacao Basica Em Java_homepage

    11/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    11

    Esta linha utiliza a palavra reservada class para declarar que uma nova classe ser definida aqui.HelloWorld o nome usado para identificar a classe. Toda a definio da classe, inclusive todo o cdigo e osdados, estar entre a chave de abertura { e a chave final } que se encontram nas linhas 5 e 8 deste exemplo.

    Linha 4: public static void main (String args[ ])

    A linha 3 contm a declarao do mtodo main. O mtodo main simplesmente um ponto de partidapara o interpretador Java. por onde ser iniciada a execuo.

    O mtodo main dever sempre ser declarado na forma acima.

    Linha 6: System.out.println (Hello, World!);

    Esta linha executa o mtodo println do objeto out. Este objeto uma instncia da classe OutputStream efoi declarado como varivel de classe (static) na classe System. Este mtodo imprime na tela uma mensagemtexto, no caso, Hello, World!.

    Por causa do modelo de objeto, uma sada simples de console complicada para entender. Por isso, at

    aprofundarmos o contedo suficientemente, pense apenas em System.out.println como um mtodo paraimpresso na tela (sada do console).

    1.3.2 Que nome dar ao arquivo?

    Aps digitar o cdigo-fonte, voc deve nomear o arquivo. Os arquivos que contm o cdigo-fonte Javadevem sempre ter a terminao .java. Geralmente, em Java, coloca-se uma classe dentro de cada arquivo. Oarquivo conter o mesmo nome da classe.

    Cuidado, o compilador Java diferencia letras maisculas de minsculas, por isso, preste ateno quandofor nomear o arquivo.

    Se voc utilizar o modificador public para a classe, por exemplo, public class HelloWorld, o arquivo devepossuir o mesmo nome que a classe. Caso no utilize public, o arquivo pode ter outro nome.

    1.3.3 Compilando o cdigo

    Para compilar o cdigo acima voc deve digitar:

    C:\> javac HelloWorld.java

    O compilador chamado pelo comando javac seguido do nome do arquivo sempre com a terminao.java. Ao ser compilado, se o cdigo no possuir nenhum erro, ser gerado um arquivo chamadoHelloWorld.class composto por bytecodes. Esse programa independente de plataforma e, por isso, o seu

    programa HelloWorld (.class) pode ser executado em qualquer sistema operacional que possua a JVM instalada.

    1.3.4 Executando o programa HelloWorld

    Aps a compilao do programa, em que foi gerado o arquivo HelloWorld.class, voc pode execut-lodigitando o seguinte comando:

    C:\>java HelloWorldNo cdigo acima estamos chamando o interpretador Java (java.exe) para carregar a classe HelloWorld e

    execut-la. No comando de execuo no se deve digitar a extenso do arquivo (.class). A seguinte sada sergerada para o programa acima:

  • 5/26/2018 Programacao Basica Em Java_homepage

    12/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    12

    > Hello, World!

    1.4A Mquina Virtual Java

    Quando trabalhamos com Java, um dos termos que mais ouvimos Maquina Virtual Java (MVJ) (ouJava Virtual Machine, em ingls). A Mquina Virtual Java um computador abstrato definido por umaespecificao. Para executar um programa Java, precisamos de uma implementao desta mquina virtual. Porexemplo, a Sun oferece uma implementao da MVJ que o interpretador java.exe que vem juntamente com oambiente de programao J2SDK.

    Mas, quando ouvimos falar de Java Virtual Machine, na verdade, o termo pode estar se referindo a 3coisas diferentes (Venners, 2000):

    a especificao abstrata da MVJ;

    uma implementao concreta desta mquina virtual. No caso, por exemplo, o programa java(interpretador) que vem com o ambiente de programao da Sun (J2SDK).uma instncia em tempo de execuo (ou instncia runtime).

    A especificao abstrata um conceito descrito em detalhes no livro The Java Virtual MachineSpecification (Lindholm et al., 1997) que define para os desenvolvedores de implementao de MVJ quecaractersticas uma MVJ deve possuir. Implementaes concretas existem para vrias plataformas e podemvir de vrios fornecedores. Elas tambm podem ser totalmente implementadas em software, ou ainda umacombinao de hardware e software. Por exemplo, o programa java.exe que vem no ambiente de programaofornecido pela SUN, o JSDK, um exemplo de uma implementao da MVJ. Uma instncia em tempo deexecuo quando essa implementao da MVJ est rodando e executando uma aplicao. Por exemplo,quando o interpretador java.exe do JSDK est executando um programa Java. Toda a aplicao Java vai serexecutada por uma instncia da MVJ.

    1.4.1 O Ciclo de Vida de uma Mquina Virtual Java

    Uma instncia em tempo de execuo (ou instncia runtime) tem a funo de executar uma aplicaoJava. Quando uma aplicao Java inicia a sua execuo, uma instncia runtime nasce. Ela morre no momento emque a aplicao completa a sua execuo. Se ns executarmos trs aplicaes Java iguais, usando a mesmaimplementao de MVJ e na mesma mquina, ns teremos 3 instncias de MJV executando. Cada aplicao Javair executar na sua prpria MVJ.

    A instncia da MVJ ir iniciar a execuo de sua aplicao pelo mtodo main ( ). O mtodo main ( ) deveter a seguinte assinatura: public static void main (String args[ ]) (como mostrado no exemplo listado na seo1.3). Qualquer classe Java que contenha o mtodo main() pode ser usada como ponto de partida para aexecuo de uma aplicao stand-aloneJava.

    Ns temos que, de alguma maneira, fornecer a MVJ o nome da classe que contm o mtodo main() poronde a MVJ ir iniciar a execuo. Um exemplo real de implementao de MVJ o programa java.exe doambiente Java 2 SDK da Sun. Para dizer a esta MVJ que ns gostaramos de executar a classe HelloWorld, nsdigitamos o comando:

    C:\>java HelloWorld

    no prompt do DOS (Windows). O primeiro parmetro (java) est indicando que o sistema operacionalpode iniciar a execuo da JVM do J2SDK. O segundo parmetro o nome da classe inicial. Esta classe deveconter o mtodo main( ).

    A MVJ formada por um subsistema que carrega classes (classloader) que um mecanismo para

    carregar as classes e interfaces dado os seus nomes. Ele carrega tanto classes do programa Java criado pelo

  • 5/26/2018 Programacao Basica Em Java_homepage

    13/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    13

    programador, tambm como classes da Java API. Apenas so carregadas as classes da Java API que soutilizadas pelo programa.

    A MVJ tambm possui uma mquina de execuo (execution engine) que um mecanismo responsvelpor executar as instrues Java (bytecodes) contidos nos mtodos das classes carregadas. Em uma MVJ

    implementada em software, o tipo mais simples de execution engine apenas interpreta os bytecodes um por um.Um outro tipo de execution engine, que mais rpida, o compilador just-in-time (JIT). Um compilador JITcompila os bytecodes para cdigo em mquina nativa na primeira vez que o mtodo executado. O cdigonativo guardado em memria e, ento, pode ser reusado na prxima vez que o mtodo invocado. Elemantm em memria tanto os bytecodes como o cdigo nativo, por isso, embora seja mais rpido, requer maismemria.

    Algumas vezes a JVM chamada de interpretador j que, quando a MVJ implementada em software,ela interpreta os bytecodes para execut-los. Porm, algumas MVJs usam tcnicas diferentes, como o caso doscompiladores JIT. Desta maneira, no muito adequado chamar a MVJ de interpretador (Venners, 2000).

    1.5 Exerccios

    Exerccio 1Pede Argumento

    Faa um programa Java leia um argumento passado para a Mquina Virtual Java. O programa deve serformado por uma nica classe e contm apenas o mtodo main ( ). A classe deve se chamar PedeArgumento evoc passar o seu nome como argumento. Por exemplo, se o seu nome Nicolas, voc deve executar oprograma atravs do seguinte comando:

    C:/> java PedeArgumento Nicolas

    E o programa deve exibir na tela como resultado:

    > Ol Nicolas!

    Dica: Todo o parmetro passado para a MVJ recebido pela array de String do mtodo main(). Paraacessar um argumento de uma array, fornea a posio da array que voc deseja acessar. Por exemplo, comons fornecemos apenas uma String ela estar na primeira posio da array que zero: String nome = args [0];

    Se voc digitasse duas strings (por exemplo, o seu nome e sobrenome, seria necessrio acessar as duasprimeiras posies da array: 0 e 1).

  • 5/26/2018 Programacao Basica Em Java_homepage

    14/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    14

    2 Estruturas Fundamentais de Programao em Java

    2.1 Espao em Branco

    Java uma linguagem de formato livre. No necessrio endentar para que ela funcione corretamente.Por exemplo, o nosso programa HelloWorld poderia ser escrito da seguinte maneira:

    public class HelloWorld{public static void main (String a[ ] ){System.out.println (Oi, mundo!);}}

    Devemos, porm, tomar cuidado para que haja pelo menos um espao, Tab ou uma nova linha entrepalavras que no estejam separadas por um operador ou separador.

    2.2 Comentrios em Java

    Os comentrios em cdigo-fonte Java podem ser de 3 tipos: de uma linha, de vrias linhas e dedocumentao. Os comentrios de uma linha comeam com // (duas barras) e terminam no final da linha. Estetipo de comentrio til para explicaes de uma nica linha de cdigo. Nas linhas 7 e 8 do cdigo exibido noincio deste captulo encontramos dois comentrios desse tipo.

    O comentrio de vrias linhas usado para comentrios mais longos que uma linha e iniciado com /*(barra-asterisco) e finalizado com */ (asterisco-barra). Tudo que houver entre /* e */ considerado umcomentrio e, portanto, ignorado pelo compilador.

    Existe ainda o comentrio de documentao que comea com /** (barra-asterisco-asterisco) e finalizacom */ (asterisco-barra). O uso da ferramenta JavaDoc para gerar documentao HTML vai ser explicado nocaptulo7 (pgina58).

    2.3 Palavras-chave reservadas

    As palavras-chave reservadas Java so usadas para identificar os tipos, modificadores e mecanismos decontrole de fluxo. Essas palavras, juntamente com os operadores e separadores, formam a definio dalinguagem Java. Elas no podem ser usadas como nome de varivel, mtodo ou classe.

    abstract boolean break byte byvaluecase cast catch char class

    const continue default do double

    else extends false final finallyfloat for future generic goto

    if implements import inner instanceofint interface long native newnull operator outer package private

    protected public rest return shortstatic super switch synchronized thisthrow throws transient true tryvar void volatile while

  • 5/26/2018 Programacao Basica Em Java_homepage

    15/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    15

    2.4 Identificadores

    Os identificadores so as palavras usadas para nomes de classes, mtodos e variveis. Um identificadorpode ser qualquer seqncia de caracteres de letras maisculas e minsculas, nmeros e caracteres desublinhado e smbolo de cifro. Mas, tome os seguintes cuidados:

    Eles no podem comear com nmeros para no serem identificados como literais numricos;Java sensvel a maisculas e minsculas, por isso o identificador Valor diferente de valor.

    2.5 Convenes para nomes de identificadores

    2.5.1Variveis e mtodos

    Segundo a conveno para identificadores Java, os mtodos e variveis devem ser nomeados com letrasminsculas. No caso do identificador ser formado por mais de um termo, o segundo termo e os termos seguintesdevem iniciar com letra maiscula. As variveis so compostas por substantivos e adjetivos, enquanto que osnomes de mtodos comeam sempre com um verbo.

    Exemplos: hora, horaDoDia, valorCorrente, obterHoraDoDia().

    2.5.2 Constantes

    Para as variveis finais, que representam constantes em Java, usa-se todo o nome em letras maisculas.Quando as constantes forem formadas por mais de um termo, usa-se sublinhado para separ-los. Os nomes deconstantes Java so formados por substantivos e adjetivos.

    Exemplos: VALOR_P1, DIA_SEXTA, VERDE.

    2.5.3 Classes

    Nomes de classes em Java so escritos em minsculo com a primeira letra em maiscula. Para os nomescompostos por mais de um termo, usa-se comear os termos seguintes com letra maiscula. Os nomes declasses Java so formados por substantivos e adjetivos.

    Exemplos: InterfaceSimples, Interface.

    2.6 Declarao Import

    Para utilizar os pacotes Java, usa-se a declarao de importao que define onde o compilador pode

    encontrar as classes destes pacotes. A declarao de importao (import) deve preceder a declarao de todasas classes.

    O compilador ir procurar por pacotes dentro dos diretrios especificados na varivel de ambienteclasspath. Um pacote pode ainda estar compactado dentro de um arquivo JAR.

    2.7 Tipos Primitivos de Dados (Tipos Nativos de Dados)

    Java tem oito tipos simples de dados que podem ser classificados em quatro grupos:

    Inteiros:byte, short, int e long que so usados para nmeros inteiros;Nmeros de Ponto flutuante:float e double que correspondem aos nmeros com preciso de frao.Caracteres:char.

    Valores lgicos:boolean que um tipo especial usado para representar valores lgicos.

  • 5/26/2018 Programacao Basica Em Java_homepage

    16/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    16

    Grupo Tipo Tamanho Intervalo de Valores Valor Default

    Inteiros

    int 4 bytes -2.147.483.648 at 2.147.483.647 0

    short 2 bytes -32.768 at 32.767 0

    long 8 bytes -9.223.372.036.854.775.808L at

    9.223.372.036.854.775.807L

    0L

    byte 1 byte -128 at 127 0

    PontoFlutuante

    float 4 bytes +- 3,40282347E+38F(6-7 dgitos significativos)

    0.0f

    double 8 bytes +- 1,79769313486231570E+308(15 dgitos significativos)

    0.0d

    char 2 bytes representa um Unicode \u0000;boolean 1 bit true ou false false

    2.8 Converses entre Tipos Numricos

    Qualquer operao numrica em variveis de tipos diferentes ser realizada da seguinte maneira:

    Se um dos operandos do tipo double, o outro ser tratado como um double no escopo da operao;Seno, se um dos operandos for float, o outro ser tratado como float;Seno, se um dos operandos do tipo long, o outro ser tratado como long.Seno, os operandos sero tratados como inteiros.

    Mas em alguns casos pode ser necessrio converter, por exemplo, um double em um inteiro. Todaconverso numrica em Java possvel, mas informaes podem ser perdidas. Estas converses podem serrealizadas com o uso de cast. A sintaxe do casting colocar o tipo desejado entre parnteses antes do nome davarivel. Por exemplo:

    double x = 9,997;int nx = (int) x;

    Java permite ainda que certas converses sejam feitas pela atribuio de valores de um tipo para outrosem que seja necessrio o uso de cast. As converses permitidas de forma automtica pelo compilador so:

    byte short int long float double

    Voc pode atribuir o valor de uma varivel que est esquerda para aquela do tipo que est direita.

    Muito embora os chars no sejam usados como inteiros, voc pode oper-los como se fossem inteiros.Desta maneira, necessrio o uso de cast para converter inteiros em caracteres. Caracteres podem serconsiderados inteiros sem o uso de casting. Por exemplo:

    int trs = 3;char um = 1;char quatro = (char) (trs+um);

    A varivel quatro finaliza com 4 armazenado nela. Observe que um foi promovido para int naexpresso, exigindo a definio de tipo de char antes da atribuio para a varivel quatro.

    Se voc desejar que uma varivel inteira receba o valor inteiro que um determinado caractererepresenta, voc pode usar o mtodo digit (char, int) da classe Character, onde passamos como parmetro ocaractere e a base de converso (decimal, binria, etc). Para o contrrio, converter um inteiro para um caractereque represente aquele inteiro, utilize o mtodo forDigit (int, int) onde o primeiro parmetro representa o valorinteiro a ser convertido e o segundo parmetro a base de converso. O exemplo abaixo ilustra essas converses:

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

    int i = 3;char c = '1';

    // converte char em inteiro. Ex: '1' -> 1int res1 = Character.digit (c, 10);

  • 5/26/2018 Programacao Basica Em Java_homepage

    17/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    17

    // converte inteiro em char. Ex: 1 -> '1'char res2 = Character.forDigit (i, 10);System.out.println ("char -> int = " + res1);System.out.println ("int -> char = " + res2);

    }}

    2.9 Declarao e Inicializao de Valores

    As variveis do tipo byte, short, int, long, float, double, char e boolean podem ser declaradas de acordocom uma das formas exibidas abaixo.

    int a, b, c; Declarando as variveis a, b e c.int d = 3, e, f=5; Declarando d, e, f e inicializando d com 3 e f com 5.double pi = 3.14159; Declarando e inicializando pi com o valor 3.14159;

    char x = x; Declarando e inicializando x com o caracterex;

    As variveis membros (dentro de uma classe) no inicializadas recebem por default o valor 0 (zero). As

    variveis locais (dentro de um mtodo) no so inicializadas por default e, por isso, gerado um erro decompilao quando no atribudo nenhum valor inicial a elas e essas so acessadas.

    O seguinte programa cria variveis de cada tipo primitivo e exibe seus valores:

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

    byte b = 5;short s = 5;int i = 334;long l = 34567L;float f = 35.76f;double d = 35.76;System.out.println (byte b = +b);

    System.out.println (short s = +s);System.out.println (int i = +i);System.out.println (long l = +l);System.out.println (float f = +f);System.out.println (double d = +d);

    }}

    2.10 Constantes

    Em Java no podem ser definidas constantes locais para um determinado mtodo como, por exemplo, omain. Ao invs disso, pode haver somente constantes para todos os mtodos na classe. Elas so chamadasusualmente de constantes de classe. As constantes so sempre definidas atravs dos modificadores static final.

    Por exemplo:

    public class UsesConstants {public static final double GRAVIDADE = 32;public static void main (String args [ ]) {

    System.out.println ("A gravidade " +GRAVIDADE);}

    }

    2.11 Operadores

    Existem quatro tipos de operadores em Java: aritmticos, bit-a-bit, relacional e lgico.

  • 5/26/2018 Programacao Basica Em Java_homepage

    18/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    18

    2.11.1 Operadores Aritmticos

    Os operandos aritmticos s podem ser usados para operandos do tipo numrico. No podem serusados esses operadores para os tipos boolean, mas podem para char, uma vez que char um subconjunto dotipo int.

    Operador Operao Exemplo Resultado

    + adio x=1+2; x=3

    - subtrao x=3-1; x=2

    * multiplicao x=2*3; x=6

    / diviso x=6/2; x=3

    % mdulo (resto da diviso inteira) x=7%2; x=1

    ++ incremento (equivale a x=x+1) x=1; x++; x=2

    equivale a y=x e x=x+1 x=1; y=0; y=x++; x=2, y=1

    equivale a x=x+1 e y=x x=1; y=0; y=++x; x=2, y=2

    -- decremento (equivale a x=x-1) x=1; x--; x=0equivale a y=x e x=x-1 x=1; y=0; y=x--; x=0; y=1

    equivale a x=x-1 e y=x x=1; y=0; y=--x; x=0, y=0

    += Soma e atribui (equivale a i=i+2) i=1; i+=2; i=3

    -= Subtrai e atribui (equivale a i=i-2) i=1; i-=2; i=-1

    *= Multiplica e atribui (equivale a i=i*2) i=1; i*=2; i=2

    /= Divide e atribui (equivale a i=i/2) i=2; i/=2; i=1

    %= Mdulo e atribui (equivale a i=i%2) i=1; i%=2; i=1

    2.11.2 Operadores Relacionais

    Para comparar valores so usados os seguintes operadores relacionais:

    Operador Operao

    == Igual a

    != Diferente de> Maior que< Menor que>= Maior ou igual que

  • 5/26/2018 Programacao Basica Em Java_homepage

    19/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    19

    Operador Resultado

    && AND lgico

    || OR lgico! Negao

    Para os operadores acima, os resultados seguem a tabela exibida a seguir.

    A B OR (||) AND (&&) NOT A (!A)

    False false false false trueTrue false true false false

    False true true false trueTrue true true true false

    Por exemplo, no cdigo abaixo a varivel c ser incrementada.

    boolean a=true, b=false;int c=0;if (a && !b) c++;

    2.11.4 Operadores Bit-a-Bit

    Os tipos numricos inteiros possuem um conjunto adicional de operadores que podem modificar einspecionar os bits que formam seus valores. So eles:

    Op. Operao Op. Operao

    ~ NOT bit-a-bit& AND bit-a-bit &= atribui e AND

    | OR bit-a-bit |= atribui e OR^ OR exclusivo ^= atribui e OR exclusivo

    >> deslocamento direita (shift right) >>= atribui e deslocamento direita>>> deslocamento direita com zeros >>>= atribui e deslocamento direita com zeros

  • 5/26/2018 Programacao Basica Em Java_homepage

    20/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    20

    OR: Se um dos bits dos operandos for 1 ele gera 1, caso contrrio ele gera 0 (zero).

    00101010 4200001111 15

    a | b 00101111 47

    XOR: Combina os bits de tal maneira que se os bits dos operandos forem diferentes gera 1, casocontrario gera 0 (zero).

    a 00101010 42b 00001111 15a^b 00100101 37

    >2 00001000 8

    >>> Deslocamento para a direita sem sinal: Desloca n bits direita preenchendo os campossuperiores (extrema esquerda) com zero.

    A 11111111 11111111 11111111 11111111 -1a>>>24 00000000 00000000 00000000 11111111 255

    Todos os tipos de inteiros so inteiros com sinal. Isto significa que eles podem representartantos valores negativos como positivos. Java usa uma codificao conhecida comocomplemento de dois, o que significa que os nmeros negativos esto representados pelainverso (mudana de 1s para 0s e vice-versa) de todos os bits de um valor, somando-sedepois 1 ao resultado. Por exemplo, 42 00101010 que invertendo os 0 s e 1s fica11010101, depois somando 1 resulta em 11010110 ou 42. Para decodificar um nmeronegativo em binrio para decimal, primeiro inverta todos os bits e depois some 1.

    2.11.5 Operador if-then-else ternrio

    expresso ? declarao1 : declarao2

    Onde expresso qualquer expresso que o resultado seja um valor boolean. Se o resultado for true, adeclarao 1 executada e se for false a declarao 2 executada. Por exemplo:

    ratio = denom==0 ? 0 : num/denom;

    Na expresso acima avaliado se denom igual a zero. Caso positivo ratio recebe zero, seno ratiorecebe num/denom.

  • 5/26/2018 Programacao Basica Em Java_homepage

    21/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    21

    2.11.6 Precedncia de Operadores

    A tabela a seguir mostra a ordem de todas as operaes possveis em Java, de precedncia mais altapara mais baixa. Os operadores que esto no mesmo nvel, geralmente, so processados da esquerda para adireita na linha de comando.

    Prioridade Mais alta

    ! ~ ++ -- +(unrio)(unrio) (cast) direita para a esquerda

    * / % esquerda para a direita

    + - esquerda para a direita

    > >>> esquerda para a direita

    < >= instanceof esquerda para a direita

    == != esquerda para a direita

    & esquerda para a direita

    ^ esquerda para a direita

    | esquerda para a direita

    && esquerda para a direita

    || esquerda para a direita

    ?: esquerda para a direita

    = += -= *= /= %= |= ^= = >>>= direita para a esquerda

    Prioridade Menos Alta

    2.12 Controle de Fluxo

    Nos exemplos vistos at aqui o fluxo do programa era linear, ou seja, a execuo tinha que passar portodas as linhas de comando. Os programas, muitas vezes, vo exigir que certas partes do cdigo sejam ou noexecutados de acordo com algumas condies. Para isto so usadas declaraes de desvio, tais como, if-else,while, for, switch, que sero estudados neste captulo.

    2.12.1 if-else

    boolean dadosDisponiveis = true;if (dadosDisponiveis)

    processarDados ( );else

    esperarMaisDados ( );

    No exemplo acima o cdigo verifica o valor da varivel boolean. Se dadosDisponveis igual a true entoexecuta o mtodo processarDados, seno executa o mtodo esperarMaisDados ( ).

    A clusula else opcional. Se no exemplo acima no houvesse a clusula else, nenhum mtodo seriaexecutado.

    Ao invs de uma varivel boolean, tambm poderia haver uma expresso que usasse operadores paraproduzir um resultado boolean. Por exemplo:

    int bytesDisp = 5;if (bytesDisp > 0) {

    processarDados ( );byteDisp --;

    }else esperarMaisDados ( );

  • 5/26/2018 Programacao Basica Em Java_homepage

    22/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    22

    No exemplo anterior verificado se bytesDisp > 0. Caso positivo retorna o valor boolean true e entoexecuta os comandos entre chaves, processarDados ( ) e byteDisp--. Caso contrrio, retorna false e executaesperarMaisDados( ).

    2.12.2 switch

    A declarao switch usada quando existem procedimentos diferenciados para determinados valores deuma nica varivel. Ela s pode ser usada para vriveis que sejam de tipo primitivos de dados, maisespecificamente para variveis do tipo int (inteiros) e char (caracteres). Por exemplo:

    int mes = 4;switch (mes) {case 1: System.out.println (Janeiro);

    break;case 2 : System.out.println (Fevereiro);

    break;case 3 : System.out.println (Marco);

    break;

    case 4: System.out.println (Abril);break;

    case 5 : System.out.println (Maio);break;

    case 6 : System.out.println (Junho);break;

    case 7: System.out.println (Julho);break;

    case 8 : System.out.println (Agosto);break;

    case 9 : System.out.println (Setembro);break;

    case 10 : System.out.println (Outubro);break;

    case 11 : System.out.println (Novembro);break;case 12 : System.out.println (Dezembro);

    break;default : System.out.println (No existe ms correspondente!);}

    No exemplo acima, ser impresso Abril como resultado na tela. Isto porque o valor da expresso comparado com cada um dos valores das declaraes case. Se uma correspondncia for encontrada, a seqnciade cdigo que vem depois da declarao case executada. Se nenhum dos cases corresponder ao valor daexpresso, ento a declarao default executada. Entretanto, a declarao default opcional.

    O break faz com que a execuo pule para o final do switch. Se no fosse colocado o break, a execuoseria passada para o prximo case at encontrar um break. Esse uso alternativo de cases pode ser til. Veja o

    exemplo abaixo:

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

    int mes = 4;String estacao;switch (mes) {

    case 12:case 1:case 2:

    estacao = "Vero";break;case 3:case 4:

    case 5:estacao = "Outono";

  • 5/26/2018 Programacao Basica Em Java_homepage

    23/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    23

    break;case 6:case 7:case 8:estacao = "Inverno";break;case 9:case 10:case 11:estacao = "Primavera";break;default:estacao = "Desconhecida";

    }System.out.println ("Abril est na estao " + estao + ".");

    }}

    2.12.3 while

    A construo while executa repetidamente o mesmo bloco de cdigo at que o resultado de umaexpresso boolean seja verdadeiro. Por exemplo:

    classWhileDemo {publicstaticvoidmain (String args [ ]) {

    intn = 5;while(n>0)System.out.println ("tick "+ n--);

    }}

    O programa anterior verifica se o valor da varivel n maior que zero. Caso positivo, imprime o valor de

    n, e decrementa seu valor. Realiza essa operao repetida vezes at que o valor de n seja menor ou igual a zero.O cdigo acima reproduzir a seguinte sada:

    c:\> java WhileDemotick 5tick 4tick 3tick 2tick 1

    2.12.4 do-while

    s vezes, desejvel executar o corpo de um lao whilepelo menos uma vez, quando se quer testar a

    expresso de encerramento no final do lao ao invs do incio (como acontece no while). Para isso, usamos o laodo-while.

    classDoWhile {publicstaticvoidmain (String args []) {

    intn=5;do {

    System.out.println ("tick " + n);} while(--n>0);

    }}

    O programa acima produz a mesma sada que o anterior.

  • 5/26/2018 Programacao Basica Em Java_homepage

    24/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    24

    2.12.5 for

    A declarao for uma maneira compacta de construir um lao. Sua forma bsica segue:

    for (inicializao; encerramento; iterao) corpo;

    Por exemplo:

    classForDemo {publicstaticvoidmain (String args []) {for(inti=1; ijava ForDemo

    i = 1i = 2i = 3i = 4I = 5

    Se a condio inicial (i=1) no fizer com que o encerramento (i

  • 5/26/2018 Programacao Basica Em Java_homepage

    25/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    25

    c:\>java ContinueDemo0 12 34 56 7

    8 9

    2.12.7 break

    O termo break usado para interromper um bloco de cdigo, ou seja, para sair desse bloco. usado noswitch, como vimos na seo2.12.2,e para interromper laos (for, while, do-while).

    classTestaBreak {publicstaticvoidmain (String args []) {

    inta = 0;while (true) {

    if(a == 5) break;System.out.println ("O valor de a = " + a++);

    }}

    }

    c:\jdk1.3\bin\java TestaBreakO valor de a = 0O valor de a = 1O valor de a = 2O valor de a = 3O valor de a = 4

    O break tambm usado como uma substituio da declarao goto, contida em muitas linguagens.Para esse uso, devemos declarar um rtulo para onde a execuo ser desviada aps passar pelo comando

    break.

    Para nomear um bloco, preciso escolher um identificador permitido pela linguagem e o colocar antesdo bloco que se deseja rotular, o qual seguido de dois pontos (:). Depois voc pode referenciar esse rtulocomo um argumento para uma declarao break, fazendo com que a execuo continue depois do final do blocorotulado.

    ClassTestaBreakRotulado {publicstaticvoidmain (String args []) {

    loop1: while (true) {for(inti=0; i

  • 5/26/2018 Programacao Basica Em Java_homepage

    26/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    26

    c:\jdk1.3\bin\>java TestaBreakRotuladoi= 0i= 1i= 2i= 3

    i= 4i= 5i= 6Voltou para o while do loop2!k= 0k= 1k= 2Voltou para o while do loop2!k= 0k= 1k= 2Voltou para o while do loop2!k= 0

    k= 1k= 2Voltou para o while do loop2!

    2.13 Exerccios

    Exerccio 1: Fatorial

    O fatorial de um nmero calculado multiplicando-se os valores deum ato valor especificado. Umnmero fatorial representado pelo nmero do fatorial seguido de um ponto de exclamao. Por exemplo ofatorial de 4 representado por 4! e igual a : 1 x 2 x 3 x 4 = 24. Faa um programa java que calcule a fatorialde 2, 4, 6 e 10. Dica : Use o lao for.

    Exerccio 2: Distncia entre dois pontos

    Escreva uma classe Java que contenha apenas o mtodo main( ). Voc deve passar como parmetropara o mtodo main( ) as coordenadas x, y de pontos. O mtodo calcula a distncia Euclidiana ente estes doispontos e exibe o resultado na tela.

    Dicas:

    Distncia Euclidiana entre 2 pontos P e Q :

    Para calcular o quadrado de um nmero, utilize o mtodo pow da classe Math :

    32=9 double res = Math.pow(3,2);

    Para calcular a raiz quadrada de um nmero, utilize o mtodo sqrt da classe Math:

    raiz quadrada de 9 double res = Math.sqrt(9);

  • 5/26/2018 Programacao Basica Em Java_homepage

    27/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    27

    3 Fundamentos da Orientao a Objetos

    A orientao a objetos uma tecnologia de desenvolvimento composta por metodologias e linguagensusada na anlise, no projeto e na implementao de programas (Albuquerque, 1999).

    Para entendermos os conceitos de orientao a objetos necessrio entendermos o que um objeto.Por exemplo, consideremos objetos do mundo real: seu cachorro, seu computador, sua bicicleta.

    Os objetos do mundo real tm duas caractersticas: eles tem estado e comportamento. Por exemplo,cachorros tem estados (nome, cor, tamanho) e comportamentos (latir, andar, correr).

    Objetos de software, assim como objetos do mundo real, possuem estado (variveis) e comportamento(mtodos). Podemos representar objetos do mundo real atravs de objetos de software (por exemplo, um livro),assim como tambm podemos modelar conceitos abstratos (por exemplo, uma ao do usurio em uma interfacegrfica).

    Por exemplo, considere um objeto que representa uma conta corrente em um sistema bancrio. Atravsdos mtodos, pode-se, por exemplo, depositar e sacar. Alm dos mtodos responsveis pelos servios, o objetodeve conter dados, como o nome do dono da conta e o valor do saldo. Como estes dados geralmente estoprotegidos, e no podem ser acessados diretamente, o acesso aos dados feito atravs dos mtodos.

    Figura 1: Exemplo de um Objeto

    3.1 Classes e Objetos

    Em um programa orientado a objetos normalmente existem vrios objetos de um mesmo tipo. Porexemplo, um programa de controle de estoque de uma livraria pode conter vrios clientes e vrios livros.

    As classes descrevem as informaes armazenadas e os servios providos por um objeto. Em outraspalavras, so padres a partir dos quais os objetos so criados (cdigo).

    Em um programa orientado a objetos, um objeto uma instncia de uma classe. Os objetos que soinstncias de uma mesma classe armazenam os mesmos tipos de informaes e apresentam o mesmocomportamento.

    Em Java uma classe definida pela palavra-chave class seguida do nome da classe. Para ilustrar osnovos conceitos que sero vistos neste captulo, vejamos o exemplo da conta corrente.

    A conta corrente uma classe que definida da seguinte maneira:

  • 5/26/2018 Programacao Basica Em Java_homepage

    28/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    28

    class ContaCorrente {// Definio dos mtodos e atributos

    }

    3.1.1VariveisCada varivel tem um nome e um tipo que define o comportamento esttico do objeto. Em Java para

    cada varivel so especificados: um modificador (opcional), o nome, o tipo e o valor inicial (opcional) do atributo.Por exemplo, a classe ContaCorrente possui as variveis saldo (saldo da conta corrente) e nome (nome do donoda conta). As variveis de uma classe podem ser de instncia ou de classe. Cada classe possui as suas prpriascpias das variveis de instncia, enquanto que as variveis de classe so compartilhadas.

    Cada instncia da classe ContaCorrente (objeto) ter as mesmas variveis (saldo e nome), porm, elaspodem ter valores diferentes em cada instncia. A varivel de classe (dinheiroTotal), porm, compartilhada portodos os objetos. Por isso, possui o mesmo valor para todos os objetos e se um objeto modificar o seu valor, onovo valor visto por todos os outros objetos.

    Figura 2: Mltiplas instncias de uma classe

    3.1.2 Mtodos

    Os mtodos definem os servios que podem ser solicitados a uma instncia (objeto), ou seja, ocomportamento dinmico de um objeto. A definio de um mtodo em Java inclui um modificador (opcional), otipo do dado retornado aps a execuo do mtodo, o nome do mtodo, o nome e tipo dos parmetros e ocdigo delimitado por chaves ( { } ).

    Por exemplo, na classe ContaCorrentepodem ser definidos os mtodos:

    verificaSaldo: retorna o saldo da conta corrente;depositaValor: deposita um valor especificado xna conta;retiraValor: retira um valor especificado x da conta;

    A definio da classe ContaCorrente com as variveis e mtodos a seguinte:

  • 5/26/2018 Programacao Basica Em Java_homepage

    29/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    29

    class ContaCorrente {staticfloat dinheiroTotal;float saldo;String nome;float verificaSaldo ( ) {

    return saldo;}void depositaValor (float valor) {

    saldo = saldo + valor;dinheiroTotal += valor;

    }void retiraValor (float valor) {

    if (saldo>=valor) {saldo = saldo valor;dinheiroTotal -= valor;

    }}

    }

    3.1.3 Mtodos Construtores

    Quando uma classe criada, pode ser necessrio atribuir um valor inicial a algumas variveis ou chamarum mtodo. Isto pode ser feito atravs de um mtodo construtor, o qual automaticamente executado toda vezque a classe instanciada.

    Em Java os construtores tm o mesmo nome da classe a qual so membros. O mtodo construtor notem tipo de retorno, isso porque o tipo implcito de retorno de um objeto construtor a instncia da prpriaclasse.

    importante lembrar que no obrigatrio criar um construtor. Caso no exista a declarao de umconstrutor, o compilador gera automaticamente um construtor default, assim como pode ser observado noexemplo anterior.

    Uma mesma classe pode ter vrios mtodos construtores, desde que eles tenham quantidade diferentede parmetros ou parmetros de tipos diferentes.

    Na classe ContaCorrente podemos definir um mtodo construtor que seta o saldo em zero. A classeContaCorrente ficaria da seguinte maneira:

    class ContaCorrente {static float dinheiroTotal;float saldo;String nome;public ContaCorrente (String nomeDono) {

    nome = nomeDono;saldo = 0;

    }float verificaSaldo ( ) {

    return saldo;}void depositaValor (float valor) {

    saldo = saldo + valor;dinheiroTotal += valor;

    }void retiraValor (float valor) {

    if (saldo >= valor) {saldo = saldo valor;dinheiroTotal -= valor;

    }}

    }

  • 5/26/2018 Programacao Basica Em Java_homepage

    30/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    30

    3.1.4 Finalizao de um Objeto

    A memria de um objeto automaticamente liberada quando o objeto no mais utilizado. Isso feitopor um processo chamado Garbage collection. O Garbage Collection libera os recursos de memria utilizados peloobjeto, mas estes objetos podem possuir outros recursos tais como arquivos abertos e conexes de rede. Nesse

    caso, poderia ser interessante ter um mtodo que realizasse a finalizao de recursos, tais como, fechar arquivo efinalizar conexes de rede.

    Para isso, existe o mtodo finalize. Esse mtodo no recebe argumentos e no retorna valor. S podeexistir um mtodo finalize por classe e deve ser nomeado finalize ( ). O mtodo finalize chamado algum tempo,no preciso, aps o objeto tornar-se no usado, mas seguramente antes do Garbage Collection. Como, muitasvezes, um interpretador Java pode finalizar a sua execuo sem o Garbage Collection liberar todos os recursos,no h garantia de que o mtodo finalize ser chamado. Desta maneira, esse mtodo no muito utilizado.

    3.1.5 Instanciando uma classe

    Em um programa Java, os objetos so criados (as classes so instanciadas) atravs do operador new. A

    execuo do comando new cria um objeto de um determinado tipo (classe) e retorna uma referncia a esteobjeto. Por exemplo:

    ContaCorrente minhaConta;minhaConta = new ContaCorrente (Maria);

    Na primeira linha tem-se o nome da varivel (minhaConta) na qual o identificador do objeto serarmazenado. Na segunda linha criado o objeto do tipo ContaCorrente com o comando new que retorna oidentificador do objeto que armazenado na varivel minhaConta. O enunciado acima poderia ser escritotambm da seguinte maneira:

    ContaCorrente minhaConta = new ContaCorrente (Maria);

    3.1.6 Operador this

    Java inclui um valor de referncia especial, chamado this, que usado dentro de qualquer mtodo parareferir-se ao objeto corrente. O valor de this refere-se ao objeto do qual o mtodo corrente foi chamado.

    Em Java permitido que variveis locais (dentro de um mtodo) tenham o mesmo nome de variveis deinstncia. Para definir que se est acessando a varivel de instncia, usa-se o this. Por exemplo, a classeContaCorrente poderia ter os seus mtodos construtores declarados da seguinte maneira:

    class ContaCorrente {

    static float dinheiroTotal;float saldo;String nome;public ContaCorrente (String nome) {

    this.nome = nome;saldo = 0;

    }... // restante do cdigo}

    3.1.7Acessando mtodos e variveis de um objeto

    Aps criar um objeto, queremos manipular os seus dados acessando as variveis e mtodos deste

    objeto. Os mtodos e variveis so chamados de uma instncia de outra classe atravs de operador ponto ( . ).

  • 5/26/2018 Programacao Basica Em Java_homepage

    31/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    31

    Por exemplo, digamos que criamos um objeto do tipo ContaCorrente e queremos modificar os seusvalores, definindo o nome do dono da conta e modificando e visualizando o saldo.

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

    ContaCorrente minhaConta = new ContaCorrente (Maria);float saldo;saldo = minhaConta.verificaSaldo ( );System.out.println (saldo);minhaConta.depositaValor (200);saldo = minhaConta.verificaSaldo ( );System.out.println (saldo);

    }}

    O cdigo acima cria um objeto do tipo ContaCorrente com valores iniciais de Maria para nome e 1000para valor. Aps, verifica o saldo da conta, deposita 200 e verifica novamente o saldo.

    3.2 Sobrecarga de Mtodos (Overloading) possvel, em Java, e, muitas vezes, desejvel criar mtodos com mesmo nome, mas lista de

    parmetros diferentes. Isto chamado de sobrecarga de mtodos (ou overloading) e reconhecido em tempo decompilao. devido a esta propriedade que podemos ter dois mtodos construtores com parmetros diferentes.

    Por exemplo, na classe ContaCorrente podemos ter o mtodo construtor sobrecarregado:

    class ContaCorrente {static float dinheiroTotal;float saldo;String nome;public ContaCorrente (String nome) {

    this.nome = nome;

    saldo = 0;}public ContaCorrente (String nome, float saldo) {

    this.nome = nome;this.saldo = saldo;

    }... // restante do cdigo

    3.3 Passagem de Parmetros em Java

    A passagem de parmetros em Java por valor e no por referncia. Por exemplo, no possvel alteraro valor de um parmetro recebido do tipo primitivo dentro de um mtodo, pois os dados primitivos so passadospor valor. Isso significa que o mtodo no tem acesso a varivel que foi usada para passar o valor.

    Quanto aos objetos, as referncias aos objetos tambm so passadas por valor. Desta maneira, vocno pode alterar a varivel que referncia um objeto, ou seja, no pode fazer com que a varivel que referenciao objeto aponte para outro objeto. Mas, pode-se alterar o contedo do objeto a qual essa varivel referencia,alterando o valor de um de seus atributos. Para entender melhor, veja o exemplo a seguir:

    class TestaPassagemParametros{public static void trocaValorPrimitivo (int num){

    num = num +6;}public static void trocaValorObjeto (ContaCorrente minhaConta){

    minhaConta.saldo = 300;}public static void trocaReferenciaObjeto (ContaCorrente minhaConta){

    minhaConta = new ContaCorrente ("Mulher Maravilha", 200);

  • 5/26/2018 Programacao Basica Em Java_homepage

    32/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    32

    }public static void main (String args []){

    int val = 11;TestaPassagemParametros.trocaValorPrimitivo (val);

    System.out.println ("val = "+val);

    ContaCorrente minhaConta = new ContaCorrente ("SuperHomem");System.out.println (minhaConta.saldo);TestaPassagemParametros.trocaValorObjeto (minhaConta);System.out.println (minhaConta.saldo);TestaPassagemParametros.trocaReferenciaObjeto (minhaConta);System.out.println (minhaConta.nome);

    }} // da class

    c:\jdk1.3\bin\java.exe TestaPassagemParametrosval = 110300SuperHomem

    E para o mtodo trocaReferenciaObjeto ns passassemos um objeto String em vez de um objetoContaCorrente, o que voc acha que aconteceria?

    O mesmo que aconteceu para o objeto ContaCorrente. No atribudo o novo valor para a string. Istoacontece porque em Java uma nova instncia criada para toda a literal String. Desta maneira, quando fizemos

    str = azul;

    igual a fazer:

    str = new String (azul);

    Por isso, possvel manipular um literal String como se fossem objetos String. Por exemplo:

    int tam = abc.length ( );

    3.4Visibilidade

    Em Java existem modificadores para determinar a visibilidade das variveis e mtodos. Porexemplo, uma varivel ou mtodo public pode ser acessada por outros objetos, porm se for private somentepode ser chamada dentro do prprio objeto. Um bom hbito de programao consiste em deixar privado (private)tudo aquilo que no precisa ser acessado por um mtodo de outro objeto. Veja na tabela abaixo, osmodificadores existentes em Java:

    Encapsulamento Visibilidade

    private Podem ser acessados somente por mtodos da mesma classe.

    protected Podem ser acessados pelas classes do mesmo pacote, como tambm pelas subclasses domesmo pacote e de outros pacotes.

    sem modificador Podem ser acessados por subclasses do mesmo pacote ou por outras classes do mesmo pacote.

    public Podem ser acessados de qualquer classe.

    Por exemplo, a classe ContaCorrente poderia ter os seus dados privados e os mtodos pblicos para queoutras classes possam cham-los. Desta maneira, os dados s podem ser acessados apenas pelo cdigo dosmtodos. Essa propriedade de proteger os dados privados com mtodos pblicos chamada deencapsulamento.

    A classe ContaCorrente ficaria:

    class ContaCorrente {private static float dinheiroTotal;

  • 5/26/2018 Programacao Basica Em Java_homepage

    33/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    33

    private float saldo;private String nome;public ContaCorrente (String nomeDono) {

    nome = nomeDono;saldo = 0;

    }public float verificaSaldo ( ) {

    return saldo;}public void depositaValor (float valor) {

    saldo = saldo + valor;dinheiroTotal += valor;

    }public void retiraValor (float valor) {

    if (saldo >= valor) saldo = saldo valor;dinheiroTotal -= valor;

    }}

    3.5 HeranaChamamos de herana quando novas classes herdam propriedades (dados e mtodos) de outras classes

    existentes. Esse um importante recurso da orientao a objetos que permite a reutilizao de cdigo. As classesque herdam as propriedades so chamadas subclasses e a classe pai chamada superclasse. Em Java usada apalavra extends para implementar a herana.

    Por exemplo, digamos que temos uma classe Ponto que implemente um ponto com duas coordenadas xe y e queremos construir uma classe Ponto3D que represente um ponto tri-dimensional (com 3 coordenadas).

    class Ponto {int x, y;

    public Ponto (int x, int y) {this.x = x;this.y = y;

    }public Ponto ( ) {

    this (-1, -1); // this tambm pode ser usado para chamar construtores}public void print ( ) {

    System.out.print (x +", "+ y);}

    }class Ponto3D extends Ponto {

    int z;public Ponto3D (int x, int y, int z) {

    this.x = x;

    this.y = y;this.z = z;

    }public Ponto3D ( ) {

    this (-1, -1, -1);}

    }

    Na declarao acima, Ponto a superclasse e Ponto3D a subclasse. As variveis x e y no precisamser declaradas em Ponto3D, pois foram herdadas de Ponto.

  • 5/26/2018 Programacao Basica Em Java_homepage

    34/124

    Programao Bsica em Java Profa. Patrcia Augustin Jaques

    34

    Mtodos construtores no so herdados!

    3.5.1 super

    No exemplo anterior, a classe Ponto3Dpossui uma certa quantidade de cdigo repetido. Por exemplo, ocdigo que inicializa x e yest em ambas as classes:

    this.x = x;this.y = y;

    Nesse caso, podemos usar a declarao superque faz a chamada do mtodo construtor da superclasse.Uma verso melhorada da classe Ponto3D seria:

    class Ponto3D extends Ponto {int z;public Ponto3D (int x, int y, int z) {

    super (x, y); // chama o construtor Ponto (x, y)this.z = z;

    }public Ponto3D ( ) {

    this (-1, -1, -1);}

    }

    A referncia super tambm pode ser usada para chamar mtodos da superclasse. O super pode serusado como uma verso do this, ao que se refere superclasse. Por exemplo, a declarao super.print ( )

    significa chamar o mtodo print da superclasse da instncia this. Veja o mtodo printPonto3Dabaixo:class Ponto3D extends Ponto {

    int z;public Ponto3D (int x, int y, int z) {

    super (x, y); // chama o construtor Ponto (x, y)this.z = z;

    }public Ponto3D ( ) {

    this (-1, -1, -1);}public void printPonto3D ( ) {

    super.print ();System.out.print (", "+z);

    }public static void main (String args []) {

    Ponto3D p3 = new Ponto3D ( );p3.printPonto3D ( );

    }}

    3.6 Sobreposio (Overriding)

    Como pode ser observado no exemplo anterior, foi necessrio reescrever o mtodo print na classePonto3D para que ele agora imprimisse a coordenada do ponto em 3 eixos (x, y, z). Podemos utilizar apropriedade de sobrecarga e reescrever o mtodo printna classe Ponto3D com o mesmo nome ao invs de outrocomo utilizado (printPonto3D). Mas, observe que o mtodo deve ter a mesma assinatura (nome, argumentos e

    valor de retorno),