programacao basica em java_homepage

Upload: jaqueline-dantas

Post on 14-Jul-2015

1.469 views

Category:

Documents


1 download

TRANSCRIPT

Programao Bsica em Java

Apostila de Patrcia Augustin Jaques

Programao Bsica em JavaAutoria: 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 mecnico ou eletrnico, fotocpia, gravao, ou outros, sem autorizao, prvia, expressa e especfica do Autor. Essa apostila est protegida pela licena Creative Communs. Voc pode us-la para seus estudos, mas no pode us-la para fins comerciais ou modific-la. Bons estudos em Java!

Programao Bsica em Java by Patrcia Augustin Jaques is licensed under a Creative Commons AtribuioUso 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.

2

Programao Bsica em Java

Profa. Patrcia Augustin Jaques

Sumrio

1 Introduo Linguagem Java ............................................................................................ 71.1 Caractersticas da Linguagem Java ...................................................................................................... 71.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.3.1 1.3.2 1.3.3 1.3.4

Parecida com C, C++: .................................................................................................................................... 7 Orientada a Objetos:....................................................................................................................................... 7 Compilada e Interpretada: .............................................................................................................................. 7 Segura: .......................................................................................................................................................... 8 Suporta concorrncia: ..................................................................................................................................... 8 Instalando e configurando o ambiente de programao Java ............................................................................. 9 Onde encontro o ambiente de programao Java? ............................................................................................ 9 Verso Java 1.1.x ........................................................................................................................................... 9 Verso Java 1.2.x ........................................................................................................................................... 9 Outras opes .............................................................................................................................................. 10 Que ferramenta uso para criar os meus programas? ....................................................................................... 10 Passo a Passo............................................................................................................................................... 10 Que nome dar ao arquivo? ............................................................................................................................ 11 Compilando o cdigo .................................................................................................................................... 11 Executando o programa HelloWorld ............................................................................................................... 11

1.2 O Ambiente de Programao Java ....................................................................................................... 9

1.3 O Primeiro Programa Java ................................................................................................................ 10

1.4 A Mquina Virtual Java ..................................................................................................................... 12 1.5 Exerccios ........................................................................................................................................ 13

1.4.1 O Ciclo de Vida de uma Mquina Virtual Java ................................................................................................. 12

2 Estruturas Fundamentais de Programao em Java ........................................................ 142.1 Espao em Branco ........................................................................................................................... 14 2.2 Comentrios em Java ....................................................................................................................... 14 2.3 Palavras-chave reservadas ................................................................................................................ 14 2.4 Identificadores................................................................................................................................. 15 2.5 Convenes para nomes de identificadores ........................................................................................ 152.5.1 Variveis e mtodos ...................................................................................................................................... 15 2.5.2 Constantes ................................................................................................................................................... 15 2.5.3 Classes ........................................................................................................................................................ 15

2.6 Declarao Import ........................................................................................................................... 15 2.7 Tipos Primitivos de Dados (Tipos Nativos de Dados) .......................................................................... 15 2.8 Converses entre Tipos Numricos .................................................................................................... 16 2.9 Declarao e Inicializao de Valores ................................................................................................. 17 2.10 Constantes .................................................................................................................................... 17 2.11 Operadores ................................................................................................................................... 172.11.1 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.12.1 2.12.2 2.12.3 2.12.4 2.12.5 2.12.6 2.12.7

Operadores Aritmticos ............................................................................................................................... 18 Operadores Relacionais ............................................................................................................................... 18 Operadores Lgicos .................................................................................................................................... 18 Operadores Bit-a-Bit ................................................................................................................................... 19 Operador if-then-else ternrio ..................................................................................................................... 20 Precedncia de Operadores ......................................................................................................................... 21 if-else......................................................................................................................................................... 21 switch ........................................................................................................................................................ 22 while .......................................................................................................................................................... 23 do-while ..................................................................................................................................................... 23 for ............................................................................................................................................................. 24 continue ..................................................................................................................................................... 24 break ......................................................................................................................................................... 25

2.12 Controle de Fluxo ........................................................................................................................... 21

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

3

Programao Bsica em Java

Profa. Patrcia Augustin Jaques

