Você está na página 1de 114

Introduo........................................................................................................................................3 Java..................................................................................................................................................3 O que Java?...............................................................................................................................3 Caractersticas da linguagem...........................................................................................................3 Java Interpretada e multiplataforma..........................................................................................3 Java Case Sensitive...................................................................................................................3 Java Multithread........................................................................................................................

....3 Porqu programar em Java?.............................................................................................................4 Java no mercado de trabalho atual...................................................................................................4 Como programar em Java................................................................................................................4 Ferramentas Java..............................................................................................................................6 JDK (Java Development Kit).......................................................................................................6 O que contm?.............................................................................................................................6 JRE (Java Runtime Evironment).................................................................................................6 Javac.............................................................................................................................................7 Tecnologias Java..............................................................................................................................7 JSE (Java Standart Edition).........................................................................................................7 JEE (Java Enterprise Edition)......................................................................................................7 JME (Java Mobile Edition)..........................................................................................................7 O que instalar?.................................................................................................................................7 Primeiro contato com o Java..........................................................................................................12 Analise da estrutura bsica de um programa java..........................................................................13 public.........................................................................................................................................13 static...........................................................................................................................................13 void............................................................................................................................................13 (String args[]).............................................................................................................................13 { ... }...........................................................................................................................................13 O que uma varivel?...................................................................................................................14 Como declarar uma varivel?....................................................................................................14 Definio de varivel e constantes.................................................................................................15 Declarao de constantes...............................................................................................................16 Como atribuir um valor?................................................................................................................16 Tipos de Dados..............................................................................................................................17 Os tipos primitivos em Java.......................................................................................................17 Comentrios...................................................................................................................................18 Operadores.....................................................................................................................................19 Operadores Aritmticos ................................................................................................................20 Operadores Relacionais.................................................................................................................22 Operadores Lgicos.......................................................................................................................22 Passagem de parmetro..................................................................................................................23 Converso de tipos.........................................................................................................................25 Excees em Java..........................................................................................................................26 Uso da estrutura try catch..............................................................................................................27 Uso do Bloco finally......................................................................................................................28 Uso da clausula throws..................................................................................................................29 Uso da Instruo throw..................................................................................................................30 Exerccios.......................................................................................................................................39 Comandos Condicionais................................................................................................................40 Uso da estrutura if-else..................................................................................................................40
Curso Tcnico em Informtica

Capo Bonito - SP

Estrutura switch-case ....................................................................................................................41 Uso do getMessage e printStackTrace...........................................................................................42 Laos de Repetio........................................................................................................................43 Uso do Lao for.............................................................................................................................43 Uso do Lao while.........................................................................................................................44 Exerccios.......................................................................................................................................45 Funes Matemticas.....................................................................................................................46 Mtodo Ceil...............................................................................................................................47 Mtodo floor..............................................................................................................................47 Mtodo max...............................................................................................................................48 Mtodo min................................................................................................................................49 Mtodo sqrt................................................................................................................................49 Mtodo pow...............................................................................................................................50 Mtodo random..........................................................................................................................51 Formatao com a Classe DecimalFormat....................................................................................52 Internacionalizao com a Classe Locale......................................................................................54 Funes com Strngs......................................................................................................................56 Mtodo length............................................................................................................................57 Mtodo charAt...........................................................................................................................58 Mtodos toUpperCase e toLowerCase......................................................................................59 Mtodo substring.......................................................................................................................59 Mtodo trim...............................................................................................................................61 Mtodo replace..........................................................................................................................62 Mtodo valueOf.........................................................................................................................63 Mtodo indexOf.........................................................................................................................64 Criao de Banners........................................................................................................................65 Programao orientada por objeto.................................................................................................67 Definio e uso de uma classe.......................................................................................................71 Construtores e Herana..................................................................................................................82 Adio de construtores...............................................................................................................82 Herana de classes.........................................................................................................................86 Sobrescrita e Sobrecarga de Mtodos............................................................................................93 Conceito de polimorfismo.........................................................................................................93 Sobrescrita de mtodos..............................................................................................................94 Sobrecarga de mtodos..............................................................................................................97 Classes e mtodos finais..........................................................................................................103 Classes Abstratas, Interfaces e Pacotes........................................................................................107 Classes abstratas: criao e uso...............................................................................................107 Interfaces..................................................................................................................................111 Organizao em pacotes..........................................................................................................112

Curso Tcnico em Informtica

Capo Bonito - SP

Introduo
Nesta aula aprenderemos o que Java, quais suas principais caractersticas, como funciona. Discorrerei sobre suas tecnologias atuais, onde se aplica cada uma, quais as diferenas entre elas, e, no final, quais programas instalar para podermos comear programar em Java.

Java
Java foi desenvolvida pela Sun Microsystems em 1995, inicialmente usada para rodar Applets via internet por meio do navegador HotJava (que acompanhava a linguagem), como o passar do tempo a Microsoft e a Netscape tambm incorporaram a nova tecnologia em seus navegadores. O que Java? Java uma linguagem de programao. Por favor no confundam Java com Java Script, enquanto uma uma poderosa linguagem de programao com vastos recursos, a outra uma linguagem de script para internet, com recursos limitados se comparados primeira.

Caractersticas da linguagem
Java uma linguagem orientada objetos, interpretada, multiplataforma, case sensitive, e multithread. Segue um breve resumo de cada uma de suas caractersticas. Java Interpretada e multiplataforma Quando desenvolvemos uma aplicao em Java no ficamos presos uma dada plataforma, sendo assim, ao desenvolvermos no sistema operacional Windows por exemplo, no precisaremos recompilar o cdigo inteiro para rodar a mesma aplicao no Linux. Basta somente instalar o interpretador da Java, que tambm mantido pela Sun Microsystems, para o sistema operacional especfico, logo o pacote compilado no Windows vai rodar no Linux, MacOS, Solaris, ou em qualquer outro sistema operacional que possuir um interpretador Java. Java Case Sensitive Dizer que Java case sensitive significa dizer que a mesma sensvel as variaes de letras em maisculo e minsculo, ou seja, se por exemplo, voc declarar uma varivel A e declarar outra varivel a, Java far distino entre as duas. Java Multithread Em Java podemos executar dois comandos simultaneamente, sem um saber que o outro existe, sendo que cada um possui uma chamada diferente na mesma aplicao, tambm possvel

Curso Tcnico em Informtica

Capo Bonito - SP

retardar uma tarefa enquanto no executemos outra, como por exemplo, esperar at que todas as vendas abertas no momento sejam fechadas para podermos fechar o caixa dirio.

Porqu programar em Java?


Java j no mais novidade e conforme os anos avanam surgem novos recursos, sendo assim um bom investimentos, com uma recursividade bastante elstica tem suas principais caractersticas como principal ponto forte. Com o passar dos anos o interpretador foi melhorando a principal justificativa para no programar em Java (de que era uma linguagem lerda por ser interpretada) foi caindo, com o avanar da tecnologia e o barateamento de custos do hardware, hoje em dia considervel (na grande maioria dos casos) que voc perca alguma performance para poupar custos com manuteno e tempo de resposta ao cliente.

Java no mercado de trabalho atual


Atualmente Java est melhor difundida na faixa de sistemas para Web, com suas novas plataformas de desenvolvimento encurtando o tempo do mesmo e facilitando a vida dos programadores, o tempo de resposta ao cliente est cada vez mais curto e, com isso, aumentando a fatia do mercado de trabalho ocupada pela Java.

Como programar em Java


Na linguagem de programao Java, todos os cdigos-fonte so primeiramente escritos em um arquivo de texto com a extenso .java.

Curso Tcnico em Informtica

Capo Bonito - SP

O arquivo .class no contm cdigo que nativo para seu processador; ele em seu lugar contm bytecodes a linguagem de mquina da Java Virtual Machine (Java VM).

Como a Java VM disponvel em diferentes sistemas operacionais, os mesmos arquivo .class so capazes de rodar em Microsoft Windows, Solaris Operating System (Solaris OS), Linux, ou Mac OS.

Curso Tcnico em Informtica

Capo Bonito - SP

Ferramentas Java
A Java contm vrias ferramentas que podem ser chamadas atravs de um terminal, vou descrever as mais usadas no comeo, pois posteriormente, quando precisar das outras, voc utilizar uma IDE que acionar as mesmas automaticamente. JDK (Java Development Kit) JDK o kit de desenvolvimento da linguagem Java, cada Tecnologia Java contm o seu JDK especfico. O que contm? O JDK contm todas as ferramentas necessrias para se desenvolver aplicaes em dada tecnologia Java, por exemplo o JDK SE vem com todas as ferramentas necessrias para desenvolvermos aplicaes para Core/Desktop. JRE (Java Runtime Evironment) O JRE a mquina virtual Java, ele que interpreta da linguagem Java para a o sistema operacional instalado na mquina, traduzindo as instrues da aplicao para o mesmo.

Curso Tcnico em Informtica

Capo Bonito - SP

Javac O Javac o compilador Java, ele vem junto com o JDK. Atua transformando o cdigo fonte para o cdigo que vai ser interpretado pela JRE.

Tecnologias Java
Com Java podemos desenvolver sistemas para trs setores: Core/Desktop JSE Web JEE Mobile JME JSE (Java Standart Edition) Quando se fala em fazer um curso de Java esto falando de um curso sobre JSE, aqui onde aprende-se as principais funes, a sintaxe e a pensar em Java. Contm os recursos para desenvolvermos aplicaes locais (Core/Desktop). JEE (Java Enterprise Edition) JEE uma extenso da JSE adicionando a mesma mais recursos, a tecnologia mais avanada da Java, justamente por conter todos os recursos da JSE e mais os recursos da JEE, com ela desenvolvemos no somente as aplicaes para Core/Desktop mas tambm aplicaes Web. JME (Java Mobile Edition) JME a tecnologia responsvel pelo desenvolvimento de aplicaes mobile, com ela podemos programar para celulares e palms.

O que instalar?
Para comear a aprender Java voc precisa simplesmente do JDK JSE e de um editor de texto qualquer, nada mais.Para baixar o JDK, simplesmente entre no site da Sun e escolha o apropriado para o seu sistema operacional. Para editor de texto eu recomendo o Notepad++, alm de ter o text hilight para Java ele tambm contm um plugin que completa automaticamente as funes chamadas em Java, parecido com uma mini IDE em modo texto. O processo de instalao transfere todas as ferramentas e pacotes da linguagem para sua mquina. Ao instalar o JDK, criada uma pasta com todos os arquivos do kit de ferramentas da
Curso Tcnico em Informtica

Capo Bonito - SP

Sun. O caminho default da instalao "C:\Arquivos de programas\Java\jdk..............". Ao instalar o JDK, so criadas diversas pastas. Observe que a pasta jdk............ a principal em que esto todas as outras (a Sun chamada de JAVA HOME). Dependendo da verso do JDK instalada, essa pasta pode ter nomes e contedos diferentes. Voc dever se concentrar no nome da verso que voc baixou. Realize as configuraes das variveis de ambiente. A configurao das variveis depende do Sistema Operacional em que voc est instalando o JDK. Os procedimentos apresentados em seguida se referem configurao para o ambiente Windows. No Windows 2000, XP e Vista, devemos configurar as variveis pelo Painel de Controle. Defina as variveis, seguindo os procedimentos:

Clique sobre o cone Meu computador com boto direito do mouse e selecione a opo Propriedades com boto esquerdo

Curso Tcnico em Informtica

Capo Bonito - SP

Clique sobre aba Avanado e depois clique sobre o boto Variveis de Ambiente

Curso Tcnico em Informtica

Capo Bonito - SP

Em "Variveis de usurio", clique no boto "Nova". As variveis de ambiente podem tambm ser definidas em "Variveis do sistema" em vez de "Variveis de usurio", como sugerido.

A diferena que, quando definidas em "Variveis de usurios", elas funcionam somente para o seu usurio, e em "Variveis de sistema" funcionam para todos os usurios.

Curso Tcnico em Informtica

Capo Bonito - SP

10

No campo "Nome da varivel" coloque o nome da varivel que ser includa, por exemplo, JAVA HOME, e no campo "Valor da varivel" coloque o caminho referente varivel que voc nomeou, C:\Arquivos de programas\Java\jdk1.6.0_10 e Clique no boto"OK".

Faa o mesmo procedimento de incluso com as variveis path e classpath, definindo os seus nomes e incluindo os valores correspondentes: C:\Arquivos de programas\Java\jdk1.6.0_03\bin para a varivel path C:\Arquivos de programas\Java\jdk1.6.0_03\lib;.; para a varivel classpath. Verifique se a instalao foi realizada com sucesso. Entre em um diretrio qualquer no prompt de comando e digite javac seguido da tecla Enter. Se aparecer uma mensagem como "javac no reconhecido como um comando interno", porque o Java no foi instalado corretamente. Se ao digitar javac aparecer uma tela com instrues de Help do Java, significa que a instalao e a configurao foram realizadas com sucesso.
Curso Tcnico em Informtica

Capo Bonito - SP

11

Primeiro contato com o Java


Inicialmente, para fornecer o primeiro contato com a linguagem, ser apresentada uma classe em Java que escreve uma mensagem qualquer na tela. class Aula1 { public static void main (String args[]) { System.out.println("Inicio do aprendizado"); System.out.println("Ensino Didtico da Linguagem Java"); } }

Curso Tcnico em Informtica

Capo Bonito - SP

12

Analise da estrutura bsica de um programa java


A linha do mtodo principal possui o seguinte formato: public static void main(String args[]); praticamente todas as aplicaes tm essa linha. A nica coisa que pode ser alterada na linha a varivel args que pode receber outro nome de acordo com o desejo do programador. A seguir, feita uma anlise um pouco mais detalhada dessa linha. public um qualificador do mtodo (pode ser usado em qualquer mtodo, no apenas no main) que indica que ele acessvel externamente a essa classe (outras classes podem eventualmente utilizar esse mtodo). Isso til quando uma classe necessita utilizar alguma funcionalidade de outra classe, caracterstica muito comum na linguagem Java. static Qualificador que indica que o mtodo deve ser compartilhado por todos os objetos que so criados a partir dessa classe. void o valor de retorno do mtodo. Quando no h nenhum valor, ela retorna void, uma espcie de valor vazio que deve ser especificado. Este o nome do mtodo que indica ao compilador o incio do programa. o mtodo principal, em que todas as variveis, argumentos e instrues so interpretados e processados para a execuo do programa. (String args[]) o argumento do mtodo principal (main) e, por consequncia, do programa todo; ele um vetor de strings formado por todos os argumentos passados ao programa na linha de comando do sistema operacional quando o programa invocado. Outra variao existente nessa sintaxe inverter a posio dos colchetes ([]) que aparecem ao lado direito da palavra args. Poderia ser usado o formato "Sring[ ] args", cujo resultado obtido seria o mesmo, isto , trata-se da declarao de um vetor de strings. { ... } "Abre-chaves" e "fecha-chaves" delimitam um bloco de cdigo semelhante ao BEGIN e END de outras linguagens como Pascal. No exemplo Aula1 a classe Aula1 envolve todas as instrues da classe, inclusive o mtodo main. Esse exemplo possui apenas o mtodo main, entretanto uma classe pode envolver diversos mtodos.
Curso Tcnico em Informtica

Capo Bonito - SP

13

O que uma varivel?


um espao reservado na memria do computador para guardar uma informao. Uma varivel pode mudar o valor armazenado durante a execuo de uma aplicao Java, por isso a definio do nome varivel. Toda varivel tem um ciclo de vida, sua criao, uso e destruio se da ao decorrer da execuo da aplicao. O valor armazenado por uma varivel perdido ao fechar a aplicao. Para usar uma varivel dentro de uma aplicao Java devemos obrigatoriamente fazer a sua declarao antes de seu uso. Como declarar uma varivel? Variveis Java so declaradas dentro de mtodos. A declarao de uma varivel consiste em definir duas informaes: Tipo da varivel. Identificador da varivel (nome).

Toda varivel armazena um tipo especifico de informao, sendo esse tipo definido na sua declarao. Exemplos de tipo: Numricos: (armazena nmeros) Alfa-numricos (armazena letras e nmeros) Lembrando sempre que toda varivel deve possuir um identificador DICAS: Inicie sempre seu identificador com letras, para no gerar erros de compilao; Nunca utilize caracteres especiais na declarao de variveis Ex: , ~, ^. entre outros; Nunca utilize espaos em brancos Ex: salario inicial;

Curso Tcnico em Informtica

Capo Bonito - SP

14

class Aula1 { public static void main (String args[]) { String nome; int cdigo; double valor; } }

Definio de varivel e constantes


Uma varivel ou constante um tipo de identificador cujo nome, escolhido pelo programador, associado a um valor pertencente a um certo tipo de dados. Em outras palavras, um identificador a localizao da memria (um endereo ou vrios deles) capaz de armazenar o valor de um certo tipo, para o qual se d um nome (o nome da varivel, constante, objeto etc.) que usualmente descreve seu significado ou propsito. Desta forma, todo identificador possui um nome, um tipo e um contedo. Os identificadores no podem utilizar as palavras reservadas da linguagem Java, assim como ocorre com outras linguagens de programao. A relao de palavras reservadas at a verso 1.5 do Java apresentada na tabela abaixo. At agora no h notcias de incluso de novas palavras reservadas na verso 1.6. abstract assert *** boolean break byte case catch char class const * * no usado ** continue default do double else enum **** extends final finally float For goto * if implements import instanceof int interface long native New package private protected public return Short static strictfp ** Super switch synchronized this throw throws transient try void volatile while

adicionado verso 1.2

*** adicionado verso 1.4 **** adicionado verso 1.5


Curso Tcnico em Informtica

Capo Bonito - SP

15

Declarao de constantes
Na realidade no existem constantes em Java, o que existe um tipo de varivel com comportamento semelhante a uma constante de outras linguagens. Trata-se de um tipo de varivel que no pode alterar seu contedo depois de ter sido inicializado, ou seja, o contedo permanece o mesmo durante toda a execuo do programa. Em Java, essa varivel chamada de final. Essas constantes so usadas para armazenar valores fixos, geralmente definidos no incio de uma classe. Exemplos: o valor de PI na matemtica (3.14), o valor da acelerao na fsica (9 81 m/s2) a quantidade de milissegundos existentes em um segundo (1.000) etc. Para a declarao de "constantes" em Java utiliza-se a palavra reservada final antes da definio do tipo da varivel, como nos exemplos seguintes: final double pi = 3.14; final int miliSegundosPorSegundo = 1000; Caso um segundo valor seja atribudo a uma varivel final no decorrer da classe, o compilador gera uma mensagem de erro. No obrigatrio inicializar o contedo de uma varivel final no momento de sua declarao. possvel realizar esses dois processos em locais distintos, conforme apresentado em seguida. final int milimetrosPorCentimetro; . // linhas de cdigo milimetrosPorCentimetro = 10;

Como atribuir um valor?


Toda varivel armazena um valor. Para definir ou alterar um valor armazenado por uma varivel devemos fazer uma ATRIBUIO. Para fazer essa atribuio devemos usar um operador de atribuio, em Java esse operador definido pelo caractere =

Curso Tcnico em Informtica

Capo Bonito - SP

16