3 Fundamentos da Orientao a Objetos ............................................................................ 273.1 Classes e Objetos............................................................................................................................. 273.1.1 Variveis ...................................................................................................................................................... 28 3.1.2 Mtodos ....................................................................................................................................................... 28 3.1.3 Mtodos Construtores ................................................................................................................................... 29 3.1.4 Finalizao de um Objeto .............................................................................................................................. 30 3.1.5 Instanciando uma classe ............................................................................................................................... 30 3.1.6 Operador this ............................................................................................................................................... 30 3.1.7 Acessando mtodos e variveis de um objeto ................................................................................................. 30

3.2 Sobrecarga de Mtodos (Overloading) ............................................................................................... 31 3.3 Passagem de Parmetros em Java ..................................................................................................... 31 3.4 Visibilidade ...................................................................................................................................... 32 3.5 Herana .......................................................................................................................................... 33 3.6 Sobreposio (Overriding) ................................................................................................................ 34 3.7 O Modificador final ........................................................................................................................ 36 3.8 Classes Abstratas ............................................................................................................................. 36 3.9 Interfaces ....................................................................................................................................... 38 3.10 Inner Classes ................................................................................................................................. 39 3.11 Classes Annimas (Anonymous Class) .............................................................................................. 40 3.12 Garbage Collection ......................................................................................................................... 41 3.13 Exerccios ...................................................................................................................................... 413.9.1 Utilizando as Interfaces ................................................................................................................................. 39 3.5.1 super ........................................................................................................................................................... 34 3.6.1 Dinamic Binding............................................................................................................................................ 35

4 Strings .............................................................................................................................. 444.1 Criando uma string .......................................................................................................................... 444.1.1 Criando uma string vazia:.............................................................................................................................. 44 4.1.2 Criando uma string a partir de um array de caracteres:................................................................................... 44 4.1.3 Criando uma String a partir de um array de bytes:.......................................................................................... 44

4.2 Substituio de Caracteres ................................................................................................................ 45 4.3 Concatenao de Strings .................................................................................................................. 45 4.4 Substring ........................................................................................................................................ 45 4.5 Alterando os caracteres de uma String para maisculo ........................................................................ 46 4.6 Alterando os caracteres de uma String para minsculo ........................................................................ 46 4.7 Retirando espaos em branco ........................................................................................................... 46 4.8 Extrao de Caractere ...................................................................................................................... 46 4.9 Comparao de Strings..................................................................................................................... 46 4.10 Tamanho de uma string .................................................................................................................. 47 4.11 Identificando a posio de caracteres ou substrings em uma String .................................................... 47 4.12 Ordem .......................................................................................................................................... 47 4.13 Converses de tipos primitivos de dados para Strings ........................................................................ 48 4.14 Converso de String para tipos primitivos: ........................................................................................ 48 4.15 As classes Wrappers ....................................................................................................................... 49 4.16 StringTokenizer .............................................................................................................................. 49 4.17 Exerccios ...................................................................................................................................... 49

5 Arrays ............................................................................................................................... 515.1 Criando um array ............................................................................................................................. 51 5.2 Inicializando arrays .......................................................................................................................... 51 5.3 Acessando um elemento de uma Array .............................................................................................. 52 5.4 Obtendo tamanho de um array ......................................................................................................... 53 45.2.1 Inicializao Default ...................................................................................................................................... 52

Programao Bsica em Java

Profa. Patrcia Augustin Jaques

5.5 Copiando o contedo de um array para outro array ............................................................................ 53 5.6 Arrays Multidimensionais .................................................................................................................. 53 5.7 Array de Objetos.............................................................................................................................. 54 5.8 Exerccios ........................................................................................................................................ 545.6.1 Criando arrays multidimensionais ................................................................................................................... 53 5.6.2 Inicializando um array multidimensional ......................................................................................................... 53

6 Vector ............................................................................................................................... 556.1 Criando um Vector ........................................................................................................................... 55 6.2 Inserindo objetos em um Vector ....................................................................................................... 556.2.1 Inserindo um elemento em uma determinada posio..................................................................................... 55 6.2.2 Inserindo um elemento no final do Vector ...................................................................................................... 55

6.3 Verifica a existncia de um elemento no Vector .................................................................................. 55 6.4 Retornando um elemento ................................................................................................................. 56 6.5 Retornado a posio de um elemento ................................................................................................ 56 6.6 Substituindo um objeto em uma determinada posio ......................................................................... 56 6.7 Removendo um elemento do Vector .................................................................................................. 56 6.8 Tamanho de um Vector .................................................................................................................... 56 6.9 Convertendo um Vector para array .................................................................................................... 56 6.10 Exerccios ...................................................................................................................................... 57

7 Gerando documentao HTML do cdigo com javadoc .................................................... 58 8 Interfaces em Java A biblioteca AWT ............................................................................ 608.1 Frame ............................................................................................................................................. 60 8.2 Gerenciadores de Layout .................................................................................................................. 618.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6

FlowLayout................................................................................................................................................... 61 BorderLayout................................................................................................................................................ 62 GridLayout ................................................................................................................................................... 63 CardLayout................................................................................................................................................... 63 GridBagLayout .............................................................................................................................................. 64 Compreendendo os campos do GridBagConstraints ......................................................................................... 65

8.3 Dispondo Componentes sem Usar um Gerenciador de Layout .............................................................. 67 8.4 Panel .............................................................................................................................................. 68 8.5 O Modelo de Delegao de Eventos ................................................................................................... 69 8.6 Adaptadores .................................................................................................................................... 70 8.7 Label .............................................................................................................................................. 71 8.8 Definindo Fontes e Cores de Texto .................................................................................................... 71 8.9 Button ............................................................................................................................................ 73 8.10 Checkbox ...................................................................................................................................... 73 8.11 CheckboxGroup ............................................................................................................................. 74 8.12 Choice........................................................................................................................................... 74 8.13 Canvas .......................................................................................................................................... 75 8.14 TextField ....................................................................................................................................... 76 8.15 TextArea ....................................................................................................................................... 77 8.16 List 78 8.17 Dialog ........................................................................................................................................... 79 8.18 FileDialog ...................................................................................................................................... 80 8.19 ScroollPane ................................................................................................................................... 81 8.20 Menu ............................................................................................................................................ 82 8.21 CheckBoxMenuItem ....................................................................................................................... 838.20.1 Adicionando Atalhos para os Menus ............................................................................................................. 83

5

Programao Bsica em Java

Profa. Patrcia Augustin Jaques

8.22 Imprimindo um Frame .................................................................................................................... 84 8.23 Exerccios ...................................................................................................................................... 85

9 Applets ............................................................................................................................. 879.1 Restries de Segurana de um Applet .............................................................................................. 87 9.2 Hierarquia de Java ........................................................................................................................... 87 9.3 Carregando um Applet ..................................................................................................................... 88 9.4 O Ciclo de Vida de um Applet ............................................................................................................ 88 9.5 O primeiro exemplo de um applet...................................................................................................... 89 9.6 Criando programas Java aplicativos e applets ..................................................................................... 90 9.7 Exibindo Som e Imagem em um Applet.............................................................................................. 91

10 Interface Grfica Biblioteca Swing .............................................................................. 9310.1 Determinando o Look-and-Feel de uma Interface Grfica em Java ...................................................... 93 10.2 JFrame .......................................................................................................................................... 94 10.3 Capturando eventos nos componentes Swing ................................................................................... 96 10.4 Determinando o Layout Manager do Frame ...................................................................................... 96 10.5 JPanel ........................................................................................................................................... 97 10.6 JButton ......................................................................................................................................... 97 10.7 JLabel ........................................................................................................................................... 99 10.8 JTextField e JTextArea .................................................................................................................... 99 10.9 JCheckBox ................................................................................................................................... 100 10.10 JRadioButton ............................................................................................................................. 102 10.11 JComboBox................................................................................................................................ 104 10.12 JList .......................................................................................................................................... 104 10.13 Caixas de Dilogo (JDialog e JOptionPane) ................................................................................... 110 10.14 JDialog ...................................................................................................................................... 111 10.15 JFileChooser .............................................................................................................................. 113 10.16 Menu ........................................................................................................................................ 114 10.17 JApplet ...................................................................................................................................... 11710.17.1 Applet Context ........................................................................................................................................ 119 10.12.1 ListModel ................................................................................................................................................ 106 10.12.2 ListCellRendering .................................................................................................................................... 109 10.13.1 JOptionPane ........................................................................................................................................... 110 10.6.1 Um exemplo simples de boto: .................................................................................................................... 97 10.6.2 Desenhando botes com Imagens: .............................................................................................................. 98 10.2.1 Capturando os eventos de fechar janela no JFrame ...................................................................................... 96

11 Endereos teis na Internet ......................................................................................... 122 12 Referncias Bibliogrficas ............................................................................................ 123

6

Programao Bsica em Java

Profa. Patrcia Augustin Jaques