Tipos de Dados
Assim como em outras linguagens de programao, antes de utilizar variveis necessrio definir que tipo de dado ela vai armazenar. Caso seja necessrio armazenar a quantidade em estoque de um determinado produto, pode-se declarar uma varivel do tipo inteira, ou para armazenar valores monetrios, possvel declarar uma varivel do tipo double e assim por diante. Os tipos de dados em Java so portveis entre todas as plataformas de computadores que suportam essa linguagem. Na maioria das linguagens, quando um tipo de dado utilizado, por exemplo, um tipo inteiro, pode ser que para uma determinada plataforma esse nmero seja armazenado com 16 bits e em outra com 32 bits. Em Java isso no ocorre, uma vez que um tipo de dado ter sempre a mesma dimenso, independentemente da plataforma utilizada. Este e muitos outros recursos de portabilidade de Java permitem que os programadores escrevam programas sem conhecer a plataforma de computador em que eles sero executados. Os tipos primitivos em Java. Tipo Quantidade de bits Valores char 16 '\u0000' a '\uFFFP' byte 8 -128 a+ 127 int 32 -2.147.483.648 a+2.147.483.647 short 16 -32.768 a + 32.767 long 64 -9.223.372.036.854.775.808 a +9.223.372.036.854.775.807 float 32 -3.40292347E+38 a +3.40292347E+38 double 64 -1.79769313486231570E+308a +1.79769313486231570E+308 boolean 8 true ou false At pouco tempo atrs, quando os recursos de hardware da mquina eram mais limitados, existia a preocupao de reduzir ao mximo a quantidade de memria utilizada por um programa. Analisando a tabela acima, um programador chegaria concluso de que para armazenar a idade de uma pessoa, deveria ser utilizado o tipo byte, pois possui uma faixa de valores suficiente para armazenar a idade que uma pessoa normal pode atingir, dispensando outros tipos numricos que ocupariam mais espao na memria.

Curso Tcnico em Informtica

Capo Bonito - SP

17

Comentrios
Os comentrios so linhas adicionadas ao programa que servem para facilitar seu entendimento por parte do programador, ou ainda por uma outra pessoa que o consulte. Essas linhas no afetam o programa em si, pois no so consideradas parte do cdigo. O Java aceita trs tipos de comentrio: de uma linha, de mltiplas linhas e de documentao. Para inserir comentrios de linha nica utilizam-se // (duas barras) em qualquer local do programa e tudo o que estiver escrito depois desse sinal e na mesma linha ser considerado um comentrio. Para inserir comentrios que envolvam vrias linhas, utiliza-se /* (barra asterisco) para demarcar o incio e */ (asterisco barra) para o final, ou seja, tudo o que estiver entre esses dois sinais ser considerado comentrio. O terceiro tipo semelhante ao comentrio de mltiplas linhas, entretanto tem o propsito de possibilitar a documentao do programa por meio de um utilitrio (javadoc) fornecido pela Sun junto com o SDK. Esse tipo de comentrio inicia-se com /** e encerrado com */. O exemplo abaixo demonstra a utilizao dos comentrios (colocados em negrito).

Curso Tcnico em Informtica

Capo Bonito - SP

18