1 Introduo Linguagem JavaA linguagem Java surgiu em 1991 quando cientistas da Sun, liderados por Patrick Naughton e James Gosling, projetaram uma linguagem pequena para ser utilizada em eletrodomsticos em geral. O projeto se chamava Green. Como o pessoal da Sun vinha de uma gerao UNIX, eles basearam a linguagem em C++ e ela foi chamada originalmente de Oak. Oak um tipo de rvore e a linguagem foi assim denominada porque havia uma 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, por isso, trocaram o nome para Java. O projeto Green passou os anos de 1993 e 1994 procurando uma empresa que quisesse comprar a sua tecnologia, mas no encontraram ningum. Dizem que Patrick Naughton, uma das pessoas responsveis pelo marketing, 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 a pgina hipertexto e o converte para a tela. Ento, para mostrar o poder de Java, Patrick Naughton e Jonathan Payne construram o browser HotJava. Este browser reconhecia applets e, por isso, tinha uma mquina virtual Java embutida em si. Em 1995, a Netscape decidiu tornar a prxima verso do seu browser (verso 2.0) apta a reconhecer applets Java. A partir de ento, todas as verses posteriores do Netscape, inclusive do Internet Explorer, reconhecem Java.

1.1 Caractersticas da Linguagem Java1.1.1 Parecida com C, C++:A sintaxe da linguagem Java muito semelhante a da linguagem C ou de C++. Logo, o programador que 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++. ponteiros, estruturas, unies e etc. Em Java no existe aritmtica de

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 alm de 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 cdigo composto por instrues chamadas de bytecode. O bytecode um cdigo de uma mquina virtual, chamada Mquina Virtual Java (Java Virtual Machine - JVM), idealizada pelos criadores da linguagem. Os bytecodes so independentes de plataforma e so interpretados pela JVM para serem executados no computador.

7

Programao Bsica em Java

Profa. Patrcia Augustin Jaques

Todo o interpretador Java ou browser que execute applets Java uma implementao de uma Mquina Virtual Java. A JVM tambm pode ser implementada em hardware. Alm da JVM, a plataforma Java composta tambm pela Java Application Programming Interface (Java API). 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 API Java agrupada em bibliotecas (packages ou pacotes) de componentes relacionados. O cdigo Java compilado uma nica vez, porm o programa interpretado toda vez que for executado. 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 programadores cometem quando so obrigados a gerenciar diretamente a memria (C, C++, Pascal). A eliminao do uso de ponteiros, em favor do uso de vetores, objetos e outras estruturas substitutivas, traz benefcios em termos de segurana. O programador proibido de obter acesso memria que no pertence ao seu programa, alm de no 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, no permitindo 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 mesmo tempo como, por exemplo, imprimir enquanto l um fax. A linguagem permite a criao, de maneira fcil, de vrios threads de execuo, que eliminam o perodo de inatividade do processador executando concorrentemente ou tomando vantagem da execuo paralela real em sistemas multiprocessadores.

8

Programao Bsica em Java

Profa. Patrcia Augustin Jaques

1.2 O Ambiente de Programao Java1.2.1 Instalando e configurando o ambiente de programao JavaO ambiente de programao Java disponibilizado pela Sun composto basicamente pelas seguintes ferramentas:Ferramenta java.exe javac.exe jdb.exe appletviewer.exe Descrio O interpretador Java que ser usado para executar os aplicativos Java. O compilador Java que transforma programas fonte escritos em Java (.java) em bytecodes (.class). Java Language Debugger permite visualizar a execuo passo-a-passo. 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, tenha sempre 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 SUN http://java.sun.com/products/. Neste site voc encontrar as ltimas verses do ambiente de programao Java, bem como a documentao da biblioteca Java. A seguir, encontram-se instrues de como instalar este ambiente.

1.2.3 Verso Java 1.1.xAt 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 algumas variveis de ambientes (path e classpath) para uso adequado. No Windows 95 e 98, essas variveis deveriam ser 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.x do JDK: PATH=%path%;jdk1.1.x\bin set CLASSPATH=.;c:\jdk1.1.x\lib Na primeira linha descrito o diretrio em que as ferramentas Java (java, javac, etc) podem ser encontradas. O %path% usado para as configuraes anteriores de PATH no serem perdidas. A varivel CLASSPATH (segunda linha) contm o diretrio em que esto instaladas as bibliotecas Java. Sempre que declarar a varivel CLASSPATH importante colocar o ponto como um dos argumentos. Com isso voc est definindo que o Java deve procurar por classes Java no diretrio local.

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

9

Programao Bsica em Java

Profa. Patrcia Augustin Jaques

A partir desta verso necessrio apenas configurar a varivel de ambiente PATH. A localizao das bibliotecas 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\bin

Se for necessrio utilizar uma outra biblioteca alm das bibliotecas padres fornecidas com o Java2 SDK (por exemplo, servlets), necessrio que voc a defina no CLASSPATH.

1.2.5 Outras opesA IBM disponibiliza gratuitamente na sua homepage http://oss.software.ibm.com/developerworks/projects/jikes o compilador Java IBM Jikes. Atualmente, o Jikes encontra-se na verso 1.21. Voc vai observar que ele bem mais rpido que o compilador javac da SUN. Vale a pena experimentar! Para o Jikes importante definir a varivel de ambiente classpath no arquivo autoexec.bat, alm de copiar o jikes para o diretrio bin onde foi instalado o jdk: PATH=%PATH%; c:\jdk1.3\bin set 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 de programas Java. O Kawa, por exemplo, um shareware e pode ser copiado do site http://www.allaire.com/. Um outro bom editor que pode ser encontrado na verso freeware o JCreator. Ele pode ser copiado do site http://www.jcreator.com.

1.3 O Primeiro Programa JavaNeste captulo vamos escrever, compilar e executar o tradicional aplicativo Hello World. O cdigo deste programa ser explicado posteriormente para que voc possa comear a entender os fundamentos da programao Java. 1. 2. 3. 4. 5. 6. 7. 8. /* Meu programa Java */ public class HelloWorld { public static void main (String args[ ]) { System.out.println (Hello, World!); } // da rotina main } // da class

1.3.1 Passo a PassoLinha 2: public class HelloWorld

10

Programao Bsica em Java

Profa. Patrcia Augustin Jaques

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 os dados, 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 partida para 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 e foi declarado como varivel de classe (static) na classe System. Este mtodo imprime na tela uma mensagem texto, 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 para impresso 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 Java devem sempre ter a terminao .java. Geralmente, em Java, coloca-se uma classe dentro de cada arquivo. O arquivo conter o mesmo nome da classe. Cuidado, o compilador Java diferencia letras maisculas de minsculas, por isso, preste ateno quando for nomear o arquivo. Se voc utilizar o modificador public para a classe, por exemplo, public class HelloWorld, o arquivo deve possuir o mesmo nome que a classe. Caso no utilize public, o arquivo pode ter outro nome.

1.3.3 Compilando o cdigoPara 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 chamado HelloWorld.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 HelloWorldAps a compilao do programa, em que foi gerado o arquivo HelloWorld.class, voc pode execut-lo digitando o seguinte comando: C:\>java HelloWorld No 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 ser gerada para o programa acima:

11

Programao Bsica em Java

Profa. Patrcia Augustin Jaques

> Hello, World!

1.4 A Mquina Virtual JavaJava Virtual Machine, em ingls). A Mquina Virtual Java um computador abstrato definido por umaQuando trabalhamos com Java, um dos termos que mais ouvimos Maquina Virtual Java (MVJ) (ou especificao. Para executar um programa Java, precisamos de uma implementao desta mquina virtual. Por exemplo, a Sun oferece uma implementao da MVJ que o interpretador java.exe que vem juntamente com o ambiente de programao J2SDK. Mas, quando ouvimos falar de Java Virtual Machine, na verdade, o termo pode estar se referindo a 3 coisas 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 Machine Specification (Lindholm et al., 1997) que define para os desenvolvedores de implementao de MVJ que

caractersticas uma MVJ deve possuir. Implementaes concretas existem para vrias plataformas e podem vir de vrios fornecedores. Elas tambm podem ser totalmente implementadas em software, ou ainda uma combinao de hardware e software. Por exemplo, o programa java.exe que vem no ambiente de programao fornecido pela SUN, o JSDK, um exemplo de uma implementao da MVJ. Uma instncia em tempo de execuo 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 ser executada por uma instncia da MVJ.

1.4.1 O Ciclo de Vida de uma Mquina Virtual JavaUma instncia em tempo de execuo (ou instncia runtime) tem a funo de executar uma aplicao Java. Quando uma aplicao Java inicia a sua execuo, uma instncia runtime nasce. Ela morre no momento em que a aplicao completa a sua execuo. Se ns executarmos trs aplicaes Java iguais, usando a mesma implementao de MVJ e na mesma mquina, ns teremos 3 instncias de MJV executando. Cada aplicao Java ir executar na sua prpria MVJ. A instncia da MVJ ir iniciar a execuo de sua aplicao pelo mtodo main ( ). O mtodo main ( ) deve ter a seguinte assinatura: public static void main (String args[ ]) (como mostrado no exemplo listado na seo 1.3). Qualquer classe Java que contenha o mtodo main() pode ser usada como ponto de partida para a execuo de uma aplicao stand-alone Java. Ns temos que, de alguma maneira, fornecer a MVJ o nome da classe que contm o mtodo main() por onde a MVJ ir iniciar a execuo. Um exemplo real de implementao de MVJ o programa java.exe do ambiente Java 2 SDK da Sun. Para dizer a esta MVJ que ns gostaramos de executar a classe HelloWorld, ns digitamos o comando: C:\>java HelloWorld no prompt do DOS (Windows). O primeiro parmetro (java) est indicando que o sistema operacional pode iniciar a execuo da JVM do J2SDK. O segundo parmetro o nome da classe inicial. Esta classe deve conter 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

12

Programao Bsica em Java

Profa. Patrcia Augustin Jaques

programador, tambm como classes da Java API. Apenas so carregadas as classes da Java API que so utilizadas pelo programa. A MVJ tambm possui uma mquina de execuo (execution engine) que um mecanismo responsvel por 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 JIT compila os bytecodes para cdigo em mquina nativa na primeira vez que o mtodo executado. O cdigo nativo guardado em memria e, ento, pode ser reusado na prxima vez que o mtodo invocado. Ele mantm em memria tanto os bytecodes como o cdigo nativo, por isso, embora seja mais rpido, requer mais memria. 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 dos compiladores JIT. Desta maneira, no muito adequado chamar a MVJ de interpretador (Venners, 2000).

1.5 ExercciosExerccio 1 Pede ArgumentoFaa um programa Java leia um argumento passado para a Mquina Virtual Java. O programa deve ser formado por uma nica classe e contm apenas o mtodo main ( ). A classe deve se chamar PedeArgumento e voc passar o seu nome como argumento. Por exemplo, se o seu nome Nicolas, voc deve executar o programa 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(). Para acessar um argumento de uma array, fornea a posio da array que voc deseja acessar. Por exemplo, como ns 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 duas primeiras posies da array: 0 e 1).