/** Exemplo0202: 2. 3. 4. 5. 7. 8. 9. 10. 11. 12. 13. 14. 14. 16. 17. 18. } } Essa classe demonstra a utilizao de variveis em uma classe em Java. So declaradas variveis do tipo int e double. O exemplo tambm demonstra como imprimir o contedo das variveis na tela */ { public static void main (String args []) { int x = 10, y = 20; // declarao de variveis do tipo inteiro double dolar =2.62; /* As linhas seguintes enviam o contedo das variveis para a tela */ System.out.println(x); System.out.printIn(y); System.out.println(dlar);

6. public class Exemplo0202

Operadores
A linguagem Java oferece um amplo conjunto de operadores destinados realizao de operaes aritmticas, lgicas e relacionais, com a possibilidade de formar expresses de qualquer tipo. Alm dos operadores matemticos (aritmticos), existem tambm operadores lgicos e relacionais, conforme abordado em seguida.

Curso Tcnico em Informtica

Capo Bonito - SP

19

Operadores Aritmticos
Tabela abaixo apresenta os operadores aritmticos usados em Java Funo Adio Subtrao Multiplicao Diviso Resto da diviso inteira Sinal negativo Sinal positivo Incremento unitrio Decremento unitrio Sinal + * / % + ++ -Exemplo X+Y X-Y X*Y X/Y X%Y -X +X ++X ou X++ --X ou X--

Entre os operadores presentes na tabela acima, talvez os de decremento (--) e incremento (++) causem alguma dvida, principalmente para os programadores iniciantes. Entretanto, sua utilizao extremamente simples: como o prprio nome diz, o operador de incremento incrementa (aumenta) o valor de uma varivel qualquer em um, ou seja, supondo que uma varivel chamada idade possua o contedo 10, ao receber o operador de incremento (idade++), seu contedo passa a ser onze (10+1). O mesmo vale para o operador de decremento, logicamente reduzindo em um o contedo da varivel. O exemplo 2.3 mostra um programa em Java com a utilizao de alguns operadores. Os comentrios aparecem no prprio programa com a utilizao das barras duplas ('//'). Em Java, para imprimir diversas variveis na tela uma ao lado da outra, utilizado o operador de concatenao (+), ao contrrio de outras linguagens que utilizam a vrgula (,) como separador. Na linha 8, por exemplo, a seqncia ("X =" + x) indica que o trecho entre aspas ser enviado para a tela concatenado com (+) o contedo da varivel x. Para enviar uma frase qualquer para a tela, necessrio coloc-la entre aspas; j para enviar o contedo de uma varivel, as aspas no devem ser utilizadas.

Curso Tcnico em Informtica

Capo Bonito - SP

20

class Exemplo0203 { public static void main (String args[]) { // declarao e inicializao de variveis int x = 10; int y = 3; // vrias operaes com as variveis System.out.println("X = "+ x); System.out.println("Y = "+ y); System.out.printIn("-X = "+(-x)); System.out.println("X/Y = "+(x/y)); System.out.println("Resto de X por Y = "+ (x%y)); System.out.println("Inteiro de X por Y = "+ (int)(x/y)); System.out.printIn("X + 1 = "+ (++x)); } }

Outro ponto a ser observado no exemplo 2.3 se refere utilizao do mtodo println da classe System. Conforme indica a figura 2.2, para cada comando println usado ocorre uma mudana de linha na tela. Essa caracterstica controlada pelas letras In inseridas no final do comando println, isto , o comando imprime o que est entre parnteses e em seguida imprime um final de linha. A prxima informao a ser impressa aparece na outra linha. Caso seja necessrio imprimir diversos valores na mesma linha, alm de utilizar o operador de concatenao, pode-se utilizar o comando println sem o In no final da seguinte forma: System.out.print ("Dados a serem impressos"). Ao compilar e executar corretamente o exemplo 2.3, aparece a tela de execuo mostrada na figura abaixo.

Curso Tcnico em Informtica

Capo Bonito - SP

21

Operadores Relacionais
Os operadores relacionais possibilitam comparar valores ou expresses, retornando um resultado lgico verdadeiro ou falso. A tabela abaixo demonstra os operadores relacionais usados em Java. Funo Igual Igualdade de String Diferente Maior que Maior ou igual a Menor que Menor ou igual a Dica Cabe observar a utilizao do sinal de igualdade (= =) para a comparao de variveis ou expresses. Pelo fato de o sinal de igual simples (=) ser utilizado na maioria das outras linguagens de programao, boa parte dos iniciantes em Java troca o duplo igual (= =) pelo sinal de atribuio (igual simples). Isso nem sempre acarreta erro de compilao, gerando resultados imprevisveis ao programa. Procure prestar muita ateno na sua utilizao nos programas. Caractere(s) utilizado(s) == var.equals(string) != > >= < <= Exemplo X= = Y X.equals(java) X!=Y X>Y X>=Y X<Y X<=Y

Operadores Lgicos
So operadores que permitem avaliar o resultado lgico de diferentes operaes aritmticas em uma expresso. Os operadores lgicos usados em Java so demonstrados na tabela abaixo Funo E lgico ou AND Ou lgico ou OR Negao ou NOT Caractere(s) utilizado(s) && || ! Exemplo X&&Y X||Y !X

Curso Tcnico em Informtica

Capo Bonito - SP

22

Passagem de parmetro
Uma aplicao em Java pode receber valores a partir da linha de comando (prompt), isto , no momento em que ele executado. Quando um parmetro recebido por um programa, ele pode ser manipulado internamente e usado em um procedimento qualquer. O exemplo seguinte (2.4) demonstra a utilizao da passagem de parmetros a um programa. Ele apresenta na tela as palavras que o usurio digitar no momento da execuo do programa por meio da linha de comando. class Exemplo0204 { public static void main (String args[]) { System.out.println(args[0]); // imprime o l2 argumento na tela System.out.println(args[1]); // imprime o 2- argumento na tela } } Ao executar o exemplo 2.4, o usurio deve colocar o comando no seguinte formato: C:\>java Exemplo0204 argumentol argumento2 Exemplo: C:\>java Exemplo0204 aprendendo Java Ao digitar esta linha de comando, obviamente depois de o programa ter sido compilado, o programa vai imprimir na tela os dois argumentos inseridos pelo usurio. Essas palavras so passadas ao programa por meio do vetor args existente na linha do mtodo main. A varivel args um vetor de string (na realidade string no uma simples varivel e sim um objeto que ser estudado mais frente) que possui o primeiro elemento do vetor com ndice 0 (zero). Sendo assim, cada palavra digitada na linha de comando, separada por um espao, ser armazenada em um ndice do vetor args (args[0] armazena o primeiro argumento, args[1] o segundo e assim sucessivamente). Para que este exemplo funcione corretamente, o usurio deve digitar pelo menos duas palavras
Curso Tcnico em Informtica

Capo Bonito - SP

23

na linha de comando; caso contrrio, um erro apresentado no momento da execuo, por meio da gerao de uma exceo da linguagem (item tratado mais adiante). Esse fato ocorre porque o programa foi elaborado para imprimir na tela os dois primeiros argumentos passados (args[0] e args[1]). A figura 2.3 demonstra a tela de resultado da execuo do exemplo 2.4. Observe que foram enviados dois nmeros no momento da execuo, os quais foram impressos na tela. Os argumentos passados na linha de comando sempre se referem a "variveis" do tipo string devido sintaxe utilizada no mtodo principal (main), ou seja, args um vetor de tipos string. Por este motivo, mesmo que sejam passados nmeros como parmetros, eles sero considerados caracteres.

Tela de execuo do exemplo 2.4. Para que o leitor v se acostumando linguagem, importante alterar este exemplo, trabalhando com mais de dois parmetros. Apesar de o exemplo tratado ser relativamente simples, ele se refere a uma importante caracterstica da linguagem Java: a passagem de parmetros entre mtodos.

Curso Tcnico em Informtica

Capo Bonito - SP

24

Converso de tipos
O exemplo anterior demonstrou que todos os dados recebidos como argumentos em uma aplicao referem-se a valores do tipo string. Essa caracterstica gera um inconveniente no caso de ser necessria a utilizao de valores de outro tipo. Em diversos tipos de programa em Java, preciso realizar a converso entre os diversos tipos primitivos existentes. A linguagem Java possui uma srie de classes que realizam essa tarefa. A tabela 2.6 apresenta algumas das principais formas de converso de tipos. As palavras principais usadas na converso aparecem em negrito. No decorrer do livro, diversas vezes sero utilizados esses conversores de tipos. Supondo a varivel X int x = 10 int x = 10 float x = 10.5 String x = "10" String x = "20.54" String x = "20.54" String x = "Java" int x = 10 float x = 10.35 double x = 254.34 byte x[] - (x um vetor de bytes) Converte em Float double Int Int Float double Vetor de bytes String String String String y recebe o valor convertido Float y = (float) x double y = (double) x Int y = (int) x int y = Integer.parseInt(x) Float y = Float.parseFloat(x) double y = Double.parseDouble(x) Byte b[] = x.getBytes() String y = String.valueOf(x) String y = String.valueOf(x) String y = String.valueOf(x) String y = new String (x)

As converses mais usadas em Java. O exemplo 2.5 seguinte demonstra a criao de uma classe que recebe trs valores da linha de comando do DOS (notai, nota2 e trabalho) e calcula a mdia entre as notas, utilizando o conversor de tipo string para double. Para que este exemplo seja executado com sucesso, existe a necessidade de o usurio entrar com trs ciados numricos na linha de comando, conforme apresenta o cdigo abaixo:

Curso Tcnico em Informtica

Capo Bonito - SP

25

class Exemplo0205 { public static void main (String args[]) { double nota1, nota2, trabalho, media; nota1 = Double.parseDouble(args[0]); nota2 = Double.parseDouble(args[1]); trabalho = Double.parseDouble(args[2]); media = (notal+nota2+trabalho)/3; System.out.println("Media = "+ media); } }

Funcionalidades mais importantes do exemplo 2.5: Linha 5: contm a declarao das variveis usadas na classe. Linhas 6 a 8: os parmetros so transferidos para as variveis, com seus tipos devidamente convertidos por meio de Double.parseDouble(). Linha 9: realizado o clculo da mdia. Linha 10: a mdia impressa na tela.

Tela de execuo do exemplo 2.5

Excees em Java
As excees em Java referem-se aos erros que podem ser gerados durante a execuo de um programa. Esses erros podem e devem ser controlados (tratados) dentro de um programa, pois muito comum que diversos tipos de exceo ocorram durante o processo de execuo. A linguagem Java possibilita a realizao desse controle de erros por meio da estrutura try-catchfinally e da clusula throws.

Curso Tcnico em Informtica

Capo Bonito - SP

26

Uso da estrutura try catch


A estrutura try catch foi exemplificada anteriormente e o leitor pde notar que o objetivo de sua utilizao a previso de erros de execuo. Essa estrutura tem como funo desviar a execuo de um programa caso ocorram certos tipos de erro, predefinidos durante o processamento das linhas, e evitar que o programador precise fazer testes de verificao e avaliao antes de realizar certas operaes. Quando um erro ocorre, ele gera uma exceo que pode ser tratada pelo programa. Existem muitas excees que podem ser geradas pelas mais diversas classes e enumeradas seria um processo dispendioso e desnecessrio, pois as excees que devem ser obrigatoriamente tratadas so apontadas pelo prprio compilador. Neste livro, as excees sero devidamente comentadas toda vez que uma exceo diferente for utilizada nos exemplos. A estrutura try catch possui a seguinte sintaxe: try { <conjunto de instrues> } catch (Nome da exceo) { <tratamento do erro 1> } catch (Nome da exceo) { <tratamento do erro 2> } catch (Nome da exceo) { <tratamento do erro n> } Toda vez que a estrutura try utilizada, obrigatoriamente em seu encerramento (na chave final) deve existir pelo menos um catch, a no ser que ela utilize a instruo finally, conforme abordado em seguida. A sintaxe apresentada pode ser interpretada como: tente executar o

Curso Tcnico em Informtica

Capo Bonito - SP

27

conjunto de instrues entre as chaves; se houver algum erro, execute seu tratamento no catch. Depois de tratado o erro, a execuo do programa continua a partir do final do ltimo catch. Os erros gerados pelo programa sempre esto relacionados com as classes usadas. Por exemplo, o mtodo parseFloat da classe Float (Float.parseFloat) pode gerar um erro de converso numrica (NumberFormatException), isto , esse tipo de erro pode ser tratado quando essa classe for usada no programa. No faz sentido verificar se ocorrer um erro de entrada e sada de dados (lOException) quando a classe Float for utilizada. Portanto, o tratamento de erros deve ser realizado de forma coerente, de acordo com as classes utilizadas no programa. Dica Um erro muito comum entre os iniciantes na linguagem Java usar a estrutura try sem adicionar nenhum catch. Isso gera erro de compilao, pois ao usar try, obrigatria a presena de pelo menos um catch. Outro erro comum esquecer-se de encerrar a chave do try antes de iniciar um catch. Quando isso ocorre, o compilador apresenta uma mensagem de erro do tipo "try without catch", ou seja, se o catch for inserido no try, o compilador achar que ele nem existe. Observao A linguagem Java possui dezenas de erros que podem ocorrer durante a execuo de uma classe. Sero demonstrados e comentados apenas os que forem utilizados em nossos exemplos

Uso do Bloco finally


O bloco finally faz parte da estrutura try catch, inserido geralmente aps o ltimo catch. O finally opcional e fornece um conjunto de cdigos que sempre executado, independente de uma exceo ocorrer ou no. Quando se utiliza a estrutura try sem nenhum bloco catch, o bloco finally obrigatrio, isto , existe a possibilidade da utilizao das estruturas try-catch, trycatch--finally ou ainda try-finally. O objetivo do finally manter cdigos para liberao de recursos, adquiridos em seu bloco try correspondente. Um exemplo prtico de sua utilizao ser mostrado mais adiante na manipulao de arquivos texto, em que o bloco finally ser utilizado para fechar um arquivo aps abri-lo, ou seja, liberar um recurso externo depois de adquiri-lo.

Curso Tcnico em Informtica

Capo Bonito - SP

28

Durante a execuo de um programa, caso nenhuma exceo ocorra, os blocos catch no so executados e o controle prossegue para o bloco finally, que libera o recurso e passa a executar a primeira instruo aps o bloco finally. Caso ocorra alguma exceo, a execuo do programa ser desviada para o grupo de instrues catch. A seguir, independentemente de ter havido ou no uma exceo, o controle passa para o bloco finally para liberao de recursos. Mesmo que no exista nenhuma instruo catch referente exceo gerada, o controle passa pelo bloco finally. Isso pode ser til ao desenvolvedor caso necessite controlar apenas alguns tipos de erro, pois erros diferentes dos tratados podem ser desviados para o finally. A figura abaixo esboa um fluxograma que representa a seqncia de execuo da estrutura try-catch-finally.

Seqncia de execuo try-catch-finally.

Uso da clausula throws


Em alguns momentos, pode ocorrer de o programador no querer realizar controle sobre uma exceo, isto , no desejar tratar um erro. A linguagem Java permite ao programador que um erro seja "descartado", mesmo que ele ocorra, entretanto preciso que esse fato seja informado na declarao do mtodo.

Curso Tcnico em Informtica

Capo Bonito - SP

29

Esse processo pode ser realizado pela clusula throws. Observe o exemplo 3.4. Ele apresenta uma alternativa para entrada de dados pelo teclado sem a obrigatoriedade do tratamento da exceo IOException. 1. 2. 3. 4 5. 6. 7. 8. 9. 10. } } class Exemplo0304 { public static void main (String args[]) throws IOException { BufferedReader dado; System.out.println("Entre com seu nome"); dado= new BufferedReader(new InputStreamReader(System.in)); System.out.println("Seu nome " + dado.readLine());

Funcionalidades mais importantes do exemplo Linha 3: define que a exceo IOException no ser tratada no mtodo main (throws IOException). Esse fato torna desnecessrio definir a estrutura try catch para tratar esse erro, mesmo sendo uma exceo considerada obrigatria pela linguagem Java. Experimente compilar o exemplo sem a clusula "throws IOException". Aparece a seguinte mensagem de erro: "must be caught or declared to be thrown". O compilador est informando que existem duas possibilidades para corrigir o erro: ou realiza seu tratamento (com try catch, por exemplo), ou o define como descartado, conforme fizemos neste exemplo por meio da clusula throws.

Uso da Instruo throw


Conforme comentado anteriormente, a linguagem Java possui muitas excees, incluindo sua gerao e tratamento. O objetivo deste item apenas demonstrar que um desenvolvedor Java pode criar suas prprias excees e dispar-las no momento que necessitar, mesmo que elas no ocorram durante a execuo do programa. A instruo throw (ou comando, ou ainda palavra-chave se voc preferir) utilizada para disparar uma exceo, isto , ela pode forar que uma exceo ocorra. Com a instruo throw possvel criar uma exceo prpria, dando a ela um nome qualquer. O exemplo 3.5 mostra como possvel utilizar a instruo throw para gerar uma exceo.

Curso Tcnico em Informtica

Capo Bonito - SP

30

O programa segue sua execuo normal at encontrar a linha 8 em que a exceo forada, na qual est definida por meio de throw new Exception("nome da exceo"). Na linha 10 a exceo tratada. Evidentemente, este exemplo est simples demais e bem longe de uma aplicao real; serve apenas para demonstrar a gerao de uma exceo. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. } } } } catch (Exception MinhaExcecao) { System.out.print("a linguagem Java?"); class Exemplo0305 { public static void main (String args[]) { try { System.out.print("Como aprender "); throw new Exception("MinhaExcecao");

Curso Tcnico em Informtica

Capo Bonito - SP

31

Entrada de dados pelo Teclado


Uma aplicao provavelmente no receber dados pelo prompt durante a execuo do programa. O mais comum receber os dados do usurio por meio do teclado. O exemplo 2.6 seguinte aprimora o exemplo 2.5, recebendo as notas por meio do usurio e em tempo de execuo e realizando sua validao. 1 import java.io.*; 2 class Exemplo0206 3{ 4 public static void main (String args[]) 5 { 6 String s = ""; 7 float nota1 = 0, nota2 = 0, trabalho = 0, media = 0; 8 DataInputStream dado; 9 try 10 { 11 System.out.println("Entre com a nota 1"); 12 dado = new DataInputStream(System.in); 13 s = dado.readLine(); 14 nota1 = Float.parseFloat(s); 15 System.out.println("Entre com a nota 2"); 16 dado = new DataInputStream(System.in); 17 s = dado.readLine(); nota2 = Float.parseFloat(s); 18 System.out.println("Entre com a nota do Trabalho"); 19 dado = new DataInputStream(System.in); 20 s = dado.readLine() ; 21 trabalho = Float.parseFloat(s); 22 media = (notal+nota2+trabalho)/3; 23 System.out.println("Media : "+ media); 24 } 25 catch (IOException erro) 26 { 27 System.out.println("Houve erro na entrada de dados"); 28 } 29 catch (NumberFormatException erro) 30 { 31 System.out.println("Houve erro na converso, digite apenas caracteres numricos"); 32 } 33 }
Curso Tcnico em Informtica

Capo Bonito - SP

32

Ao ser executada, a classe do exemplo 2.6 solicita os trs valores ao usurio (nota1, nota2 e trabalho) e no final demonstra a mdia dos valores digitados, conforme a figura abaixo

Figura 2.5 - Tela de execuo do exemplo 2.6 Funcionalidades mais importantes do exemplo 2.6: Linha 1: contm uma diretiva de compilao, isto , um apontamento para uma classe externa que ser usada durante o processo de compilao. A instruo import indica que determinado pacote de classes deve ser carregado no momento da compilao. Isso necessrio quando uma classe precisa utilizar recursos j definidos em outras classes. O exemplo chama o pacote java.io que contm uma srie de classes especializadas em entrada e sada de dados. usada a classe DatalnputStream que pertence ao pacote java.io. Entenda o pacote como um grupo de classes de mesmo tipo armazenadas em uma pasta qualquer. O asterisco presente em import java.io.* indica que devem ser carregadas todas as classes do pacote java.io. Uma alternativa realizar a declarao da seguinte forma: import java.io.DatalnputStream, indicando que ser utilizada apenas a classe DatalnputStream. Observao A linguagem Java possui um pacote de classes padro que carregado toda vez que uma classe compilada. Trata-se do pacote java.lang. Se esse pacote default no fosse carregado automaticamente, mesmo para enviar qualquer informao na tela por meio de System.out.println, seria necessrio declarar explicitamente a diretiva. No caso da classe System, seria necessria a seguinte declarao: import java.lang.System. No programa, * no gera overhead (sobrecarga) normalmente utilizado para reduzir o tamanho do cdigo. A utilizao do * pode gerar certa confuso, uma vez que ele deve ser usado apenas para identificar um grupo de classes e no um grupo de pacotes. Por exemplo,
Curso Tcnico em Informtica

Capo Bonito - SP

33

suponha que um programa utiliza os pacotes java.util.* (o asterisco indica todas as classes do pacote til) e java.net.* (o asterisco indica todas as classes do pacote net). No possvel utilizar java.* achando que os dois pacotes (til e net) sero incorporados ao programa. O captulo 7 aborda a manipulao de pacotes com mais detalhes. Linha 8: declara um objeto chamado dado a partir da classe DatalnputStream. No se preocupe com isso ainda. Em outro captulo sero detalhados a criao e o funcionamento de classes e objetos. No momento, entenda DatalnputStream como uma classe que possibilita a entrada de dados via teclado. Linha 9: contm o bloco try (tente). Bloco um trecho de cdigo delimitado por abre e fechachaves. O bloco try sempre atua em conjunto com um ou vrios blocos catch. No exemplo o bloco try formado pelo conjunto de todas as instrues localizadas entre as linhas 10 e 28. Linha 12: o objeto dado recebe o que foi digitado pelo usurio por meio de new DatalnputSream(System.in). Essa linha pode gerar algum tipo de erro, uma vez que manipula troca de dados entre um perifrico (teclado) e a memria. Caso ocorra algum erro, a execuo do programa ser desviada para a linha 25 que trata de erros de entrada e sada de dados. Linha 13: a varivel s recebe o contedo texto do objeto dado. Essa linha contm o mtodo readLine() da classe DatalnputStream responsvel por ler uma linha de texto que foi digitada pelo usurio e atribu-la varivel s. Observa-se que esse mtodo foi descontinuado pela Sun. Por este motivo, ao compilar a classe, aparece uma observao (Note) alertando que o mtodo deprecated, isto , trata-se de um mtodo obsoleto. No entanto, mesmo com essa observao gerada pelo compilador, a classe pode ser executada normalmente. Utilizamos o mtodo readLine() da classe DatalnputStream para poder observar o funcionamento do deprecated. A prpria Sun recomenda que seja utilizado o mtodo readLine, porm da classe BufferedReader, conforme veremos a diante Linha 14: o contedo da varivel s convertido em uma varivel numrica do tipo float por meio de FloatparseFloat. Nesse momento pode ocorrer um erro de converso, caso o usurio tenha digitado um contedo diferente de nmero. Caso ocorra algum erro, a execuo do programa desviada para a linha 33 que trata de erros de converso de tipos.
Curso Tcnico em Informtica

Capo Bonito - SP

34

Linhas 16 a 19 e 21 a 23: so praticamente idnticas s linhas 11 a 14. A diferena se refere utilizao de outras variveis. A seguir apresentado o exemplo 2.7, similar a 2.6, porm utilizando o mtodo readLine da classe BufferedReader. Observe as linhas em negrito. O resultado da execuo idntico ao exemplo 2.6. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 media = (notal+nota2+trabalho)/3;
Curso Tcnico em Informtica

import java.io.*; class Exemplo0207 { public static void main (String args [ ] ) { String s = ""; float notai = 0, nota2 = 0, trabalho = 0, media = 0; BufferedReader dado; try { System.out.println("Entre com a nota 1"); dado = new BufferedReader(new InputStreamReader(System.in)); s = dado.readLine() ; notai = Float.parseFloat(s); System.out.println("Entre com a nota 2"); dado = new BufferedReader(new InputStreamReader(System.in)); s = dado.readLine() ; nota2 = Float.parseFloat(s); System.out.println("Entre com a nota do Trabalho"); dado = new BufferedReader(new InputStreamReader(System.in)); s = dado.readLine(); trabalho = Float.parseFloat(s);

Capo Bonito - SP

35

27 28 29 30 31 32 33 34 35 36 37 38 } Exemplo 2.7 } } } }

System.out.println("Media : "+ media); catch (IOException e) { System.out.println("Houve erro na entrada de dados"); catch (NumberFormatException e) { System.out.println("Houve erro na converso, digite apenas caracteres numricos");

Apesar de os exemplos 2.6 e 2.7 funcionarem perfeitamente, eles no so adequados para o atual padro de ambiente grfico, sobretudo para o ambiente de microcomputadores. A seo seguinte apresenta uma forma mais agradvel de entrada de dados durante a execuo de uma aplicao em Java por meio da classe JOptionPane. Caixa de Dilogo para Entrada de Dados A linguagem Java dispe de uma forma grfica para receber dados do usurio. Trata-se da utilizao de caixas de dilogo, no caso a caixa gerada a partir da classe JOptionPane que ser vista em detalhes no captulo 9, seo 9.11. 0 fato de receber dados de forma grfica parece dar mais motivao aos iniciantes em Java, j que permite descartar a tela preta do prompt. Por este motivo, os exemplos seguintes utilizam essa forma para entrada de dados do usurio. O exemplo 2.8 refaz o exemplo 2.7, utilizando a classe JOptionPane para entrada de dados.

Curso Tcnico em Informtica

Capo Bonito - SP

36

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20J 21 22 23 24J 25 26 27

import javax.swing.JOptionPane; class Exemplo0208 { public static void main (String args[]) { String aux = ""; float nota1 = 0, nota2 = 0, trabalho = 0, media = 0; try { aux = JOptionPane.showInputDialog(null, "Entre com a nota 1"); nota1 = Float.parseFloat(aux); aux = JOptionPane.showInputDialog(null, "Entre com a nota 2"); nota2 = Float.parseFloat(aux); aux = JOptionPane.showInputDialog(null, "Entre com a nota do trabalho"); trabalho = Float.parseFloat(aux); media = (nota1 + nota2 + trabalho) / 3; OptionPane.showMessageDialog(null, "Mdia : "+ media); } catch (NumberFormatException e) { OptionPane.showMessageDialog(null,"Houve erro na converso, digite apenas caracteres numricos"); } System.exit(0); }

28 } Exemplo 2.8

Curso Tcnico em Informtica

Capo Bonito - SP

37

Ao ser executada, a classe do exemplo 2.8 solicita os trs valores ao usurio (nota1, nota2 e trabalho) e apresenta a mdia dos valores digitados em janelas grficas similares da figura abaixo

Telas de execuo do exemplo 2.8. Funcionalidades diferentes do exemplo 2.8 em relao ao exemplo 2.7: Linha 1: contm a diretiva de compilao referente importao da classe JOptionPane. Diferentemente do exemplo 2.7, em que foi definida a importao de todas as classes do pacote (uso do *), neste exemplo optou-se pela importao de uma nica classe, no caso a JOptionPane. Linhas 10, 13 e 16: utiliza o mtodo showInputDialog da classe JOptionPane, responsvel por abrir a caixa de dilogo e permitir a digitao do valor da nota. O valor digitado armazenado em uma varivel do tipo String chamada aux. Como JOptionPane retorna um valor do tipo String (mesmo que seja digitado um valor numrico), ele precisa ser convertido em nmero por meio de Float.parseFloat. Linha 20: contm a utilizao do mtodo showMessageDialog da classe JOptionPane responsvel por abrir a caixa de dilogo e apresentar o valor da mdia. Observe a diferena entre os mtodos showInputDialog e showMessageDialog. Enquanto o primeiro permite a digitao de um valor, o outro apenas apresenta um valor na caixa. Linha 26: utiliza System.exit(0), responsvel por encerrar a aplicao.

Curso Tcnico em Informtica

Capo Bonito - SP

38

Exerccios
1. Crie uma classe que receba trs nomes quaisquer por meio da linha de execuo do progra ma (prompt) e os imprima na tela da seguinte maneira: o primeiro e o ltimo nomes sero im pressos na primeira linha um aps o outro e o outro nome (o segundo) ser impresso na segunda linha. 2. Faa uma classe que receba a quantidade e o valor de trs produtos no seguinte formato: Quantidadel Valorl Quantidade2 Valor2 Quantidade3 Valor3. O programa deve calcular esses valores seguindo a frmula total = Quantidadel x Valorl + Quantidaote2 x VaIor2 + QuaoidadeS x ValorS. O valor total deve ser apresentado no final da execuo do programa. 3. Crie uma classe que receba a largura e o comprimento de um lote de terra e mostre rea total existente, conforme a figura 2.9. Utilize a caixa de dilogo com a classe JOptionPane para a entrada de dados. 4. Crie uma classe que receba quatro valores quaisquer e mostre a mdia e o somatrio entre eles e o resto da diviso do somatrio por cada um dos valores, conforme a figura 2.10. Utilize a caixa de dilogo com a classe JOptionPane para a entrada de dados. Para quebrar uma linha dentro da caixa de dilogo, utilize "\n".

5. Uma determinada pessoa que trabalha com piscinas precisa de um programa que calcule o valor das construes solicitadas pelos clientes, sabendo que eles sempre fornecem o comprimento, a largura e a profundidade da piscina a ser construda. Leve em considerao que o valor cobrado por m3 de gua que o preo de R$ 45.00 por m3.

Curso Tcnico em Informtica

Capo Bonito - SP

39

Comandos Condicionais
Eles so usados em todas as linguagens de programao e possibilitam que a execuo de um programa seja desviada de acordo com certas condies. Os comandos condicionais usados em Java so if-else e switch-case. Essas duas estruturas de desvio existentes na linguagem Java possibilitam executar diferentes trechos de um programa com base em certas condies.

Uso da estrutura if-else


O if, em conjunto com o else, uma estrutura que permite a seleo entre dois caminhos distintos para execuo, dependendo do resultado (verdadeiro ou falso) de uma expresso lgica. Nesse tipo de estrutura, se a condio for verdadeira, so executadas as instrues que estiverem posicionadas entre os comandos if/else. Sendo a condio falsa, so executadas as instrues que estiverem aps a instruo else. A sintaxe para a utilizao do conjunto if-else demonstrada em seguida. Observe que a condio sempre deve aparecer entre parnteses, item obrigatrio na linguagem Java. if (<Condio>) { <Instrues para condio verdadeira> } else { <Instrues para condio falsa> } Assim como a maioria das instrues em Java, o conjunto if-else deve ser utilizado com minsculas e, caso haja apenas uma instruo a ser executada, tanto no if como no else, o uso das chaves desnecessrio. Lembre-se de que as chaves so utilizadas quando se necessita que um bloco de instrues seja executado.

Curso Tcnico em Informtica

Capo Bonito - SP

40

Estrutura switch-case
A estrutura switch-case se refere a uma outra modalidade de desvio da execuo do programa de acordo com certas condies, semelhante ao uso da instruo if. Ao trabalhar com uma grande quantidade de desvios condicionais contendo instrues if, pode-se comprometer a inteligibilidade do programa, deixando-o difcil de ser interpretado. A estrutura switch-case possibilita uma forma mais adequada e eficiente de atender a esse tipo de situao, constituindose uma estrutura de controle com mltipla escolha. A estrutura switch-case equivale a um conjunto de instrues if encadeadas, fornecendo maior inteligibilidade e eficincia durante a execuo. Sua sintaxe a seguinte: switch (<expresso>) { case 1: instrues; break; case 2: instrues; break; case 3: instrues; break; default:instrues; } Na primeira linha do switch avaliado o resultado da expresso, que normalmente se refere a uma varivel simples. O resultado dessa expresso comparado nas diretivas case, executando o bloco de instrues quando a expresso coincidir com o valor colocado na frente do case. Em outras palavras, supondo que o valor da expresso seja igual a 2, sero executadas as instrues localizadas entre case 2: e break. A cada case o programa compara o valor da expresso com o valor colocado na frente do case. Caso os valores sejam iguais, todas as instrues so executadas at que se encontre uma instruo break, que encerra o switch e faz a execuo do programa desviar para o ponto aps a chave de encerramento do switch. O programa percorre todas as diretivas case at que uma delas seja igual expresso inserida no switch. Caso nenhuma diretiva case possua o valor correspondente da expresso, sero executadas as instrues localizadas na diretiva default que opcional.

Curso Tcnico em Informtica

Capo Bonito - SP

41

Uso do getMessage e printStackTrace


Em determinadas aplicaes torna-se necessrio descobrir o tipo de erro e em que linha do programa ele ocorreu. Para reconhecer esses erros, so utilizados dois mtodos: getMessage e printStackTrace. O mtodo getMessage serve para consultar e retornar uma string armazenada em uma determinada exceo. J o mtodo printStackTrace retorna o tipo de exceo gerado e informa em que linha do programa ocorreu o erro. O exemplo 3.6 traz uma pequena demonstrao, com fins didticos, para que o leitor compreenda mais claramente a utilizao dos mtodos getMessage e printStackTrace. 1. class Exemplo0306 2. { 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. } Funcionalidades mais importantes do exemplo 3.6: Linha 8: produz uma exceo de diviso por zero, uma vez que a varivel y possui contedo zero. Essa exceo ser tratada na linha 10 por meio de catch (Exception erro). Note que no foi definida a exceo aritmtica ArithmeticException, como feito anteriormente. Quando for utilizado Exception em um bloco catch, qualquer exceo gerada, isto , qualquer tipo de exceo ser tratado nesse bloco. Isso equivale a dizer que Exception pode ser considerado uma exceo default, caso o desenvolvedor no saiba os tipos de erro que podem ser gerados durante a execuo de um programa.
Curso Tcnico em Informtica

public static void main (String args[]) { int x=10, y=0, z=0; try { z = x / y; // gera uma exceo aritmtica de diviso por zero } catch (Exception erro) { System.out.println(erro.getMessage()); // mostra a mensagem do erro erro.printStackTrace(); } } // mostra a exceo e a linha onde ocorreu o erro

Capo Bonito - SP

42

Linha 12: o mtodo getMessage se encarrega de retornar o erro ocorrido (no caso: / by zero diviso por zero). Linha 13: o mtodo printStackTrace retorna diversas informaes: o tipo de exceo, a mensagem de erro, o nome da classe que gerou o erro, o nome do mtodo em que o erro ocorreu e o nmero da linha do programa. No exemplo so retornadas as seguintes informaes: java.lang.ArithmeticException (tipo da exceo), / by zero (mensagem de erro), Exemplo0306 (nome da classe), main (nome do mtodo) e 8 (linha em que ocorreu o erro).

Laos de Repetio
Os laos de repetio {looping) formam uma importante estrutura nas linguagens de programao por possibilitarem a repetio da execuo de um bloco de instrues em um programa. Eles determinam que um certo bloco seja executado repetidamente at que uma condio especfica ocorra. O mtodo da repetio uma das prticas mais usadas em programao, possibilitando a criao de contadores, temporizadores, rotinas para classificao, obteno e recuperao de dados. Em uma aplicao, provavelmente sempre existir pelo menos um lao de repetio. As principais formas de criao de laos de repetio em Java so construdas a partir das estruturas for e while.

Uso do Lao for


A instruo for um tipo de contador finito, isto , ela realiza a contagem de um valor inicial conhecido at um valor final tambm conhecido. Seu funcionamento realizado por uma varivel de controle do tipo contador, que pode ser crescente ou decrescente e possui a seguinte sintaxe: for (inicializao; condio; incremento ou decremento) Em que: Inicializao: o valor inicial da varivel de controle do lao. Condio: a varivel que controla a continuao do lao. Deve conter o valor final que a varivel de controle pode assumir dentro do lao.

Curso Tcnico em Informtica

Capo Bonito - SP

43

Incremento ou decremento: o passo com que a varivel de controle ser acrescida ou decrescida. Esse incremento pode ser realizado por meio de uma varivel inteira ou com ponto flutuante, permitindo pequenos incrementos decimais, caso seja necessrio. Exemplo: for (int x=0; x<10; x++) { <conjunto de instrues> } Esta sintaxe pode ser interpretada como: inicialize x com zero e repita o conjunto de instrues enquanto o valor de x for menor que 10. Cada vez que o conjunto de instrues executado, o valor do x incrementado (x++). Observe que a varivel x pode ser declarada e inicializada na prpria estrutura do for. Quando isso ocorre, a varivel passa a ter escopo local ao for, isto , seu valor reconhecido apenas dentro da estrutura em que foi declarada (entre as chaves de abertura e encerramento). Aps o encerramento do lao, a varivel perde sua referncia e no pode mais ser usada, salvo se declarada novamente. Se voc desejar usar o valor de uma varivel aps o encerramento do lao, basta declar-la antes de iniciar o lao, isto , antes da linha que define o for. Outros exemplos: for (double x=5; x<=10; x=x+0.5) Conta de 5 at 10 com passo de 0.5, ou seja: 5.0 -5.5-6.0-6.5-.................9.5-10.0. for (nt x=10; x>=0; x=x-2) Conta de 10 at 0 com passo de -2, ou seja: 10-8-6-4 2-0. for (int x=a;x<=b;x++) Conta de a at b com passo de 1.

Uso do Lao while


O while outro lao condicional, isto , um conjunto de instrues que so repetidas enquanto o resultado de uma expresso lgica (uma condio) avaliado como verdadeiro. Veja sua sintaxe em seguida:

Curso Tcnico em Informtica

Capo Bonito - SP

44

while (<condio>) { <conjunto de instrues> } O comando while avalia o resultado da expresso (condio) antes de executar as instrues do bloco {}, assim possvel que as instrues nunca sejam executadas, caso a condio seja inicialmente falsa. Um problema tpico, relacionado avaliao da condio while. o lao infinito. Caso a condio nunca se torne falsa, o lao ser repetido infinitamente. H outro tipo de lao condicional, o chamado do-while, que bem parecido com o while, porm o conjunto de instrues executado antes da avaliao da expresso lgica. Isso faz com que essas instrues sejam executadas pelo menos uma vez. Veja como a sintaxe do do-while bem parecida com a do while: do { <conjunto de instrues> } while (<condio>); A utilizao da estrutura while ou do-while fica a critrio do desenvolvedor, pois com as duas formas possvel chegar a resultados semelhantes.

Exerccios
1. Crie uma classe que receba dois valores pelo teclado (use JOptionPane): o valor de um produto e um cdigo de aumento, segundo a tabela abaixo: Cdigo 1 3 4 8 % aumento 15 20 35 40

Utilizando a estrutura switch-case, mostre na tela o novo valor do produto depois de acrescida a porcentagem correspondente. Realize tambm o controle dos possveis erros que podem ocorrer durante a execuo do programa.

Curso Tcnico em Informtica

Capo Bonito - SP

45

2. Faa uma classe que receba trs nmeros inteiros e mostre o maior dentre eles. Observao: para quebrar uma linha dentro da caixa de dilogo, utilize "\n". 3. Apresente uma classe que mostre a soma dos cem primeiros nmeros inteiros (1+2 + 3 + 4 5 + 6 + 7 + ........ + 97 + 98 + 99 + 100) 4. Construa uma classe que calcule o produto dos inteiros mpares de 1 a 15 e exiba o resultado 5. Crie uma classe que receba dois nmeros inteiros e realize a contagem pausadamente (na tela de prompt) do primeiro at o segundo nmero, com passo um. 6. Elabore uma classe para clculo do salrio lquido em que trs valores devem ser informados pelo usurio na linha de comando: a quantidade de horas trabalhadas, o salrio-hora e o nmero de dependentes. O programa deve mostrar na tela as informaes que esto no lado esquerdo da tabela seguinte. Os clculos correspondentes aparecem no lado direito. Informao Salrio Bruto Desconto INSS Desconto IR Salrio Lquido Calculo Horas trabalhadas * Salrio Hora + (50 * N- Dependentes) Se Salrio Bruto <= 1000 INSS= Salrio Bruto * 8.5/100 Se Salrio Bruto > 1000 INSS= Salrio Bruto * 9/100 Se Salrio Bruto <= 500 IR=0 Se Salrio Bruto > 500 e <= 1000 IR= Salrio Bruto * 5/100 Se Salrio Bruto > 1000 IR= Salrio Bruto * 7/100 Salrio Bruto-INSS-IR

Funes Matemticas
A linguagem Java possui uma classe com diversos mtodos especializados em realizar clculos matemticos. Para realizar esses clculos, so utilizados os mtodos da classe Math que devem apresentar a seguinte sintaxe: Math.<nome do mtodo> (<argumentos ou lista de argumentos>) No necessrio importar a classe Math em um programa para poder utilizar seus recursos, pois ela j faz parte do pacote java.lang, importado automaticamente pelo compilador do Java.

Curso Tcnico em Informtica

Capo Bonito - SP

46

A classe Math define duas constantes matemticas, sendo Math.PI - o valor de pi (71 = 3.14159265358979323846) e Math.E que se refere ao valor da base para logaritmos naturais (2.7182818284590452354). A seguir, so apresentados os mtodos mais comuns da classe Math. Mtodo Ceil Este mtodo tem como funo realizar o arredondamento de um nmero do tipo double para o seu prximo inteiro. Sua sintaxe a seguinte: Math.ceil(<valor do tipo double>) O exemplo 4.1 demonstra a utilizao do mtodo ceil. 1. class Exemplo0401 2. { 3. 4. 5. 6. 7. 8. 9. 10. } No exemplo 4.1 o mtodo ceil da classe Math chamado para realizar o arredondamento do nmero tipo double entre parnteses, representado neste caso por uma varivel (linhas 6 a 8). As variveis entre parnteses compem o argumento (do tipo double) do mtodo ceil. Math.ceil que retorna um resultado arredondado, mantendo o tipo do dado, isto , a varivel retornada tambm ser do tipo double, porm mostrando apenas a parte inteira do nmero verificado. O tipo double o nico que pode ser utilizado, uma vez que o mtodo ceil no aceita o tipo float. Mtodo floor Assim como ceil, o mtodo floor tambm utilizado para arredondar um determinado nmero, mas para o seu inteiro anterior. Sua sintaxe idntica do mtodo ceil: Math.floor(<valor do tipo double>) } public static void main (String args[]) { double a = 5.2, b = 5.6, c = -5.8; System.out.println("Arredondando 5.2 = " + Math.ceil(a)); System.out.printlri("Arredondando 5.6 = " + Math.ceil(b)); System.out.println("Arredondando -5.8 = " + Math.ceil(c));

Curso Tcnico em Informtica

Capo Bonito - SP

47

O exemplo 4.2 mostra o uso do mtodo floor: 1. class Exemplo0402 2. { 3. 4. 5. 6. 7. 8. 9. 10. } } public static void main (String args[]) { double a = 5.2, b = 5.6, c = -5.8; System.out.println("Arredondando 5.2 = " + Math.floor(a)) System.out.println("Arredondando S.6 = " + Math.floor(b)) System.out.println("Arredondando -5.8 = " + Math.floor(c))

Mtodo max Utilizado para verificar o maior valor entre dois nmeros, que podem ser do tipo double, float, int ou long. A sua sintaxe a seguinte: Math.max(<valorl>,<valor2>) O exemplo 4.3 mostra a utilizao do mtodo max: 1. class Exemplo0403 2. { 3. 4. 5. 6. 7. 8. 9. 10. 11. } Observe que o clculo do maior nmero pode ocorrer entre dois nmeros do mesmo tipo de dados ou no, ou seja, pode-se obter o maior entre dois nmeros do tipo double, entre dois nmeros do tipo int ou entre um do tipo double e outro do tipo int.
Curso Tcnico em Informtica

public static void main (String args[]) { int a = 10, b = 15; double c = -5.9, d = -4.5; System.out.println("O maior entre 10 e 15 : " + Math.max(a,b)); System.out.println("O maior entre -5.9 e -4.5 : " + Math.max(c,d)); System.out.println("O maior entre 10 e -5.9 : " + Math.max(a,c)); }

Capo Bonito - SP

48

Mtodo min 0 mtodo min fornece o resultado contrrio do mtodo max, sendo ento utilizado para obter o valor mnimo entre dois nmeros. Do mesmo modo que o mtodo max, esses nmeros tambm podem ser do tipo double, float, int ou long. A sua sintaxe a mesma do mtodo max, mudando apenas para Math.min: Math.min(<valorl>,<valor2>) O exemplo 4.4 utiliza-se dos mesmos valores do exemplo anterior (exemplo 4.3), porm troca o mtodo max() pelo mtodo min(). 1. class Exemplo0404 2. { 3. 4. 5. 6. 7. 8. 9. 11. } public static void main (String args[]) { int a = 10, b = 15; double c = -5.9, d = -4.5; System.out.println("O menor entre 10 e 15 : " + Math.itiin(a,b) ) ; System.out.println("O menor entre -5.9 e -4.5 : " + Math.min(c,d)); System.out.println("O menor entre 10 e -5.9 : " + Math.min(a,c)); ,10. }

Mtodo sqrt Quando h necessidade de calcular a raiz quadrada de um determinado nmero, utiliza-se o mtodo sqrt, porm o nmero do qual se deseja extrair a raiz quadrada deve ser do tipo double e o resultado obtido tambm ser um nmero do tipo double. Veja sua sintaxe: Math.sqrt(<valor do tipo double>)

Curso Tcnico em Informtica

Capo Bonito - SP

49

O exemplo 4.5 mostra a utilizao do mtodo sqrt. 1. class Exemplo0405 2. { 3. 4. 5. 6. 7. 8. 9. } Assim como na matemtica, no possvel realizar o clculo da raiz quadrada com nmeros negativos. Caso isso seja realizado, retornado um valor NaN (valor inexistente). ' Mtodo pow Assim como possvel extrair a raiz quadrada de um nmero, tambm possvel fazer a operao inversa, ou seja, elevar um determinado nmero ao quadrado ou a qualquer outro valor de potncia. A potenciao de um nmero pode ser calculada pelo mtodo pow. Os nmeros a serem usados no clculo, isto , o valor da base e da potncia, devem ser do tipo double. Sua sintaxe a seguinte: Math.pow(<valor da base>,<valor da potncia>) O exemplo 4.6 demonstra o uso do mtodo pow. 1. class Exemplo0406 2. { 3. public static void main (String args[]) 4. { 5. double base = 5.5, potncia = 2; 6. System.out.println("5.5 elevado a 2 7. System.out.println("25 elevado a 0.5 8. System.out.println("5678 elevado a 0 9. } 10. }
Curso Tcnico em Informtica

public static void main (String argst]) { double a = 900, b = 30.25; System.out.println("A raiz quadrada de 900 : " + Math.sqrt(a)); System.out.println("A raiz quadrada de 30.25 : " + Math.sqrt(b)); }

Capo Bonito - SP

50

Mtodo random utilizado para gerar valores de forma aleatria. Toda vez que o mtodo random chamado, ser sorteado um valor do tipo double entre 0.0 e 1.0 (o valor 1 nunca sorteado). Nem sempre essa faixa de valores suficiente numa aplicao real. Por exemplo, para simular o sorteio de nmeros entre 0 e 99 para um jogo de loteria qualquer, torna-se necessrio o sorteio de nmeros inteiros aleatrios no intervalo de 0 a 99. Para que esses nmeros possam ser sorteados, preciso utilizar o operador de multiplicao (*) em conjunto com o mtodo random. Com isso torna-se possvel definir o intervalo em que o nmero ser sorteado. O conversor (int) tambm pode ser usado para truncar a parte do ponto flutuante (a parte depois do ponto decimal) para que um nmero inteiro seja gerado, da seguinte forma: (int) (Math.random() * 100) Com isso seriam gerados nmeros inteiros entre 0 e 99, atendendo plenamente necessidade exposta. O exemplo 4.7 demonstra o uso do mtodo random para simular a gerao de cinco cartes de loteria com seis nmeros cada. 1. class Exemplo0407 2. { 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. } } } System.out.println(); } { int num = (int) (Math.random() * 100); System.out.print(num+" "); public static void main (String args[]) { for(int qtd=l;qtd<=5;qtd++) { for(int x=l;x<=6;x++)

Curso Tcnico em Informtica

Capo Bonito - SP

51

Formatao com a Classe DecimalFormat


Os clculos matemticos, em especial os que envolvem multiplicao e diviso, podem gerar resultados com muitas casas decimais. Isso nem sempre necessrio e esteticamente correto, pois apresentar um resultado com muitas casas decimais no muito agradvel e legvel maioria dos usurios. Por exemplo: considere duas variveis do tipo double x=1 e y=6. Ao realizar a diviso de x por y, aparece na tela o resultado 0.16666666666666666. Esse resultado no o mais adequado para se apresentar na tela. Seria mais conveniente mostrar o resultado formatado com duas ou trs casas decimais. Para realizar a formatao, necessrio definir um modelo de formatao, conhecido pelo nome de pattern. Considere pattem como o estilo de formatao que ser apresentado sobre um valor numrico. Em outras palavras, voc ter de informar ao compilador qual estilo de formatao deve ser usado para apresentar um nmero. Para definir o pattem, so usados caracteres especiais. A tabela 4.1 apresenta os caracteres mais usados. Caractere 0 # . Significado
Imprime o dgito normalmente, ou caso ele no exista, coloca 0 em seu lugar. Exemplo: Sejam as variveis int x=4, y=32 e z=154, ao usar o pattern "000", o resultado impresso na tela seria x -> 004, y -> 032 e z -> 154. Imprime o dgito normalmente, desprezando os zeros esquerda do nmero. Exemplo: Sejam as variveis double x=0.4 e y=01.34, ao usar o pattern "##.##", o resultado impresso na tela seria x -> .4, y -> 1.34. Separador decimal ou separador decimal monetrio (depende do sistema usado). Sinal de nmero negativo.

Curso Tcnico em Informtica

Capo Bonito - SP

52

Para realizar a formatao de nmeros, vamos usar a classe DecimalFormat. 1. import java.text.DecimalFormat; 2. class Exemplo0408 3. { 4. 5. 6. 7. 8. 9. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. } 31. } String valorEmReais = "2583.75"; df.appIyPattern("R$ #,##0.00"); System.out.println("Valor em Reais: " + df.format(Double.parseDouble (valorEmReais))); double peso = 7 0.25; df.applyPattern("#0.00"); System.out.println("Peso : " + df.format(peso)); float altura = 1.74f; df.appIyPattern("#0.00"); System.out.println("altura : " + df.format(altura)); long estoque = 198564; df.appIyPattern("#,##0,000"); System.out.println("Estoque : " + df.format(estoque)); public static void main(String args[]) { DecimalFormat df = new DecimalFormat(); short idade = 38; df.appIyPattern("000"); System.out.println("Idade : " + df.format(idade)); 10. int quantidade = 9750; df.appIyPattern("#0,000"); System.out.println("Quantidade : " + df.format(quantidade));

Curso Tcnico em Informtica

Capo Bonito - SP

53

Funcionalidades mais importantes do exemplo 4.8: Linha 1: importa a classe DecimalFormat do pacote java.text, uma vez que ela no pertence ao conjunto de classes defaulto pacote java.lang. Linha 6: declara um objeto (df) da classe DecimalFormat que ser usado para realizar a formatao dos nmeros pelo mtodo format (df.format). Essa linha poderia conter a definio do pattern no momento da inicializao do objeto df. Uma definio vlida pode ser: DecimalFormat df = new DecimalFormat ("000"). possvel observar que a definio do pattern pode ser realizada dentro dos parnteses. Linha 8: contm a definio do pattern pelo mtodo appIyPattern (df.applyPattem("000")). Essa instruo define que todos os nmeros impressos a partir do objeto df sero formatados com trs dgitos, mesmo que eles possuam menos que isso, conforme exemplificado na tabela anterior. As linhas 12,16,20,24 e 28 redefinem o pattern, aplicando novas formataes ao objeto df, isto , aos nmeros que sero impressos pelo mtodo format. Linha 29: apresenta uma maneira de formatar um nmero a partir de um formato string. Observe que a varivel valorEmReais armazena um contedo do tipo string, que no pode ser manipulado diretamente pela classe DecimalFormat. Para que isso seja possvel, o valor string convertido no tipo double pelo mtodo parseDouble da classe Double (Double.parseDouble(valorEmReais)).

Internacionalizao com a Classe Locale


A linguagem Java tem como caracterstica ser utilizada no mundo todo. Em funo disso, um mesmo software feito em Java pode ser utilizado por usurios espalhados pelo globo. Cada pas ou regio adota certos formatos para representao monetria, apresentao de datas etc, os quais so definidos pelo sistema operacional da mquina e ficam armazenados como configuraes locais. O separador de decimais, por exemplo, pode ser um ponto (.) ou uma vrgula (,) dependendo da regio. A classe Locale permite identificar certas propriedades da mquina em que o software executado. Desta forma, torna-se possvel utilizar os recursos do Java, configurando determinados formatos de maneira automtica.

Curso Tcnico em Informtica

Capo Bonito - SP

54

Observe o exemplo 4.9 seguinte. 1. import java.text.DecimalFormat; 2. import java.til.Locale; 3. 4. class Exemplo0409 5. { 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. } Funcionalidades mais importantes do exemplo 4.9: Linhas 1 e 2: importam as classes DecimalFormat do pacote java.text e Locale do pacote java.til, ambas essenciais ao funcionamento do exemplo. Linha 8: declara um objeto (df) da classe DecimalFormat que ser usado para realizar a formatao do valor monetrio, dependendo da regio em que a classe executada. } } System.out.println("valor: " + df.format(valor)); public static void main(String args[]) { DecimalFormat df = new DecimalFormat(); Locale local = Locale.getDefault(); System.out.println("Configuraes do Sistema Operacional:"); System.out.println("Sigla: " + local.getCountry()); System.out.println{"Pais: " + local.getDisplayCountry{)); System.out.println("Lingua: " + local.getDisplayLanguage()); System.out.println("Teclado: " + local.getDisplayName()); System.out.printIn(""); double valor = 1370.25; if (local.getCountry ().equals("BR")) { d.applyPattern("R$ #,##0.00");

Curso Tcnico em Informtica

Capo Bonito - SP

55

Linha 9: declara um objeto (local) da classe Locale que ser usado para identificar as configuraes definidas no sistema operacional da mquina do usurio. Nessa linha o objeto local passa a armazenar todas as configuraes default do sistema operacional. Linha 11: possui o mtodo getCountry que retorna a sigla do pas configurado no sistema operacional. No caso de a localidade estar configurada como Brasil, aparece a sigla BR na tela. Linha 12: contm o mtodo getDisplayCountry que retorna o nome do pas configurado no sistema operacional. No caso aparece o nome Brasil. Linhas 13 e 14: contm os mtodos getDisplayLanguage e getDisplayName que retornam, respectivamente, o idioma usado no pas e a linguagem configurada no teclado. Linha 17: contm uma comparao que verifica se o local configurado na mquina se refere ao Brasil (sigla BR). Em caso positivo, aplica um pattern (linha 19) para formatar um valor monetrio em reais, de acordo com o padro brasileiro. Outras comparaes semelhantes, de outros pases, podem existir para adequar o formato monetrio regio. Linha 21: imprime na tela o valor de acordo com o formato estabelecido (se existissem diversas comparaes para pases diferentes).

Funes com Strngs


Uma string um tipo texto que corresponde unio de um conjunto de caracteres. Em Java, as strings so instncias da classe String, isto , geram objetos que possuem propriedades e mtodos, diferente dos tipos primitivos como int, float, double etc. Essas strings podem ser manipuladas de vrias formas. Por exemplo, possvel verificar seu comprimento, retirar um pedao dela, acessar ou mudar caracteres individuais. As strings constituem uma cadeia de caracteres entre aspas. Exemplo: frase = "Linguagem Java". Da mesma forma que as funes matemticas, existem diversos mtodos para manipulao de strings, os quais acompanham a seguinte sintaxe: <Nome da string>.<nome-do-metodo>(<argumentos>)

Curso Tcnico em Informtica

Capo Bonito - SP

56

A seguir, so apresentados os mtodos mais comuns (e mais usados) da classe String. Mtodo length O mtodo length utilizado para retornar o tamanho de uma determinada string, incluindo tambm os espaos em branco presentes nela. Esse mtodo retorna sempre um valor do tipo int. Veja sua sintaxe: <string>.length() Na prtica, o mtodo length muito utilizado quando necessrio ler uma varivel String do comeo at o final, tanto para a busca de caracteres ou palavras quanto para a criao de banners, algo extremamente usado na Internet. O exemplo 4.10 mostra o uso do mtodo length. 1. class Exemplo0410 2. { 3. 4. 5. 6. 7. 8. 9. 10. 11. } No exemplo 4.10, a linha 5 contm a declarao da string frase. Cabe uma observao: conforme citado anteriormente, na realidade frase no uma varivel e sim um objeto, pois uma varivel no pode conter mtodos atrelados a ela; somente os objetos que possuem mtodos para manipulao de suas informaes. A linha 7 contm a utilizao de length por meio de frase.length(), isto , retorna o nmero de caracteres armazenado em frase (no caso 15). Em vez de usar frase.length() poderia ser utilizada a forma literal do seguinte modo: tamanho="Aprendendo Java".length(). O resultado seria o mesmo. Da mesma forma que as funes matemticas, existem diversos mtodos para manipulao de strings, os quais acompanham a seguinte sintaxe: <Nome da string>.<nome-do-metodo>(<argumentos>)
Curso Tcnico em Informtica

public static void main (String args[]) { String frase = "Aprendendo Java"; int tamanho; tamanho = frase.length(); System.out.println("String: " + frase); System.out.println("O tamanho da string : " + tamanho); }

Capo Bonito - SP

57

Mtodo charAt Usando para retornar um caractere de determinada string de acordo com um ndice especificado entre parnteses. Esse ndice refere-se posio do caractere na string, sendo 0 (zero) o ndice do primeiro caractere, 1 (um) o do segundo e assim por diante. O mtodo charAt til quando for necessrio verificar a existncia de um caractere na string. Por exemplo: suponha que uma determinada string s possa conter nmeros - a funo charAt pode ser usada para verificar a existncia de dgitos numricos nessa string. A sintaxe do mtodo charAt a seguinte: <string>.charAt(<ndice>) O exemplo 4.11 mostra o uso do mtodo charAt. 1. class Exemplo0411 2. { 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. } } } System.out.println(); public static void main (String args[]) { String frase="Aprendendo Java"; System.out.println("String = " + frase); System.out.println{"Caracter = " + frase.charAt(5)); System.out.print("Trecho = "); for (int i=ll;i<=14;i++) { System.out .print (frase.charAt (i)) ;

Curso Tcnico em Informtica

Capo Bonito - SP

58

Mtodos toUpperCase e toLowerCase Os mtodos toUpperCase e toLowerCase so utilizados para transformar todas as letras de uma determinada string em maisculas ou minsculas. O mtodo toUpperCase transforma todos os caracteres de uma string em maisculos. O mtodo toLowerCase transforma todos os caracteres de uma string em minsculos. Sua sintaxe a seguinte: <string>.toUpperCase() ou <string>.toLowerCase() O exemplo 4.12 demonstra o uso dos mtodos toUpperCase e toLowerCase e dispensa maiores detalhes, dada a simplicidade dessas duas funes. A nica observao se refere ao fato de que esses mtodos no alteram o valor original da string. Mesmo aplicando os mtodos das linhas 6 e 7, o contedo das variveis palavral e palavra2 permanece o mesmo, isto , a transformao ocorre apenas com fins de impresso em tela. Se for necessrio alterar o contedo de uma varivel string, substituindo seu valor original pelo transformado, a prpria varivel deve receber o valor de sua transformao, como, por exemplo, palavral = palavra.toLowerCaseQ. 1. class Exemplo0412 2. { 3. 4. 5. 6. 7. 8. 9. } 10. } Mtodo substring Ele retorna a cpia de caracteres de uma string a partir de dois ndices inteiros especificados, funcionando basicamente da mesma forma que o mtodo charAt dentro de um lopping, conforme indica o item 4.2.2. A sintaxe de substring a seguinte: <string>.substring(<ndice inicial>,[<ndice final>]) 0 primeiro argumento especifica o ndice a partir do qual se inicia a cpia dos caracteres (da mesma forma que charAt, o ndice inicia-se em 0). O segundo argumento opcional e especifica public static void main (String args[]) { String palavral = "ARROZ", palavra2 = "batata"; System.out.println("ARROZ em minscula = " + palavral.toLowerCase()); System.out.println("batata em maiscula = " + palavra2.toUpperCase()); System.out.printIn("SaLaDa em minscula = " + " SaLaDa". toLowerCase O) ;

Curso Tcnico em Informtica

Capo Bonito - SP

59

o ndice final, em que termina a cpia dos caracteres, entretanto o ndice final deve especificar um ndice alm do ltimo caractere. Para melhor entendimento do mtodo substring, considere a varivel frase com o seguinte contedo: Frase ndice
L 0 I 1 N 2 G 3 U 4 A 5 G 6 E 7 M 8 9 J 10 A 11 V 12 A 13 14

Cada caractere de uma varivel string indexado a partir do 0 (zero). Vamos apresentar alguns exemplos: 1. String x = frase.substring(10) -> x recebe o contedo "JAVA", pois ao passar apenas o primeiro argumento para o mtodo substrng, ele retorna da posio informada (no caso 10, a posio da letra J) at o ltimo caractere da string. 2. String x = frase.substring(3) > x recebe o contedo "GUAGEM JAVA", isto , do caractere de ndice 3 at o ltimo caractere da string frase. 3. String x = frase.substring(3,9) -> x recebe o contedo "GUAGEM", isto , do caractere de ndice 3 at o caractere de ndice 8 (9-1). 4. String x = frase.substring(0,1) -> x recebe o contedo "L", isto , do caractere de ndice 0 at o caractere de ndice 0 (1-1). 5. String x = frase.substring(10,14) -> x recebe o contedo "JAVA", isto , do caractere de ndice 10 at o caractere de ndice 13 (14-1). Observe que o resultado deste exemplo igual ao do exemplo 1. Se os ndices especificados estiverem fora dos limites da string, gerado o erro StringlndexOutOfBoundsException. No exemplo, se voc usar frase.substring(10,20), ocorre o erro citado, uma vez que no existe ndice 20. O exemplo 4.13 apresenta um cdigo que usa o mtodo substrng para separar as palavras de uma frase pela manipulao de seus ndices.

Curso Tcnico em Informtica

Capo Bonito - SP

60

1. class Exemplo0413 2. { 3. 4. 5. 6. 7. 8. 9. 10. 1112. } } public static void main (String args[]) { String frase = "Eu gosto de java!"; System.out.println("Separando uma frase em palavras:"); System.out.println("Palavra 1: " + frase.substring(0,2)); System.out.println("Palavra 2: " + frase.substring(3,8)); System.out.println("Palavra 3: " + frase.substring(9,11)); System.out.println("Palavra 4: " + frase.substring(12));

Mtodo trim Seu objetivo remover todos os espaos em branco que aparecem no incio e no final de uma determinada string. So removidos apenas os espaos do incio e do fim da string; no so removidos os espaos entre as palavras. Sua sintaxe a seguinte: <string>.trim() O exemplo 4.14 mostra a utilizao do mtodo trim: 1. class Exemplo0414 2. { 3. 4. 5. 6. 7. 8. 9. } } public static void main (String args[]) { String frase = " Jesus Cristo: o rei dos reis. "; System.out.println("Com espaos: " + "*" + frase + "*"); System.out.println("Sem espaos: " + "*" + frase.trim () + "*");

Curso Tcnico em Informtica

Capo Bonito - SP

61

A varivel frase armazena uma string com espaos em branco no incio e no final. Quando no utilizado o mtodo trim, os espaos permanecem na strng; em contrapartida, ao usar trim, os espaos desaparecem. O mtodo frase.trim() no retirou realmente os espaos em branco da varivel, ou seja, apenas foi mostrado na tela um trim da varivel, que conseqentemente exibe-a sem os espaos em branco, mas a varivel em si ainda continua com os espaos no seu incio e no seu final. Para que realmente os espaos sejam retirados, necessrio que o resultado de trim seja atribudo prpria varivel, como a seguinte instruo: frase=frase.trim(). Isso tornaria a varivel livre dos espaos em branco. Mtodo replace utilizado para substituio de caracteres, ou grupo de caracteres, em uma determinada strng. Para seu funcionamento, necessrio informar o(s) caractere(s) que deseja substituir e por qual(is) caractere(s) ele(s) ser(o) substitudo(s). Caso no haja na strng nenhuma ocorrncia do caractere a ser substitudo, a strng original retornada, isto , no ocorre nenhuma alterao. Veja sua sintaxe: <string>.replace(<caracteres a serem substitudos>,<substituio>) 1. class Exemplo0415 2. { 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. } No exemplo 4.15, a linha 5 declara uma String (frase1) que recebe uma frase. A linha 6 armazena essa frase na varivel frase2, porm sem os espaos em branco, uma vez que o mtodo replace foi usado para substituir todos os espaos por vazios ("" por""). As linhas 8 e 9
Curso Tcnico em Informtica

public static void main (String args[]) { String frase1 = "o macaco gosta de banana"; String frase2 = frasel.replace(" ",""); System.out.println("Frase 1: " + frase1); System.out.println("Frase 2: " + frase2); System.out.println("Frase 3: " + frase1.replace(" ", "_")); System.out.println("Frase 4: " + frase1.replace("a", "u")); System.out.println("Frase 5: " + frase1.replace("na", "NA"));

Capo Bonito - SP

62

substituem um caractere por outro ("" por"_" e "a" por "u") e a linha 10 substitui uma palavra por outra ("na" por "NA"). Da mesma forma que trim, o mtodo replace no altera o contedo da varivel. Para fazer com que uma varivel receba o resultado de uma troca de caracteres, faa como apresentado na linha 6. Mtodo valueOf O mtodo valueOf usado para converter diversos tipos de dados em strings. Esse mtodo aceita vrios tipos de argumento (nmeros ou cadeia de caracteres) e transforma-os em strings. Este item aborda apenas a converso de tipos numricos em strings, uma vez que o estudo de arrays (cadeia de caracteres) assunto do captulo 7. Uma das sintaxes possveis para o mtodo valueOf : String.valueOf (<nome da varivel a ser convertidas-) Para facilitar o entendimento, o exemplo 4.16 demonstra a converso de vrios tipos numricos com o uso do mtodo valueOf. 1. class Exemplo0416 2. { 34. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14 . 15. 16. } 17. } { String x = ""; int a = 11; long b = 222; float c = 3333; double d = 4.444; x = x + String.valueOf(a) + " - "; x = x + String.valueOf(b) + " - "; x = x + String.valueOf(c) + " - "; x = x + String.valueOf(d); System.out.println("Valores convertidos:"); System.out.println(x); public static void main (String args[])

Curso Tcnico em Informtica

Capo Bonito - SP

63

No exemplo 4.16 todas as variveis numricas (a, b, c, d) declaradas nas linhas 6 a 9 so convertidas e acumuladas em uma varivel Strng (x) nas linhas 10 a 13. Esta no a funcionalidade mais importante do mtodo valueOf, uma vez que o mesmo resultado pode ser alcanado sem sua utilizao, por meio da concatenao das variveis com o operador de concatenao (+), conforme demonstrado em seguida: String x = a + " - " + b + " - " + c + " - " + d;

Mtodo indexOf O mtodo indexOf usado para localizar caracteres ou substrings em uma String. Quando realizamos a busca de uma palavra em um texto, usamos algo parecido com o funcionamento de indexOf, isto , ele busca uma palavra e retorna a posio onde ela se encontra. Voc j sabe que um texto (ou uma String) indexado a partir do nmero zero. Caso haja sucesso na busca, retornado um nmero inteiro referente posio do texto (o ndice) onde o caractere foi encontrado, ou a posio do texto onde se inicia a substring localizada. Caso haja insucesso na busca, isto , caso o caractere ou substring no tenha sido encontrada, retornado o valor inteiro -1. De qualquer modo, o retorno de indexOf sempre ser um nmero inteiro (o valor do ndice, ou -1). A sintaxe geral para utilizao do mtodo indexOf : String.indexOf(<caractere ou substring a ser localizada, [posio inicial]>) Existem quatro maneiras de utilizar o mtodo indexOf, conforme indica o exemplo 4.17. 1. class Exemplo0417 2. { 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. } } public static void main (String args[]) { String texto = "Livro Java 2 - Ensino didtico"; char caractere = 'a'; System.out.println("ndice: " + texto.indexOf(caractere)); System.out.println("indice: " + texto.indexOf(caractere,10)); System.out.println("indice: " + texto.indexOf("Ensino")); System.out.println("indice: " + texto.indexOf("Java",15));

Curso Tcnico em Informtica

Capo Bonito - SP

64

No exemplo 4.17 a linha 5 contm o texto que ser usado nas pesquisas. A linha 6 declara um caractere 'a' que ser buscado no texto. As formas de busca so as seguintes: Linha 7: busca o caractere 'a' no texto e retorna o ndice referente sua primeira ocorrncia. No caso, retorna o ndice 7. Linha 8: busca o caractere 'a' no texto a partir do ndice 10 e retorna o ndice referente sua primeira ocorrncia. No caso, retorna o ndice 25. Na realidade, a primeira ocorrncia do caractere 'a' seria na posio 7, entretanto foi solicitado que a busca iniciasse na posio 10. Linha 9: busca a substring "Ensino" no texto e retorna o ndice referente sua primeira ocorrncia. No caso, retorna o ndice 15. Linha 10: busca a substring "Java" no texto a partir da posio 15 e retorna o ndice referente sua primeira ocorrncia. Como no existe a palavra "Java" aps a posio 15, retornado o valor -1 (busca sem sucesso). O mesmo princpio aplicado quando voc procura uma palavra em um editor de textos e ele no a encontra.

Criao de Banners
Os banners (textos rolantes) so muito usados em pginas da Internet. Este item apresenta uma ilustrao que explica a construo de banners com a manipulao de Strings. O exemplo 4.18 mostra uma palavra qualquer, digitada pelo usurio, sendo formada letra a letra na tela de modo temporizado. Evidentemente, o exemplo bem simples, servindo apenas como ilustrao. Seu aperfeioamento cabe ao leitor, explorando sua criatividade. Os aspectos mais importantes do exemplo aparecem no prprio cdigo em negrito e devem ser familiares ao feitor, uma vez que j foram abordados em itens anteriores.

Curso Tcnico em Informtica

Capo Bonito - SP

65

1. class Exemplo0418 2. { 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18 . 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. } } } } else { System.out.println("Entre com uma palavra qualquer."); } System.out.println(); System.out.println("Banner encerrado"); { System.out.println("Mostra a palavra 3 vezes, letra a letra."); palavra = args[0]; while (cont++<3) { for(int i=0;i<palavra.length();i++) { System.out.print(palavra.charAt(i)); // varre os caracteres for(int x=0;x<50000000;x++); // temporizador 1 } System.out.println{); for(int y=0;y<100000000;y++); // temporizador 2 // a varivel palavra recebe a palavra digitada // looping 3 vezes public static void main (String args[]) { int cont = 0; String palavra = ""; // a varivel palavra que ser usada no banner if (args.length != 0) // se o usurio digitou uma palavra no prompt

Curso Tcnico em Informtica

Capo Bonito - SP

66

Programao orientada por objeto


A programao tradicional, utilizada em larga escala at cerca de dez anos atrs, era caracterizada pelo emprego da tcnica denominada programao modular, uma vez que eram criados diversos mdulos independentes, mas que possuam um relacionamento entre si. Esses mdulos, ao serem agrupados, formavam o sistema como um todo. A programao orientada por objetos uma nova proposta de desenvolvimento de softwares que teve origem na segunda metade da dcada de 1970, quando estudiosos do Centro de Pesquisas da Xerox, em Paio Alto, Califrnia, desenvolveram uma linguagem de programao denominada SmallTalk. Ela utilizava pela primeira vez o conceito de classes e objetos, alm de possuir uma interface grfica baseada em janelas e cones, similar ao que se pode ver hoje nos sistemas operacionais Windows, MacOS e Linux. A idia bsica por trs dessa tcnica a reutilizao de cdigos j prontos, denominados classes, para a criao de partes vitais (chamadas de objetos) de um programa. Com isso o programador pode economizar um bom tempo sem ter de "reinventar a roda". Na programao orientada por objetos, as linguagens empacotam as estruturas de dados e as rotinas (procedimentos e funes) que trabalham com elas. Assim, essas entidades podem ser tratadas como um nico componente do programa. Uma metfora que pode ser utilizada para melhor ilustrar esse conceito a idia de uma linha de montagem de automveis. Uma classe pode ser imaginada como um dos diversos componentes do automvel, como, por exemplo, o motor. Essa classe denominada motor pode ter alguns atributos, como nmero de cilindros, tipo de alimentao (carburador ou injeo eletrnica), potncia mxima, etc. Por outro lado, o motor desempenha alguma ao, que no caso o de funcionar para pr o automvel em movimento. A menos que voc seja um engenheiro mecnico, no precisa saber em detalhes o funcionamento do motor, apenas que necessrio girar a chave de ignio para lig-lo. Todos os objetos juntos (motor, carroceria, portas, bancos, painel, etc.) formam o automvel, que ainda pode ter seus atributos individuais, como cor ou nmero de portas.
Curso Tcnico em Informtica

Capo Bonito - SP

67

Uma caracterstica interessante da programao orientada por objetos a possibilidade de derivar um objeto de outro, ou seja, criar um novo objeto que possui (herda) todos os atributos e aes do seu antecessor. No exemplo do automvel, o motor poderia ser uma classe base da qual seriam derivam outras, como demonstra o seguinte esquema simblico: CLASSE MOTOR: Cilindros = 4 Refrigerao = gua Posio = transversal Cabeote = alumnio Bloco = ferro fundido FIM DA CLASSE MOTOR CLASSE MOTOR_CARBURADOR DERIVADO DE MOTOR: Alimentao = carburador Combustvel = lcool FIM CLASSE MOTOR_CARBURADOR CLASSE MOTOR_INJECAO DERIVADO DE MOTOR: Alimentao = injeo eletrnica Combustvel = gasolina FIM CLASSE MOTOR_CARBURADOR Em termos de programao, voc poderia, por exemplo, criar uma classe genrica para criao de uma janela principal do programa, com menus e botes de atalho. Quando precisasse desenvolver um novo aplicativo, recorreria a essa classe para montar a tela principal, sem ter de escrever uma linha sequer novamente. Com essa tcnica, cada objeto auto-suficiente, ou seja, capaz de executar uma tarefa inteira sem precisar se preocupar com o resto do programa.

Curso Tcnico em Informtica

Capo Bonito - SP

68

Anlise de um programa em Java public class ProgramaJava01 { public static void main(String args[]) { short srtAno = 2006; int intSegundos = 809832; System.out.println("Ola pessoal !"); System.out.println("Primeiro programa em JAVA..."); System.out.println("Ano: "+srtAno); System.out.println("Segundos: "+intSegundos); } } Todo programa em Java deve iniciar com a declarao de uma classe, uma vez que um aplicativo considerado uma classe que pode ser estendida. O modificador public indica que ela uma classe pblica, e devido a isso seu nome deve ser o mesmo dado ao arquivo do cdigo--fonte. Esta j uma diferena em relao s linguagens C e C++. public class ProgramaJava01 { Dentro dessa classe vem a definio da funo principal do programa, denominada main, que o ponto de entrada para execuo do programa, como ocorre nas linguagens C e C++. O que difere uma da outra a forma utilizada para declarar essa funo. Em Java so utilizados os modificadores public e static. Outra diferena que a funo main membro da classe. public static void main(String args[]) {

importante notar que essa funo recebe parmetros os quais so armazenados na matriz (array) denominada args, do tipo Strings. Isso significa que voc pode passar valores na linha de comando quando for executar o programa. Dentro do corpo dessa funo vem o cdigo propriamente dito do programa. Primeiramente temos a declarao de algumas variveis. Note que aps a declarao vem a atribuio de valor na prpria linha, algo que tambm difere de C e C++.
Curso Tcnico em Informtica

Capo Bonito - SP

69

short srtAno = 2006; int intSegundos = 809832; Aps a declarao dessas variveis vem uma srie de linhas que contm comandos para impresso no vdeo. Para essa tarefa, precisamos utilizar uma biblioteca de uma classe Java denominada System. feita ento uma referncia ao mtodo println da varivel-membro de nome out. Essas referncias so obtidas atravs do operador de referncia"." (ponto), da mesma forma que ocorre quando desejamos acessar um campo de uma estrutura em C ou C++. System.out.println("Ola pessoal !"); System.out.println("Primeiro programa em JAVA..."); System.out.println("Ano: "+srtAno); System.out.println("Segundos: "+intSegundos); Voc deve ter notado a existncia de abre-chaves ({) e fecha-chaves (}) envolvendo o corpo da funo main e toda a classe. Esses smbolos tm a mesma funcionalidade das linguagens C e C+ +, ou seja, delimitam um bloco de linhas de instrues. Na notao UML, uma classe Java poderia ser apresentada conforme o diagrama da figura abaixo. Nessa representao, tanto os atributos quantos os mtodos podem ser precedidos por um modificador representado por um dos seguintes sinais: - Escopo privativo, ou seja, no h visibilidade externa classe. + Escopo pblico, ou seja, possui visibilidade total para o meio externo classe. # Escopo protegido, ou seja, a visibilidade externa limitada.

Corpo da funo-membro (mtodo)


Curso Tcnico em Informtica

Capo Bonito - SP

70

public class ProgramaJava01 {

public static void main(String args[]) { short srtAno = 2006; } int intSegundos = 809832; System.out.println("Ola pessoal !"); System.out.println("Primeiro programa em JAVA..."); System.out.println("Ano: "+srtAno); System.out.println("Segundos: "+intSegundos); } Declarao da funo-membro (mtodo)

Nome da classe Declarao de classe figura mostra um esquema que identifica cada seo desse primeiro programa. } Atributos Mtodos Notao UML

Definio e uso de uma classe


Vejamos na prtica como criar e utilizar uma classe. Para apresentar esse recurso fantstico, este tpico valer-se- de alguns conceitos existentes na matemtica, o clculo da rea de figuras geomtricas planas. No preciso correr para pegar aquele livro de matemtica utilizado no ensino fundamental para rever esse assunto, pois sero revistas superficialmente as frmulas utilizadas nos clculos. Primeiramente vamos criar uma classe que contm apenas duas variveis do tipo int (inteiro). Essa classe ser utilizada pelos outros programas que construiremos depois.

Curso Tcnico em Informtica

Capo Bonito - SP

71

Abra um editor de textos e digite o seguinte cdigo: public class Dimensao { public int intBase,intAltura; } Grave o arquivo com o nome Dimensao.java e depois compile-o com o seguinte comando: javac Dimensao.java Agora digite o cdigo apresentado a seguir no editor de textos e grave-o com o nome AreaQuadrado.java. public class AreaQuadrado { public static void main(String args[]) { int intArea; Dimensao Quadrado = new Dimensao(); Quadrado.intBase = 4 ; Quadrado.intAltura = 4 ; intArea = Quadrado.intBase * Quadrado.intAltura; System.out.println("rea do quadrado = "+intArea); } } Observe que foi declarada uma varivel denominada Quadrado como sendo do tipo Dimenso, que se encontra definido na classe criada anteriormente. Outra curiosidade a expresso new Dimensao() aps a declarao. Nela, new um operador e Dimensao() uma funo-membro especial da classe denominada construtora. essa funo que aloca espao na memria para a varivel de referncia e seus atributos. Em resumo, o que ocorre com essa expresso a criao da varivel de referncia imediatamente aps sua declarao. Em seguida temos a atribuio de valores a duas variveis do objeto Quadrado. O leitor poder ento se perguntar: mas como esse objeto possui essas variveis se elas no foram declaradas no programa? Para encontrar a resposta, basta olhar para a definio da classe Dimenso. Como esse objeto declarado desse tipo, ele herda todos os atributos. Para ter acesso a esses atributos, preciso utilizar a notao do ponto (.).
Curso Tcnico em Informtica

Capo Bonito - SP

72

Depois da atribuio desses dois valores, o programa faz o clculo da rea simplesmente efetuando a multiplicao entre os dois. Caso no se lembre, a rea de um quadrado definida como lado X lado. Interessante como as coisas funcionam direito. Voc tambm deve estar curioso para saber como isso possvel. Quando compilamos o cdigo, o compilador adicionou uma referncia classe Dimenso, que resolvida em tempo de execuo. Se essa classe no existisse, seria gerado um erro no momento da compilao. Assim, os dois cdigos esto, de certa forma, intimamente ligados. Abra novamente o editor de textos e digite o seguinte cdigo: public class AreaTriangulo { public static void main(String args[]) { int intArea; Dimenso Tringulo = new Dimenso(); Tringulo.intBase = 6; Tringulo.intAltura = 3; intArea = (Tringulo.intBase * Tringulo.intAltura) / 2; System.out.println("rea do tringulo = "+intArea); } }

Curso Tcnico em Informtica

Capo Bonito - SP

73

O prximo programa, que calcula a rea de um trapzio, e cujo cdigo apresentado a seguir, um pouquinho mais complexo. public class AreaTrapezio { public static void main(String args[]) { int intArea, intBaseMenor, intBaseMaior; Dimenso Trapzio = new Dimenso(); intBaseMenor = 3 ; intBaseMaior = 5; Trapezio.intBase = (intBaseMenor + intBaseMaior); Trapezio.intAltura = 4; intArea = (Trapezio.intBase * Trapezio.intAltura) / 2; System.out.println("rea do trapezio = "+intArea); } } Como possvel perceber, foi necessria a declarao de mais duas variveis inteiras. Elas sero utilizadas para armazenar o comprimento da base menor e da base maior do trapzio. Isso se deve ao fato de a frmula para clculo da rea de um trapzio ser definida como ((base menor + base maior) X altura) / 2.0 motivo de somar as duas bases que, se voc duplicar o trapzio e posicion-lo no lado oposto, de forma invertida, ter como resultado um retngulo. Adio de mtodos classe A classe que criamos ainda pode ser melhorada com o acrscimo de um mtodo que realiza parte dos clculos. Dizemos parte porque ele na verdade se resume multiplicao dos dois valores armazenados nas variveis-membro. Depois veremos como possvel fazer com que esse clculo seja mais sofisticado.

Curso Tcnico em Informtica

Capo Bonito - SP

74

Altere o arquivo Dimensao.java acrescentando as linhas destacadas em negrito na seguinte listagem: public class Dimenso { public int intBase, intAltura; public int rea() { return (intBase * intAltura); } } Esse cdigo que acabamos de incluir uma funo-membro que retorna o resultado da multiplicao das variveis intBase e intAltura. uma funo bastante simples, como se pode ver. Agora podemos adaptar os cdigos dos programas alterando a linha destacada nas seguintes listagens: Arquivo AreaQuadrado.java public class AreaQuadrado { public static void main(String args[]) { int intArea; Dimenso Quadrado = new Dimenso(); Quadrado.intBase = 4; Quadrado.intAltura = 4; intArea = Quadrado.Area(); System.out.println("rea do quadrado = "+intArea); } }

Curso Tcnico em Informtica

Capo Bonito - SP

75

Arquivo AreaTriangulo.java public class AreaTriangulo { public static void main(String args[]) { int intArea; Dimenso Tringulo = new Dimenso(); Tringulo.intBase = 6; Tringulo.intAltura = 3; intArea = Triangulo.Area( ) / 2; System.out.println("rea do tringulo = "+intArea); } } Arquivo AreaTrapezio.java public class AreaTrapezio { public static void main(String args[]) { int intArea,intBaseMenor,intBaseMaior; Dimenso Trapezio = new Dimenso(); intBaseMenor = 3; intBaseMaior = 5; Trapezio.intBase = (intBaseMenor + intBaseMaior); Trapezio.intAltura = 4; intArea = Trapezio.rea() / 2; System.out.println("rea do trapezio = "+intArea); } } Como possvel notar, a linha em que todo o clculo era efetuado foi simplificada pela chamada ao mtodo Area() do objeto do tipo Dimenso. A classe ainda no est completa, pelo menos da forma que seria considerada ideal. Precisamos fazer modificaes porque as variveis-membro (tambm chamadas atributos) so visveis
Curso Tcnico em Informtica

Capo Bonito - SP

76

externamente classe, uma situao que no aceitvel para uma boa programao orientada por objeto, uma vez que fere as regras de encapsulamento de atributos. O primeiro passo tornar as variveis-membro privadas classe pelo modificador private, da seguinte forma: public class Dimenso { private int intBase,intAltura; public int rea() { return (intBase * IntAltura); } } Agora vem o problema. Tornando as variveis privadas, no podemos acess-las a partir dos programas. Ento como faremos para atribuir os valores a elas? A resposta a utilizao de mtodos. Adicione classe as linhas destacadas em negrito na listagem mostrada a seguir: public class Dimensao { private int intBase,intAltura; public void Base(int intBase) { this.intBase = intBase; } public void Altura(int intAltura) { this.intAltura = intAltura; } public int Area() { return (intBase * intAltura); } }
Curso Tcnico em Informtica

Capo Bonito - SP

77

As alteraes se resumiram a duas novas funes que inclumos. importante notar e entender o operador this existente nelas. Esse operador foi utilizado devido ao fato de os parmetros das funes-membro terem os mesmos nomes das variveis-membro. Desta forma, ele fora uma referncia ao prprio objeto. Se no quisssemos utiliz-lo, seria necessrio dar outros nomes aos parmetros. Os programas tambm precisam ser alterados, conforme indicam as listagens: Arquivo AreaQuadrado.java public class AreaQuadrado { public static void main(String args[]) { int intArea; Dimensao Quadrado = new Dimensao(); Quadrado.Base(4); Quadrado.Altura(4); intArea = Quadrado.Area(); System.out.println("rea do quadrado = "+intArea); } } Arquivo AreaTriangulo.java public class AreaTriangulo { public static void main(String'args[]) { int intArea; Dimenso Tringulo = new Dimenso(); Tringulo.Base(6); Tringulo.Altura(3); intArea = Tringulo.rea() / 2; System.out.println("rea do tringulo = "+intArea); } }

Curso Tcnico em Informtica

Capo Bonito - SP

78

Arquivo AreaTrapezio.java public class AreaTrapezio { public static void main(String args[]) { int intArea,intBaseMenor,intBaseMaior; Dimenso Trapezio = new Dimenso(); intBaseMenor = 3; intBaseMaior = 5; Trapezio.Base(intBaseMenor + intBaseMaior); Trapezio.Altura(4); intArea = Trapezio.rea() / 2; System.out.println("rea do trapezio = "+intArea); } } Para finalizar, vamos acrescentar uma varivel-membro e uma funo que permitem a especificao do tipo de objeto geomtrico para que o clculo seja efetuado corretamente pela prpria classe. Sendo assim, altere o cdigo do arquivo Dimensao.java adicionando as linhas em destaque mostradas em seguida: public class Dimenso { private int intBase,intAltura; private String strTipo; public void Base(int intBase) { this.intBase = intBase; } public void Altura(int intAltura) { this.intAltura = intAltura; } public void Tipo(String strTipo)
Curso Tcnico em Informtica

Capo Bonito - SP

79

{ this.strTipo = strTipo; } public int rea() { int intArea; intArea = intBase * intAltura; if ((strTipo == "LOSANGO") || (strTipo == "TRAPEZIO") || (strTipo == "TRINGULO")) intArea = intArea / 2; return (intArea); } } A varivel strTipo receber, atravs da funo-membro Tipo(), uma cadeia de caracteres que representa o tipo de objeto geomtrico para que assim a funo Area() consiga saber se o valor da rea deve ser dividido por dois, no caso de o tipo de objeto ser "LOSANGO", "TRAPEZIO" ou "TRINGULO". Agora precisamos adaptar os programas nova realidade. As listagens seguintes apresentam os cdigos novos: Arquivo AreaQuadrado.java public class AreaQuadrado { public static void main(String args[]) { int intArea; Dimenso Quadrado = new Dimenso(); Quadrado.Base(4); Quadrado.Altura(4); Quadrado. Tipo ("QUADRADO") ; intArea = Quadrado.rea(); System.out.println("rea do quadrado = "+intArea); } }
Curso Tcnico em Informtica

Capo Bonito - SP

80

Arquivo AreaTriangulo.java public class AreaTriangulo { public static void main(String args[]) { int intArea; Dimenso Tringulo = new Dimenso(); Tringulo.Base(6); Tringulo.Altura(3); Tringulo.Tipo("TRINGULO"); intArea = Tringulo.rea() / 2; System.out.println("rea do tringulo = "+intArea); } } Arquivo AreaTrapezio.java public class AreaTrapezio { public static void main(String args[]) { int intArea,intBaseMenor,intBaseMaior; Dimenso Trapezio = new Dimenso(); intBaseMenor = 3; intBaseMaior = 5; Trapezio.Base(intBaseMenor + intBaseMaior); Trapezio.Altura(4); Trapezio. Tipo ("TRAPEZIO" ); intArea = Trapezio.rea() / 2 ; System.out.println("rea do trapezio = "+intArea); } }

Curso Tcnico em Informtica

Capo Bonito - SP

81

Construtores e Herana
Adio de construtores Uma caracterstica muito interessante das classes a possibilidade de inicializao dos objetos criados com elas. Isso significa que os atributos existentes neles podem receber valores automaticamente durante a declarao. Para que isso seja possvel, necessria a definio de um mtodo especial denominado construtor. Um mtodo construtor deve, necessariamente, receber o mesmo nome dado classe e, embora no possua um tipo de retorno, pode receber parmetros cujos valores so atribudos aos atributos do objeto. Essa atribuio ocorre quando a instncia do objeto criada pelo operador new. Deve-se ressaltar que toda classe possui um mtodo construtor, mesmo nos casos em que ele no tenha sido definido explicitamente. Neste caso, o prprio compilador Java se encarrega de adicionar um construtor-padro. Por exemplo, para a classe Dimenso foi criada de forma transparente a seguinte declarao: public Dimenso() { } Isso pde ser verificado nos exemplos anteriores, que chamavam um mtodo denominado Dimensao(), como no seguinte exemplo: Dimenso Losango = new Dimenso(); Uma caracterstica importantssima que deve ser observada que a execuo do construtor de uma classe s ocorre uma nica vez durante todo o tempo de existncia do objeto. Vejamos ento como criar uma classe que possua um mtodo construtor e as alteraes que devem ser feitas nos programas desenvolvidos no captulo anterior para utiliz-la.

Curso Tcnico em Informtica

Capo Bonito - SP

82

Primeiramente, digite o cdigo mostrado na listagem seguinte num editor de textos e grave-o com o nome FiguraGeometrica.java: public class FiguraGeometrica { private int intBase,intAltura; private String strTipo; public FiguraGeometrica(String strTipo,int intBase,int intAltura) { this.strTipo = strTipo; this.intBase = intBase; this.intAltura = intAltura; } public int Area() { int intArea; intArea = intBase * intAltura; if ((strTipo == "LOSANGO") || (strTipo == "TRAPEZIO") || (strTipo == "TRINGULO")) intArea = intArea / 2; return (intArea); } } Nessa nova classe, temos a declarao das mesmas variveis j vistas no captulo anterior: uma para armazenar o valor da base, outra para o valor da altura e uma ltima para conter o tipo de figura geomtrica. Em seguida temos a definio do construtor (note que ele tem o mesmo nome da classe). So passados a ele trs parmetros: uma cadeia de caracteres que designa o tipo de figura geomtrica, um valor numrico que representa o comprimento da base da figura e um nmero inteiro para o comprimento da altura.

Curso Tcnico em Informtica

Capo Bonito - SP

83

Esses valores so passados aos atributos da classe. Foi utilizado novamente o operador this como uma forma de se referir ao prprio objeto. Temos por fim, um mtodo que efetua o clculo da rea da figura geomtrica, similar ao j existente na classe Dimenso. Agora altere o cdigo dos programas (que no deixam de ser classes tambm) conforme indicado nas seguintes listagens: Arquivo AreaQuadrado.java public class AreaQuadrado { public static void main(String args[]) { int intArea; FiguraGeometrica Quadrado = new FiguraGeometrica("QUADRADO",4,4); intArea = Quadrado.rea(); System.out.println("rea do quadrado = "+intArea); } } Arquivo AreaTriangulo.java public class AreaTriangulo { public static void main(String args[]) { int intArea; FiguraGeometrica Tringulo = new FiguraGeometrica("TRINGULO",6,3); intArea = Tringulo.rea() / 2; System.out.println("rea do tringulo = "+intArea); } }

Curso Tcnico em Informtica

Capo Bonito - SP

84

Arquivo AreaTrapezio.java public class AreaTrapezio { public static void main(String args[]) { int intArea,intBaseMenor,intBaseMaior; Dimenso Trapezio = new Dimenso(); intBaseMenor = 3; intBaseMaior = 5; FiguraGeometrica Trapezio new FiguraGeometrica ("TRAPEZIO",(intBaseMenor + intBaseMaior),4); intArea = Trapezio.rea() / 2; System.out.println("rea do trapezio = "+intArea); } } Sem dvida, os cdigos ficaram mais claros e enxutos com essas alteraes. Agora, no momento da criao do objeto, seus atributos j so inicializados automaticamente, sem a necessidade de ter linhas que fazem as atribuies dos valores separadamente. No entanto, preciso ter cuidado com a ordem em que os parmetros so passados, para que no haja problemas na hora da compilao ou na execuo. Antes de finalizar esse tpico, importante deixar claro que, diferentemente de C++, na linguagem Java no precisamos definir um mtodo destrutor. Na verdade, Java nem trabalha com esse conceito. A destruio de um objeto e a recuperao da memria ocupada por ele ficam a cargo do coletor de lixo. Outra diferena em relao ao C++ que os construtores so definidos dentro do prprio corpo da classe, e no fora dela, empregando-se o operador de resoluo de abrangncia (::), que associa a definio da funo com a classe a que pertence.

Curso Tcnico em Informtica

Capo Bonito - SP

85

Herana de classes
Este tpico apresenta um assunto muito interessante em Java e em outras linguagens orientadas por objeto (como C++): a herana. Basicamente ela pode ser definida como uma classe (denominada subclasse) que criada contendo todas as caractersticas (atributos e mtodos) de uma outra classe (denominada superclasse). subclasse podem ser adicionados outros atributos e mtodos que so especficos dela. Por outro lado, ela reconhece todos aqueles que j se encontram definidos na superclasse. Para estudar esse conceito, vamos criar uma classe base (superclasse) com a seguinte definio: Nome da classe: DadosPessoais Atributos: Nome (String), Endereo (String), Bairro (String), Cidade (String), Estado (String), CEP (String), Telefone (String). Mtodos: DadosPessoais (construtor), getNome, getEndereco, getBairro, getCidade, getEstado, get CEP, getTelefone. Em termos de notao UML, teramos um diagrama similar ao da figura abaixo

Curso Tcnico em Informtica

Capo Bonito - SP

86

O cdigo para definio dessa classe seria o seguinte: public class DadosPessoais { private String strNome, strEndereco, strBairro, strCidade, strEstado, strCEP, strTelefone; public DadosPessoais(String strNome, String strEndereco, String strBairro, String strCidade, String strEstado, String strCEP, String strTelefone) { this.strNome = strNome; this.strEndereco = strEndereco; this.strBairro = strBairro; this.strCidade = strCidade; this.strEstado = strEstado; this.strCEP = strCEP; this.strTelefone = strTelefone; } public String getNome( ) { return strNome; } public String getEndereco( ) { return strEndereco; } public String getBairro( ) { return strBairro; } public String getCidade( ) { return strCidade; } public String getEstado( ) { return strEstado; } public String getCEP( ) { return strCEP; } public String getTelefone( ) { return strTelefone; } }
Curso Tcnico em Informtica

Capo Bonito - SP

87

Aps a declarao dos atributos temos a definio do construtor e dos mtodos que retornam os valores dos atributos. Uma conveno que normalmente tem sido utilizada na programao em Java o acrscimo da expresso get frente de todos os mtodos que possuem a funo de retornar um valor da classe. Uma vez que as subclasses (classes filhas) no herdam os construtores da superclasse (classe me), precisamos definir um construtor que chama explicitamente o construtor da superclasse atravs da palavra reservada super. Os parmetros necessrios so passados dentro dos parnteses que seguem essa palavra-chave. A palavra reservada extends, por outro lado, utilizada para indicar que uma classe herda/estende outra. Seguindo essa palavra reserva, deve vir o nome da superclasse. Em Java, uma subclasse somente pode estender diretamente uma outra subclasse, no sendo permitida a herana mltipla, como ocorre em C++. O cdigo apresentado a seguir cria outra classe que herda as caractersticas da classe DadosPessoais e estende suas funcionalidades com a adio de novos atributos e mtodos: public class RegistroCliente extends DadosPessoais { private java.til.Date dtNascimento; private double dblLimiteCredito; public RegistroCliente(String strNome, String strEndereco, String strBairro, String strCidade, String strEstado, String strCEP, String strTelefone, java.til.Date dtNascimento, double dblLimiteCredito) { super(strNome,strEndereco,strBairro,strCidade,strEstado,strCEP,strTelefone); this.dtNascimento = dtNascimento; this.dblLimiteCredito = dblLimiteCredito; } public java.til.Date getNascimento() {
Curso Tcnico em Informtica

Capo Bonito - SP

88

return dtNascimento; } public double getLimiteCredito() { return dblLimiteCredito; } } Neste cdigo possvel perceber que foi preciso referenciar de forma explcita o pacote padro java.util para ter acesso classe Date. Observe como foi utilizada a chamada ao construtor da superclasse DadosPessoais dentro do construtor da subclasse RegistroCliente: todos os parmetros necessrios so passados a super. Da superclasse poderamos tambm derivar outras subclasses, como a existente no cdigo da seguinte listagem: public class RegistroFornecedor extends DadosPessoais { private String strCNPJ; private double dblLimiteCredito; public RegistroFornecedor(String strNome, String strEndereco, String strBairro, String strCidade, String strEstado, String strCEP, String strTelefone, String strCNPJ, double dblLimiteCredito) { super(strNome,strEndereco,strBairro,strCidade,strEstado,strCEP,strTelefone); this.strCNPJ = strCNPJ; this.dblLimiteCredito = dblLimiteCredito; } public String getCNPJ( ) {
Curso Tcnico em Informtica

Capo Bonito - SP

89

return strCNPJ; } public double getLimiteCredito( ) { return dblLimiteCredito; } }

Curso Tcnico em Informtica

Capo Bonito - SP

90

Definida a superclasse e as subclasses derivadas, estamos prontos para o programa propriamente dito. Veja o cdigo apresentado na listagem: public class Cadastro { public static void main(String args[]) { java.til.Date dtDataNascimento = new java.util.Date(80, 3,25); RegistroCliente Cliente = new RegistroCliente("Rogrio Alberto Pedro", "Rua Santos Dumont, 1900", "Jd. Aviao", "So Paulo", "SP", "00110-001", "11 0909-1001", dtDataNascimento, 2500) ; RegistroFornecedor Fornecedor = new RegistroFornecedor("Auto-peas MotorBom", "Av. Primavera, 920", "Jd. Estaes", "So Paulo", "SP", "01100-101", "11 1010-0202", "11-001.001/0001-11", 8000) ; System.out.println("Dados do Cliente"); System, out .println ("----------------") ; System.out.println("Nome: "+Cliente.getNome()); System.out.println("Endereo: "+Cliente.getEndereco()); System.out.println("Bairro: "+Cliente.getBairro()); System.out.println("Cidade: "+Cliente.getCidade()); System.out.println("Estado: "+Cliente.getEstado() ) ; System.out.println("CEP: "+Cliente.getCEP()); System.out.println("Nascimento: "+Cliente.getNascimento()); System.out.println("Limite de crdito: "+Cliente.getLimiteCredito()); System.out.println(""); System.out.println("Dados do Fornecedor"); System, out .println ("-------------------") ;
Curso Tcnico em Informtica

Capo Bonito - SP

91

System.out.println("Razo Social: "+Fornecedor.getNome()); System.out.println("Endereo: "+Fornecedor.getEndereco()) ; System.out.println("Bairro: "+Fornecedor.getBairro()); System.out.println("Cidade: "+Fornecedor.getCidade()); System.out.println("Estado: "+Fornecedor.getEstado()) ; System.out.println("CEP: "+Fornecedor.getCEP()); Sys tem.out.println("CNPJ: "+Fornecedor.getCNPJ()) ; System.out.println("Limite de crdito: "+Fornecedor.getLimiteCredito( )); } } Novamente, foi preciso utilizar java.util.Date na declarao da varivel dtDataNascimento. Veja que essa mesma expresso foi empregada para criar a instncia do objeto (new java.util.Date(80,3,25)). Foram passados como parmetros para o construtor o ano, o ms e o dia. Compile os cdigos DadosPessoais.java, RegistroCliente.java e RegistroFornecedor.java, que foram apresentados anteriormente. Compile em seguida o programa cujo arquivo se denomina Cadastro.java. Voc notar que o compilador Java apresenta a mensagem de alerta (no de erro) da figura 6.3. Para ter maiores detalhes sobre o ponto do programa que fora essa mensagem, siga a orientao e compile novamente o cdigo digitando javac -Xlint Cadastro.java. Podemos agora ver que o aviso est relacionado com a linha em que declarado o objeto dtNascimento, mais precisamente com a chamada ao construtor da classe Date. Traduzindo de forma bastante resumida, o compilador informa que a sintaxe utilizada para chamar esse construtor est obsoleta, embora no esteja errada. Isso se deve ao fato de terem sido adicionadas outras maneiras de invocar o construtor nas novas especificaes da API do Java. O leitor deve ter percebido um pequeno problema aps rodar o programa: havamos especificado o valor "3" para o ms, o que significa que deveria ser mostrado como sendo Mar (maro) na impresso da data de nascimento, porm foi impresso Apr (abril). No se trata exatamente de um erro, mas acontece que esse parmetro inicia-se em 0, ou seja, 0 representa janeiro, 1 fevereiro, 2 maro e assim por diante, at 11, que significa dezembro. Estranho, mas assim que funciona. Isso deve ocorrer pelo fato de, provavelmente, haver uma matriz contendo os nomes
Curso Tcnico em Informtica

Capo Bonito - SP

92

dos meses definida dentro da classe, e como os ndices das matrizes sempre iniciam em 0, o mesmo acontece com o parmetro do construtor.

Sobrescrita e Sobrecarga de Mtodos


Conceito de polimorfismo O termo polimorfismo vem do grego e significa "vrias formas". Em Java e outras linguagens orientadas por objeto, um conceito que torna possvel a criao de objetos contendo mtodos que possuem o mesmo nome, mas executam tarefas diferentes. Com isso podemos fornecer um nico nome a uma ao que compartilhada por toda a hierarquia dos objetos. Esta j uma caracterstica dos operadores matemticos, afinal de contas para somar nmeros inteiros ou de ponto flutuante utilizamos o mesmo sinal de adio (+). Da mesma forma, no h um operador especfico para multiplicar dois nmeros inteiros e outro para multiplicar dois nmeros decimais. O que a tcnica de programao orientada por objetos oferece (tanto em Java quanto em outras linguagens) a possibilidade de termos uma funo ou mtodo com o mesmo nome, mas que age diferente conforme os parmetros que recebe. Isso evita que tenhamos de definir vrios mtodos com nomes diferentes, e s vezes at estranhos, ou que tenhamos de utilizar comandos de deciso (if ou switch) para que a ao correta seja executada. Em Java, o polimorfismo empregado quando definimos uma subclasse em que se encontra implementado um mtodo ou atributo j existente na superclasse da qual herdeira. Veja o esquema da figura abaixo:

O polimorfismo em Java obtido atravs da sobrescrita e sobrecarga de mtodos. Na sobrescrita, um mtodo da superclasse (classe me) redefinido nas subclasses herdeiras (classes filhas) para modificar seu comportamento, mantendo sua assinatura original. J na sobrecarga, podemos ter um mesmo mtodo definido diversas vezes, e cada um executa uma operao especfica conforme os parmetros recebidos. Neste caso, as assinaturas so diferentes.
Curso Tcnico em Informtica

Capo Bonito - SP

93

Vamos estudar ento cada um desses recursos. Sobrescrita de mtodos Para entendermos como funciona a sobrescrita de mtodos, nada melhor do que trabalhar diretamente com um exemplo concreto. O que faremos agora alterar a classe FiguraGeometrica (apresentada no captulo anterior), criar subclasses a partir dela e adaptar os programas para usar a subclasse. Primeiramente altere o cdigo da classe FiguraGeometrica (arquivo FiguraGeometrica.java) para o seguinte: public class FiguraGeometrica { private int intBase,intAltura; public FiguraGeometrica(int intBase, int intAltura) { this.intBase = intBase; this.intAltura = intAltura; } public int rea( ) { int intArea; intArea = intBase * intAltura; return (intArea); } } Note que, diferentemente da verso .anterior, o construtor no possui mais um parmetro para indicar o tipo de figura. O mtodo Area( ) tambm foi alterado de forma que no h o teste com o comando if para determinar se o valor da multiplicao (base X altura) deveria ser dividido por 2. Esta a superclasse. Vamos criar duas subclasses denominadas Quadrado e Trapzio. A primeira responsvel por calcular o valor da rea do quadrado, enquanto a segunda se encarrega do clculo da rea do trapzio.

Curso Tcnico em Informtica

Capo Bonito - SP

94

Veja os cdigos apresentados nas seguintes listagens: Arquivo Quadrado.java public class Quadrado extends FiguraGeometrica { public Quadrado(int intBase,int intAltura) { super(intBase,intAltura); } public int rea( ) { int intArea; intArea = super.Area(); return intArea; } } Arquivo Trapezio.java public class Trapezio extends FiguraGeometrica { public Trapezio(int intBase,int intAltura) { super(intBase,intAltura); } public int rea( ) { int intArea; intArea = super.Area() / 2; return intArea; } } importante prestar bastante ateno ao construtor e redefinio do mtodo Area(). Os construtores dessas duas subclasses chamam o construtor da superclasse atravs da palavra reservada super com os parmetros necessrios entre parnteses. J o mtodo Area( ) possui uma chamada ao mtodo de mesmo nome existente na superclasse. Para que isso seja possvel, necessrio utilizar novamente a palavra reservada super, que
Curso Tcnico em Informtica

Capo Bonito - SP

95

informa uma referncia superclasse. Essa construo traduzida pelo compilador como se fosse FiguraGeometrica.Area(). No caso especfico da classe Trapezio, o valor retornado por Area() dividido por 2, como manda a regra. Desta forma temos um cdigo mais limpo e totalmente dentro das normas de uma boa programao orientada por objeto, ou seja, uma classe base e as classes derivadas contendo as caractersticas que lhe so pertinentes. Para utilizar essas duas novas classes, altere o cdigo dos programas mostrados a seguir: Arquivo AreaQuadrado.java public class AreaQuadrado { public static void main(String args[]) { int intArea; Quadrado ObjQuadrado = new Quadrado(4 , 4); intArea = ObjQuadrado.rea(); System.out.println("rea do quadrado = "+intArea); } } Arquivo AreaTrapezio.java public class AreaTrapezio { public static void main(String args[]) { int intArea,intBaseMenor,intBaseMaior; intBaseMenor = 3; intBaseMaior = 5; Trapezio ObjTrapezio = new Trapezio((intBaseMenor + intBaseMaior),4); intArea = ObjTrapezio.rea(); System.out.println("rea do trapezio = "+intArea); } }

Curso Tcnico em Informtica

Capo Bonito - SP

96

As duas diferenas em relao ao cdigo da verso anterior so a especificao das classes Quadrado e Trapezio no lugar de FiguraGeometrica, e a ausncia da cadeia de caracteres informando o tipo de figura geomtrica. Voc deve compilar o arquivo FiguraGeometrica.java primeiro e depois a classe derivada dela. S ento compile o programa e rode-o. Sobrecarga de mtodos Como j foi mencionado antes, a sobrecarga possibilita que um mesmo mtodo tenha vrias verses. Cada verso deve possuir um ou mais parmetros que tornem possvel a distino. Vamos alterar os mtodos construtores das classes Quadrado e Trapezio de modo que se no for passado nenhum parmetro, seja assumido por padro o valor 1 para a base e para a altura. Abra o arquivo Quadrado.java num editor de textos e acrescente a linha destacada em negrito na seguinte listagem: public class Quadrado extends FiguraGeometrica { public Quadrado( ) { super(1,1); } public Quadrado(int intBase.int intAltura) { super(intBase,intAltura); } public int rea () { int intArea; intArea = super.rea(); return intArea; } } Essas novas linhas definem um outro mtodo construtor que no recebe parmetros. No entanto, ele chama o construtor da superclasse especificando o valor 1 para ambos os parmetros necessrios. Com isso, podemos declarar e criar uma instncia de um objeto do tipo Quadrado
Curso Tcnico em Informtica

Capo Bonito - SP

97

sem especificar nada. Veja o cdigo do programa AreaQuadrado.java alterado: public class AreaQuadrado { public static void main(String args[]) { int intAreal,intArea2; Quadrado ObjQuadrado1 = new Quadrado( ); intAreal = ObjQuadrado1.rea( ); Quadrado 0bjQuadrado2 = new Quadrado(4,4); intArea2 = ObjQuadrado2.rea(); System.out.println("rea do quadrado 1 = "+intAreal); System.out.println("rea do quadrado 2 = "+intArea2); } } Com a classe Trapezio podemos fazer as mesmas alteraes, como indica o cdigo a seguir: public class Trapezio extends FiguraGeometrica { public Trapezio( ) { super(1,1); } public Trapezio(int intBase,int intAltura) { super(intBase,intAltura); } public int rea( ) { int intArea; intArea = super.Area( ) / 2; return intArea; } }
Curso Tcnico em Informtica

Capo Bonito - SP

98

0 programa que usa essa classe tambm precisa de alterao. Veja a listagem: public class AreaTrapezio { public static void main(String args[]) { int intAreal,intArea2,intBaseMenor,intBaseMaior; Trapezio ObjTrapezio1 = new Trapezio( ); intAreal = ObjTrapeziol .rea (); intBaseMenor = 3; intBaseMaior = 5; Trapezio 0bjTrapezio2 = new Trapezio((intBaseMenor + intBaseMaior),4); intArea2 = ObjTrapezio2.rea(); System.out.println("rea do trapezio 1 = "+intAreal); System.out.println("rea do trapezio 2 = "+intArea2); } } Outra possibilidade de uso da sobrecarga na distino de mtodos de acordo com o tipo de um ou mais parmetros que ele recebe. Voltemos classe FiguraGeometrica. Como o leitor j deve ter notado, ela trabalha somente com valores numricos inteiros. Ento vamos adapt-la para que aceite tambm valores decimais. Altere o cdigo de forma que ele fique conforme a listagem: public class FiguraGeometrica { private float fltBase,fItAltura; public FiguraGeometrica(int intBase,int intAltura) { this.fltBase = intBase; this.fItAltura = intAltura; } public FiguraGeometrica(float fltBase,float fItAltura) { this.fltBase = fltBase; this.fItAltura = fItAltura; } public float rea() { float fltArea; fltArea = fltBase * fItAltura; return (fltArea); } }
Curso Tcnico em Informtica

Capo Bonito - SP

99

importante destacar que o mtodo Area() teve alterado o tipo de retorno para float, tendo em vista que a classe agora pode trabalhar com valores decimais. Perceba tambm que os construtores so idnticos, diferenciando apenas no tipo de dado dos parmetros (um int e o outro float). No momento da execuo, se os parmetros forem do tipo int, executado o primeiro construtor. Se forem do tipo float, ento executado o segundo. As classes derivadas tambm precisam de modificaes, conforme as listagens a seguir: Arquivo Quadrado.java public class Quadrado extends FiguraGeometrica { public Quadrado(int intBase,int intAltura) { super(intBase,intAltura); } public Quadrado(float fltBase,float fItAltura) { super(fltBase,fItAltura); } public float Area( ) { float fltArea; fltArea = super.Area(); return fltArea; }

Curso Tcnico em Informtica

Capo Bonito - SP

100

Arquivo Trapezio.java public class Trapezio extends FiguraGeometrica { public Trapezio(int intBase,int intAltura) { super(intBase,intAltura); } public Trapezio(float fltBase,float fltAltura) { super(fltBase,fltAltura); } public float rea( ) { float fltArea; fltArea = super.rea() / 2; return fltArea; } } Observe que foi necessria a adio de um novo construtor em cada classe para tratar dos parmetros decimais. Para os dois programas os cdigos devem ser os seguintes: Arquivo AreaQuadrado.java public class AreaQuadrado { public static void main(String args[]) { float fltAreal,fltArea2; Quadrado ObjQuadradol = new Quadrado(4,4); fltAreal = ObjQuadradol.rea( ); Quadrado 0bjQuadrado2 = new Quadrado(5.5f,5.5f); fltArea2 = 0bjQuadrado2.rea( ); System.out.println("rea do quadrado 1 = "+fItAreal); System.out.println("rea do quadrado 2 = "+fltArea2); } }
Curso Tcnico em Informtica

Capo Bonito - SP

101

Arquivo AreaTrapezio.java public class AreaTrapezio { public static void main(String args[]) { int intBaseMenor,intBaseMaior; float fltAreal,fltArea2,fltBaseMenor,fltBaseMaior; intBaseMenor = 3; intBaseMaior = 5; Trapezio ObjTrapezio1 = new Trapezio((intBaseMenor + intBaseMaior),4); fltAreal = ObjTrapeziol.rea(); fltBaseMenor = 3.5f; fltBaseMaior = 5.5f; Trapezio 0bjTrapezio2 = new Trapezio((fltBaseMenor + fltBaseMaior) , 4 . 5f) ; fltArea2 = 0bjTrapezio2.rea(); System.out.println("rea do trapezio 1 = "+fItAreal); System.out.println("rea do trapezio 2 = "+fltArea2); } } Um ponto muito importante nessa nova verso, e que o leitor deve ter percebido, o acrscimo da letra "f" aps o nmero decimal (como 5.5f, 3.5f). Isso necessrio para indicar explicitamente que o valor de ponto flutuante. Se esse caractere no fosse includo, um erro seria mostrado no momento da compilao. Antes de encerrarmos este tpico, imprescindvel destacar que em Java no existe a sobrecarga de operadores, como ocorre na linguagem C++. A ausncia desse recurso proposital, tendo em vista que ele est cheio de perigos em potencial. Entre alguns desses perigos est o seu uso excessivo, o que facilita ao programador sobrecarregar um operador num determinado contexto e depois querer utiliz-lo em sua funo original em outro ponto.

Curso Tcnico em Informtica

Capo Bonito - SP

102

Classes e mtodos finais Quando definimos uma rvore de herana de classes em Java, pode ocorrer de chegarmos a um ponto em que desejamos delimitar essa rvore. Essa delimitao no permite que de uma classe sejam derivadas outras. A esse recurso damos o nome de classes (final class), e no existe na linguagem C++. Com o exemplo de rea de figuras geomtricas podemos aplicar esse conceito perfeitamente. Uma vez que dificilmente ser necessrio criar outra classe herdeira de Quadrado, Trapezio ou Tringulo, podemos torn-las classes terminais. Para que isso seja possvel, basta adicionar o modificador final declarao da classe do seguinte modo: Arquivo Quadrado.java public final class Quadrado extends FiguraGeometrica { public Quadrado(int intBase,int intAltura) { super(intBase,intAltura); } public Quadrado(float fltBase,float fltAltura) { super(fltBase,fltAltura); } public float rea( ) { float fltArea; fltArea = super.rea(); return fltArea; } }

Curso Tcnico em Informtica

Capo Bonito - SP

103

Arquivo Trapezio.java public final class Trapezio extends FiguraGeometrica { public Trapezio(int intBase,int intAltura) { super(intBase,intAltura); } public Trapezio(float fltBase,float fltAltura) { super(fltBase,fltAltura); } public float Area ( ) { float fltArea; fltArea = super.Area( ) / 2 ; return fltArea; } } Arquivo Triangulo.java public final class Tringulo extends FiguraGeometrica { public Tringulo(int intBase,int intAltura) { super(intBase,intAltura); } public Tringulo(float fltBase,float fltAltura) { super(fltBase,fltAltura); } public float rea( ) { float fltArea; fltArea = super.Areaf) / 2; return fltArea; } }

Curso Tcnico em Informtica

Capo Bonito - SP

104

Se aps alterar e compilar essas classes, voc criar o cdigo mostrado a seguir e tentar compillo, ter a mensagem de erro da figura abaixo:

public class QuadradoNovo extends Quadrado { public QuadradoNovo( ) { super(1,1); } public QuadradoNovo(int intBase,int intAltura) { super(intBase,intAltura); } public QuadradoNovo(float fltBase,float fltAltura) { super(fltBase,fltAltura); } public float Area( ) { float fltArea; fltArea = super.rea( ); return fltArea; } }

Curso Tcnico em Informtica

Capo Bonito - SP

105

Voc pode tambm definir como "verso final" um mtodo, seja ele construtor ou no, adicionando o modificador final, como no seguinte exemplo: public class Quadrado extends FiguraGeometrica { public final Quadrado(int intBase,int intAltura) { super (intBase, intAltura); } public final Quadrado(float fltBase,float fltAltura) { super(fltBase,fltAltura); } public final float rea( ) { float fltArea; fltArea = super.rea( ); return fltArea; } } Desta forma a classe pode ser estendida, mas seus construtores e mtodos no podem ser especializados na classe derivada. A seguir temos uma pequena tabela que descreve o resultado da aplicao do modificador final em cada componente de uma classe: Atributo Ele se torna constante, no permitindo que seu valor seja alterado. Mtodo No pode ser reescrito nas classes derivadas. Classe A classe no pode mais ser especializada, ou seja, no possvel derivar dela outras

Curso Tcnico em Informtica

Capo Bonito - SP

106

Classes Abstratas, Interfaces e Pacotes


Classes abstratas: criao e uso Esse mecanismo possibilita que uma superclasse contenha, alm de mtodos concretos (aqueles que j possuem um comportamento definido), mtodos abstratos, assim chamados devido ao fato de haver apenas a declarao deles dentro da classe. A implementao do cdigo relativo ao mtodo fica a cargo das subclasses que derivam dessa classe abstrata. A definio de uma classe abstrata dada pelo acrscimo da palavra reservada abstract aps o modificador de escopo. Para estudar este conceito, vamos criar uma pequena classe que permite a converso de unidades de medida. O cdigo para essa classe o da seguinte listagem: public abstract class ConversaoMedida { private float fltVlrOriginal, fltVlrConvertido; public ConversaoMedida(float fltVlrOriginal) { this.fltVlrOriginal = fltVlrOriginal; } public float getVlrOriginal( ) { return fltVlrOriginal; } public void setVlrConvertido(float fltVlrConvertido) { this.fltVlrConvertido = fltVlrConvertido; } public float getMedida( ) { return fltVlrConvertido; } public abstract void Convertei( ); } Observe como foi declarada a classe, com o emprego da palavra reservada abstract. Em seguida temos a declarao de dois atributos utilizados na classe, ambos do tipo float. Temos tambm a definio do construtor e de trs mtodos concretos: um responsvel pelo retorno do valor do atributo fltVIrOriginal, outro que armazena no atributo fltVIrConvertido o valor referente converso da unidade de medida e o ltimo que tem por funo retornar o valor da converso. Esses mtodos so necessrios devido ao fato de os atributos serem declarados como private, o que impossibilita o acesso direto pelas classes derivadas.
Curso Tcnico em Informtica

Capo Bonito - SP

107

Existe ainda a declarao de um mtodo abstrato (public abstract void Converte()) cuja implementao ser criada nas subclasses. Essa classe deve ser gravada com o nome ConversaoMedida.java. A seguir crie outro arquivofonte com o seguinte cdigo: public class ConvertePolCent extends ConversaoMedida { public ConvertePolCent(float fltMedida) { super(fltMedida); } public void Converte( ) { super.setVlrConvertido(super.getVlrOriginal() * 2.54f); } public float getValor( ) { return super.getMedida( ); } } Essa nova classe herda os mtodos pblicos da superclasse ConversaoMedida. Nela encontramos a definio do construtor, a implementao do cdigo referente ao mtodo abstrato Converte() e um terceiro mtodo responsvel pelo retorno do valor convertido. O construtor dessa subclasse chama, atravs da palavra reservada super, o construtor da superclasse. Na implementao do mtodo abstrato Converte(), o valor da unidade de medida (dado em polegadas) convertido em centmetros atravs da multiplicao pela constante 2.54. Como este um valor de ponto flutuante, devemos adicionar o caractere "f". S para lembrar, a converso de centmetro em decimal dada pela frmula X = Y * 2,54, em que Y representa o valor da medida em polegadas. importante notar como o valor da medida em polegadas recuperado pela chamada ao mtodo getVlrOriginal() da superclasse. Da mesma forma, para o armazenamento do valor convertido no atributo fltVIrConvertido, existente na superclasse, fazemos uso da chamada ao seu mtodo setVlrConvertido. J o mtodo getValor(), que retorna o valor calculado, tambm chama getMedida() da superclasse.

Curso Tcnico em Informtica

Capo Bonito - SP

108

Vamos escrever o cdigo para testar essa classe. O cdigo o apresentado na listagem a seguir: import javax.swing.JOptionPane; public class TesteConversao1 { public static void main(String args[]) { String StrValorPol; Float fltValorPol,fltValorCent; strValorPol = JOptionPane.showInputDialog ("Entre com a medida em polegadas: ") ; fltValorPol = Float.parseFloat(strValorPol); ConvertePolCent PolCent = new ConvertePolCent(fltValorPol); PolCent.Converte( ); fltValorCent = PolCent.getValor( ); JOptionPane.showMessageDialog(null,"Valor convertido para centmetros = " + fltValorCent,"Ateno",JOptionPane.INFORMATION_MESSAGE); } } Nesse cdigo, primeiramente referenciada a biblioteca de classes SWING com a instruo import javax.swing.JOptionPane, para que seja possvel acessar o mtodo showInputDialog da classe JOptionPane e apresentar uma caixa de dilogo de entrada de valor. O valor retomado por esse mtodo armazenado na varivel strValorPol e posteriormente convertido num valor numrico de ponto flutuante atravs da expresso fltValorPol = Float.parseFloat(strValorPol). Em seguida declarado um objeto para a classe ConvertePolCent e passado ao seu construtor o valor digitado pelo usurio. A converso efetuada quando o mtodo Converte() invocado pela instruo PolCent.Converte(). O valor resultante armazenado ento na varivel fltValorCent e por fim, apresentado ao usurio pelo mtodo showMessageDialog() da classe JOptionsPane. Compile os arquivos ConversaoMedida.java, ConvertePolCent.java e TesteConversaol .java, nessa ordem. Vamos criar ainda uma outra classe derivada de ConversaoMedida que faz o processo inverso, ou seja, converte uma medida dada em centmetros em um valor em polegadas. O clculo feito multiplicando o valor em centmetros por 0,3937.

Curso Tcnico em Informtica

Capo Bonito - SP

109

Veja a seguir o cdigo para essa classe: public class ConverteCentPol extends ConversaoMedida { public ConverteCentPol(float fltMedida) { super(fltMedida); } public void Converte( ) { super.setVlrConvertido(super.getVlrOriginal( ) * 0.3937f); } public float getValor( ) { return super.getMedida( ); } } Como o leitor deve ter percebido, o cdigo bastante parecido com o anterior, diferenciando--se principalmente na expresso de clculo. O cdigo para utilizar essa classe apresentado a seguir: import javax.swing.JOptionPane; public class TesteConversao2 { public static void main(String args[]) { String strValorCent; float fltValorPol,fltValorCent; strValorCent = JOptionPane.showInputDialog ("Entre com a medida em centmetros:"); fltValorCent = Float .parseFloat(strValorCent); ConverteCentPol CentPol = new ConverteCentPol(fltValorCent); CentPol.Converte( ); fltValorPol = CentPol.getValor( ); JOptionPane.showMessageDialog(null,"Valor convertido para polegadas = "+fltValorPol,"Ateno",JOptionPane.INFORMATION_MESSAGE); } }

Curso Tcnico em Informtica

Capo Bonito - SP

110

Interfaces De forma similar s classes abstratas, as interfaces foram a reescrita dos mtodos abstratos dentro das subclasses, uma vez que elas contm apenas a declarao. Com isso, so implementadas as suas aes. Uma caracterstica interessante que numa interface no encontramos mtodos concretos, assim como os atributos podem ser somente estticos. No pode haver tambm construtores nas interfaces. A linguagem Java permite que uma interface estenda outra interface, e neste caso, a classe que faz uso da primeira deve, obrigatoriamente, implementar todos os mtodos existentes nas interfaces envolvidas (a ancestral e a herdeira). Vamos criar uma interface para a classe de converso de medidas. Abra o editor de textos e digite o seguinte cdigo: public interface ValorConversao { public float getValor( ); } Observe que ele contm apenas a declarao de um mtodo. Grave o arquivo com o nome ValorConversao.java. A seguir, altere as seguintes linhas do arquivo ConverteCentPol.java: public class ConverteCentPol extends ConversaoMedida implementa ValorConversao { public ConverteCentPol(float fltMedida) { super(fltMedida); } public void Converte( ) { super.setVlrConvertido(super.getVlrOriginal( ) * 0.3937f); } public float getValor() { retum getMedida () ; } } H duas importantes modificaes que devem ser notadas. A primeira diz respeito incluso da expresso implements ValorConversao, logo na declarao da classe. Isso indica que a classe define a implementao para os mtodos existentes na interface. A segunda modificao reside na linha que contm a instruo return do mtodo getValor(). A referncia superclasse, obtida atravs da palavra reservada super, foi removida. Isso necessrio para todos os mtodos da interface.
Curso Tcnico em Informtica

Capo Bonito - SP

111

Compile a interface (arquivo ValorConversao.java), em seguida recompile a classe ConverteCentPol.java e o exemplo TesteConversao2.java. Organizao em pacotes Com a tecnologia Java possvel que as classes utilizadas no desenvolvimento de uma aplicao sejam organizadas no que chamamos de "pacotes". Essa organizao feita com o armazenamento dos arquivos em que se encontram definidas as classes em diretrios. Para indicar que uma classe pertence a um pacote, devemos utilizar a palavra reservada package seguida da especificao do nome do pacote, antes da declarao da classe. Crie a pasta pacotes e dentro dela outra pasta denominada clculos. Copie para essa nova pasta os arquivos FiguraGeometrica.java, Quadrado.java, Trapezio.java e Triangulo.java. Agora adicione a seguinte linha a esses arquivos: package pacotes.calculos; O ponto (.) serve para indicar um outro nvel de subdiretrio ou pasta. similar barra invertida (\). Para especificar o pacote a ser utilizado numa aplicao em Java, necessrio adicionar logo no incio do cdigo a palavra reservada import seguida da sua referncia. Em nosso caso ela definida pela expresso pacotes.calculos. Sendo assim, os trs cdigos devem ser alterados para o seguinte: Arquivo AreaQuadrado.java import pacotes.clculos.*; public class AreaQuadrado { public static void main(String args[]) { float fltAreal,fltArea2; Quadrado ObjQuadradol = new Quadrado(4,4); fltAreal = ObjQuadradol.rea( ); Quadrado ObjQuadrado2 = new Quadrado(5.5f, 5.5f); fltArea2 = ObjQuadrado2.rea( ); System.out.println("rea do quadrado 1 = "+fItAreal); System.out.println("rea do quadrado 2 = "+fltArea2); } }

Curso Tcnico em Informtica

Capo Bonito - SP

112

Arquivo AreaTrapezio.java import pacotes.clculos.*; public class AreaTrapezio { public static void main(String args[]) { int intBaseMenor,intBaseMaior; float fItAreal,fltArea2,fltBaseMenor,fltBaseMaior; intBaseMenor = 3; intBaseMaior = 5; Trapezio ObjTrapeziol = new Trapezio((intBaseMenor + intBaseMaior),4); fltAreal = ObjTrapeziol.rea(); fltBaseMenor = 3.5f; fltBaseMaior = 5.5f; Trapezio 0bjTrapezio2 = new Trapezio((fltBaseMenor + fltBaseMaior) , 4 . 5f) ; fltArea2 = 0bjTrapezio2.Area( ); System.out.println("rea do trapezio 1 = "+fItArea1); System.out.println("rea do trapezio 2 = "+fltArea2); } } Arquivo AreaTriangulo.java import pacotes.clculos.*; public class AreaTriangulo { public static void main(String args[]) { float fltAreal,fltArea2,fltBaseMenor,fltBaseMaior; Tringulo ObjTriangulol = new Tringulo(6,3); fltAreal = ObjTriangulol.rea( ); Tringulo 0bjTriangulo2 = new Tringulo(8.5f,3.5f); fltArea2 = 0bjTriangulo2.rea( ); System.out.println("rea do trapezio 1 = "+fItAreal); System.out.println("rea do trapezio 2 = "+fltArea2); } } No tente compilar esses arquivos, pois ocorrero diversas mensagens de erro. Mas no pense que isso tudo. Precisamos ajustar a varivel de ambiente CLASSPATH para o disco/diretrio em que se encontra o pacote. Seu valor utilizado pelo compilador javac para localizar as classes no momento da compilao.
Curso Tcnico em Informtica

Capo Bonito - SP

113

Como o pacote est localizado na pasta pacotes\calculos, o valor dessa varivel deve ser a identificao do disco (unidade ou partio) em que se encontram essas pastas. Supondo que o disco tenha a identificao D:, o comando a ser executado na janela de prompt do Windows o seguinte: D:\>SET CLASSPATH=D:\; Agora tente compilar os exemplos. Voc pode ver que so criados automaticamente pelo compilador os arquivos de pseudocdigo das classes (arquivos com extenso .class), como mostra a figura abaixo

Rode as aplicaes para voc ter as sadas mostradas na figura abaixo

Curso Tcnico em Informtica

Capo Bonito - SP

114