13

Programao Bsica em Java

Profa. Patrcia Augustin Jaques

2 Estruturas Fundamentais de Programao em Java

2.1 Espao em BrancoJava 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 entre palavras que no estejam separadas por um operador ou separador.

2.2 Comentrios em JavaOs comentrios em cdigo-fonte Java podem ser de 3 tipos: de uma linha, de vrias linhas e de documentao. Os comentrios de uma linha comeam com // (duas barras) e terminam no final da linha. Este tipo de comentrio til para explicaes de uma nica linha de cdigo. Nas linhas 7 e 8 do cdigo exibido no incio 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 um comentrio e, portanto, ignorado pelo compilador. Existe ainda o comentrio de documentao que comea com /** (barra-asterisco-asterisco) e finaliza com */ (asterisco-barra). O uso da ferramenta JavaDoc para gerar documentao HTML vai ser explicado no captulo 7 (pgina 58).

2.3 Palavras-chave reservadasAs palavras-chave reservadas Java so usadas para identificar os tipos, modificadores e mecanismos de controle de fluxo. Essas palavras, juntamente com os operadores e separadores, formam a definio da linguagem Java. Elas no podem ser usadas como nome de varivel, mtodo ou classe.abstract case const else float if int null protected static throw var boolean cast continue extends for implements interface operator public super throws void break catch default false future import long outer rest switch transient volatile byte char do final generic inner native package return synchronized true while byvalue class double finally goto instanceof new private short this try

14

Programao Bsica em Java

Profa. Patrcia Augustin Jaques

2.4 IdentificadoresOs identificadores so as palavras usadas para nomes de classes, mtodos e variveis. Um identificador pode ser qualquer seqncia de caracteres de letras maisculas e minsculas, nmeros e caracteres de sublinhado 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 identificadores2.5.1 Variveis e mtodosSegundo a conveno para identificadores Java, os mtodos e variveis devem ser nomeados com letras minsculas. No caso do identificador ser formado por mais de um termo, o segundo termo e os termos seguintes devem iniciar com letra maiscula. As variveis so compostas por substantivos e adjetivos, enquanto que os nomes de mtodos comeam sempre com um verbo. Exemplos: hora, horaDoDia, valorCorrente, obterHoraDoDia().

2.5.2 ConstantesPara 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 de constantes Java so formados por substantivos e adjetivos. Exemplos: VALOR_P1, DIA_SEXTA, VERDE.

2.5.3 ClassesNomes de classes em Java so escritos em minsculo com a primeira letra em maiscula. Para os nomes compostos por mais de um termo, usa-se comear os termos seguintes com letra maiscula. Os nomes de classes Java so formados por substantivos e adjetivos. Exemplos: InterfaceSimples, Interface.

2.6 Declarao ImportPara 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 todas as classes. O compilador ir procurar por pacotes dentro dos diretrios especificados na varivel de ambiente classpath. 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.

15

Programao Bsica em Java

Profa. Patrcia Augustin Jaques

Grupo int Inteiros

Tipo short long byte

Tamanho 4 bytes 2 bytes 8 bytes 1 byte 4 bytes 8 bytes 2 bytes 1 bit

Intervalo de Valores -2.147.483.648 at 2.147.483.647 -32.768 at 32.767 -9.223.372.036.854.775.808L 9.223.372.036.854.775.807L -128 at 127 +- 3,40282347E+38F (6-7 dgitos significativos) +- 1,79769313486231570E+308 (15 dgitos significativos) representa um Unicode true ou false 0 0 at 0L 0 0.0f 0.0d

Valor Default

Ponto Flutuante

float double char boolean

\u0000; false

2.8 Converses entre Tipos NumricosQualquer 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. Toda converso numrica em Java possvel, mas informaes podem ser perdidas. Estas converses podem ser realizadas com o uso de cast. A sintaxe do casting colocar o tipo desejado entre parnteses antes do nome da varivel. 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 outro sem 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 ser considerados 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 na expresso, 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 caractere representa, voc pode usar o mtodo digit (char, int) da classe Character, onde passamos como parmetro o caractere e a base de converso (decimal, binria, etc). Para o contrrio, converter um inteiro para um caractere que represente aquele inteiro, utilize o mtodo forDigit (int, int) onde o primeiro parmetro representa o valor inteiro 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' -> 1 int res1 = Character.digit (c, 10); 16

Programao Bsica em Java

Profa. Patrcia Augustin Jaques

// converte inteiro em char. Ex: 1 char res2 = Character.forDigit (i, System.out.println ("char -> int = System.out.println ("int -> char = } }

-> '1' 10); " + res1); " + res2);

2.9 Declarao e Inicializao de ValoresAs variveis do tipo byte, short, int, long, float, double, char e boolean podem ser declaradas de acordo com uma das formas exibidas abaixo.int a, b, c; int d = 3, e, f=5; double pi = 3.14159; char x = x; Declarando as variveis a, b e c. Declarando d, e, f e inicializando d com 3 e f com 5. Declarando e inicializando pi com o valor 3.14159; Declarando e inicializando x com o caractere x;

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 de compilao 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 ConstantesEm Java no podem ser definidas constantes locais para um determinado mtodo como, por exemplo, o main. Ao invs disso, pode haver somente constantes para todos os mtodos na classe. Elas so chamadas usualmente 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 OperadoresExistem quatro tipos de operadores em Java: aritmticos, bit-a-bit, relacional e lgico.

17

Programao Bsica em Java

Profa. Patrcia Augustin Jaques

2.11.1 Operadores AritmticosOs operandos aritmticos s podem ser usados para operandos do tipo numrico. No podem ser usados esses operadores para os tipos boolean, mas podem para char, uma vez que char um subconjunto do tipo int.Operador + * / % ++ adio subtrao multiplicao diviso mdulo (resto da diviso inteira) incremento (equivale a x=x+1) equivale a y=x e x=x+1 equivale a x=x+1 e y=x -decremento (equivale a x=x-1) equivale a y=x e x=x-1 equivale a x=x-1 e y=x += -= *= /= %= Soma e atribui (equivale a i=i+2) Subtrai e atribui (equivale a i=i-2) Multiplica e atribui (equivale a i=i*2) Divide e atribui (equivale a i=i/2) Mdulo e atribui (equivale a i=i%2) Operao x=1+2; x=3-1; x=2*3; x=6/2; x=7%2; x=1; x++; x=1; y=0; y=x++; x=1; y=0; y=++x; x=1; x--; x=1; y=0; y=x--; x=1; y=0; y=--x; i=1; i+=2; i=1; i-=2; i=1; i*=2; i=2; i/=2; i=1; i%=2; Exemplo Resultado x=3 x=2 x=6 x=3 x=1 x=2 x=2, y=1 x=2, y=2 x=0 x=0; y=1 x=0, y=0 i=3 i=-1 i=2 i=1 i=1

2.11.2 Operadores RelacionaisPara comparar valores so usados os seguintes operadores relacionais:Operador == != > < >= >>> >= >>>= >> Deslocamento para a direita sem sinal: Desloca n bits direita preenchendo os campos superiores (extrema esquerda) com zero.A a>>>24 11111111 11111111 11111111 11111111 00000000 00000000 00000000 11111111 -1 255

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

2.11.5 Operador if-then-else ternrioexpresso ? declarao1 : declarao2

Onde expresso qualquer expresso que o resultado seja um valor boolean. Se o resultado for true, a declarao 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 ratio recebe num/denom.

20

Programao Bsica em Java

Profa. Patrcia Augustin Jaques

2.11.6 Precedncia de OperadoresA tabela a seguir mostra a ordem de todas as operaes possveis em Java, de precedncia mais alta para mais baixa. Os operadores que esto no mesmo nvel, geralmente, so processados da esquerda para a direita na linha de comando.Prioridade Mais alta ! ~ ++ -- +(unrio) (unrio) (cast) */% +> >>> < >= instanceof == != & ^ | && || ?: = += -= *= /= %= |= ^= = >>>= direita para a esquerda 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 esquerda para a direita esquerda para a direita esquerda para a direita direita para a esquerda Prioridade Menos Alta

2.12 Controle de FluxoNos exemplos vistos at aqui o fluxo do programa era linear, ou seja, a execuo tinha que passar por todas as linhas de comando. Os programas, muitas vezes, vo exigir que certas partes do cdigo sejam ou no executados 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-elseboolean dadosDisponiveis = true; if (dadosDisponiveis) processarDados ( ); else esperarMaisDados ( ); No exemplo acima o cdigo verifica o valor da varivel boolean. Se dadosDisponveis igual a true ento executa o mtodo processarDados, seno executa o mtodo esperarMaisDados ( ). A clusula else opcional. Se no exemplo acima no houvesse a clusula else, nenhum mtodo seria executado. Ao invs de uma varivel boolean, tambm poderia haver uma expresso que usasse operadores para produzir um resultado boolean. Por exemplo: int bytesDisp = 5; if (bytesDisp > 0) { processarDados ( ); byteDisp --; } else esperarMaisDados ( );

21

Programao Bsica em Java

Profa. Patrcia Augustin Jaques

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

2.12.2 switchA declarao switch usada quando existem procedimentos diferenciados para determinados valores de uma nica varivel. Ela s pode ser usada para vriveis que sejam de tipo primitivos de dados, mais especificamente 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 seqncia de cdigo que vem depois da declarao case executada. Se nenhum dos cases corresponder ao valor da expresso, 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 execuo seria 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"; 22 {

Programao Bsica em Java

Profa. Patrcia Augustin Jaques

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 whileA construo while executa repetidamente o mesmo bloco de cdigo at que o resultado de uma expresso boolean seja verdadeiro. Por exemplo: class WhileDemo { public static void main (String args [ ]) { int n = 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:\> tick tick tick tick tick

java WhileDemo 5 4 3 2 1

2.12.4 do-whiles vezes, desejvel executar o corpo de um lao while pelo 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 lao do-while. class DoWhile { public static void main (String args []) { int n=5; do { System.out.println ("tick " + n); } while (--n>0); } } O programa acima produz a mesma sada que o anterior.

23

Programao Bsica em Java

Profa. Patrcia Augustin Jaques

2.12.5 forA declarao for uma maneira compacta de construir um lao. Sua forma bsica segue: for (inicializao; encerramento; iterao) corpo; Por exemplo: class ForDemo { public static void main (String args []) { for (int i=1; ijava ForDemo i = 1 i = 2 i = 3 i = 4 I = 5Se a condio inicial (i=1) no fizer com que o encerramento (i