Sunteți pe pagina 1din 114

Introduo........................................................................................................................................3 Java..................................................................................................................................................3 O que Java?...............................................................................................................................3 Caractersticas da linguagem...........................................................................................................3 Java Interpretada e multiplataforma..........................................................................................3 Java Case Sensitive...................................................................................................................3 Java ultit!read........................................................................................................................

....3 "orqu# programar em Java?.............................................................................................................$ Java no mercado de tra%al!o atual...................................................................................................$ Como programar em Java................................................................................................................$ &erramentas Java..............................................................................................................................' J() *Java (evelopment )it+.......................................................................................................' O que contm?.............................................................................................................................' J,- *Java ,untime -vironment+.................................................................................................' Javac.............................................................................................................................................. /ecnologias Java............................................................................................................................... JS- *Java Standart -dition+.......................................................................................................... J-- *Java -nterprise -dition+....................................................................................................... J - *Java o%ile -dition+........................................................................................................... O que instalar?.................................................................................................................................. "rimeiro contato com o Java..........................................................................................................01 2nalise da estrutura %3sica de um programa 4ava..........................................................................03 pu%lic.........................................................................................................................................03 static...........................................................................................................................................03 void............................................................................................................................................03 *String args56+.............................................................................................................................03 7 ... 8...........................................................................................................................................03 O que uma vari3vel?...................................................................................................................0$ Como declarar uma vari3vel?....................................................................................................0$ (efinio de vari3vel e constantes.................................................................................................09 (eclarao de constantes...............................................................................................................0' Como atri%uir um valor?................................................................................................................0' /ipos de (ados..............................................................................................................................0. Os tipos primitivos em Java.......................................................................................................0. Coment3rios...................................................................................................................................0: Operadores.....................................................................................................................................0; Operadores 2ritmticos ................................................................................................................1< Operadores ,elacionais.................................................................................................................11 Operadores =>gicos.......................................................................................................................11 "assagem de par?metro..................................................................................................................13 Converso de tipos.........................................................................................................................19 -@ceAes em Java..........................................................................................................................1' Bso da estrutura trC catc!..............................................................................................................1. Bso do Dloco finallC......................................................................................................................1: Bso da clausula t!roEs..................................................................................................................1; Bso da Instruo t!roE..................................................................................................................3< -@erccios.......................................................................................................................................3; Comandos Condicionais................................................................................................................$< Bso da estrutura ifFelse..................................................................................................................$<
Curso Tcnico em Informtica

Capo Bonito - SP

-strutura sEitc!Fcase ....................................................................................................................$0 Bso do get essage e printStacG/race...........................................................................................$1 =aos de ,epetio........................................................................................................................$3 Bso do =ao for.............................................................................................................................$3 Bso do =ao E!ile.........................................................................................................................$$ -@erccios.......................................................................................................................................$9 &unAes atem3ticas.....................................................................................................................$' todo Ceil...............................................................................................................................$. todo floor..............................................................................................................................$. todo ma@...............................................................................................................................$: todo min................................................................................................................................$; todo sqrt................................................................................................................................$; todo poE...............................................................................................................................9< todo random..........................................................................................................................90 &ormatao com a Classe (ecimal&ormat....................................................................................91 InternacionaliHao com a Classe =ocale......................................................................................9$ &unAes com Strngs......................................................................................................................9' todo lengt!............................................................................................................................9. todo c!ar2t...........................................................................................................................9: todos toBpperCase e to=oEerCase......................................................................................9; todo su%string.......................................................................................................................9; todo trim...............................................................................................................................'0 todo replace..........................................................................................................................'1 todo valueOf.........................................................................................................................'3 todo inde@Of.........................................................................................................................'$ Criao de Danners........................................................................................................................'9 "rogramao orientada por o%4eto.................................................................................................'. (efinio e uso de uma classe........................................................................................................0 Construtores e Ierana..................................................................................................................:1 2dio de construtores...............................................................................................................:1 Ierana de classes.........................................................................................................................:' So%rescrita e So%recarga de todos............................................................................................;3 Conceito de polimorfismo.........................................................................................................;3 So%rescrita de mtodos..............................................................................................................;$ So%recarga de mtodos..............................................................................................................;. Classes e mtodos finais..........................................................................................................0<3 Classes 2%stratasJ Interfaces e "acotes........................................................................................0<. Classes a%stratasK criao e uso...............................................................................................0<. Interfaces..................................................................................................................................000 OrganiHao em pacotes..........................................................................................................001

Curso Tcnico em Informtica

Capo Bonito - SP

Introduo
Lesta aula aprenderemos o que JavaJ quais suas principais caractersticasJ como funciona. (iscorrerei so%re suas tecnologias atuaisJ onde se aplica cada umaJ quais as diferenas entre elasJ eJ no finalJ quais programas instalar para podermos comear M programar em Java.

Java
Java foi desenvolvida pela Sun tempo a icrosCstems em 0;;9J inicialmente usada para rodar 2pplets via internet por meio do navegador IotJava *que acompan!ava a linguagem+J como o passar do icrosoft e a Letscape tam%m incorporaram a nova tecnologia em seus navegadores.

O que Java? Java uma linguagem de programao. "or favor no confundam Java com Java ScriptJ enquanto uma uma poderosa linguagem de programao com vastos recursosJ a outra uma linguagem de script para internetJ com recursos limitados se comparados M primeira.

Caractersticas da linguagem
Java uma linguagem orientada M o%4etosJ interpretadaJ multiplataformaJ case sensitiveJ e multit!read. Segue um %reve resumo de cada uma de suas caractersticas. Java Interpretada e multiplataforma Nuando desenvolvemos uma aplicao em Java no ficamos presos M uma dada plataformaJ sendo assimJ ao desenvolvermos no sistema operacional OindoEs por e@emploJ no precisaremos recompilar o c>digo inteiro para rodar a mesma aplicao no =inu@. Dasta somente instalar o interpretador da JavaJ que tam%m mantido pela Sun icrosCstemsJ para o sistema acOSJ operacional especficoJ logo o pacote compilado no OindoEs vai rodar no =inu@J

SolarisJ ou em qualquer outro sistema operacional que possuir um interpretador Java. Java Case Sensitive (iHer que Java case sensitive significa diHer que a mesma sensvel as variaAes de letras em maiPsculo e minPsculoJ ou se4aJ se por e@emploJ voc# declarar uma vari3vel 2 e declarar outra vari3vel aJ Java far3 distino entre as duas. Java Multithread -m Java podemos e@ecutar dois comandos simultaneamenteJ sem um sa%er que o outro e@isteJ sendo que cada um possui uma c!amada diferente na mesma aplicaoJ tam%m possvel

Curso Tcnico em Informtica

Capo Bonito - SP

retardar uma tarefa enquanto no e@ecutemos outraJ como por e@emploJ esperar at que todas as vendas a%ertas no momento se4am fec!adas para podermos fec!ar o cai@a di3rio.

Porqu programar em Java?


Java 43 no mais novidade e conforme os anos avanam surgem novos recursosJ sendo assim um %om investimentosJ com uma recursividade %astante el3stica tem suas principais caractersticas como principal ponto forte. Com o passar dos anos o interpretador foi mel!orando a principal 4ustificativa para no programar em Java *de que era uma linguagem QlerdaR por ser interpretada+ foi caindoJ com o avanar da tecnologia e o %arateamento de custos do !ardEareJ !o4e em dia consider3vel *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


2tualmente Java est3 mel!or difundida na fai@a de sistemas para Oe%J com suas novas plataformas de desenvolvimento encurtando o tempo do mesmo e facilitando a vida dos programadoresJ o tempo de resposta ao cliente est3 cada veH mais curto eJ com issoJ aumentando a fatia do mercado de tra%al!o ocupada pela Java.

Como programar em Java


La linguagem de programao JavaJ todos os c>digosFfonte so primeiramente escritos em um arquivo de te@to com a e@tenso .4ava.

Curso Tcnico em Informtica

Capo Bonito - SP

O arquivo .class no contm c>digo que nativo para seu processadorS ele em seu lugar contm %Ctecodes T a linguagem de m3quina da Java Uirtual ac!ine *Java U +.

Como a Java U ac OS.

disponvel em diferentes sistemas operacionaisJ os mesmos arquivo .class icrosoft OindoEsJ Solaris Operating SCstem *Solaris OS+J =inu@J ou

so capaHes de rodar em

Curso Tcnico em Informtica

Capo Bonito - SP

Ferramentas Java
2 Java contm v3rias ferramentas que podem ser c!amadas atravs de um terminalJ vou descrever as mais usadas no comeoJ pois posteriormenteJ quando precisar das outrasJ voc# utiliHar3 uma I(- que acionar3 as mesmas automaticamente. JDK (Java Development Kit) J() o Git de desenvolvimento da linguagem JavaJ cada /ecnologia Java contm o seu J() especfico. O que contm? O J() contm todas as ferramentas necess3rias para se desenvolver aplicaAes em dada tecnologia JavaJ por e@emplo o J() S- vem com todas as ferramentas necess3rias para desenvolvermos aplicaAes para CoreV(esGtop. J ! (Java untime !vironment) O J,- a m3quina virtual JavaJ ele que interpreta da linguagem Java para a o sistema operacional instalado na m3quinaJ traduHindo as instruAes da aplicao para o mesmo.

Curso Tcnico em Informtica

Capo Bonito - SP

'

Javac O Javac o compilador JavaJ ele vem 4unto com o J(). 2tua transformando o c>digo fonte para o c>digo que vai ser interpretado pela J,-.

Tecnologias Java
Com Java podemos desenvolver sistemas para tr#s setoresK CoreV(esGtop T JSOe% T J-o%ile T J JS! (Java Standart !dition) Nuando se fala em faHer um curso de Java esto falando de um curso so%re JS-J aqui onde aprendeFse as principais funAesJ a sinta@e e a pensar em Java. Contm os recursos para desenvolvermos aplicaAes locais *CoreV(esGtop+. J!! (Java !nterprise !dition) J-- uma e@tenso da JS- adicionando a mesma mais recursosJ a tecnologia mais avanada da JavaJ 4ustamente por conter todos os recursos da JS- e mais os recursos da J--J com ela desenvolvemos no somente as aplicaAes para CoreV(esGtop mas tam%m aplicaAes Oe%. JM! (Java Mo"ile !dition) J - a tecnologia respons3vel pelo desenvolvimento de aplicaAes mo%ileJ com ela podemos programar para celulares e palms.

que instalar?
"ara comear a aprender Java voc# precisa simplesmente do J() JS- e de um editor de te@to qualquerJ nada mais."ara %ai@ar o J()J simplesmente entre no site da Sun e escol!a o apropriado para o seu sistema operacional. "ara editor de te@to eu recomendo o LotepadWWJ alm de ter o te@t !ilig!t para Java ele tam%m contm um plugin que completa automaticamente as funAes c!amadas em JavaJ parecido com uma mini I(- em modo te@to. O processo de instalao transfere todas as ferramentas e pacotes da linguagem para sua m3quina. 2o instalar o J()J criada uma pasta com todos os arquivos do Git de ferramentas da
Curso Tcnico em Informtica

Capo Bonito - SP

Sun. O camin!o default da instalao XCKY2rquivos de programasYJavaY4dG..............X. 2o instalar o J()J so criadas diversas pastas. O%serve que a pasta 4dG............ a principal em que esto todas as outras *a Sun c!amada de J2U2 IO -+. (ependendo da verso do J() instaladaJ essa pasta pode ter nomes e contePdos diferentes. Uoc# dever3 se concentrar no nome da verso que voc# %ai@ou. ,ealiHe as configuraAes das vari3veis de am%iente. 2 configurao das vari3veis depende do Sistema Operacional em que voc# est3 instalando o J(). Os procedimentos apresentados em seguida se referem M configurao para o am%iente OindoEs. Lo OindoEs 1<<<J Z" e UistaJ devemos configurar as vari3veis pelo "ainel de Controle. (efina as vari3veisJ seguindo os procedimentosK

Clique so%re o cone Meu computador com %oto direito do mouse e selecione a opo Propriedades com %oto esquerdo

Curso Tcnico em Informtica

Capo Bonito - SP

Clique so%re a%a Avanado e depois clique so%re o %oto Variveis de Ambiente

Curso Tcnico em Informtica

Capo Bonito - SP

-m XVariveis de usurioXJ clique no %oto XNovaX. 2s vari3veis de am%iente podem tam%m ser definidas em XVariveis do sistemaX em veH de XVariveis de usurioXJ como sugerido.

2 diferena queJ quando definidas em XUari3veis de usu3riosXJ elas funcionam somente para o seu usu3rioJ e em XUari3veis de sistemaX funcionam para todos os usu3rios.

Curso Tcnico em Informtica

Capo Bonito - SP

0<

Lo campo XLome da vari3velX coloque o nome da vari3vel que ser3 includaJ por e@emploJ !AVA ,-M.J e no campo XUalor da vari3velX coloque o camin!o referente M vari3vel que voc# nomeouJ C:\Arquivos de pro ramas\!ava\"d#$%&%'($' e Clique no %otoXO)X.

&aa o mesmo procedimento de incluso com as vari3veis pat! e classpat!J definindo os seus nomes e incluindo os valores correspondentesK C:\Arquivos de pro ramas\!ava\"d#$%&%'(')\bin para a vari3vel pat! C:\Arquivos de pro ramas\!ava\"d#$%&%'(')\*ib+%+ para a vari3vel classpat!. Uerifique se a instalao foi realiHada com sucesso. -ntre em um diret>rio qualquer no prompt de comando e digite 4avac seguido da tecla -nter. Se aparecer uma mensagem como X4avac no recon!ecido como um comando internoXJ porque o Java no foi instalado corretamente. Se ao digitar 4avac aparecer uma tela com instruAes de Ielp do JavaJ significa que a instalao e a configurao foram realiHadas com sucesso.
Curso Tcnico em Informtica

Capo Bonito - SP

00

Primeiro contato com o Java


InicialmenteJ para fornecer o primeiro contato com a linguagemJ ser3 apresentada uma classe em Java que escreve uma mensagem qualquer na tela. class 2ula0 7 pu%lic static void main *String args56+ 7 SCstem.out.println*XInicio do aprendiHadoX+S SCstem.out.println*X-nsino (id3tico da =inguagem JavaX+S 8 8

Curso Tcnico em Informtica

Capo Bonito - SP

01

!nalise da estrutura b"sica de um programa #ava


2 lin!a do mtodo principal possui o seguinte formatoK pu%lic static void main*String args56+S praticamente todas as aplicaAes t#m essa lin!a. 2 Pnica coisa que pode ser alterada na lin!a a vari3vel args que pode rece%er outro nome de acordo com o dese4o do programador. 2 seguirJ feita uma an3lise um pouco mais detal!ada dessa lin!a. pu"lic [ um qualificador do mtodo *pode ser usado em qualquer mtodoJ no apenas no main+ que indica que ele acessvel e@ternamente a essa classe *outras classes podem eventualmente utiliHar esse mtodo+. Isso Ptil quando uma classe necessita utiliHar alguma funcionalidade de outra classeJ caracterstica muito comum na linguagem Java. static Nualificador que indica que o mtodo deve ser compartil!ado por todos os o%4etos que so criados a partir dessa classe. void [ o valor de retorno do mtodo. Nuando no !3 nen!um valorJ ela retorna voidJ uma espcie de valor vaHio que deve ser especificado. -ste o nome do mtodo que indica ao compilador o incio do programa. [ o mtodo principalJ em que todas as vari3veisJ argumentos e instruAes so interpretados e processados para a e@ecuo do programa. (Strin# ar#s$%) [ o argumento do mtodo principal *main+ eJ por consequ#nciaJ do programa todoS ele um vetor de strings formado por todos os argumentos passados ao programa na lin!a de comando do sistema operacional quando o programa invocado. Outra variao e@istente nessa sinta@e inverter a posio dos colc!etes *56+ que aparecem ao lado direito da palavra args. "oderia ser usado o formato XS/rin 0 1 ar sXJ cu4o resultado o%tido seria o mesmoJ isto J trataFse da declarao de um vetor de strings. & ''' ( X2%reFc!avesX e Xfec!aFc!avesX delimitam um %loco de c>digo semel!ante ao D-\IL e -L( de outras linguagens como "ascal. Lo e@emplo 2ula0 a classe 2ula0 envolve todas as instruAes da classeJ inclusive o mtodo main. -sse e@emplo possui apenas o mtodo mainJ entretanto uma classe pode envolver diversos mtodos.
Curso Tcnico em Informtica

Capo Bonito - SP

03

que $ uma vari"vel?


[ um espao reservado na mem>ria do computador para guardar uma informao. Bma vari3vel pode mudar o valor armaHenado durante a e@ecuo de uma aplicao JavaJ por isso a definio do nome Qvari3velR. /oda vari3vel tem um ciclo de vidaJ sua criaoJ uso e destruio se da ao decorrer da e@ecuo da aplicao. O valor armaHenado por uma vari3vel perdido ao fec!ar a aplicao. "ara usar uma vari3vel dentro de uma aplicao Java devemos obrigatoriamente faHer a sua declarao antes de seu uso. Como declarar uma vari)vel? Uari3veis Java so declaradas dentro de mtodos. 2 declarao de uma vari3vel consiste em definir duas informaAesK /ipo da vari3vel. Identificador da vari3vel *nome+.

/oda vari3vel armaHena um tipo especifico de informaoJ sendo esse tipo definido na sua declarao. -@emplos de tipoK LumricosK *armaHena nPmeros+ 2lfaFnumricos *armaHena letras e nPmeros+ =em%rando sempre que toda vari3vel deve possuir um identificador 23CAS: Inicie sempre seu identificador com letrasJ para no gerar erros de compilaoS Lunca utiliHe caracteres especiais na declarao de vari3veis -@K J 4J 5. 6 entre outrosS Lunca utiliHe espaos em %rancos -@K salario inicialS

Curso Tcnico em Informtica

Capo Bonito - SP

0$

class 2ula0 7 pu%lic static void main *String args56+ 7 String nomeS int c>digoS dou%le valorS 8 8

%e&inio de vari"vel e constantes


Bma vari3vel ou constante um tipo de identificador cu4o nomeJ escol!ido pelo programadorJ associado a um valor pertencente a um certo tipo de dados. -m outras palavrasJ um identificador a localiHao da mem>ria *um endereo ou v3rios deles+ capaH de armaHenar o valor de um certo tipoJ para o qual se d3 um nome *o nome da vari3velJ constanteJ o%4eto etc.+ que usualmente descreve seu significado ou prop>sito. (esta formaJ todo identificador possui um nomeJ um tipo e um contePdo. Os identificadores no podem utiliHar as palavras reservadas da linguagem JavaJ assim como ocorre com outras linguagens de programao. 2 relao de palavras reservadas at a verso 0.9 do Java apresentada na ta%ela a%ai@o. 2t agora no !3 notcias de incluso de novas palavras reservadas na verso 0.'. a%stract assert ]]] %oolean %reaG %Cte case catc! c!ar class const ] ] no usado ]] continue default do dou%le else enum ]]]] e@tends final finallC float &or goto ] if implements import instanceof int interface long native LeE pacGage private protected pu%lic return S!ort static strictfp ]] Super sEitc! sCnc!roniHed t!is t!roE t!roEs transient trC void volatile E!ile

adicionado M verso 0.1

]]] adicionado M verso 0.$ ]]]] adicionado M verso 0.9


Curso Tcnico em Informtica

Capo Bonito - SP

09

%eclarao de constantes
La realidade no e@istem constantes em JavaJ o que e@iste um tipo de vari3vel com comportamento semel!ante a uma constante de outras linguagens. /rataFse de um tipo de vari3vel que no pode alterar seu contePdo depois de ter sido inicialiHadoJ ou se4aJ o contePdo permanece o mesmo durante toda a e@ecuo do programa. -m JavaJ essa vari3vel c!amada de final. -ssas QconstantesR so usadas para armaHenar valores fi@osJ geralmente definidos no incio de uma classe. -@emplosK o valor de "I na matem3tica *3.0$+J o valor da acelerao na fsica *; :0 mVs1+ a quantidade de milissegundos e@istentes em um segundo *0.<<<+ etc. "ara a declarao de XconstantesX em Java utiliHaFse a palavra reservada final antes da definio do tipo da vari3velJ como nos e@emplos seguintesK 7ina* dou%le pi ^ 3.0$S 7ina* int miliSegundos"orSegundo ^ 0<<<S Caso um segundo valor se4a atri%udo a uma vari3vel final no decorrer da classeJ o compilador gera uma mensagem de erro. Lo o%rigat>rio inicialiHar o contePdo de uma vari3vel final no momento de sua declarao. [ possvel realiHar esses dois processos em locais distintosJ conforme apresentado em seguida. final int milimetros"orCentimetroS . VV lin!as de c>digo milimetros"orCentimetro ^ 0<S

Como atribuir um valor?


/oda vari3vel armaHena um valor. "ara definir ou alterar um valor armaHenado por uma vari3vel devemos faHer uma 2/,IDBI_`O. "ara faHer essa atri%uio devemos usar um operador de atri%uioJ em Java esse operador definido pelo caractere ^

Curso Tcnico em Informtica

Capo Bonito - SP

0'

Tipos de %ados
2ssim como em outras linguagens de programaoJ antes de utiliHar vari3veis necess3rio definir que tipo de dado ela vai armaHenar. Caso se4a necess3rio armaHenar a quantidade em estoque de um determinado produtoJ podeFse declarar uma vari3vel do tipo inteiraJ ou para armaHenar valores monet3riosJ possvel declarar uma vari3vel do tipo dou%le e assim por diante. Os tipos de dados em Java so port3veis entre todas as plataformas de computadores que suportam essa linguagem. La maioria das linguagensJ quando um tipo de dado utiliHadoJ por e@emploJ um tipo inteiroJ pode ser que para uma determinada plataforma esse nPmero se4a armaHenado com 0' %its e em outra com 31 %its. -m Java isso no ocorreJ uma veH que um tipo de dado ter3 sempre a mesma dimensoJ independentemente da plataforma utiliHada. -ste e muitos outros recursos de porta%ilidade de Java permitem que os programadores escrevam programas sem con!ecer a plataforma de computador em que eles sero e@ecutados. Os tipos primitivos em Java' /ipo Nuantidade de %its Ualores c!ar 0' aYu<<<<a a aYu&&&"a %Cte : F01: aW 01. int 31 F1.0$..$:3.'$: aW1.0$..$:3.'$. s!ort 0' F31..': a W 31..'. long '$ F;.113.3.1.<3'.:9$...9.:<: a W;.113.3.1.<3'.:9$...9.:<. float 31 F3.$<1;13$.-W3: a W3.$<1;13$.-W3: dou%le '$ F0..;.';303$:'1309.<-W3<:a W0..;.';303$:'1309.<-W3<: %oolean : true ou false 2t pouco tempo atr3sJ quando os recursos de !ardEare da m3quina eram mais limitadosJ e@istia a preocupao de reduHir ao m3@imo a quantidade de mem>ria utiliHada por um programa. 2nalisando a ta%ela acimaJ um programador c!egaria M concluso de que para armaHenar a idade de uma pessoaJ deveria ser utiliHado o tipo %CteJ pois possui uma fai@a de valores suficiente para armaHenar a idade que uma pessoa normal pode atingirJ dispensando outros tipos numricos que ocupariam mais espao na mem>ria.

Curso Tcnico em Informtica

Capo Bonito - SP

0.

Coment"rios
Os coment3rios so lin!as adicionadas ao programa que servem para facilitar seu entendimento por parte do programadorJ ou ainda por uma outra pessoa que o consulte. -ssas lin!as no afetam o programa em siJ pois no so consideradas parte do c>digo. O Java aceita tr#s tipos de coment3rioK de uma lin!aJ de mPltiplas lin!as e de documentao. "ara inserir coment3rios de lin!a Pnica utiliHamFse VV *duas %arras+ em qualquer local do programa e tudo o que estiver escrito depois desse sinal e na mesma lin!a ser3 considerado um coment3rio. "ara inserir coment3rios que envolvam v3rias lin!asJ utiliHaFse V] *%arra asterisco+ para demarcar o incio e ]V *asterisco %arra+ para o finalJ ou se4aJ tudo o que estiver entre esses dois sinais ser3 considerado coment3rio. O terceiro tipo semel!ante ao coment3rio de mPltiplas lin!asJ entretanto tem o prop>sito de possi%ilitar a documentao do programa por meio de um utilit3rio *4avadoc+ fornecido pela Sun 4unto com o S(). -sse tipo de coment3rio iniciaFse com V]] e encerrado com ]V. O e@emplo a%ai@o demonstra a utiliHao dos coment3rios *colocados em negrito+.

Curso Tcnico em Informtica

Capo Bonito - SP

0:

899 .:emp*o';';: 1. 3. $. 9. .. :. ;. 0<. 00. 01. 03% 0$. 0$. 0'. 0.. 0:. 8 8 .ssa c*asse demonstra a uti*i<ao de variveis em uma c*asse em !ava% So dec*aradas variveis do tipo int e doub*e% - e:emp*o tamb=m demonstra como imprimir o conte>do das variveis na te*a 98 7 pu%lic static void main *String args 56+ 7 int @ ^ 0<J C ^ 1<S VV dec*arao de variveis do tipo inteiro dou%le dolar ^1.'1S 89 As *in?as se uintes enviam o conte>do das variveis para a te*a 98 SCstem.out.println*@+S SCstem.out.printIn*C+S SCstem.out.println*d>lar+S

'. pu%lic class -@emplo<1<1

peradores
2 linguagem Java oferece um amplo con4unto de operadores destinados M realiHao de operaAes aritmticasJ l>gicas e relacionaisJ com a possi%ilidade de formar e@pressAes de qualquer tipo. 2lm dos operadores matem3ticos *aritmticos+J e@istem tam%m operadores l>gicos e relacionaisJ conforme a%ordado em seguida.

Curso Tcnico em Informtica

Capo Bonito - SP

0;

peradores !ritm$ticos
/a%ela a%ai@o apresenta os operadores aritmticos usados em Java @uno 2dio Su%trao ultiplicao (iviso ,esto da diviso inteira Sinal negativo Sinal positivo Incremento unit3rio (ecremento unit3rio Sina* W F ] V c F W WW FF .:emp*o ZWb ZFb Z]b ZVb Zcb FZ WZ WWZ ou ZWW FFZ ou ZFF

-ntre os operadores presentes na ta%ela acimaJ talveH os de decremento *FF+ e incremento *WW+ causem alguma dPvidaJ principalmente para os programadores iniciantes. -ntretantoJ sua utiliHao e@tremamente simplesK como o pr>prio nome diHJ o operador de incremento incrementa *aumenta+ o valor de uma vari3vel qualquer em umJ ou se4aJ supondo que uma vari3vel c!amada idade possua o contePdo 0<J ao rece%er o operador de incremento *idadeWW+J seu contePdo passa a ser onHe *0<W0+. O mesmo vale para o operador de decrementoJ logicamente reduHindo em um o contePdo da vari3vel. O e@emplo 1.3 mostra um programa em Java com a utiliHao de alguns operadores. Os coment3rios aparecem no pr>prio programa com a utiliHao das %arras duplas *aVVa+. -m JavaJ para imprimir diversas vari3veis na tela uma ao lado da outraJ utiliHado o operador de concatenao *W+J ao contr3rio de outras linguagens que utiliHam a vrgula *J+ como separador. La lin!a :J por e@emploJ a seqd#ncia *XZ ^X W @+ indica que o trec!o entre aspas ser3 enviado para a tela concatenado com *W+ o contePdo da vari3vel @. "ara enviar uma frase qualquer para a telaJ necess3rio coloc3Fla entre aspasS 43 para enviar o contePdo de uma vari3velJ as aspas no devem ser utiliHadas.

Curso Tcnico em Informtica

Capo Bonito - SP

1<

class -@emplo<1<3 7 pu%lic static void main *String args56+ 7 VV declarao e inicialiHao de vari3veis int @ ^ 0<S int C ^ 3S VV v3rias operaAes com as vari3veis SCstem.out.println*XZ ^ XW @+S SCstem.out.println*Xb ^ XW C+S SCstem.out.printIn*XFZ ^ XW*F@++S SCstem.out.println*XZVb ^ XW*@VC++S SCstem.out.println*X,esto de Z por b ^ XW *@cC++S SCstem.out.println*XInteiro de Z por b ^ XW *int+*@VC++S SCstem.out.printIn*XZ W 0 ^ XW *WW@++S 8 8

Outro ponto a ser o%servado no e@emplo 1.3 se refere M utiliHao do mtodo println da classe SCstem. Conforme indica a figura 1.1J para cada comando println usado ocorre uma mudana de lin!a na tela. -ssa caracterstica controlada pelas letras In inseridas no final do comando printlnJ isto J o comando imprime o que est3 entre par#nteses e em seguida imprime um final de lin!a. 2 pr>@ima informao a ser impressa aparece na outra lin!a. Caso se4a necess3rio imprimir diversos valores na mesma lin!aJ alm de utiliHar o operador de concatenaoJ podeFse utiliHar o comando println sem o In no final da seguinte formaK SCstem.out.print *X(ados a serem impressosX+. 2o compilar e e@ecutar corretamente o e@emplo 1.3J aparece a tela de e@ecuo mostrada na figura a%ai@o.

Curso Tcnico em Informtica

Capo Bonito - SP

10

peradores 'elacionais
Os operadores relacionais possi%ilitam comparar valores ou e@pressAesJ retornando um resultado l>gico verdadeiro ou falso. 2 ta%ela a%ai@o demonstra os operadores relacionais usados em Java. @uno Igual Igualdade de String (iferente aior que aior ou igual a enor que enor ou igual a 2ica 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 !ava troca o duplo igual (= =) pelo sinal de atribuio (igual simples). "sso nem sempre acarreta erro de compilao gerando resultados imprevis#veis ao programa. Procure prestar muita ateno na sua utilizao nos programas. CaractereAsB uti*i<adoAsB ^^ var.equals*QstringR+ e^ f f^ g g^ .:emp*o Z^ ^ b Z.equals*Q4avaR+ Ze^b Zfb Zf^b Zgb Zg^b

peradores ()gicos
So operadores que permitem avaliar o resultado l>gico de diferentes operaAes aritmticas em uma e@presso. Os operadores l>gicos usados em Java so demonstrados na ta%ela a%ai@o @uno - l>gico ou 2L( Ou l>gico ou O, Legao ou LO/ CaractereAsB uti*i<adoAsB hh ii e .:emp*o Zhhb Ziib eZ

Curso Tcnico em Informtica

Capo Bonito - SP

11

Passagem de par*metro
Bma aplicao em Java pode rece%er valores a partir da lin!a de comando *prompt+J isto J no momento em que ele e@ecutado. Nuando um par?metro rece%ido por um programaJ ele pode ser manipulado internamente e usado em um procedimento qualquer. O e@emplo seguinte *1.$+ demonstra a utiliHao da passagem de par?metros a um programa. -le apresenta na tela as palavras que o usu3rio digitar no momento da e@ecuo do programa por meio da lin!a de comando. class -@emplo<1<$ 7 pu%lic static void main *String args56+ 7 SCstem.out.println*args5<6+S VV imprime o l1 argumento na tela SCstem.out.println*args506+S VV imprime o 1F argumento na tela 8 8 2o e@ecutar o e@emplo 1.$J o usu3rio deve colocar o comando no seguinte formatoK CKYf4ava -@emplo<1<$ argumentol argumento1 -@emploK CKYf4ava -@emplo<1<$ aprendendo Java 2o digitar esta lin!a de comandoJ o%viamente depois de o programa ter sido compiladoJ o programa vai imprimir na tela os dois argumentos inseridos pelo usu3rio. -ssas palavras so passadas ao programa por meio do vetor args e@istente na lin!a do mtodo main. 2 vari3vel args um vetor de string *na realidade string no uma simples vari3vel e sim um o%4eto que ser3 estudado mais M frente+ que possui o primeiro elemento do vetor com ndice < *Hero+. Sendo assimJ cada palavra digitada na lin!a de comandoJ separada por um espaoJ ser3 armaHenada em um ndice do vetor args *args5<6 armaHena o primeiro argumentoJ args506 o segundo e assim sucessivamente+. "ara que este e@emplo funcione corretamenteJ o usu3rio deve digitar pelo menos duas palavras
Curso Tcnico em Informtica

Capo Bonito - SP

13

na lin!a de comandoS caso contr3rioJ um erro apresentado no momento da e@ecuoJ por meio da gerao de uma e@ceo da linguagem *item tratado mais adiante+. -sse fato ocorre porque o programa foi ela%orado para imprimir na tela os dois primeiros argumentos passados *args5<6 e args506+. 2 figura 1.3 demonstra a tela de resultado da e@ecuo do e@emplo 1.$. O%serve que foram enviados dois nPmeros no momento da e@ecuoJ os quais foram impressos na tela. Os argumentos passados na lin!a de comando sempre se referem a Xvari3veisX do tipo string devido M sinta@e utiliHada no mtodo principal *main+J ou se4aJ args um vetor de tipos string. "or este motivoJ mesmo que se4am passados nPmeros como par?metrosJ eles sero considerados caracteres.

/ela de e@ecuo do e@emplo 1.$. "ara que o leitor v3 se acostumando M linguagemJ importante alterar este e@emploJ tra%al!ando com mais de dois par?metros. 2pesar de o e@emplo tratado ser relativamente simplesJ ele se refere a uma importante caracterstica da linguagem JavaK a passagem de par?metros entre mtodos.

Curso Tcnico em Informtica

Capo Bonito - SP

1$

Converso de tipos
O e@emplo anterior demonstrou que todos os dados rece%idos como argumentos em uma aplicao referemFse a valores do tipo string. -ssa caracterstica gera um inconveniente no caso de ser necess3ria a utiliHao de valores de outro tipo. -m diversos tipos de programa em JavaJ preciso realiHar a converso entre os diversos tipos primitivos e@istentes. 2 linguagem Java possui uma srie de classes que realiHam essa tarefa. 2 ta%ela 1.' apresenta algumas das principais formas de converso de tipos. 2s palavras principais usadas na converso aparecem em negrito. Lo decorrer do livroJ diversas veHes sero utiliHados esses conversores de tipos. Supondo a varive* C int @ ^ 0< int @ ^ 0< float @ ^ 0<.9 String @ ^ X0<X String @ ^ X1<.9$X String @ ^ X1<.9$X String @ ^ XJavaX int @ ^ 0< float @ ^ 0<.39 dou%le @ ^ 19$.3$ %Cte @56 F *@ um vetor de %Ctes+ Converte em &loat dou%le Int Int &loat dou%le Uetor de %Ctes String String String String D recebe o va*or convertido &loat C ^ *float+ @ dou%le C ^ *dou%le+ @ Int C ^ *int+ @ int C ^ Integer.parseInt*@+ &loat C ^ &loat.parse&loat*@+ dou%le C ^ (ou%le.parse(ou%le*@+ DCte %56 ^ @.getDCtes*+ String C ^ String.valueOf*@+ String C ^ String.valueOf*@+ String C ^ String.valueOf*@+ String C ^ neE String *@+

2s conversAes mais usadas em Java. O e@emplo 1.9 seguinte demonstra a criao de uma classe que rece%e tr#s valores da lin!a de comando do (OS *notaiJ nota1 e tra%al!o+ e calcula a mdia entre as notasJ utiliHando o conversor de tipo string para dou%le. "ara que este e@emplo se4a e@ecutado com sucessoJ e@iste a necessidade de o usu3rio entrar com tr#s ciados numricos na lin!a de comandoJ conforme apresenta o c>digo a%ai@oK

Curso Tcnico em Informtica

Capo Bonito - SP

19

class -@emplo<1<9 7 pu%lic static void main *String args56+ 7 dou%le nota0J nota1J tra%al!oJ mediaS nota0 ^ (ou%le.parse(ou%le*args5<6+S nota1 ^ (ou%le.parse(ou%le*args506+S tra%al!o ^ (ou%le.parse(ou%le*args516+S media ^ *notalWnota1Wtra%al!o+V3S SCstem.out.println*X edia ^ XW media+S 8 8

Funcionalidades mais importantes do exemplo 2.5: =in!a 9K contm a declarao das vari3veis usadas na classe. =in!as ' a :K os par?metros so transferidos para as vari3veisJ com seus tipos devidamente convertidos por meio de (ou%le.parse(ou%le*+. =in!a ;K realiHado o c3lculo da mdia. =in!a 0<K a mdia impressa na tela.

/ela de e@ecuo do e@emplo 1.9

+,ce-es em Java
2s e@ceAes em Java referemFse aos erros que podem ser gerados durante a e@ecuo de um programa. -sses erros podem e devem ser controlados *tratados+ dentro de um programaJ pois muito comum que diversos tipos de e@ceo ocorram durante o processo de e@ecuo. 2 linguagem Java possi%ilita a realiHao desse controle de erros por meio da estrutura trCFcatc!F finallC e da cl3usula t!roEs.
Curso Tcnico em Informtica

Capo Bonito - SP

1'

.so da estrutura tr/ catch


2 estrutura trC catc! foi e@emplificada anteriormente e o leitor pjde notar que o o%4etivo de sua utiliHao a previso de erros de e@ecuo. -ssa estrutura tem como funo desviar a e@ecuo de um programa caso ocorram certos tipos de erroJ predefinidos durante o processamento das lin!asJ e evitar que o programador precise faHer testes de verificao e avaliao antes de realiHar certas operaAes. Nuando um erro ocorreJ ele gera uma e@ceo que pode ser tratada pelo programa. -@istem muitas e@ceAes que podem ser geradas pelas mais diversas classes e enumeradas seria um processo dispendioso e desnecess3rioJ pois as e@ceAes que devem ser o%rigatoriamente tratadas so apontadas pelo pr>prio compilador. Leste livroJ as e@ceAes sero devidamente comentadas toda veH que uma e@ceo diferente for utiliHada nos e@emplos. 2 estrutura trC catc! possui a seguinte sinta@eK trC 7 gcon4unto de instruAesf 8 catc! *Lome da e@ceo+ 7 gtratamento do erro 0f 8 catc! *Lome da e@ceo+ 7 gtratamento do erro 1f 8 catc! *Lome da e@ceo+ 7 gtratamento do erro nf 8 /oda veH que a estrutura trC utiliHadaJ o%rigatoriamente em seu encerramento *na c!ave final+ deve e@istir pelo menos um catc!J a no ser que ela utiliHe a instruo finallCJ conforme a%ordado em seguida. 2 sinta@e apresentada pode ser interpretada comoK tente e@ecutar o

Curso Tcnico em Informtica

Capo Bonito - SP

1.

con4unto de instruAes entre as c!avesS se !ouver algum erroJ e@ecute seu tratamento no catc!. (epois de tratado o erroJ a e@ecuo do programa continua a partir do final do Pltimo catc!. Os erros gerados pelo programa sempre esto relacionados com as classes usadas. "or e@emploJ o mtodo parse&loat da classe &loat *&loat.parse&loat+ pode gerar um erro de converso numrica *Lum%er&ormat-@ception+J isto J esse tipo de erro pode ser tratado quando essa classe for usada no programa. Lo faH sentido verificar se ocorrer3 um erro de entrada e sada de dados *lO-@ception+ quando a classe &loat for utiliHada. "ortantoJ o tratamento de erros deve ser realiHado de forma coerenteJ de acordo com as classes utiliHadas no programa. 2ica Bm erro muito comum entre os iniciantes na linguagem Java usar a estrutura trC sem adicionar nen!um catc!. Isso gera erro de compilaoJ pois ao usar trCJ o%rigat>ria a presena de pelo menos um catc!. Outro erro comum esquecerFse de encerrar a c!ave do trC antes de iniciar um catc!. Nuando isso ocorreJ o compilador apresenta uma mensagem de erro do tipo XtrC Eit!out catc!XJ ou se4aJ se o catc! for inserido no trCJ o compilador ac!ar3 que ele nem e@iste. -bservao 2 linguagem Java possui deHenas de erros que podem ocorrer durante a e@ecuo de uma k classe. Sero demonstrados e comentados apenas os que forem utiliHados em nossos e@emplos

.so do 0loco &inall/


O %loco finallC faH parte da estrutura trC catc!J inserido geralmente ap>s o Pltimo catc!. O finallC opcional e fornece um con4unto de c>digos que sempre e@ecutadoJ independente de uma e@ceo ocorrer ou no. Nuando se utiliHa a estrutura trC sem nen!um %loco catc!J o %loco finallC o%rigat>rioJ isto J e@iste a possi%ilidade da utiliHao das estruturas trCFcatc!J trCF catc!FFfinallC ou ainda trCFfinallC. O o%4etivo do finallC manter c>digos para li%erao de recursosJ adquiridos em seu %loco trC correspondente. Bm e@emplo pr3tico de sua utiliHao ser3 mostrado mais adiante na manipulao de arquivos te@toJ em que o %loco finallC ser3 utiliHado para fec!ar um arquivo ap>s a%riFloJ ou se4aJ li%erar um recurso e@terno depois de adquiriFlo.

Curso Tcnico em Informtica

Capo Bonito - SP

1:

(urante a e@ecuo de um programaJ caso nen!uma e@ceo ocorraJ os %locos catc! no so e@ecutados e o controle prossegue para o %loco finallCJ que li%era o recurso e passa a e@ecutar a primeira instruo ap>s o %loco finallC. Caso ocorra alguma e@ceoJ a e@ecuo do programa ser3 desviada para o grupo de instruAes catc!. 2 seguirJ independentemente de ter !avido ou no uma e@ceoJ o controle passa para o %loco finallC para li%erao de recursos. esmo que no e@ista nen!uma instruo catc! referente M e@ceo geradaJ o controle passa pelo %loco finallC. Isso pode ser Ptil ao desenvolvedor caso necessite controlar apenas alguns tipos de erroJ pois erros diferentes dos tratados podem ser desviados para o finallC. 2 figura a%ai@o es%oa um flu@ograma que representa a seqd#ncia de e@ecuo da estrutura trCFcatc!FfinallC.

Seqd#ncia de e@ecuo trCFcatc!FfinallC.

.so da clausula thro1s


-m alguns momentosJ pode ocorrer de o programador no querer realiHar controle so%re uma e@ceoJ isto J no dese4ar tratar um erro. 2 linguagem Java permite ao programador que um erro se4a XdescartadoXJ mesmo que ele ocorraJ entretanto preciso que esse fato se4a informado na declarao do mtodo.

Curso Tcnico em Informtica

Capo Bonito - SP

1;

-sse processo pode ser realiHado pela cl3usula t!roEs. O%serve o e@emplo 3.$. -le apresenta uma alternativa para entrada de dados pelo teclado sem a o%rigatoriedade do tratamento da e@ceo IO-@ception. 0. 1. 3. $ 9. '. .. :. ;. 0<. 8 8 class -@emplo<3<$ 7 pu%lic static void main *String args56+ t!roEs IO-@ception 7 Duffered,eader dadoS SCstem.out.println*X-ntre com seu nomeX+S dado^ neE Duffered,eader*neE InputStream,eader*SCstem.in++S SCstem.out.println*XSeu nome X W dado.read=ine*++S

@unciona*idades mais importantes do e:emp*o =in!a 3K define que a e@ceo IO-@ception no ser3 tratada no mtodo main *t!roEs IO-@ception+. -sse fato torna desnecess3rio definir a estrutura trC catc! para tratar esse erroJ mesmo sendo uma e@ceo considerada o%rigat>ria pela linguagem Java. -@perimente compilar o e@emplo sem a cl3usula Xt!roEs IO-@ceptionX. 2parece a seguinte mensagem de erroK Xmust %e caug!t or declared to %e t!roEnX. O compilador est3 informando que e@istem duas possi%ilidades para corrigir o erroK ou realiHa seu tratamento *com trC catc!J por e@emplo+J ou o define como descartadoJ conforme fiHemos neste e@emplo por meio da cl3usula t!roEs.

.so da Instruo thro1


Conforme comentado anteriormenteJ a linguagem Java possui muitas e@ceAesJ incluindo sua gerao e tratamento. O o%4etivo deste item apenas demonstrar que um desenvolvedor Java pode criar suas pr>prias e@ceAes e dispar3Flas no momento que necessitarJ mesmo que elas no ocorram durante a e@ecuo do programa. 2 instruo t!roE *ou comandoJ ou ainda palavraFc!ave se voc# preferir+ utiliHada para disparar uma e@ceoJ isto J ela pode forar que uma e@ceo ocorra. Com a instruo t!roE possvel criar uma e@ceo pr>priaJ dando a ela um nome qualquer. O e@emplo 3.9 mostra como possvel utiliHar a instruo t!roE para gerar uma e@ceo.

Curso Tcnico em Informtica

Capo Bonito - SP

3<

O programa segue sua e@ecuo normal at encontrar a lin!a : em que a e@ceo foradaJ na qual est3 definida por meio de t!roE neE -@ception*Xnome da e@ceoX+. La lin!a 0< a e@ceo tratada. -videntementeJ este e@emplo est3 simples demais e %em longe de uma aplicao realS serve apenas para demonstrar a gerao de uma e@ceo. 0. 1. 3. $. 9. '. .. :. ;. 0<. 00. 01. 03. 0$. 09. 8 8 8 8 catc! *-@ception 7 SCstem.out.print*Xa linguagem Java?X+S in!a-@cecao+ class -@emplo<3<9 7 pu%lic static void main *String args56+ 7 trC 7 SCstem.out.print*XComo aprender X+S t!roE neE -@ception*X in!a-@cecaoX+S

Curso Tcnico em Informtica

Capo Bonito - SP

30

+ntrada de dados pelo Teclado


Bma aplicao provavelmente no rece%er3 dados pelo prompt durante a e@ecuo do programa. O mais comum rece%er os dados do usu3rio por meio do teclado. O e@emplo 1.' seguinte aprimora o e@emplo 1.9J rece%endo as notas por meio do usu3rio e em tempo de e@ecuo e realiHando sua validao. 0 import 4ava.io.]S 1 class -@emplo<1<' 37 $ pu%lic static void main *String args56+ 9 7 ' String s ^ XXS . float nota0 ^ <J nota1 ^ <J tra%al!o ^ <J media ^ <S : (ataInputStream dadoS ; trC 0< 7 00 SCstem.out.println*X-ntre com a nota 0X+S 01 dado ^ neE (ataInputStream*SCstem.in+S 03 s ^ dado.read=ine*+S 0$ nota0 ^ &loat.parse&loat*s+S 09 SCstem.out.println*X-ntre com a nota 1X+S 0' dado ^ neE (ataInputStream*SCstem.in+S 0. s ^ dado.read=ine*+S nota1 ^ &loat.parse&loat*s+S 0: SCstem.out.println*X-ntre com a nota do /ra%al!oX+S 0; dado ^ neE (ataInputStream*SCstem.in+S 1< s ^ dado.read=ine*+ S 10 tra%al!o ^ &loat.parse&loat*s+S 11 media ^ *notalWnota1Wtra%al!o+V3S 13 SCstem.out.println*X edia K XW media+S 1$ 8 19 catc! *IO-@ception erro+ 1' 7 1. SCstem.out.println*XIouve erro na entrada de dadosX+S 1: 8 1; catc! *Lum%er&ormat-@ception erro+ 3< 7 30 SCstem.out.println*XIouve erro na conversoJ digite apenas caracteres numricosX+S 31 8 33 8
Curso Tcnico em Informtica

Capo Bonito - SP

31

2o ser e@ecutadaJ a classe do e@emplo 1.' solicita os tr#s valores ao usu3rio *nota0J nota1 e tra%al!o+ e no final demonstra a mdia dos valores digitadosJ conforme a figura a%ai@o

&igura 1.9 F /ela de e@ecuo do e@emplo 1.' &uncionalidades mais importantes do e@emplo 1.'K Ein?a $: contm uma diretiva de compilaoJ isto J um apontamento para uma classe e@terna que ser3 usada durante o processo de compilao. 2 instruo import indica que determinado pacote de classes deve ser carregado no momento da compilao. Isso necess3rio quando uma classe precisa utiliHar recursos 43 definidos em outras classes. O e@emplo c!ama o pacote 4ava.io que contm uma srie de classes especialiHadas em entrada e sada de dados. [ usada a classe 2ata*nputStream que pertence ao pacote 4ava.io. -ntenda o pacote como um grupo de classes de mesmo tipo armaHenadas em uma pasta qualquer. O asterisco presente em import 4ava.io.] indica que devem ser carregadas todas as classes do pacote 4ava.io. Bma alternativa realiHar a declarao da seguinte formaK import 4ava.io.(atalnputStreamJ indicando que ser3 utiliHada apenas a classe (atalnputStream. -bservao $ linguagem !ava possui um pacote de classes padro %ue & carregado toda vez %ue uma classe & compilada. 'rata(se do pacote )ava.lang. *e esse pacote default no fosse carregado automaticamente mesmo para enviar %ual%uer informao na tela por meio de *+stem.out.println seria necessrio declarar explicitamente a diretiva. ,o caso da classe *+stem seria necessria a seguinte declarao- import )ava.lang.*+stem. ,o programa . no gera over/ead (sobrecarga) normalmente & utilizado para reduzir o taman/o do c0digo. $ utilizao do . pode gerar certa confuso uma vez %ue 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

supon/a %ue um programa utiliza os pacotes )ava.util.. (o asterisco indica todas as classes do pacote 1til) e )ava.net.. (o asterisco indica todas as classes do pacote net). ,o & poss#vel utilizar )ava.. ac/ando %ue os dois pacotes (1til e net) sero incorporados ao programa. 2 cap#tulo 3 aborda a manipulao de pacotes com mais detal/es. Ein?a F: declara um o%4eto c!amado dado a partir da classe (atalnputStream. Lo se preocupe com isso ainda. -m outro captulo sero detal!ados a criao e o funcionamento de classes e o%4etos. Lo momentoJ entenda (atalnputStream como uma classe que possi%ilita a entrada de dados via teclado. Ein?a G: contm o %loco trC *tente+. Dloco um trec!o de c>digo delimitado por a%re e fec!aF c!aves. O %loco trC sempre atua em con4unto com um ou v3rios %locos catc!. Lo e@emplo o %loco trC formado pelo con4unto de todas as instruAes localiHadas entre as lin!as 0< e 1:. Ein?a $;: o o%4eto dado rece%e o que foi digitado pelo usu3rio por meio de neE (atalnputSream*SCstem.in+. -ssa lin!a pode gerar algum tipo de erroJ uma veH que manipula troca de dados entre um perifrico *teclado+ e a mem>ria. Caso ocorra algum erroJ a e@ecuo do programa ser3 desviada para a lin!a 19 que trata de erros de entrada e sada de dados. Ein?a $): a vari3vel s rece%e o contePdo te@to do o%4eto dado. -ssa lin!a contm o mtodo read=ine*+ da classe (atalnputStream respons3vel por ler uma lin!a de te@to que foi digitada pelo usu3rio e atri%uFla M vari3vel s. O%servaFse que esse mtodo foi descontinuado pela Sun. "or este motivoJ ao compilar a classeJ aparece uma o%servao *Lote+ alertando que o mtodo deprecated isto J trataFse de um mtodo o%soleto. Lo entantoJ mesmo com essa o%servao gerada pelo compiladorJ a classe pode ser e@ecutada normalmente. BtiliHamos o mtodo read=ine*+ da classe (atalnputStream para poder o%servar o funcionamento do deprecated. 2 pr>pria Sun recomenda que se4a utiliHado o mtodo read=ineJ porm da classe Duffered,eaderJ conforme veremos a diante Ein?a $H: o contePdo da vari3vel s convertido em uma vari3vel numrica do tipo float por meio de &loatparse&loat. Lesse momento pode ocorrer um erro de conversoJ caso o usu3rio ten!a digitado um contePdo diferente de nPmero. Caso ocorra algum erroJ a e@ecuo do programa desviada para a lin!a 33 que trata de erros de converso de tipos.
Curso Tcnico em Informtica

Capo Bonito - SP

3$

Ein?as $& a $G e ;$ a ;): so praticamente id#nticas Ms lin!as 00 a 0$. 2 diferena se refere M utiliHao de outras vari3veis. 2 seguir apresentado o e@emplo 1..J similar a 1.'J porm utiliHando o mtodo read=ine da classe Duffered,eader. O%serve as lin!as em negrito. O resultado da e@ecuo id#ntico ao e@emplo 1.'. 0 1 3 $ 9 ' . : ; 0< 00 01 03 0$ 09 0' 0. 0: 0; 1< 10 11 13 1$ 19 1' media ^ *notalWnota1Wtra%al!o+V3S
Curso Tcnico em Informtica

import 4ava.io.]S class -@emplo<1<. 7 pu%lic static void main *String args 5 6 + 7 String s ^ XXS float notai ^ <J nota1 ^ <J tra%al!o ^ <J media ^ <S Duffered,eader dadoS trC 7 SCstem.out.println*X-ntre com a nota 0X+S dado ^ neE Duffered,eader*neE InputStream,eader*SCstem.in++S s ^ dado.read=ine*+ S notai ^ &loat.parse&loat*s+S SCstem.out.println*X-ntre com a nota 1X+S dado ^ neE Duffered,eader*neE InputStream,eader*SCstem.in++S s ^ dado.read=ine*+ S nota1 ^ &loat.parse&loat*s+S SCstem.out.println*X-ntre com a nota do /ra%al!oX+S dado ^ neE Duffered,eader*neE InputStream,eader*SCstem.in++S s ^ dado.read=ine*+S tra%al!o ^ &loat.parse&loat*s+S

Capo Bonito - SP

39

1. 1: 1; 3< 30 31 33 3$ 39 3' 3. 3: 8 -@emplo 1.. 8 8 8 8

SCstem.out.println*X edia K XW media+S catc! *IO-@ception e+ 7 SCstem.out.println*XIouve erro na entrada de dadosX+S catc! *Lum%er&ormat-@ception e+ 7 SCstem.out.println*XIouve erro na conversoJ digite apenas caracteres numricosX+S

2pesar de os e@emplos 1.' e 1.. funcionarem perfeitamenteJ eles no so adequados para o atual padro de am%iente gr3ficoJ so%retudo para o am%iente de microcomputadores. 2 seo seguinte apresenta uma forma mais agrad3vel de entrada de dados durante a e@ecuo de uma aplicao em Java por meio da classe JOption"ane. Cai:a de 2i*o o para .ntrada de 2ados 2 linguagem Java dispAe de uma forma gr3fica para rece%er dados do usu3rio. /rataFse da utiliHao de cai@as de di3logoJ no caso a cai@a gerada a partir da classe JOption"ane que ser3 vista em detal!es no captulo ;J seo ;.00. < fato de rece%er dados de forma gr3fica parece dar mais motivao aos iniciantes em JavaJ 43 que permite descartar a tela preta do prompt. "or este motivoJ os e@emplos seguintes utiliHam essa forma para entrada de dados do usu3rio. O e@emplo 1.: refaH o e@emplo 1..J utiliHando a classe JOption"ane para entrada de dados.

Curso Tcnico em Informtica

Capo Bonito - SP

3'

0 1 3 $ 9 ' . : ; 0< 00 01 03 0$ 09 0' 0. 0: 0; 1<J 10 11 13 1$J 19 1' 1.

import 4ava@.sEing.JOption"aneS class -@emplo<1<: 7 pu%lic static void main *String args56+ 7 String au@ ^ XXS float nota0 ^ <J nota1 ^ <J tra%al!o ^ <J media ^ <S trC 7 au@ ^ JOption"ane.s!oEInput(ialog*nullJ X-ntre com a nota 0X+S nota0 ^ &loat.parse&loat*au@+S au@ ^ JOption"ane.s!oEInput(ialog*nullJ X-ntre com a nota 1X+S nota1 ^ &loat.parse&loat*au@+S au@ ^ JOption"ane.s!oEInput(ialog*nullJ X-ntre com a nota do tra%al!oX+S tra%al!o ^ &loat.parse&loat*au@+S media ^ *nota0 W nota1 W tra%al!o+ V 3S Option"ane.s!oE essage(ialog*nullJ X dia K XW media+S 8 catc! *Lum%er&ormat-@ception e+ 7 Option"ane.s!oE essage(ialog*nullJXIouve erro na conversoJ digite apenas caracteres numricosX+S 8 SCstem.e@it*<+S 8

1: 8 -@emplo 1.:

Curso Tcnico em Informtica

Capo Bonito - SP

3.

2o ser e@ecutadaJ a classe do e@emplo 1.: solicita os tr#s valores ao usu3rio *nota0J nota1 e tra%al!o+ e apresenta a mdia dos valores digitados em 4anelas gr3ficas similares M da figura a%ai@o

/elas de e@ecuo do e@emplo 1.:. &uncionalidades diferentes do e@emplo 1.: em relao ao e@emplo 1..K Ein?a $: contm a diretiva de compilao referente M importao da classe JOption"ane. (iferentemente do e@emplo 1..J em que foi definida a importao de todas as classes do pacote *uso do ]+J neste e@emplo optouFse pela importao de uma Pnica classeJ no caso a JOption"ane. Ein?as $'I $) e $&: utiliHa o mtodo s!oEInput(ialog da classe JOption"aneJ respons3vel por a%rir a cai@a de di3logo e permitir a digitao do valor da nota. O valor digitado armaHenado em uma vari3vel do tipo String c!amada au@. Como JOption"ane retorna um valor do tipo String *mesmo que se4a digitado um valor numrico+J ele precisa ser convertido em nPmero por meio de &loat.parse&loat. Ein?a ;': contm a utiliHao do mtodo s!oE essage(ialog da classe JOption"ane respons3vel por a%rir a cai@a de di3logo e apresentar o valor da mdia. O%serve a diferena entre os mtodos s!oEInput(ialog e s!oE essage(ialog. -nquanto o primeiro permite a digitao de um valorJ o outro apenas apresenta um valor na cai@a. Ein?a ;&: utiliHa SCstem.e@it*<+J respons3vel por encerrar a aplicao.

Curso Tcnico em Informtica

Capo Bonito - SP

3:

+,erccios
0. Crie uma classe que rece%a tr#s nomes quaisquer por meio da lin!a de e@ecuo do progra ma *prompt+ e os imprima na tela da seguinte maneiraK o primeiro e o Pltimo nomes sero impressos na primeira lin!a um ap>s o outro e o outro nome *o segundo+ ser3 impresso na segunda lin!a. 1. &aa uma classe que rece%a a quantidade e o valor de tr#s produtos no seguinte formatoK Nuantidadel Ualorl Nuantidade1 Ualor1 Nuantidade3 Ualor3. O programa deve calcular esses valores seguindo a f>rmula total ^ Nuantidadel @ Ualorl W Nuantidade1 @ Ualor1 W Nuantidade1 @ Ualor1. O valor total deve ser apresentado no final da e@ecuo do programa. 3. Crie uma classe que rece%a a largura e o comprimento de um lote de terra e mostre 3 3rea total e@istenteJ conforme a figura 1.;. BtiliHe a cai@a de di3logo com a classe JOption"ane para a entrada de dados. $. Crie uma classe que rece%a quatro valores quaisquer e mostre a mdia e o somat>rio entre eles e o resto da diviso do somat>rio por cada um dos valoresJ conforme a figura 1.0<. BtiliHe a cai@a de di3logo com a classe JOption"ane para a entrada de dados. "ara que%rar uma lin!a dentro da cai@a de di3logoJ utiliHe XYnX.

9. Bma determinada pessoa que tra%al!a com piscinas precisa de um programa que calcule o valor das construAes solicitadas pelos clientesJ sa%endo que eles sempre fornecem o comprimentoJ a largura e a profundidade da piscina a ser construda. =eve em considerao que o valor co%rado por m3 de 3gua que o preo de ,l $9.<< por m3.

Curso Tcnico em Informtica

Capo Bonito - SP

3;

Comandos Condicionais
-les so usados em todas as linguagens de programao e possi%ilitam que a e@ecuo de um programa se4a desviada de acordo com certas condiAes. Os comandos condicionais usados em Java so ifFelse e sEitc!Fcase. -ssas duas estruturas de desvio e@istentes na linguagem Java possi%ilitam e@ecutar diferentes trec!os de um programa com %ase em certas condiAes.

.so da estrutura i&2else


O ifJ em con4unto com o elseJ uma estrutura que permite a seleo entre dois camin!os distintos para e@ecuoJ dependendo do resultado *verdadeiro ou falso+ de uma e@presso l>gica. Lesse tipo de estruturaJ se a condio for verdadeiraJ so e@ecutadas as instruAes que estiverem posicionadas entre os comandos ifVelse. Sendo a condio falsaJ so e@ecutadas as instruAes que estiverem ap>s a instruo else. 2 sinta@e para a utiliHao do con4unto ifFelse demonstrada em seguida. O%serve que a condio sempre deve aparecer entre par#ntesesJ item o%rigat>rio na linguagem Java. if *gCondiof+ 7 gInstruAes para condio verdadeiraf 8 else 7 gInstruAes para condio falsaf 8 2ssim como a maioria das instruAes em JavaJ o con4unto ifFelse deve ser utiliHado com minPsculas eJ caso !a4a apenas uma instruo a ser e@ecutadaJ tanto no if como no elseJ o uso das c!aves desnecess3rio. =em%reFse de que as c!aves so utiliHadas quando se necessita que um %loco de instruAes se4a e@ecutado.

Curso Tcnico em Informtica

Capo Bonito - SP

$<

+strutura s1itch2case
2 estrutura sEitc!Fcase se refere a uma outra modalidade de desvio da e@ecuo do programa de acordo com certas condiAesJ semel!ante ao uso da instruo if. 2o tra%al!ar com uma grande quantidade de desvios condicionais contendo instruAes ifJ podeFse comprometer a inteligi%ilidade do programaJ dei@andoFo difcil de ser interpretado. 2 estrutura sEitc!Fcase possi%ilita uma forma mais adequada e eficiente de atender a esse tipo de situaoJ constituindoF se uma estrutura de controle com mPltipla escol!a. 2 estrutura sEitc!Fcase equivale a um con4unto de instruAes if encadeadasJ fornecendo maior inteligi%ilidade e efici#ncia durante a e@ecuo. Sua sinta@e a seguinteK sEitc! *ge@pressof+ 7 case 0K instruAesS %reaGS case 1K instruAesS %reaGS case 3K instruAesS %reaGS defaultKinstruAesS 8 La primeira lin!a do sEitc! avaliado o resultado da e@pressoJ que normalmente se refere a uma vari3vel simples. O resultado dessa e@presso comparado nas diretivas caseJ e@ecutando o %loco de instruAes quando a e@presso coincidir com o valor colocado na frente do case. -m outras palavrasJ supondo que o valor da e@presso se4a igual a 1J sero e@ecutadas as instruAes localiHadas entre case 1K e %reaG. 2 cada case o programa compara o valor da e@presso com o valor colocado na frente do case. Caso os valores se4am iguaisJ todas as instruAes so e@ecutadas at que se encontre uma instruo %reaGJ que encerra o sEitc! e faH a e@ecuo do programa desviar para o ponto ap>s a c!ave de encerramento do sEitc!. O programa percorre todas as diretivas case at que uma delas se4a igual M e@presso inserida no sEitc!. Caso nen!uma diretiva case possua o valor correspondente da e@pressoJ sero e@ecutadas as instruAes localiHadas na diretiva default que opcional.

Curso Tcnico em Informtica

Capo Bonito - SP

$0

.so do get3essage e print4tac5Trace


-m determinadas aplicaAes tornaFse necess3rio desco%rir o tipo de erro e em que lin!a do programa ele ocorreu. "ara recon!ecer esses errosJ so utiliHados dois mtodosK get essage e printStacG/race. O mtodo get essage serve para consultar e retornar uma string armaHenada em uma determinada e@ceo. J3 o mtodo printStacG/race retorna o tipo de e@ceo gerado e informa em que lin!a do programa ocorreu o erro. O e@emplo 3.' traH uma pequena demonstraoJ com fins did3ticosJ para que o leitor compreenda mais claramente a utiliHao dos mtodos get essage e printStacG/race. 0. class -@emplo<3<' 1. 7 3. $. 9. '. .. :. ;. 0<. 00. 01. 03. 0$. 09. 0'. 8 @unciona*idades mais importantes do e:emp*o )%&: Ein?a F: produH uma e@ceo de diviso por HeroJ uma veH que a vari3vel C possui contePdo Hero. -ssa e@ceo ser3 tratada na lin!a 0< por meio de catc! *-@ception erro+. Lote que no foi definida a e@ceo aritmtica 2rit!metic-@ceptionJ como feito anteriormente. Nuando for utiliHado -@ception em um %loco catc!J qualquer e@ceo geradaJ isto J qualquer tipo de e@ceo ser3 tratado nesse %loco. Isso equivale a diHer que -@ception pode ser considerado uma e@ceo defaultJ caso o desenvolvedor no sai%a os tipos de erro que podem ser gerados durante a e@ecuo de um programa.
Curso Tcnico em Informtica

pu%lic static void main *String args56+ 7 int @^0<J C^<J H^<S trC 7 H ^ @ V CS VV gera uma e@ceo aritmtica de diviso por Hero 8 catc! *-@ception erro+ 7 SCstem.out.println*erro.get essage*++S VV mostra a mensagem do erro erro.printStacG/race*+S 8 8 VV mostra a e@ceo e a lin!a onde ocorreu o erro

Capo Bonito - SP

$1

Ein?a $;: o mtodo get essage se encarrega de retornar o erro ocorrido *no casoK V %C Hero F diviso por Hero+. Ein?a $): o mtodo printStacG/race retorna diversas informaAesK o tipo de e@ceoJ a mensagem de erroJ o nome da classe que gerou o erroJ o nome do mtodo em que o erro ocorreu e o nPmero da lin!a do programa. Lo e@emplo so retornadas as seguintes informaAesK 4ava.lang.2rit!metic-@ception *tipo da e@ceo+J V %C Hero *mensagem de erro+J -@emplo<3<' *nome da classe+J main *nome do mtodo+ e : *lin!a em que ocorreu o erro+.

(aos de 'epetio
Os laos de repetio 7looping+ formam uma importante estrutura nas linguagens de programao por possi%ilitarem a repetio da e@ecuo de um %loco de instruAes em um programa. -les determinam que um certo %loco se4a e@ecutado repetidamente at que uma condio especfica ocorra. O mtodo da repetio uma das pr3ticas mais usadas em programaoJ possi%ilitando a criao de contadoresJ temporiHadoresJ rotinas para classificaoJ o%teno e recuperao de dados. -m uma aplicaoJ provavelmente sempre e@istir3 pelo menos um lao de repetio. 2s principais formas de criao de laos de repetio em Java so construdas a partir das estruturas for e E!ile.

.so do (ao &or


2 instruo for um tipo de contador finitoJ isto J ela realiHa a contagem de um valor inicial con!ecido at um valor final tam%m con!ecido. Seu funcionamento realiHado por uma vari3vel de controle do tipo contadorJ que pode ser crescente ou decrescente e possui a seguinte sinta@eK for *inicialiHaoS condioS incremento ou decremento+ -m queK 3nicia*i<ao: o valor inicial da vari3vel de controle do lao. Condio: a vari3vel que controla a continuao do lao. (eve conter o valor final que a vari3vel de controle pode assumir dentro do lao.

Curso Tcnico em Informtica

Capo Bonito - SP

$3

3ncremento ou decremento: o passo com que a vari3vel de controle ser3 acrescida ou decrescida. -sse incremento pode ser realiHado por meio de uma vari3vel inteira ou com ponto flutuanteJ permitindo pequenos incrementos decimaisJ caso se4a necess3rio. -@emploK for *int @^<S @g0<S @WW+ 7 gcon4unto de instruAesf 8 -sta sinta@e pode ser interpretada comoK inicialiHe @ com Hero e repita o con4unto de instruAes enquanto o valor de @ for menor que 0<. Cada veH que o con4unto de instruAes e@ecutadoJ o valor do @ incrementado *@WW+. O%serve que a vari3vel @ pode ser declarada e inicialiHada na pr>pria estrutura do for. Nuando isso ocorreJ a vari3vel passa a ter escopo local ao forJ isto J seu valor recon!ecido apenas dentro da estrutura em que foi declarada *entre as c!aves de a%ertura e encerramento+. 2p>s o encerramento do laoJ a vari3vel perde sua refer#ncia e no pode mais ser usadaJ salvo se declarada novamente. Se voc# dese4ar usar o valor de uma vari3vel ap>s o encerramento do laoJ %asta declar3Fla antes de iniciar o laoJ isto J antes da lin!a que define o for. Outros e@emplosK for *dou%le @^9S @g^0<S @^@W<.9+ Conta de 9 at 0< com passo de <.9J ou se4aK 9.< F9.9F'.<F'.9F.................;.9F0<.<. for *nt @^0<S @f^<S @^@F1+ Conta de 0< at < com passo de F1J ou se4aK 0<F:F'F$ 1F<. for *int @^aS@g^%S@WW+ Conta de a at % com passo de 0.

.so do (ao 1hile


O E!ile outro lao condicionalJ isto J um con4unto de instruAes que so repetidas enquanto o resultado de uma e@presso l>gica *uma condio+ avaliado como verdadeiro. Ue4a sua sinta@e em seguidaK

Curso Tcnico em Informtica

Capo Bonito - SP

$$

E!ile *gcondi?of+ 7 gcon4unto de instruAesf 8 O comando E!ile avalia o resultado da e@presso *condio+ antes de e@ecutar as instruAes do %loco 78J assim possvel que as instruAes nunca se4am e@ecutadasJ caso a condio se4a inicialmente falsa. Bm pro%lema tpicoJ relacionado M avaliao da condio E!ile. o lao infinito. Caso a condio nunca se torne falsaJ o lao ser3 repetido infinitamente. I3 outro tipo de lao condicionalJ o c!amado doFE!ileJ que %em parecido com o E!ileJ porm o con4unto de instruAes e@ecutado antes da avaliao da e@presso l>gica. Isso faH com que essas instruAes se4am e@ecutadas pelo menos uma veH. Ue4a como a sinta@e do doFE!ile %em parecida com a do E!ileK do 7 gcon4unto de instruAesf 8 E!ile *gcondiof+S 2 utiliHao da estrutura E!ile ou doFE!ile fica a critrio do desenvolvedorJ pois com as duas formas possvel c!egar a resultados semel!antes.

+,erccios
0. Crie uma classe que rece%a dois valores pelo teclado *use JOption"ane+K o valor de um produto e um c>digo de aumentoJ segundo a ta%ela a%ai@oK C>digo 0 3 $ : c aumento 09 1< 39 $<

BtiliHando a estrutura sEitc!FcaseJ mostre na tela o novo valor do produto depois de acrescida a porcentagem correspondente. ,ealiHe tam%m o controle dos possveis erros que podem ocorrer durante a e@ecuo do programa.

Curso Tcnico em Informtica

Capo Bonito - SP

$9

1. &aa uma classe que rece%a tr#s nPmeros inteiros e mostre o maior dentre eles. O%servaoK para que%rar uma lin!a dentro da cai@a de di3logoJ utiliHe XYnX. 3. 2presente uma classe que mostre a soma dos cem primeiros nPmeros inteiros *0W1 W 3 W $ 9 W ' W . W ........ W ;. W ;: W ;; W 0<<+ $. Construa uma classe que calcule o produto dos inteiros mpares de 0 a 09 e e@i%a o resultado 9. Crie uma classe que rece%a dois nPmeros inteiros e realiHe a contagem pausadamente *na tela de prompt+ do primeiro at o segundo nPmeroJ com passo um. '. -la%ore uma classe para c3lculo do sal3rio lquido em que tr#s valores devem ser informados pelo usu3rio na lin!a de comandoK a quantidade de !oras tra%al!adasJ o sal3rioF!ora e o nPmero de dependentes. O programa deve mostrar na tela as informaAes que esto no lado esquerdo da ta%ela seguinte. Os c3lculos correspondentes aparecem no lado direito. Informao Sal3rio Druto (esconto ILSS (esconto I, Sal3rio =quido Calculo Ioras tra%al!adas ] Sal3rio Iora W *9< ] LF (ependentes+ Se Sal3rio Druto g^ 0<<< ILSS^ Sal3rio Druto ] :.9V0<< Se Sal3rio Druto f 0<<< ILSS^ Sal3rio Druto ] ;V0<< Se Sal3rio Druto g^ 9<< I,^< Se Sal3rio Druto f 9<< e g^ 0<<< I,^ Sal3rio Druto ] 9V0<< Se Sal3rio Druto f 0<<< I,^ Sal3rio Druto ] .V0<< Sal3rio DrutoFILSSFI,

Fun-es 3atem"ticas
2 linguagem Java possui uma classe com diversos mtodos especialiHados em realiHar c3lculos matem3ticos. "ara realiHar esses c3lculosJ so utiliHados os mtodos da classe apresentar a seguinte sinta@eK at!.gnome do mtodof *gargumentos ou lista de argumentosf+ Lo necess3rio importar a classe at! em um programa para poder utiliHar seus recursosJ pois at! que devem

ela 43 faH parte do pacote 4ava.langJ importado automaticamente pelo compilador do Java.

Curso Tcnico em Informtica

Capo Bonito - SP

$'

2 classe

at! define duas constantes matem3ticasJ sendo Mat?%P3 F o valor de pi *.0 ^

3.0$09;1'939:;.;313:$'+ e Mat?%. que se refere ao valor da %ase para logaritmos naturais *1..0:1:0:1:$9;<$9139$+. 2 seguirJ so apresentados os mtodos mais comuns da classe at!.

Mtodo Ceil -ste mtodo tem como funo realiHar o arredondamento de um nPmero do tipo dou%le para o seu pr>@imo inteiro. Sua sinta@e a seguinteK at!.ceil*gvalor do tipo dou%lef+ O e@emplo $.0 demonstra a utiliHao do mtodo ceil. 0. class -@emplo<$<0 1. 7 3. $. 9. '. .. :. ;. 0<. 8 Lo e@emplo $.0 o mtodo ceil da classe at! c!amado para realiHar o arredondamento do at!.ceil que 8 pu%lic static void main *String args56+ 7 dou%le a ^ 9.1J % ^ 9.'J c ^ F9.:S SCstem.out.println*X2rredondando 9.1 ^ X W SCstem.out.printlri*X2rredondando 9.' ^ X W SCstem.out.println*X2rredondando F9.: ^ X W at!.ceil*a++S at!.ceil*%++S at!.ceil*c++S

nPmero tipo dou%le entre par#ntesesJ representado neste caso por uma vari3vel *lin!as ' a :+. 2s vari3veis entre par#nteses compAem o argumento *do tipo dou%le+ do mtodo ceil. retorna um resultado arredondadoJ mantendo o tipo do dadoJ isto J a vari3vel retornada tam%m ser3 do tipo dou%leJ porm mostrando apenas a parte inteira do nPmero verificado. O tipo dou%le o Pnico que pode ser utiliHadoJ uma veH que o mtodo ceil no aceita o tipo float. Mtodo floor 2ssim como ceilJ o mtodo floor tam%m utiliHado para arredondar um determinado nPmeroJ mas para o seu inteiro anterior. Sua sinta@e id#ntica M do mtodo ceilK at!.floor*gvalor do tipo dou%lef+

Curso Tcnico em Informtica

Capo Bonito - SP

$.

O e@emplo $.1 mostra o uso do mtodo floorK 0. class -@emplo<$<1 1. 7 3. $. 9. '. .. :. ;. 0<. 8 8 pu%lic static void main *String args56+ 7 dou%le a ^ 9.1J % ^ 9.'J c ^ F9.:S SCstem.out.println*X2rredondando 9.1 ^ X W SCstem.out.println*X2rredondando S.' ^ X W SCstem.out.println*X2rredondando F9.: ^ X W at!.floor*a++ at!.floor*%++ at!.floor*c++

Mtodo ma* BtiliHado para verificar o maior valor entre dois nPmerosJ que podem ser do tipo dou%leJ floatJ int ou long. 2 sua sinta@e a seguinteK at!.ma@*gvalorlfJgvalor1f+ O e@emplo $.3 mostra a utiliHao do mtodo ma@K 0. class -@emplo<$<3 1. 7 3. $. 9. '. .. :. ;. 0<. 00. 8 O%serve que o c3lculo do maior nPmero pode ocorrer entre dois nPmeros do mesmo tipo de dados ou noJ ou se4aJ podeFse o%ter o maior entre dois nPmeros do tipo dou%leJ entre dois nPmeros do tipo int ou entre um do tipo dou%le e outro do tipo int.
Curso Tcnico em Informtica

pu%lic static void main *String args56+ 7 int a ^ 0<J % ^ 09S dou%le c ^ F9.;J d ^ F$.9S SCstem.out.println*XO maior entre 0< e 09 K X W SCstem.out.println*XO maior entre F9.; e F$.9 K X W SCstem.out.println*XO maior entre 0< e F9.; K X W 8 at!.ma@*aJ%++S at!.ma@*cJd++S at!.ma@*aJc++S

Capo Bonito - SP

$:

Mtodo min < mtodo min fornece o resultado contr3rio do mtodo ma@J sendo ento utiliHado para o%ter o valor mnimo entre dois nPmeros. (o mesmo modo que o mtodo ma@J esses nPmeros tam%m podem ser do tipo dou%leJ floatJ int ou long. 2 sua sinta@e a mesma do mtodo ma@J mudando apenas para at!.minK

at!.min*gvalorlfJgvalor1f+ O e@emplo $.$ utiliHaFse dos mesmos valores do e@emplo anterior *e@emplo $.3+J porm troca o mtodo ma@*+ pelo mtodo min*+. 0. class -@emplo<$<$ 1. 7 3. $. 9. '. .. :. ;. 00. 8 pu%lic static void main *String args56+ 7 int a ^ 0<J % ^ 09S dou%le c ^ F9.;J d ^ F$.9S SCstem.out.println*XO menor entre 0< e 09 K X W SCstem.out.println*XO menor entre F9.; e F$.9 K X W SCstem.out.println*XO menor entre 0< e F9.; K X W at!.itiin*aJ%+ + S at!.min*cJd++S at!.min*aJc++S J0<. 8

Mtodo sqrt Nuando !3 necessidade de calcular a raiH quadrada de um determinado nPmeroJ utiliHaFse o mtodo sqrtJ porm o nPmero do qual se dese4a e@trair a raiH quadrada deve ser do tipo dou%le e o resultado o%tido tam%m ser3 um nPmero do tipo dou%le. Ue4a sua sinta@eK at!.sqrt*gvalor do tipo dou%lef+

Curso Tcnico em Informtica

Capo Bonito - SP

$;

O e@emplo $.9 mostra a utiliHao do mtodo sqrt. 0. class -@emplo<$<9 1. 7 3. $. 9. '. .. :. ;. 8 2ssim como na matem3ticaJ no possvel realiHar o c3lculo da raiH quadrada com nPmeros negativos. Caso isso se4a realiHadoJ retornado um valor LaL *valor ine@istente+. a Mtodo po+ 2ssim como possvel e@trair a raiH quadrada de um nPmeroJ tam%m possvel faHer a operao inversaJ ou se4aJ elevar um determinado nPmero ao quadrado ou a qualquer outro valor de pot#ncia. 2 potenciao de um nPmero pode ser calculada pelo mtodo poE. Os nPmeros a serem usados no c3lculoJ isto J o valor da %ase e da pot#nciaJ devem ser do tipo dou%le. Sua sinta@e a seguinteK at!.poJ*gvalor da %asefJgvalor da pot#nciaf+ O e@emplo $.' demonstra o uso do mtodo poE. 0. class -@emplo<$<' 1. 7 3. pu%lic static void main *String args56+ $. 7 9. dou%le %ase ^ 9.9J pot#ncia ^ 1S '. SCstem.out.println*X9.9 elevado a 1 .. SCstem.out.println*X19 elevado a <.9 :. SCstem.out.println*X9'.: elevado a < ;. 8 0<. 8
Curso Tcnico em Informtica

pu%lic static void main *String argst6+ 7 dou%le a ^ ;<<J % ^ 3<.19S SCstem.out.println*X2 raiH quadrada de ;<< K X W SCstem.out.println*X2 raiH quadrada de 3<.19 K X W 8 at!.sqrt*a++S at!.sqrt*%++S

Capo Bonito - SP

9<

Mtodo random [ utiliHado para gerar valores de forma aleat>ria. /oda veH que o mtodo random c!amadoJ ser3 sorteado um valor do tipo dou%le entre <.< e 0.< *o valor 0 nunca sorteado+. Lem sempre essa fai@a de valores suficiente numa aplicao real. "or e@emploJ para simular o sorteio de nPmeros entre < e ;; para um 4ogo de loteria qualquerJ tornaFse necess3rio o sorteio de nPmeros inteiros aleat>rios no intervalo de < a ;;. "ara que esses nPmeros possam ser sorteadosJ preciso utiliHar o operador de multiplicao *]+ em con4unto com o mtodo random. Com isso tornaFse possvel definir o intervalo em que o nPmero ser3 sorteado. O conversor *int+ tam%m pode ser usado para truncar a parte do ponto flutuante *a parte depois do ponto decimal+ para que um nPmero inteiro se4a geradoJ da seguinte formaK *int+ * at!.random*+ ] 0<<+ Com isso seriam gerados nPmeros inteiros entre < e ;;J atendendo plenamente M necessidade e@posta. O e@emplo $.. demonstra o uso do mtodo random para simular a gerao de cinco cartAes de loteria com seis nPmeros cada. 0. class -@emplo<$<. 1. 7 3. $. 9. '. .. :. ;. 0<. 00. 01. 03. 0$. 09. 8 8 8 SCstem.out.println*+S 8 7 int num ^ *int+ * at!.random*+ ] 0<<+S SCstem.out.print*numWX X+S pu%lic static void main *String args56+ 7 for*int qtd^lSqtdg^9SqtdWW+ 7 for*int @^lS@g^'S@WW+

Curso Tcnico em Informtica

Capo Bonito - SP

90

Formatao com a Classe %ecimalFormat


Os c3lculos matem3ticosJ em especial os que envolvem multiplicao e divisoJ podem gerar resultados com muitas casas decimais. Isso nem sempre necess3rio e esteticamente corretoJ pois apresentar um resultado com muitas casas decimais no muito agrad3vel e legvel M maioria dos usu3rios. "or e@emploK considere duas vari3veis do tipo dou%le @^0 e C^'. 2o realiHar a diviso de @ por CJ aparece na tela o resultado <.0''''''''''''''''. -sse resultado no o mais adequado para se apresentar na tela. Seria mais conveniente mostrar o resultado formatado com duas ou tr#s casas decimais. "ara realiHar a formataoJ necess3rio definir um modelo de formataoJ con!ecido pelo nome de pattern. Considere pattem como o estilo de formatao que ser3 apresentado so%re um valor numrico. -m outras palavrasJ voc# ter3 de informar ao compilador qual estilo de formatao deve ser usado para apresentar um nPmero. "ara definir o pattemJ so usados caracteres especiais. 2 ta%ela $.0 apresenta os caracteres mais usados. Caractere < m . F Significado
Imprime o dgito normalmenteJ ou caso ele no e@istaJ coloca < em seu lugar. -@emploK Se4am as vari3veis int @^$J C^31 e H^09$J ao usar o pattern X<<<XJ o resultado impresso na tela seria @ Ff <<$J C Ff <31 e H Ff 09$. Imprime o dgito normalmenteJ despreHando os Heros M esquerda do nPmero. -@emploK Se4am as vari3veis dou%le @^<.$ e C^<0.3$J ao usar o pattern Xmm.mmXJ o resultado impresso na tela seria @ Ff .$J C Ff 0.3$. Separador decimal ou separador decimal monet3rio *depende do sistema usado+. Sinal de nPmero negativo.

Curso Tcnico em Informtica

Capo Bonito - SP

91

"ara realiHar a formatao de nPmerosJ vamos usar a classe (ecimal&ormat. 0. import 4ava.te@t.(ecimal&ormatS 1. class -@emplo<$<: 3. 7 $. 9. '. .. :. ;. 00. 01. 03. 0$. 09. 0'. 0.. 0:. 0;. 1<. 10. 11. 13. 1$. 19. 1'. 1.. 1:. 1;. 3<. 8 30. 8 String valor-m,eais ^ X19:3..9XS df.appIC"attern*X,l mJmm<.<<X+S SCstem.out.println*XUalor em ,eaisK X W df.format*(ou%le.parse(ou%le *valor-m,eais+++S dou%le peso ^ . <.19S df.applC"attern*Xm<.<<X+S SCstem.out.println*X"eso K X W df.format*peso++S float altura ^ 0..$fS df.appIC"attern*Xm<.<<X+S SCstem.out.println*Xaltura K X W df.format*altura++S long estoque ^ 0;:9'$S df.appIC"attern*XmJmm<J<<<X+S SCstem.out.println*X-stoque K X W df.format*estoque++S pu%lic static void main*String args56+ 7 (ecimal&ormat df ^ neE (ecimal&ormat*+S s!ort idade ^ 3:S df.appIC"attern*X<<<X+S SCstem.out.println*XIdade K X W df.format*idade++S 0<. int quantidade ^ ;.9<S df.appIC"attern*Xm<J<<<X+S SCstem.out.println*XNuantidade K X W df.format*quantidade++S

Curso Tcnico em Informtica

Capo Bonito - SP

93

&uncionalidades mais importantes do e@emplo $.:K Ein?a $: importa a classe (ecimal&ormat do pacote 4ava.te@tJ uma veH que ela no pertence ao con4unto de classes default>o pacote 4ava.lang. Ein?a &: declara um o%4eto *df+ da classe (ecimal&ormat que ser3 usado para realiHar a formatao dos nPmeros pelo mtodo format *df.format+. -ssa lin!a poderia conter a definio do pattern no momento da inicialiHao do o%4eto df. Bma definio v3lida pode serK (ecimal&ormat df ^ neE (ecimal&ormat *X<<<X+. [ possvel o%servar que a definio do pattern pode ser realiHada dentro dos par#nteses. Ein?a F: contm a definio do pattern pelo mtodo appIC"attern *df.applC"attem*X<<<X++. -ssa instruo define que todos os nPmeros impressos a partir do o%4eto df sero formatados com tr#s dgitosJ mesmo que eles possuam menos que issoJ conforme e@emplificado na ta%ela anterior. 2s lin!as 01J0'J1<J1$ e 1: redefinem o patternJ aplicando novas formataAes ao o%4eto dfJ isto J aos nPmeros que sero impressos pelo mtodo format. Ein?a ;G: apresenta uma maneira de formatar um nPmero a partir de um formato string. O%serve que a vari3vel valor-m,eais armaHena um contePdo do tipo stringJ que no pode ser manipulado diretamente pela classe (ecimal&ormat. "ara que isso se4a possvelJ o valor string convertido no tipo dou%le pelo mtodo parse(ou%le da classe (ou%le *(ou%le.parse(ou%le*valor-m,eais++.

Internacionali6ao com a Classe (ocale


2 linguagem Java tem como caracterstica ser utiliHada no mundo todo. -m funo dissoJ um mesmo softEare feito em Java pode ser utiliHado por usu3rios espal!ados pelo glo%o. Cada pas ou regio adota certos formatos para representao monet3riaJ apresentao de datas etcJ os quais so definidos pelo sistema operacional da m3quina e ficam armaHenados como configuraAes locais. O separador de decimaisJ por e@emploJ pode ser um ponto *.+ ou uma vrgula *J+ dependendo da regio. 2 classe =ocale permite identificar certas propriedades da m3quina em que o softEare e@ecutado. (esta formaJ tornaFse possvel utiliHar os recursos do JavaJ configurando determinados formatos de maneira autom3tica.

Curso Tcnico em Informtica

Capo Bonito - SP

9$

O%serve o e@emplo $.; seguinte. 0. import 4ava.te@t.(ecimal&ormatS 1. import 4ava.Ptil.=ocaleS 3. $. class -@emplo<$<; 9. 7 '. .. :. ;. 0<. 00. 01. 03. 0$. 09. 0'. 0.. 0:. 0;. 1<. 10. 11. 13. 8 &uncionalidades mais importantes do e@emplo $.;K Ein?as $ e ;: importam as classes (ecimal&ormat do pacote 4ava.te@t e =ocale do pacote 4ava.PtilJ am%as essenciais ao funcionamento do e@emplo. Ein?a F: declara um o%4eto *df+ da classe (ecimal&ormat que ser3 usado para realiHar a formatao do valor monet3rioJ dependendo da regio em que a classe e@ecutada. 8 8 SCstem.out.println*XvalorK X W df.format*valor++S pu%lic static void main*String args56+ 7 (ecimal&ormat df ^ neE (ecimal&ormat*+S =ocale local ^ =ocale.get(efault*+S SCstem.out.println*XConfiguraAes do Sistema OperacionalKX+S SCstem.out.println*XSiglaK X W local.getCountrC*++S SCstem.out.println7X"aisK X W local.get(isplaCCountrC7++S SCstem.out.println*X=inguaK X W local.get(isplaC=anguage*++S SCstem.out.println*X/ecladoK X W local.get(isplaCLame*++S SCstem.out.printIn*XX+S dou%le valor ^ 03.<.19S if *local.getCountrC *+.equals*XD,X++ 7 dn.applC"attern*X,l mJmm<.<<X+S

Curso Tcnico em Informtica

Capo Bonito - SP

99

Ein?a G: declara um o%4eto *local+ da classe =ocale que ser3 usado para identificar as configuraAes definidas no sistema operacional da m3quina do usu3rio. Lessa lin!a o o%4eto local passa a armaHenar todas as configuraAes default do sistema operacional. Ein?a $$: possui o mtodo getCountrC que retorna a sigla do pas configurado no sistema operacional. Lo caso de a localidade estar configurada como DrasilJ aparece a sigla D, na tela. Ein?a $;: contm o mtodo get(isplaCCountrC que retorna o nome do pas configurado no sistema operacional. Lo caso aparece o nome Drasil. Ein?as $) e $H: cont#m os mtodos get(isplaC=anguage e get(isplaCLame que retornamJ respectivamenteJ o idioma usado no pas e a linguagem configurada no teclado. Ein?a $K: contm uma comparao que verifica se o local configurado na m3quina se refere ao Drasil *sigla D,+. -m caso positivoJ aplica um pattern *lin!a 0;+ para formatar um valor monet3rio em reaisJ de acordo com o padro %rasileiro. Outras comparaAes semel!antesJ de outros pasesJ podem e@istir para adequar o formato monet3rio M regio. Ein?a ;$: imprime na tela o valor de acordo com o formato esta%elecido *se e@istissem diversas comparaAes para pases diferentes+.

Fun-es com 4trngs


Bma string um tipo te@to que corresponde M unio de um con4unto de caracteres. -m JavaJ as strings so inst?ncias da classe StringJ isto J geram o%4etos que possuem propriedades e mtodosJ diferente dos tipos primitivos como intJ floatJ dou%le etc. -ssas strings podem ser manipuladas de v3rias formas. "or e@emploJ possvel verificar seu comprimentoJ retirar um pedao delaJ acessar ou mudar caracteres individuais. 2s strings constituem uma cadeia de caracteres entre aspas. -@emploK frase ^ X=inguagem JavaX. (a mesma forma que as funAes matem3ticasJ e@istem diversos mtodos para manipulao de stringsJ os quais acompan!am a seguinte sinta@eK gLome da stringf.gnomeFdoFmetodof*gargumentosf+

Curso Tcnico em Informtica

Capo Bonito - SP

9'

2 seguirJ so apresentados os mtodos mais comuns *e mais usados+ da classe String. Mtodo len#th O mtodo lengt! utiliHado para retornar o taman!o de uma determinada stringJ incluindo tam%m os espaos em %ranco presentes nela. -sse mtodo retorna sempre um valor do tipo int. Ue4a sua sinta@eK gstringf.lengt!*+ La pr3ticaJ o mtodo lengt! muito utiliHado quando necess3rio ler uma vari3vel String do comeo at o finalJ tanto para a %usca de caracteres ou palavras quanto para a criao de %annersJ algo e@tremamente usado na Internet. O e@emplo $.0< mostra o uso do mtodo lengt!. 0. class -@emplo<$0< 1. 7 3. $. 9. '. .. :. ;. 0<. 00. 8 Lo e@emplo $.0<J a lin!a 9 contm a declarao da string frase. Ca%e uma o%servaoK conforme citado anteriormenteJ na realidade frase no uma vari3vel e sim um o%4etoJ pois uma vari3vel no pode conter mtodos atrelados a elaS somente os o%4etos que possuem mtodos para manipulao de suas informaAes. 2 lin!a . contm a utiliHao de lengt! por meio de frase.lengt!*+J isto J retorna o nPmero de caracteres armaHenado em frase *no caso 09+. -m veH de usar frase.lengt!*+ poderia ser utiliHada a forma literal do seguinte modoK taman!o^X2prendendo JavaX.lengt!*+. O resultado seria o mesmo. (a mesma forma que as funAes matem3ticasJ e@istem diversos mtodos para manipulao de stringsJ os quais acompan!am a seguinte sinta@eK gLome da stringf.gnomeFdoFmetodof*gargumentosf+
Curso Tcnico em Informtica

pu%lic static void main *String args56+ 7 String frase ^ X2prendendo JavaXS int taman!oS taman!o ^ frase.lengt!*+S SCstem.out.println*XStringK X W frase+S SCstem.out.println*XO taman!o da string K X W taman!o+S 8

Capo Bonito - SP

9.

Mtodo char,t Bsando para retornar um caractere de determinada string de acordo com um ndice especificado entre par#nteses. -sse ndice refereFse M posio do caractere na stringJ sendo < *Hero+ o ndice do primeiro caractereJ 0 *um+ o do segundo e assim por diante. O mtodo c!ar2t Ptil quando for necess3rio verificar a e@ist#ncia de um caractere na string. "or e@emploK supon!a que uma determinada string s> possa conter nPmeros F a funo c!ar2t pode ser usada para verificar a e@ist#ncia de dgitos numricos nessa string. 2 sinta@e do mtodo c!ar2t a seguinteK gstringf.c!ar2t*gndicef+ O e@emplo $.00 mostra o uso do mtodo c!ar2t. 0. class -@emplo<$00 1. 7 3. $. 9. '. .. :. ;. 0<. 00. 01. 03. 0$. 09. 8 8 8 SCstem.out.println*+S pu%lic static void main *String args56+ 7 String frase^X2prendendo JavaXS SCstem.out.println*XString ^ X W frase+S SCstem.out.println7XCaracter ^ X W frase.c!ar2t*9++S SCstem.out.print*X/rec!o ^ X+S for *int i^llSig^0$SiWW+ 7 SCstem.out .print *frase.c!ar2t *i++ S

Curso Tcnico em Informtica

Capo Bonito - SP

9:

Mtodos to-pperCase e to.o+erCase Os mtodos toBpperCase e to=oEerCase so utiliHados para transformar todas as letras de uma determinada string em maiPsculas ou minPsculas. O mtodo toBpperCase transforma todos os caracteres de uma string em maiPsculos. O mtodo to=oEerCase transforma todos os caracteres de uma string em minPsculos. Sua sinta@e a seguinteK gstringf.toBpperCase*+ ou gstringf.to=oEerCase*+ O e@emplo $.01 demonstra o uso dos mtodos toBpperCase e to=oEerCase e dispensa maiores detal!esJ dada a simplicidade dessas duas funAes. 2 Pnica o%servao se refere ao fato de que esses mtodos no alteram o valor original da string. esmo aplicando os mtodos das lin!as ' e .J o contePdo das vari3veis palavral e palavra1 permanece o mesmoJ isto J a transformao ocorre apenas com fins de impresso em tela. Se for necess3rio alterar o contePdo de uma vari3vel stringJ su%stituindo seu valor original pelo transformadoJ a pr>pria vari3vel deve rece%er o valor de sua transformaoJ comoJ por e@emploJ palavral ^ palavra.to=oEerCaseN. 0. class -@emplo<$01 1. 7 3. $. 9. '. .. :. ;. 8 0<. 8 Mtodo su"strin# -le retorna a c>pia de caracteres de uma string a partir de dois ndices inteiros especificadosJ funcionando %asicamente da mesma forma que o mtodo c!ar2t dentro de um loppingJ conforme indica o item $.1.1. 2 sinta@e de su%string a seguinteK gstringf.su%string*gndice inicialfJ5gndice finalf6+ < primeiro argumento especifica o ndice a partir do qual se inicia a c>pia dos caracteres *da mesma forma que c!ar2tJ o ndice iniciaFse em <+. O segundo argumento opcional e especifica pu%lic static void main *String args56+ 7 String palavral ^ X2,,OoXJ palavra1 ^ X%atataXS SCstem.out.println*X2,,Oo em minPscula ^ X W palavral.to=oEerCase*++S SCstem.out.println*X%atata em maiPscula ^ X W palavra1.toBpperCase*++S SCstem.out.printIn*XSa=a(a em minPscula ^ X W X Sa=a(aX. to=oEerCase O+ S

Curso Tcnico em Informtica

Capo Bonito - SP

9;

o ndice finalJ em que termina a c>pia dos caracteresJ entretanto o ndice final deve especificar um ndice alm do Pltimo caractere. "ara mel!or entendimento do mtodo su%stringJ considere a vari3vel frase com o seguinte contePdoK &rase ndice
= < I 0 L 1 \ 3 B $ 2 9 \ ' . : ; J 0< 2 00 U 01 2 03 0$

Cada caractere de uma vari3vel string inde@ado a partir do < *Hero+. Uamos apresentar alguns e@emplosK 0. String @ ^ frase.su%string*0<+ Ff @ rece%e o contePdo XJ2U2XJ pois ao passar apenas o primeiro argumento para o mtodo su%strngJ ele retorna da posio informada *no caso 0<J a posio da letra J+ at o Pltimo caractere da string. 1. String @ ^ frase.su%string*3+ pf @ rece%e o contePdo X\B2\de ndice 3 at o Pltimo caractere da string frase. 3. String @ ^ frase.su%string*3J;+ Ff @ rece%e o contePdo X\B2\- XJ isto J do caractere de ndice 3 at o caractere de ndice : *;F0+. $. String @ ^ frase.su%string*<J0+ Ff @ rece%e o contePdo X=XJ isto J do caractere de ndice < at o caractere de ndice < *0F0+. 9. String @ ^ frase.su%string*0<J0$+ Ff @ rece%e o contePdo XJ2U2XJ isto J do caractere de ndice 0< at o caractere de ndice 03 *0$F0+. O%serve que o resultado deste e@emplo igual ao do e@emplo 0. Se os ndices especificados estiverem fora dos limites da stringJ gerado o erro Stringlnde@OutOfDounds-@ception. Lo e@emploJ se voc# usar frase.su%string*0<J1<+J ocorre o erro citadoJ uma veH que no e@iste ndice 1<. O e@emplo $.03 apresenta um c>digo que usa o mtodo su%strng para separar as palavras de uma frase pela manipulao de seus ndices. J2U2XJ isto J do caractere

Curso Tcnico em Informtica

Capo Bonito - SP

'<

0. class -@emplo<$03 1. 7 3. $. 9. '. .. :. ;. 0<. 00F 01. 8 8 pu%lic static void main *String args56+ 7 String frase ^ X-u gosto de 4avaeXS SCstem.out.println*XSeparando uma frase em palavrasKX+S SCstem.out.println*X"alavra 0K X W frase.su%string*<J1++S SCstem.out.println*X"alavra 1K X W frase.su%string*3J:++S SCstem.out.println*X"alavra 3K X W frase.su%string*;J00++S SCstem.out.println*X"alavra $K X W frase.su%string*01++S

Mtodo trim Seu o%4etivo remover todos os espaos em %ranco que aparecem no incio e no final de uma determinada string. So removidos apenas os espaos do incio e do fim da stringS no so removidos os espaos entre as palavras. Sua sinta@e a seguinteK gstringf.trim*+ O e@emplo $.0$ mostra a utiliHao do mtodo trimK 0. class -@emplo<$0$ 1. 7 3. $. 9. '. .. :. ;. 8 8 pu%lic static void main *String args56+ 7 String frase ^ X Jesus CristoK o rei dos reis. XS SCstem.out.println*XCom espaosK X W X]X W frase W X]X+S SCstem.out.println*XSem espaosK X W X]X W frase.trim *+ W X]X+S

Curso Tcnico em Informtica

Capo Bonito - SP

'0

2 vari3vel frase armaHena uma string com espaos em %ranco no incio e no final. Nuando no utiliHado o mtodo trimJ os espaos permanecem na strngS em contrapartidaJ ao usar trimJ os espaos desaparecem. O mtodo frase.trim*+ no retirou realmente os espaos em %ranco da vari3velJ ou se4aJ apenas foi mostrado na tela um trim da vari3velJ que conseqdentemente e@i%eFa sem os espaos em %rancoJ mas a vari3vel em si ainda continua com os espaos no seu incio e no seu final. "ara que realmente os espaos se4am retiradosJ necess3rio que o resultado de trim se4a atri%udo M pr>pria vari3velJ como a seguinte instruoK frase^frase.trim*+. Isso tornaria a vari3vel livre dos espaos em %ranco. Mtodo replace [ utiliHado para su%stituio de caracteresJ ou grupo de caracteresJ em uma determinada strng. "ara seu funcionamentoJ necess3rio informar o*s+ caractere*s+ que dese4a su%stituir e por qual*is+ caractere*s+ ele*s+ ser3*o+ su%stitudo*s+. Caso no !a4a na strng nen!uma ocorr#ncia do caractere a ser su%stitudoJ a strng original retornadaJ isto J no ocorre nen!uma alterao. Ue4a sua sinta@eK gstringf.replace*gcaracteres a serem su%stitudosfJgsu%stituiof+ 0. class -@emplo<$09 1. 7 3. $. 9. '. .. :. ;. 0<. 00. 01. 03. 8 Lo e@emplo $.09J a lin!a 9 declara uma String *frase0+ que rece%e uma frase. 2 lin!a ' armaHena essa frase na vari3vel frase1J porm sem os espaos em %rancoJ uma veH que o mtodo replace foi usado para su%stituir todos os espaos por vaHios *XX porXX+. 2s lin!as : e ;
Curso Tcnico em Informtica

pu%lic static void main *String args56+ 7 String frase0 ^ Xo macaco gosta de %ananaXS String frase1 ^ frasel.replace*X XJXX+S SCstem.out.println*X&rase 0K X W frase0+S SCstem.out.println*X&rase 1K X W frase1+S SCstem.out.println*X&rase 3K X W frase0.replace*X XJ XqX++S SCstem.out.println*X&rase $K X W frase0.replace*XaXJ XuX++S SCstem.out.println*X&rase 9K X W frase0.replace*XnaXJ XL2X++S

Capo Bonito - SP

'1

su%stituem um caractere por outro *XX porXqX e XaX por XuX+ e a lin!a 0< su%stitui uma palavra por outra *XnaX por XL2X+. (a mesma forma que trimJ o mtodo replace no altera o contePdo da vari3vel. "ara faHer com que uma vari3vel rece%a o resultado de uma troca de caracteresJ faa como apresentado na lin!a '. Mtodo valueOf O mtodo valueOf usado para converter diversos tipos de dados em strings. -sse mtodo aceita v3rios tipos de argumento *nPmeros ou cadeia de caracteres+ e transformaFos em strings. -ste item a%orda apenas a converso de tipos numricos em stringsJ uma veH que o estudo de arraCs *cadeia de caracteres+ assunto do captulo .. Bma das sinta@es possveis para o mtodo valueOf K String.valueOf *gnome da vari3vel a ser convertidasF+ "ara facilitar o entendimentoJ o e@emplo $.0' demonstra a converso de v3rios tipos numricos com o uso do mtodo valueOf. 0. class -@emplo<$0' 1. 7 3F $. 9. '. .. :. ;. 0<. 00. 01. 03. 0$ . 09. 0'. 8 0.. 8 7 String @ ^ XXS int a ^ 00S long % ^ 111S float c ^ 3333S dou%le d ^ $.$$$S @ ^ @ W String.valueOf*a+ W X F XS @ ^ @ W String.valueOf*%+ W X F XS @ ^ @ W String.valueOf*c+ W X F XS @ ^ @ W String.valueOf*d+S SCstem.out.println*XUalores convertidosKX+S SCstem.out.println*@+S pu%lic static void main *String args56+

Curso Tcnico em Informtica

Capo Bonito - SP

'3

Lo e@emplo $.0' todas as vari3veis numricas *aJ %J cJ d+ declaradas nas lin!as ' a ; so convertidas e acumuladas em uma vari3vel Strng *@+ nas lin!as 0< a 03. -sta no a funcionalidade mais importante do mtodo valueOfJ uma veH que o mesmo resultado pode ser alcanado sem sua utiliHaoJ por meio da concatenao das vari3veis com o operador de concatenao *W+J conforme demonstrado em seguidaK String @ ^ a W X F X W % W X F X W c W X F X W dS

Mtodo inde*Of O mtodo inde@Of usado para localiHar caracteres ou su%strings em uma String. Nuando realiHamos a %usca de uma palavra em um te@toJ usamos algo parecido com o funcionamento de inde@OfJ isto J ele %usca uma palavra e retorna a posio onde ela se encontra. Uoc# 43 sa%e que um te@to *ou uma String+ inde@ado a partir do nPmero Hero. Caso !a4a sucesso na %uscaJ retornado um nPmero inteiro referente M posio do te@to *o ndice+ onde o caractere foi encontradoJ ou a posio do te@to onde se inicia a su%string localiHada. Caso !a4a insucesso na %uscaJ isto J caso o caractere ou su%string no ten!a sido encontradaJ retornado o valor inteiro F0. (e qualquer modoJ o retorno de inde@Of sempre ser3 um nPmero inteiro *o valor do ndiceJ ou F0+. 2 sinta@e geral para utiliHao do mtodo inde@Of K String.inde@Of*gcaractere ou su%string a ser localiHadaJ 5posio inicial6f+ -@istem quatro maneiras de utiliHar o mtodo inde@OfJ conforme indica o e@emplo $.0.. 0. class -@emplo<$0. 1. 7 3. $. 9. '. .. :. ;. 0<. 00. 01. 8 8 pu%lic static void main *String args56+ 7 String te@to ^ X=ivro Java 1 F -nsino did3ticoXS c!ar caractere ^ aaaS SCstem.out.println*XrndiceK X W te@to.inde@Of*caractere++S SCstem.out.println*XindiceK X W te@to.inde@Of*caractereJ0<++S SCstem.out.println*XindiceK X W te@to.inde@Of*X-nsinoX++S SCstem.out.println*XindiceK X W te@to.inde@Of*XJavaXJ09++S

Curso Tcnico em Informtica

Capo Bonito - SP

'$

Lo e@emplo $.0. a lin!a 9 contm o te@to que ser3 usado nas pesquisas. 2 lin!a ' declara um caractere aaa que ser3 %uscado no te@to. 2s formas de %usca so as seguintesK Ein?a K: %usca o caractere aaa no te@to e retorna o ndice referente M sua primeira ocorr#ncia. Lo casoJ retorna o ndice .. Ein?a F: %usca o caractere aaa no te@to a partir do ndice 0< e retorna o ndice referente M sua primeira ocorr#ncia. Lo casoJ retorna o ndice 19. La realidadeJ a primeira ocorr#ncia do caractere aaa seria na posio .J entretanto foi solicitado que a %usca iniciasse na posio 0<. Ein?a G: %usca a su%string X-nsinoX no te@to e retorna o ndice referente M sua primeira ocorr#ncia. Lo casoJ retorna o ndice 09. Ein?a $': %usca a su%string XJavaX no te@to a partir da posio 09 e retorna o ndice referente M sua primeira ocorr#ncia. Como no e@iste a palavra XJavaX ap>s a posio 09J retornado o valor F0 *%usca sem sucesso+. O mesmo princpio aplicado quando voc# procura uma palavra em um editor de te@tos e ele no a encontra.

Criao de 0anners
Os %anners *te@tos rolantes+ so muito usados em p3ginas da Internet. -ste item apresenta uma ilustrao que e@plica a construo de %anners com a manipulao de Strings. O e@emplo $.0: mostra uma palavra qualquerJ digitada pelo usu3rioJ sendo formada letra a letra na tela de modo temporiHado. -videntementeJ o e@emplo %em simplesJ servindo apenas como ilustrao. Seu aperfeioamento ca%e ao leitorJ e@plorando sua criatividade. Os aspectos mais importantes do e@emplo aparecem no pr>prio c>digo em negrito e devem ser familiares ao feitorJ uma veH que 43 foram a%ordados em itens anteriores.

Curso Tcnico em Informtica

Capo Bonito - SP

'9

0. class -@emplo<$0: 1. 7 3. $. 9. '. .. :. ;. 0<. 00. 01. 03. 0$. 09. 0'. 0.. 0: . 0;. 1<. 10. 11. 13. 1$. 19. 1'. 1.. 1:. 1;. 8 8 8 8 else 7 SCstem.out.println*X-ntre com uma palavra qualquer.X+S 8 SCstem.out.println*+S SCstem.out.println*XDanner encerradoX+S 7 SCstem.out.println*X ostra a palavra 3 veHesJ letra a letra.X+S palavra ^ args5<6S E!ile *contWWg3+ 7 for*int i^<Sigpalavra.lengt!*+SiWW+ 7 SCstem.out.print*palavra.c!ar2t*i++S VV varre os caracteres for*int @^<S@g9<<<<<<<S@WW+S VV temporiHador 0 8 SCstem.out.println7+S for*int C^<SCg0<<<<<<<<SCWW+S VV temporiHador 1 VV a vari3vel palavra rece%e a palavra digitada VV looping 3 veHes pu%lic static void main *String args56+ 7 int cont ^ <S String palavra ^ XXS VV a vari3vel palavra que ser3 usada no %anner if *args.lengt! e^ <+ VV se o usu3rio digitou uma palavra no prompt

Curso Tcnico em Informtica

Capo Bonito - SP

''

Programao orientada por ob#eto


2 programao tradicionalJ utiliHada em larga escala at cerca de deH anos atr3sJ era caracteriHada pelo emprego da tcnica denominada programao modularJ uma veH que eram criados diversos m>dulos independentesJ mas que possuam um relacionamento entre si. -sses m>dulosJ ao serem agrupadosJ formavam o sistema como um todo. 2 programao orientada por o%4etos uma nova proposta de desenvolvimento de softEares que teve origem na segunda metade da dcada de 0;.<J quando estudiosos do Centro de "esquisas da Zero@J em "aio 2ltoJ Calif>rniaJ desenvolveram uma linguagem de programao denominada Small/alG. -la utiliHava pela primeira veH o conceito de classes e o%4etosJ alm de possuir uma interface gr3fica %aseada em 4anelas e conesJ similar ao que se pode ver !o4e nos sistemas operacionais OindoEsJ acOS e =inu@.

2 idia %3sica por tr3s dessa tcnica a reutiliHao de c>digos 43 prontosJ denominados classesJ para a criao de partes vitais *c!amadas de o%4etos+ de um programa. Com isso o programador pode economiHar um %om tempo sem ter de Xreinventar a rodaX. La programao orientada por o%4etosJ as linguagens empacotam as estruturas de dados e as rotinas *procedimentos e funAes+ que tra%al!am com elas. 2ssimJ essas entidades podem ser tratadas como um Pnico componente do programa. Bma met3fora que pode ser utiliHada para mel!or ilustrar esse conceito a idia de uma lin!a de montagem de autom>veis. Bma classe pode ser imaginada como um dos diversos componentes do autom>velJ comoJ por e@emploJ o motor. -ssa classe denominada motor pode ter alguns atri%utosJ como nPmero de cilindrosJ tipo de alimentao *car%urador ou in4eo eletrjnica+J pot#ncia m3@imaJ etc. "or outro ladoJ o motor desempen!a alguma aoJ que no caso o de funcionar para pjr o autom>vel em movimento. 2 menos que voc# se4a um engen!eiro mec?nicoJ no precisa sa%er em detal!es o funcionamento do motorJ apenas que necess3rio girar a c!ave de ignio para lig3Flo. /odos os o%4etos 4untos *motorJ carroceriaJ portasJ %ancosJ painelJ etc.+ formam o autom>velJ que ainda pode ter seus atri%utos individuaisJ como cor ou nPmero de portas.
Curso Tcnico em Informtica

Capo Bonito - SP

'.

Bma caracterstica interessante da programao orientada por o%4etos a possi%ilidade de derivar um o%4eto de outroJ ou se4aJ criar um novo o%4eto que possui *!erda+ todos os atri%utos e aAes do seu antecessor. Lo e@emplo do autom>velJ o motor poderia ser uma classe %ase da qual seriam derivam outrasJ como demonstra o seguinte esquema sim%>licoK C=2SSO/O,K

Cilindros ^ $ ,efrigerao ^ 3gua "osio ^ transversal Ca%eote ^ alumnio Dloco ^ ferro fundido &I (2 C=2SSO/O, O/O,K

C=2SS-

O/O,qC2,DB,2(O, (-,IU2(O (-

2limentao ^ car%urador Com%ustvel ^ 3lcool &I C=2SSO/O,qC2,DB,2(O, O/O,K

C=2SS-

O/O,qILJ-C2O (-,IU2(O (-

2limentao ^ in4eo eletrjnica Com%ustvel ^ gasolina &I C=2SSO/O,qC2,DB,2(O,

-m termos de programaoJ voc# poderiaJ por e@emploJ criar uma classe genrica para criao de uma 4anela principal do programaJ com menus e %otAes de atal!o. Nuando precisasse desenvolver um novo aplicativoJ recorreria a essa classe para montar a tela principalJ sem ter de escrever uma lin!a sequer novamente. Com essa tcnicaJ cada o%4eto autoFsuficienteJ ou se4aJ capaH de e@ecutar uma tarefa inteira sem precisar se preocupar com o resto do programa.

Curso Tcnico em Informtica

Capo Bonito - SP

':

2n3lise de um programa em Java pu%lic class "rogramaJava<0 7 pu%lic static void main*String args56+ 7 s!ort srt2no ^ 1<<'S int intSegundos ^ :<;:31S SCstem.out.println*XOla pessoal eX+S SCstem.out.println*X"rimeiro programa em J2U2...X+S SCstem.out.println*X2noK XWsrt2no+S SCstem.out.println*XSegundosK XWintSegundos+S 8 8 /odo programa em Java deve iniciar com a declarao de uma classeJ uma veH que um aplicativo considerado uma classe que pode ser estendida. O modificador pu%lic indica que ela uma classe pP%licaJ e devido a isso seu nome deve ser o mesmo dado ao arquivo do c>digoFFfonte. -sta 43 uma diferena em relao Ms linguagens C e CWW. pu%lic class "rogramaJava<0 7 (entro dessa classe vem a definio da funo principal do programaJ denominada mainJ que o ponto de entrada para e@ecuo do programaJ como ocorre nas linguagens C e CWW. O que difere uma da outra a forma utiliHada para declarar essa funo. -m Java so utiliHados os modificadores pu%lic e static. Outra diferena que a funo main mem%ro da classe. pu%lic static void main*String args56+ 7

[ importante notar que essa funo rece%e par?metros os quais so armaHenados na matriH *arraC+ denominada argsJ do tipo Strings. Isso significa que voc# pode passar valores na lin!a de comando quando for e@ecutar o programa. (entro do corpo dessa funo vem o c>digo propriamente dito do programa. "rimeiramente temos a declarao de algumas vari3veis. Lote que ap>s a declarao vem a atri%uio de valor na pr>pria lin!aJ algo que tam%m difere de C e CWW.
Curso Tcnico em Informtica

Capo Bonito - SP

';

s!ort srt2no ^ 1<<'S int intSegundos ^ :<;:31S 2p>s a declarao dessas vari3veis vem uma srie de lin!as que contm comandos para impresso no vdeo. "ara essa tarefaJ precisamos utiliHar uma %i%lioteca de uma classe Java denominada SCstem. [ feita ento uma refer#ncia ao mtodo println da vari3velFmem%ro de nome out. -ssas refer#ncias so o%tidas atravs do operador de refer#nciaX.X *ponto+J da mesma forma que ocorre quando dese4amos acessar um campo de uma estrutura em C ou CWW. SCstem.out.println*XOla pessoal eX+S SCstem.out.println*X"rimeiro programa em J2U2...X+S SCstem.out.println*X2noK XWsrt2no+S SCstem.out.println*XSegundosK XWintSegundos+S Uoc# deve ter notado a e@ist#ncia de a%reFc!aves *7+ e fec!aFc!aves *8+ envolvendo o corpo da funo main e toda a classe. -sses sm%olos t#m a mesma funcionalidade das linguagens C e CW WJ ou se4aJ delimitam um %loco de lin!as de instruAes. La notao B =J uma classe Java poderia ser apresentada conforme o diagrama da figura a%ai@o. Lessa representaoJ tanto os atri%utos quantos os mtodos podem ser precedidos por um modificador representado por um dos seguintes sinaisK F -scopo privativoJ ou se4aJ no !3 visi%ilidade e@terna M classe. W -scopo pP%licoJ ou se4aJ possui visi%ilidade total para o meio e@terno M classe. m -scopo protegidoJ ou se4aJ a visi%ilidade e@terna limitada.

Corpo da funo(membro (m&todo)


Curso Tcnico em Informtica

Capo Bonito - SP

.<

pu%lic class "rogramaJava<0 7 pu%lic static void main*String args56+ 7 s!ort srt2no ^ 1<<'S int intSegundos ^ :<;:31S SCstem.out.println*XOla pessoal eX+S SCstem.out.println*X"rimeiro programa em J2U2...X+S SCstem.out.println*X2noK XWsrt2no+S SCstem.out.println*XSegundosK XWintSegundos+S 8 8 Lome da classe 4eclarao de classe 2tri%utos figura mostra um esquema que identifica cada se o desse primeiro programa. todos ,otao 567 4eclarao da funo(membro (m&todo)

%e&inio e uso de uma classe


Ue4amos na pr3tica como criar e utiliHar uma classe. "ara apresentar esse recurso fant3sticoJ este 8 t>pico valerFseF3 de alguns conceitos e@istentes na matem3ticaJ o c3lculo da 3rea de figuras geomtricas planas. Lo preciso correr para pegar aquele livro de matem3tica utiliHado no ensino fundamental para rever esse assuntoJ pois sero revistas superficialmente as f>rmulas utiliHadas nos c3lculos. "rimeiramente vamos criar uma classe que contm apenas duas vari3veis do tipo int *inteiro+. -ssa classe ser3 utiliHada pelos outros programas que construiremos depois.

Curso Tcnico em Informtica

Capo Bonito - SP

.0

2%ra um editor de te@tos e digite o seguinte c>digoK pu%lic class (imensao 7 pu%lic int intDaseJint2lturaS 8 \rave o arquivo com o nome (imensao.4ava e depois compileFo com o seguinte comandoK 4avac (imensao.4ava 2gora digite o c>digo apresentado a seguir no editor de te@tos e graveFo com o nome 2reaNuadrado.4ava. pu%lic class 2reaNuadrado 7 pu%lic static void main*String args56+ 7 int int2reaS (imensao Nuadrado ^ neE (imensao*+S Nuadrado.intDase ^ $ S Nuadrado.int2ltura ^ $ S int2rea ^ Nuadrado.intDase ] Nuadrado.int2lturaS SCstem.out.println*Xsrea do quadrado ^ XWint2rea+S 8 8 O%serve que foi declarada uma vari3vel denominada Nuadrado como sendo do tipo (imensoJ que se encontra definido na classe criada anteriormente. Outra curiosidade a e@presso neE (imensao*+ ap>s a declarao. LelaJ neE um operador e (imensao*+ uma funoFmem%ro especial da classe denominada construtora. [ essa funo que aloca espao na mem>ria para a vari3vel de refer#ncia e seus atri%utos. -m resumoJ o que ocorre com essa e@presso a criao da vari3vel de refer#ncia imediatamente ap>s sua declarao. -m seguida temos a atri%uio de valores a duas vari3veis do o%4eto Nuadrado. O leitor poder3 ento se perguntarK mas como esse o%4eto possui essas vari3veis se elas no foram declaradas no programa? "ara encontrar a respostaJ %asta ol!ar para a definio da classe (imenso. Como esse o%4eto declarado desse tipoJ ele !erda todos os atri%utos. "ara ter acesso a esses atri%utosJ preciso utiliHar a notao do ponto *.+.
Curso Tcnico em Informtica

Capo Bonito - SP

.1

(epois da atri%uio desses dois valoresJ o programa faH o c3lculo da 3rea simplesmente efetuando a multiplicao entre os dois. Caso no se lem%reJ a 3rea de um quadrado definida como lado Z lado. Interessante como as coisas funcionam direito. Uoc# tam%m deve estar curioso para sa%er como isso possvel. Nuando compilamos o c>digoJ o compilador adicionou uma refer#ncia M classe (imensoJ que resolvida em tempo de e@ecuo. Se essa classe no e@istisseJ seria gerado um erro no momento da compilao. 2ssimJ os dois c>digos estoJ de certa formaJ intimamente ligados. 2%ra novamente o editor de te@tos e digite o seguinte c>digoK pu%lic class 2rea/riangulo 7 pu%lic static void main*String args56+ 7 int int2reaS (imenso /ri?ngulo ^ neE (imenso*+S /ri?ngulo.intDase ^ 'S /ri?ngulo.int2ltura ^ 3S int2rea ^ */ri?ngulo.intDase ] /ri?ngulo.int2ltura+ V 1S SCstem.out.println*Xsrea do tri?ngulo ^ XWint2rea+S 8 8

Curso Tcnico em Informtica

Capo Bonito - SP

.3

O pr>@imo programaJ que calcula a 3rea de um trapHioJ e cu4o c>digo apresentado a seguirJ um pouquin!o mais comple@o. pu%lic class 2rea/rapeHio 7 pu%lic static void main*String args56+ 7 int int2reaJ intDase enorJ intDase aiorS (imenso /rapHio ^ neE (imenso*+S intDase enor ^ 3 S intDase aior ^ 9S /rapeHio.intDase ^ *intDase enor W intDase aior+S /rapeHio.int2ltura ^ $S int2rea ^ */rapeHio.intDase ] /rapeHio.int2ltura+ V 1S SCstem.out.println*Xsrea do trapeHio ^ XWint2rea+S 8 8 Como possvel perce%erJ foi necess3ria a declarao de mais duas vari3veis inteiras. -las sero utiliHadas para armaHenar o comprimento da %ase menor e da %ase maior do trapHio. Isso se deve ao fato de a f>rmula para c3lculo da 3rea de um trapHio ser definida como **%ase menor W %ase maior+ Z altura+ V 1.< motivo de somar as duas %ases queJ se voc# duplicar o trapHio e posicion3Flo no lado opostoJ de forma invertidaJ ter3 como resultado um ret?ngulo. 2dio de mtodos M classe 2 classe que criamos ainda pode ser mel!orada com o acrscimo de um mtodo que realiHa parte dos c3lculos. (iHemos parte porque ele na verdade se resume M multiplicao dos dois valores armaHenados nas vari3veisFmem%ro. (epois veremos como possvel faHer com que esse c3lculo se4a mais sofisticado.

Curso Tcnico em Informtica

Capo Bonito - SP

.$

2ltere o arquivo (imensao.4ava acrescentando as lin!as destacadas em negrito na seguinte listagemK pu%lic class (imenso 7 pu%lic int intDaseJ int2lturaS pub*ic int LreaAB M return AintBase 9 intA*turaB+ N 8 -sse c>digo que aca%amos de incluir uma funoFmem%ro que retorna o resultado da multiplicao das vari3veis intDase e int2ltura. [ uma funo %astante simplesJ como se pode ver. 2gora podemos adaptar os c>digos dos programas alterando a lin!a destacada nas seguintes listagensK 2rquivo AreaOuadrado%"ava pu%lic class 2reaNuadrado 7 pu%lic static void main*String args56+ 7 int int2reaS (imenso Nuadrado ^ neE (imenso*+S Nuadrado.intDase ^ $S Nuadrado.int2ltura ^ $S int2rea ^ Nuadrado.2rea*+S SCstem.out.println*Xsrea do quadrado ^ XWint2rea+S 8 8

Curso Tcnico em Informtica

Capo Bonito - SP

.9

2rquivo AreaPrian u*o%"ava pu%lic class 2rea/riangulo 7 pu%lic static void main*String args56+ 7 int int2reaS (imenso /ri?ngulo ^ neE (imenso*+S /ri?ngulo.intDase ^ 'S /ri?ngulo.int2ltura ^ 3S int2rea ^ /riangulo.2rea* + V 1S SCstem.out.println*Xsrea do tri?ngulo ^ XWint2rea+S 8 8 2rquivo AreaPrape<io%"ava pu%lic class 2rea/rapeHio 7 pu%lic static void main*String args56+ 7 int int2reaJintDase enorJintDase aiorS (imenso /rapeHio ^ neE (imenso*+S intDase enor ^ 3S intDase aior ^ 9S /rapeHio.intDase ^ *intDase enor W intDase aior+S /rapeHio.int2ltura ^ $S int2rea ^ /rapeHio.srea*+ V 1S SCstem.out.println*Xsrea do trapeHio ^ XWint2rea+S 8 8 Como possvel notarJ a lin!a em que todo o c3lculo era efetuado foi simplificada pela c!amada ao mtodo 2rea*+ do o%4eto do tipo (imenso. 2 classe ainda no est3 completaJ pelo menos da forma que seria considerada ideal. "recisamos faHer modificaAes porque as vari3veisFmem%ro *tam%m c!amadas atri%utos+ so visveis
Curso Tcnico em Informtica

Capo Bonito - SP

.'

e@ternamente M classeJ uma situao que no aceit3vel para uma %oa programao orientada por o%4etoJ uma veH que fere as regras de encapsulamento de atri%utos. O primeiro passo tornar as vari3veisFmem%ro privadas M classe pelo modificador privateJ da seguinte formaK pu%lic class (imenso 7 private int intDaseJint2lturaS pu%lic int srea*+ 7 return *intDase ] Int2ltura+S 8 8 2gora vem o pro%lema. /ornando as vari3veis privadasJ no podemos acess3Flas a partir dos programas. -nto como faremos para atri%uir os valores a elas? 2 resposta a utiliHao de mtodos. 2dicione M classe as lin!as destacadas em negrito na listagem mostrada a seguirK pu%lic class (imensao 7 private int intDaseJint2lturaS pu%lic void Dase*int intDase+ 7 t!is.intDase ^ intDaseS 8 pu%lic void 2ltura*int int2ltura+ 7 t!is.int2ltura ^ int2lturaS 8 pu%lic int 2rea*+ 7 return *intDase ] int2ltura+S 8 8
Curso Tcnico em Informtica

Capo Bonito - SP

..

2s alteraAes se resumiram a duas novas funAes que inclumos. [ importante notar e entender o operador t!is e@istente nelas. -sse operador foi utiliHado devido ao fato de os par?metros das funAesFmem%ro terem os mesmos nomes das vari3veisFmem%ro. (esta formaJ ele fora uma refer#ncia ao pr>prio o%4eto. Se no quisssemos utiliH3FloJ seria necess3rio dar outros nomes aos par?metros. Os programas tam%m precisam ser alteradosJ conforme indicam as listagensK 2rquivo AreaOuadrado%"ava pu%lic class 2reaNuadrado 7 pu%lic static void main*String args56+ 7 int int2reaS (imensao Nuadrado ^ neE (imensao*+S Nuadrado.Dase*$+S Nuadrado.2ltura*$+S int2rea ^ Nuadrado.2rea*+S SCstem.out.println*Xsrea do quadrado ^ XWint2rea+S 8 8 2rquivo AreaPrian u*o%"ava pu%lic class 2rea/riangulo 7 pu%lic static void main*Stringaargs56+ 7 int int2reaS (imenso /ri?ngulo ^ neE (imenso*+S /ri?ngulo.Dase*'+S /ri?ngulo.2ltura*3+S int2rea ^ /ri?ngulo.srea*+ V 1S SCstem.out.println*Xsrea do tri?ngulo ^ XWint2rea+S 8 8

Curso Tcnico em Informtica

Capo Bonito - SP

.:

2rquivo AreaPrape<io%"ava pu%lic class 2rea/rapeHio 7 pu%lic static void main*String args56+ 7 int int2reaJintDase enorJintDase aiorS (imenso /rapeHio ^ neE (imenso*+S intDase enor ^ 3S intDase aior ^ 9S /rapeHio.Dase*intDase enor W intDase aior+S /rapeHio.2ltura*$+S int2rea ^ /rapeHio.srea*+ V 1S SCstem.out.println*Xsrea do trapeHio ^ XWint2rea+S 8 8 "ara finaliHarJ vamos acrescentar uma vari3velFmem%ro e uma funo que permitem a especificao do tipo de o%4eto geomtrico para que o c3lculo se4a efetuado corretamente pela pr>pria classe. Sendo assimJ altere o c>digo do arquivo (imensao.4ava adicionando as lin!as em destaque mostradas em seguidaK pu%lic class (imenso 7 private int intDaseJint2lturaS private String str/ipoS pu%lic void Dase*int intDase+ 7 t!is.intDase ^ intDaseS 8 pu%lic void 2ltura*int int2ltura+ 7 t!is.int2ltura ^ int2lturaS 8 pu%lic void /ipo*String str/ipo+
Curso Tcnico em Informtica

Capo Bonito - SP

.;

7 t!is.str/ipo ^ str/ipoS 8 pu%lic int srea*+ 7 int int2reaS int2rea ^ intDase ] int2lturaS if **str/ipo ^^ X=OS2L\OX+ ii *str/ipo ^^ X/,2"-oIOX+ ii *str/ipo ^^ X/,ItL\B=OX++ int2rea ^ int2rea V 1S return *int2rea+S 8 8 2 vari3vel str/ipo rece%er3J atravs da funoFmem%ro /ipo*+J uma cadeia de caracteres que representa o tipo de o%4eto geomtrico para que assim a funo 2rea*+ consiga sa%er se o valor da 3rea deve ser dividido por doisJ no caso de o tipo de o%4eto ser X=OS2L\OXJ X/,2"-oIOX ou X/,ItL\B=OX. 2gora precisamos adaptar os programas M nova realidade. 2s listagens seguintes apresentam os c>digos novosK 2rquivo AreaOuadrado%"ava pu%lic class 2reaNuadrado 7 pu%lic static void main*String args56+ 7 int int2reaS (imenso Nuadrado ^ neE (imenso*+S Nuadrado.Dase*$+S Nuadrado.2ltura*$+S Nuadrado. /ipo *XNB2(,2(OX+ S int2rea ^ Nuadrado.srea*+S SCstem.out.println*Xsrea do quadrado ^ XWint2rea+S 8 8
Curso Tcnico em Informtica

Capo Bonito - SP

:<

2rquivo AreaPrian u*o%"ava pu%lic class 2rea/riangulo 7 pu%lic static void main*String args56+ 7 int int2reaS (imenso /ri?ngulo ^ neE (imenso*+S /ri?ngulo.Dase*'+S /ri?ngulo.2ltura*3+S /ri?ngulo./ipo*X/,ItL\B=OX+S int2rea ^ /ri?ngulo.srea*+ V 1S SCstem.out.println*Xsrea do tri?ngulo ^ XWint2rea+S 8 8 2rquivo AreaPrape<io%"ava pu%lic class 2rea/rapeHio 7 pu%lic static void main*String args56+ 7 int int2reaJintDase enorJintDase aiorS (imenso /rapeHio ^ neE (imenso*+S intDase enor ^ 3S intDase aior ^ 9S /rapeHio.Dase*intDase enor W intDase aior+S /rapeHio.2ltura*$+S Prape<io% Pipo AQPRAP.S3-Q B+ int2rea ^ /rapeHio.srea*+ V 1 S SCstem.out.println*Xsrea do trapeHio ^ XWint2rea+S 8 8

Curso Tcnico em Informtica

Capo Bonito - SP

:0

Construtores e 7erana
,di/0o de construtores Bma caracterstica muito interessante das classes a possi%ilidade de inicialiHao dos o%4etos criados com elas. Isso significa que os atri%utos e@istentes neles podem rece%er valores automaticamente durante a declarao. "ara que isso se4a possvelJ necess3ria a definio de um mtodo especial denominado construtor. Bm mtodo construtor deveJ necessariamenteJ rece%er o mesmo nome dado M classe eJ em%ora no possua um tipo de retornoJ pode rece%er par?metros cu4os valores so atri%udos aos atri%utos do o%4eto. -ssa atri%uio ocorre quando a inst?ncia do o%4eto criada pelo operador neE. (eveFse ressaltar que toda classe possui um mtodo construtorJ mesmo nos casos em que ele no ten!a sido definido e@plicitamente. Leste casoJ o pr>prio compilador Java se encarrega de adicionar um construtorFpadro. "or e@emploJ para a classe (imenso foi criada de forma transparente a seguinte declaraoK pu%lic (imenso*+ 7 8 Isso pjde ser verificado nos e@emplos anterioresJ que c!amavam um mtodo denominado (imensao*+J como no seguinte e@emploK (imenso =osango ^ neE (imenso*+S Bma caracterstica importantssima que deve ser o%servada que a e@ecuo do construtor de uma classe s> ocorre uma Pnica veH durante todo o tempo de e@ist#ncia do o%4eto. Ue4amos ento como criar uma classe que possua um mtodo construtor e as alteraAes que devem ser feitas nos programas desenvolvidos no captulo anterior para utiliH3Fla.

Curso Tcnico em Informtica

Capo Bonito - SP

:1

"rimeiramenteJ digite o c>digo mostrado na listagem seguinte num editor de te@tos e graveFo com o nome &igura\eometrica.4avaK pu%lic class &igura\eometrica 7 private int intDaseJint2lturaS private String str/ipoS pu%lic &igura\eometrica*String str/ipoJint intDaseJint int2ltura+ 7 t!is.str/ipo ^ str/ipoS t!is.intDase ^ intDaseS t!is.int2ltura ^ int2lturaS 8 pu%lic int 2rea*+ 7 int int2reaS int2rea ^ intDase ] int2lturaS if **str/ipo ^^ X=OS2L\OX+ ii *str/ipo ^^ X/,2"-oIOX+ ii *str/ipo ^^ X/,ItL\B=OX++ int2rea ^ int2rea V 1S return *int2rea+S 8 8 Lessa nova classeJ temos a declarao das mesmas vari3veis 43 vistas no captulo anteriorK uma para armaHenar o valor da %aseJ outra para o valor da altura e uma Pltima para conter o tipo de figura geomtrica. -m seguida temos a definio do construtor *note que ele tem o mesmo nome da classe+. So passados a ele tr#s par?metrosK uma cadeia de caracteres que designa o tipo de figura geomtricaJ um valor numrico que representa o comprimento da %ase da figura e um nPmero inteiro para o comprimento da altura.

Curso Tcnico em Informtica

Capo Bonito - SP

:3

-sses valores so passados aos atri%utos da classe. &oi utiliHado novamente o operador t!is como uma forma de se referir ao pr>prio o%4eto. /emos por fimJ um mtodo que efetua o c3lculo da 3rea da figura geomtricaJ similar ao 43 e@istente na classe (imenso. 2gora altere o c>digo dos programas *que no dei@am de ser classes tam%m+ conforme indicado nas seguintes listagensK 2rquivo AreaOuadrado%"ava pu%lic class 2reaNuadrado 7 pu%lic static void main*String args56+ 7 int intArea+ @i uraTeometrica Ouadrado U neJ @i uraTeometricaAQOVA2RA2-QIHIHB+ int2rea ^ Nuadrado.srea*+S SCstem.out.println*Xsrea do quadrado ^ XWint2rea+S 8 8 2rquivo AreaPrian u*o%"ava pu%lic class 2rea/riangulo 7 pu%lic static void main*String args56+ 7 int intArea+ @i uraTeometrica PriWn u*o U neJ @i uraTeometricaAQPR3XNTVE-QI&I)B+ int2rea ^ /ri?ngulo.srea*+ V 1S SCstem.out.println*Xsrea do tri?ngulo ^ XWint2rea+S 8 8

Curso Tcnico em Informtica

Capo Bonito - SP

:$

2rquivo AreaPrape<io%"ava pu%lic class 2rea/rapeHio 7 pu%lic static void main*String args56+ 7 int int2reaJintDase enorJintDase aiorS (imenso /rapeHio ^ neE (imenso*+S intDase enor ^ 3S intDase aior ^ 9S @i uraTeometrica Prape<io Y neJ @i uraTeometrica AQPRAP.S3-QIAintBaseMenor Z intBaseMaiorBIHBS int2rea ^ /rapeHio.srea*+ V 1S SCstem.out.println*Xsrea do trapeHio ^ XWint2rea+S 8 8 Sem dPvidaJ os c>digos ficaram mais claros e en@utos com essas alteraAes. 2goraJ no momento da criao do o%4etoJ seus atri%utos 43 so inicialiHados automaticamenteJ sem a necessidade de ter lin!as que faHem as atri%uiAes dos valores separadamente. Lo entantoJ preciso ter cuidado com a ordem em que os par?metros so passadosJ para que no !a4a pro%lemas na !ora da compilao ou na e@ecuo. 2ntes de finaliHar esse t>picoJ importante dei@ar claro queJ diferentemente de CWWJ na linguagem Java no precisamos definir um mtodo destrutor. La verdadeJ Java nem tra%al!a com esse conceito. 2 destruio de um o%4eto e a recuperao da mem>ria ocupada por ele ficam a cargo do coletor de li@o. Outra diferena em relao ao CWW que os construtores so definidos dentro do pr>prio corpo da classeJ e no fora delaJ empregandoFse o operador de resoluo de a%rang#ncia *KK+J que associa a definio da funo com a classe a que pertence.

Curso Tcnico em Informtica

Capo Bonito - SP

:9

7erana de classes
-ste t>pico apresenta um assunto muito interessante em Java e em outras linguagens orientadas por o%4eto *como CWW+K a !erana. Dasicamente ela pode ser definida como uma classe *denominada su%classe+ que criada contendo todas as caractersticas *atri%utos e mtodos+ de uma outra classe *denominada superclasse+. u su%classe podem ser adicionados outros atri%utos e mtodos que so especficos dela. "or outro ladoJ ela recon!ece todos aqueles que 43 se encontram definidos na superclasse. "ara estudar esse conceitoJ vamos criar uma classe %ase *superclasse+ com a seguinte definioK k Lome da classeK (ados"essoais k 2tri%utosK Lome *String+J -ndereo *String+J Dairro *String+J Cidade *String+J -stado *String+J C-" *String+J /elefone *String+. k todosK (ados"essoais *construtor+J getLomeJ get-nderecoJ getDairroJ getCidadeJ get-stadoJ get C-"J get/elefone. -m termos de notao B =J teramos um diagrama similar ao da figura a%ai@o

Curso Tcnico em Informtica

Capo Bonito - SP

:'

O c>digo para definio dessa classe seria o seguinteK pu%lic class (ados"essoais 7 private String strLomeJ str-nderecoJ strDairroJ strCidadeJ str-stadoJ strC-"J str/elefoneS pu%lic (ados"essoais*String strLomeJ String str-nderecoJ String strDairroJ String strCidadeJ String str-stadoJ String strC-"J String str/elefone+ 7 t!is.strLome ^ strLomeS t!is.str-ndereco ^ str-nderecoS t!is.strDairro ^ strDairroS t!is.strCidade ^ strCidadeS t!is.str-stado ^ str-stadoS t!is.strC-" ^ strC-"S t!is.str/elefone ^ str/elefoneS 8 pu%lic String getLome* + 7 return strLomeS 8 pu%lic String get-ndereco* + 7 return str-nderecoS 8 pu%lic String getDairro* + 7 return strDairroS 8 pu%lic String getCidade* + 7 return strCidadeS 8 pu%lic String get-stado* + 7 return str-stadoS 8 pu%lic String getC-"* + 7 return strC-"S 8 pu%lic String get/elefone* + 7 return str/elefoneS 8 8
Curso Tcnico em Informtica

Capo Bonito - SP

:.

2p>s a declarao dos atri%utos temos a definio do construtor e dos mtodos que retornam os valores dos atri%utos. Bma conveno que normalmente tem sido utiliHada na programao em Java o acrscimo da e@presso get M frente de todos os mtodos que possuem a funo de retornar um valor da classe. Bma veH que as su%classes *classes fil!as+ no !erdam os construtores da superclasse *classe me+J precisamos definir um construtor que c!ama e@plicitamente o construtor da superclasse atravs da palavra reservada super. Os par?metros necess3rios so passados dentro dos par#nteses que seguem essa palavraFc!ave. 2 palavra reservada e@tendsJ por outro ladoJ utiliHada para indicar que uma classe !erdaVestende outra. Seguindo essa palavra reservaJ deve vir o nome da superclasse. -m JavaJ uma su%classe somente pode estender diretamente uma outra su%classeJ no sendo permitida a !erana mPltiplaJ como ocorre em CWW. O c>digo apresentado a seguir cria outra classe que !erda as caractersticas da classe (ados"essoais e estende suas funcionalidades com a adio de novos atri%utos e mtodosK pu%lic class ,egistroCliente e@tends (ados"essoais 7 private 4ava.Ptil.(ate dtLascimentoS private dou%le d%l=imiteCreditoS pu%lic ,egistroCliente*String strLomeJ String str-nderecoJ String strDairroJ String strCidadeJ String str-stadoJ String strC-"J String str/elefoneJ 4ava.Ptil.(ate dtLascimentoJ dou%le d%l=imiteCredito+ 7 super*strLomeJstr-nderecoJstrDairroJstrCidadeJstr-stadoJstrC-"Jstr/elefone+S t!is.dtLascimento ^ dtLascimentoS t!is.d%l=imiteCredito ^ d%l=imiteCreditoS 8 pu%lic 4ava.Ptil.(ate getLascimento*+ 7
Curso Tcnico em Informtica

Capo Bonito - SP

::

return dtLascimentoS 8 pu%lic dou%le get=imiteCredito*+ 7 return d%l=imiteCreditoS 8 8 Leste c>digo possvel perce%er que foi preciso referenciar de forma e@plcita o pacote padro 4ava.util para ter acesso M classe (ate. O%serve como foi utiliHada a c!amada ao construtor da superclasse (ados"essoais dentro do construtor da su%classe ,egistroClienteK todos os par?metros necess3rios so passados a super. (a superclasse poderamos tam%m derivar outras su%classesJ como a e@istente no c>digo da seguinte listagemK pu%lic class ,egistro&ornecedor e@tends (ados"essoais 7 private String strCL"JS private dou%le d%l=imiteCreditoS pu%lic ,egistro&ornecedor*String strLomeJ String str-nderecoJ String strDairroJ String strCidadeJ String str-stadoJ String strC-"J String str/elefoneJ String strCL"JJ dou%le d%l=imiteCredito+ 7 super*strLomeJstr-nderecoJstrDairroJstrCidadeJstr-stadoJstrC-"Jstr/elefone+S t!is.strCL"J ^ strCL"JS t!is.d%l=imiteCredito ^ d%l=imiteCreditoS 8 pu%lic String getCL"J* + 7
Curso Tcnico em Informtica

Capo Bonito - SP

:;

return strCL"JS 8 pu%lic dou%le get=imiteCredito* + 7 return d%l=imiteCreditoS 8 8

Curso Tcnico em Informtica

Capo Bonito - SP

;<

(efinida a superclasse e as su%classes derivadasJ estamos prontos para o programa propriamente dito. Ue4a o c>digo apresentado na listagemK pu%lic class Cadastro 7 pu%lic static void main*String args56+ 7 4ava.Ptil.(ate dt(ataLascimento ^ neE 4ava.util.(ate*:<J 3J19+S ,egistroCliente Cliente ^ neE ,egistroCliente*X,ogrio 2l%erto "edroXJ X,ua Santos (umontJ 0;<<XJ XJd. 2viaoXJ XSo "auloXJ XS"XJ X<<00<F<<0XJ X00 <;<;F0<<0XJ dt(ataLascimentoJ 19<<+ S ,egistro&ornecedor &ornecedor ^ neE ,egistro&ornecedor*X2utoFpeas otorDomXJ X2v. "rimaveraJ ;1<XJ XJd. -staAesXJ XSo "auloXJ XS"XJ X<00<<F0<0XJ X00 0<0<F<1<1XJ X00F<<0.<<0V<<<0F00XJ :<<<+ S SCstem.out.println*X(ados do ClienteX+S SCstemJ out .println *XFFFFFFFFFFFFFFFFX+ S SCstem.out.println*XLomeK XWCliente.getLome*++S SCstem.out.println*X-ndereoK XWCliente.get-ndereco*++S SCstem.out.println*XDairroK XWCliente.getDairro*++S SCstem.out.println*XCidadeK XWCliente.getCidade*++S SCstem.out.println*X-stadoK XWCliente.get-stado*+ + S SCstem.out.println*XC-"K XWCliente.getC-"*++S SCstem.out.println*XLascimentoK XWCliente.getLascimento*++S SCstem.out.println*X=imite de crditoK XWCliente.get=imiteCredito*++S SCstem.out.println*XX+S SCstem.out.println*X(ados do &ornecedorX+S SCstemJ out .println *XFFFFFFFFFFFFFFFFFFFX+ S
Curso Tcnico em Informtica

Capo Bonito - SP

;0

SCstem.out.println*X,aHo SocialK XW&ornecedor.getLome*++S SCstem.out.println*X-ndereoK XW&ornecedor.get-ndereco*++ S SCstem.out.println*XDairroK XW&ornecedor.getDairro*++S SCstem.out.println*XCidadeK XW&ornecedor.getCidade*++S SCstem.out.println*X-stadoK XW&ornecedor.get-stado*++ S SCstem.out.println*XC-"K XW&ornecedor.getC-"*++S SCs tem.out.println*XCL"JK XW&ornecedor.getCL"J*++ S SCstem.out.println*X=imite de crditoK XW&ornecedor.get=imiteCredito* ++S 8 8 LovamenteJ foi preciso utiliHar 4ava.util.(ate na declarao da vari3vel dt(ataLascimento. Ue4a que essa mesma e@presso foi empregada para criar a inst?ncia do o%4eto *neE 4ava.util.(ate*:<J3J19++. &oram passados como par?metros para o construtor o anoJ o m#s e o dia. Compile os c>digos (ados"essoais.4avaJ ,egistroCliente.4ava e ,egistro&ornecedor.4avaJ que foram apresentados anteriormente. Compile em seguida o programa cu4o arquivo se denomina Cadastro.4ava. Uoc# notar3 que o compilador Java apresenta a mensagem de alerta *no de erro+ da figura '.3. "ara ter maiores detal!es so%re o ponto do programa que fora essa mensagemJ siga a orientao e compile novamente o c>digo digitando 4avac FZlint Cadastro.4ava. "odemos agora ver que o aviso est3 relacionado com a lin!a em que declarado o o%4eto dtLascimentoJ mais precisamente com a c!amada ao construtor da classe (ate. /raduHindo de forma %astante resumidaJ o compilador informa que a sinta@e utiliHada para c!amar esse construtor est3 o%soletaJ em%ora no este4a errada. Isso se deve ao fato de terem sido adicionadas outras maneiras de invocar o construtor nas novas especificaAes da 2"I do Java. O leitor deve ter perce%ido um pequeno pro%lema ap>s rodar o programaK !avamos especificado o valor X3X para o m#sJ o que significa que deveria ser mostrado como sendo ar *maro+ na impresso da data de nascimentoJ porm foi impresso 2pr *a%ril+. Lo se trata e@atamente de um erroJ mas acontece que esse par?metro iniciaFse em <J ou se4aJ < representa 4aneiroJ 0 fevereiroJ 1 maro e assim por dianteJ at 00J que significa deHem%ro. -stran!oJ mas assim que funciona. Isso deve ocorrer pelo fato deJ provavelmenteJ !aver uma matriH contendo os nomes
Curso Tcnico em Informtica

Capo Bonito - SP

;1

dos meses definida dentro da classeJ e como os ndices das matriHes sempre iniciam em <J o mesmo acontece com o par?metro do construtor.

4obrescrita e 4obrecarga de 3$todos


Conceito de polimorfismo O termo polimorfismo vem do grego e significa Xv3rias formasX. -m Java e outras linguagens orientadas por o%4etoJ um conceito que torna possvel a criao de o%4etos contendo mtodos que possuem o mesmo nomeJ mas e@ecutam tarefas diferentes. Com isso podemos fornecer um Pnico nome a uma ao que compartil!ada por toda a !ierarquia dos o%4etos. -sta 43 uma caracterstica dos operadores matem3ticosJ afinal de contas para somar nPmeros inteiros ou de ponto flutuante utiliHamos o mesmo sinal de adio *W+. (a mesma formaJ no !3 um operador especfico para multiplicar dois nPmeros inteiros e outro para multiplicar dois nPmeros decimais. O que a tcnica de programao orientada por o%4etos oferece *tanto em Java quanto em outras linguagens+ a possi%ilidade de termos uma funo ou mtodo com o mesmo nomeJ mas que age diferente conforme os par?metros que rece%e. Isso evita que ten!amos de definir v3rios mtodos com nomes diferentesJ e Ms veHes at estran!osJ ou que ten!amos de utiliHar comandos de deciso *if ou sEitc!+ para que a ao correta se4a e@ecutada. -m JavaJ o polimorfismo empregado quando definimos uma su%classe em que se encontra implementado um mtodo ou atri%uto 43 e@istente na superclasse da qual !erdeira. Ue4a o esquema da figura a%ai@oK

O polimorfismo em Java o%tido atravs da so%rescrita e so%recarga de mtodos. La so%rescritaJ um mtodo da superclasse *classe me+ redefinido nas su%classes !erdeiras *classes fil!as+ para modificar seu comportamentoJ mantendo sua assinatura original. J3 na so%recargaJ podemos ter um mesmo mtodo definido diversas veHesJ e cada um e@ecuta uma operao especfica conforme os par?metros rece%idos. Leste casoJ as assinaturas so diferentes.
Curso Tcnico em Informtica

Capo Bonito - SP

;3

Uamos estudar ento cada um desses recursos. So"rescrita de mtodos "ara entendermos como funciona a so%rescrita de mtodosJ nada mel!or do que tra%al!ar diretamente com um e@emplo concreto. O que faremos agora alterar a classe &igura\eometrica *apresentada no captulo anterior+J criar su%classes a partir dela e adaptar os programas para usar a su%classe. "rimeiramente altere o c>digo da classe &igura\eometrica *arquivo &igura\eometrica.4ava+ para o seguinteK pu%lic class &igura\eometrica 7 private int intDaseJint2lturaS pu%lic &igura\eometrica*int intDaseJ int int2ltura+ 7 t!is.intDase ^ intDaseS t!is.int2ltura ^ int2lturaS 8 pu%lic int srea* + 7 int int2reaS int2rea ^ intDase ] int2lturaS return *int2rea+S 8 8 Lote queJ diferentemente da verso .anteriorJ o construtor no possui mais um par?metro para indicar o tipo de figura. O mtodo 2rea* + tam%m foi alterado de forma que no !3 o teste com o comando if para determinar se o valor da multiplicao *%ase Z altura+ deveria ser dividido por 1. -sta a superclasse. Uamos criar duas su%classes denominadas Nuadrado e /rapHio. 2 primeira respons3vel por calcular o valor da 3rea do quadradoJ enquanto a segunda se encarrega do c3lculo da 3rea do trapHio.

Curso Tcnico em Informtica

Capo Bonito - SP

;$

Ue4a os c>digos apresentados nas seguintes listagensK 2rquivo Ouadrado%"ava pu%lic class Nuadrado e@tends &igura\eometrica 7 pu%lic Nuadrado*int intDaseJint int2ltura+ 7 super*intDaseJint2ltura+S 8 pu%lic int srea* + 7 int int2reaS int2rea ^ super.2rea*+S return int2reaS 8 8 2rquivo Prape<io%"ava pu%lic class /rapeHio e@tends &igura\eometrica 7 pu%lic /rapeHio*int intDaseJint int2ltura+ 7 super*intDaseJint2ltura+S 8 pu%lic int srea* + 7 int int2reaS int2rea ^ super.2rea*+ V 1S return int2reaS 8 8 [ importante prestar %astante ateno ao construtor e M redefinio do mtodo 2rea*+. Os construtores dessas duas su%classes c!amam o construtor da superclasse atravs da palavra reservada super com os par?metros necess3rios entre par#nteses. J3 o mtodo 2rea* + possui uma c!amada ao mtodo de mesmo nome e@istente na superclasse. "ara que isso se4a possvelJ necess3rio utiliHar novamente a palavra reservada superJ que
Curso Tcnico em Informtica

Capo Bonito - SP

;9

informa uma refer#ncia M superclasse. -ssa construo traduHida pelo compilador como se fosse &igura\eometrica.2rea*+. Lo caso especfico da classe /rapeHioJ o valor retornado por 2rea*+ dividido por 1J como manda a regra. (esta forma temos um c>digo mais limpo e totalmente dentro das normas de uma %oa programao orientada por o%4etoJ ou se4aJ uma classe %ase e as classes derivadas contendo as caractersticas que l!e so pertinentes. "ara utiliHar essas duas novas classesJ altere o c>digo dos programas mostrados a seguirK 2rquivo AreaOuadrado%"ava pu%lic class 2reaNuadrado 7 pu%lic static void main*String args56+ 7 int int2reaS Nuadrado O%4Nuadrado ^ neE Nuadrado*$ J $+S int2rea ^ O%4Nuadrado.srea*+S SCstem.out.println*Xsrea do quadrado ^ XWint2rea+S 8 8 2rquivo AreaPrape<io%"ava pu%lic class 2rea/rapeHio 7 pu%lic static void main*String args56+ 7 int int2reaJintDase enorJintDase aiorS intDase enor ^ 3S intDase aior ^ 9S /rapeHio O%4/rapeHio ^ neE /rapeHio**intDase enor W intDase aior+J$+S int2rea ^ O%4/rapeHio.srea*+S SCstem.out.println*Xsrea do trapeHio ^ XWint2rea+S 8 8

Curso Tcnico em Informtica

Capo Bonito - SP

;'

2s duas diferenas em relao ao c>digo da verso anterior so a especificao das classes Nuadrado e /rapeHio no lugar de &igura\eometricaJ e a aus#ncia da cadeia de caracteres informando o tipo de figura geomtrica. Uoc# deve compilar o arquivo &igura\eometrica.4ava primeiro e depois a classe derivada dela. S> ento compile o programa e rodeFo. So"recar#a de mtodos Como 43 foi mencionado antesJ a so%recarga possi%ilita que um mesmo mtodo ten!a v3rias versAes. Cada verso deve possuir um ou mais par?metros que tornem possvel a distino. Uamos alterar os mtodos construtores das classes Nuadrado e /rapeHio de modo que se no for passado nen!um par?metroJ se4a assumido por padro o valor 0 para a %ase e para a altura. 2%ra o arquivo Nuadrado.4ava num editor de te@tos e acrescente a lin!a destacada em negrito na seguinte listagemK pu%lic class Nuadrado e@tends &igura\eometrica 7 pu%lic Nuadrado* + 7 super*0J0+S 8 pu%lic Nuadrado*int intDase.int int2ltura+ 7 super*intDaseJint2ltura+S 8 pu%lic int srea *+ 7 int int2reaS int2rea ^ super.srea*+S return int2reaS 8 8 -ssas novas lin!as definem um outro mtodo construtor que no rece%e par?metros. Lo entantoJ ele c!ama o construtor da superclasse especificando o valor 0 para am%os os par?metros necess3rios. Com issoJ podemos declarar e criar uma inst?ncia de um o%4eto do tipo Nuadrado
Curso Tcnico em Informtica

Capo Bonito - SP

;.

sem especificar nada. Ue4a o c>digo do programa AreaOuadrado%"ava alteradoK pu%lic class 2reaNuadrado 7 pu%lic static void main*String args56+ 7 int int2realJint2rea1S Nuadrado O%4Nuadrado0 ^ neE Nuadrado* +S int2real ^ O%4Nuadrado0.srea* +S Nuadrado <%4Nuadrado1 ^ neE Nuadrado*$J$+S int2rea1 ^ O%4Nuadrado1.srea*+S SCstem.out.println*Xsrea do quadrado 0 ^ XWint2real+S SCstem.out.println*Xsrea do quadrado 1 ^ XWint2rea1+S 8 8 Com a classe /rapeHio podemos faHer as mesmas alteraAesJ como indica o c>digo a seguirK pu%lic class /rapeHio e@tends &igura\eometrica 7 pu%lic /rapeHio* + 7 super*0J0+S 8 pu%lic /rapeHio*int intDaseJint int2ltura+ 7 super*intDaseJint2ltura+S 8 pu%lic int srea* + 7 int int2reaS int2rea ^ super.2rea* + V 1S return int2reaS 8 8
Curso Tcnico em Informtica

Capo Bonito - SP

;:

< programa que usa essa classe tam%m precisa de alterao. Ue4a a listagemK pu%lic class 2rea/rapeHio 7 pu%lic static void main*String args56+ 7 int int2realJint2rea1JintDase enorJintDase aiorS /rapeHio O%4/rapeHio0 ^ neE /rapeHio* +S int2real ^ O%4/rapeHiol .srea *+S intDase enor ^ 3S intDase aior ^ 9S /rapeHio <%4/rapeHio1 ^ neE /rapeHio**intDase enor W intDase aior+J$+S int2rea1 ^ O%4/rapeHio1.srea*+S SCstem.out.println*Xsrea do trapeHio 0 ^ XWint2real+S SCstem.out.println*Xsrea do trapeHio 1 ^ XWint2rea1+S 8 8 Outra possi%ilidade de uso da so%recarga na distino de mtodos de acordo com o tipo de um ou mais par?metros que ele rece%e. Uoltemos M classe &igura\eometrica. Como o leitor 43 deve ter notadoJ ela tra%al!a somente com valores numricos inteiros. -nto vamos adapt3Fla para que aceite tam%m valores decimais. 2ltere o c>digo de forma que ele fique conforme a listagemK pu%lic class &igura\eometrica 7 private float fltDaseJfIt2lturaS pu%lic &igura\eometrica*int intDaseJint int2ltura+ 7 t!is.fltDase ^ intDaseS t!is.fIt2ltura ^ int2lturaS 8 pu%lic &igura\eometrica*float fltDaseJfloat fIt2ltura+ 7 t!is.fltDase ^ fltDaseS t!is.fIt2ltura ^ fIt2lturaS 8 pu%lic float srea*+ 7 float flt2reaS flt2rea ^ fltDase ] fIt2lturaS return *flt2rea+S 8 8
Curso Tcnico em Informtica

Capo Bonito - SP

;;

[ importante destacar que o mtodo 2rea*+ teve alterado o tipo de retorno para floatJ tendo em vista que a classe agora pode tra%al!ar com valores decimais. "erce%a tam%m que os construtores so id#nticosJ diferenciando apenas no tipo de dado dos par?metros *um int e o outro float+. Lo momento da e@ecuoJ se os par?metros forem do tipo intJ e@ecutado o primeiro construtor. Se forem do tipo floatJ ento e@ecutado o segundo. 2s classes derivadas tam%m precisam de modificaAesJ conforme as listagens a seguirK 2rquivo Ouadrado%"ava pu%lic class Nuadrado e@tends &igura\eometrica 7 pu%lic Nuadrado*int intDaseJint int2ltura+ 7 super*intDaseJint2ltura+S 8 pu%lic Nuadrado*float fltDaseJfloat fIt2ltura+ 7 super*fltDaseJfIt2ltura+S 8 pu%lic float 2rea* + 7 float flt2reaS flt2rea ^ super.2rea*+S return flt2reaS 8

Curso Tcnico em Informtica

Capo Bonito - SP

0<<

2rquivo Prape<io%"ava pu%lic class /rapeHio e@tends &igura\eometrica 7 pu%lic /rapeHio*int intDaseJint int2ltura+ 7 super*intDaseJint2ltura+S 8 pu%lic /rapeHio*float fltDaseJfloat flt2ltura+ 7 super*fltDaseJflt2ltura+S 8 pu%lic float srea* + 7 float flt2reaS flt2rea ^ super.srea*+ V 1S return flt2reaS 8 8 O%serve que foi necess3ria a adio de um novo construtor em cada classe para tratar dos par?metros decimais. "ara os dois programas os c>digos devem ser os seguintesK 2rquivo AreaOuadrado%"ava pu%lic class 2reaNuadrado 7 pu%lic static void main*String args56+ 7 float flt2realJflt2rea1S Nuadrado O%4Nuadradol ^ neE Nuadrado*$J$+S flt2real ^ O%4Nuadradol.srea* +S Nuadrado <%4Nuadrado1 ^ neE Nuadrado*9.9fJ9.9f+S flt2rea1 ^ <%4Nuadrado1.srea* +S SCstem.out.println*Xsrea do quadrado 0 ^ XWfIt2real+S SCstem.out.println*Xsrea do quadrado 1 ^ XWflt2rea1+S 8 8
Curso Tcnico em Informtica

Capo Bonito - SP

0<0

2rquivo AreaPrape<io%"ava pu%lic class 2rea/rapeHio 7 pu%lic static void main*String args56+ 7 int intDase enorJintDase aiorS float flt2realJflt2rea1JfltDase enorJfltDase aiorS intDase enor ^ 3S intDase aior ^ 9S /rapeHio O%4/rapeHio0 ^ neE /rapeHio**intDase enor W intDase aior+J$+S flt2real ^ O%4/rapeHiol.srea*+S fltDase enor ^ 3.9fS fltDase aior ^ 9.9fS /rapeHio <%4/rapeHio1 ^ neE /rapeHio**fltDase enor W fltDase aior+ J $ . 9f+ S flt2rea1 ^ <%4/rapeHio1.srea*+S SCstem.out.println*Xsrea do trapeHio 0 ^ XWfIt2real+S SCstem.out.println*Xsrea do trapeHio 1 ^ XWflt2rea1+S 8 8 Bm ponto muito importante nessa nova versoJ e que o leitor deve ter perce%idoJ o acrscimo da letra XfX ap>s o nPmero decimal *como 9.9fJ 3.9f+. Isso necess3rio para indicar e@plicitamente que o valor de ponto flutuante. Se esse caractere no fosse includoJ um erro seria mostrado no momento da compilao. 2ntes de encerrarmos este t>picoJ imprescindvel destacar que em Java no e@iste a so%recarga de operadoresJ como ocorre na linguagem CWW. 2 aus#ncia desse recurso propositalJ tendo em vista que ele est3 c!eio de perigos em potencial. -ntre alguns desses perigos est3 o seu uso e@cessivoJ o que facilita ao programador so%recarregar um operador num determinado conte@to e depois querer utiliH3Flo em sua funo original em outro ponto.

Curso Tcnico em Informtica

Capo Bonito - SP

0<1

Classes e mtodos finais Nuando definimos uma 3rvore de !erana de classes em JavaJ pode ocorrer de c!egarmos a um ponto em que dese4amos delimitar essa 3rvore. -ssa delimitao no permite que de uma classe se4am derivadas outras. 2 esse recurso damos o nome de classes *final class+J e no e@iste na linguagem CWW. Com o e@emplo de 3rea de figuras geomtricas podemos aplicar esse conceito perfeitamente. Bma veH que dificilmente ser3 necess3rio criar outra classe !erdeira de NuadradoJ /rapeHio ou /ri?nguloJ podemos torn3Flas classes terminais. "ara que isso se4a possvelJ %asta adicionar o modificador final M declarao da classe do seguinte modoK 2rquivo Ouadrado%"ava pu%lic final class Nuadrado e@tends &igura\eometrica 7 pu%lic Nuadrado*int intDaseJint int2ltura+ 7 super*intDaseJint2ltura+S 8 pu%lic Nuadrado*float fltDaseJfloat flt2ltura+ 7 super*fltDaseJflt2ltura+S 8 pu%lic float srea* + 7 float flt2reaS flt2rea ^ super.srea*+S return flt2reaS 8 8

Curso Tcnico em Informtica

Capo Bonito - SP

0<3

2rquivo Prape<io%"ava pu%lic final class /rapeHio e@tends &igura\eometrica 7 pu%lic /rapeHio*int intDaseJint int2ltura+ 7 super*intDaseJint2ltura+S 8 pu%lic /rapeHio*float fltDaseJfloat flt2ltura+ 7 super*fltDaseJflt2ltura+S 8 pu%lic float 2rea * + 7 float flt2reaS flt2rea ^ super.2rea* + V 1 S return flt2reaS 8 8 2rquivo Prian u*o%"ava pu%lic final class /ri?ngulo e@tends &igura\eometrica 7 pu%lic /ri?ngulo*int intDaseJint int2ltura+ 7 super*intDaseJint2ltura+S 8 pu%lic /ri?ngulo*float fltDaseJfloat flt2ltura+ 7 super*fltDaseJflt2ltura+S 8 pu%lic float srea* + 7 float flt2reaS flt2rea ^ super.2reaf+ V 1S return flt2reaS 8 8

Curso Tcnico em Informtica

Capo Bonito - SP

0<$

Se ap>s alterar e compilar essas classesJ voc# criar o c>digo mostrado a seguir e tentar compil3F loJ ter3 a mensagem de erro da figura a%ai@oK

pu%lic class NuadradoLovo e@tends Nuadrado 7 pu%lic NuadradoLovo* + 7 super*0J0+S 8 pu%lic NuadradoLovo*int intDaseJint int2ltura+ 7 super*intDaseJint2ltura+S 8 pu%lic NuadradoLovo*float fltDaseJfloat flt2ltura+ 7 super*fltDaseJflt2ltura+S 8 pu%lic float 2rea* + 7 float flt2reaS flt2rea ^ super.srea* +S return flt2reaS 8 8

Curso Tcnico em Informtica

Capo Bonito - SP

0<9

Uoc# pode tam%m definir como Xverso finalX um mtodoJ se4a ele construtor ou noJ adicionando o modificador finalJ como no seguinte e@emploK pu%lic class Nuadrado e@tends &igura\eometrica 7 pu%lic final Nuadrado*int intDaseJint int2ltura+ 7 super *intDaseJ int2ltura+S 8 pu%lic final Nuadrado*float fltDaseJfloat flt2ltura+ 7 super*fltDaseJflt2ltura+S 8 pu%lic final float srea* + 7 float flt2reaS flt2rea ^ super.srea* +S return flt2reaS 8 8 (esta forma a classe pode ser estendidaJ mas seus construtores e mtodos no podem ser especialiHados na classe derivada. 2 seguir temos uma pequena ta%ela que descreve o resultado da aplicao do modificador final em cada componente de uma classeK 2tri%uto -le se torna constanteJ no permitindo que seu valor se4a alterado. todo Lo pode ser reescrito nas classes derivadas. Classe 2 classe no pode mais ser especialiHadaJ ou se4aJ no possvel derivar dela outras

Curso Tcnico em Informtica

Capo Bonito - SP

0<'

Classes !bstratas8 Inter&aces e Pacotes


Classes a"stratas1 cria/0o e uso -sse mecanismo possi%ilita que uma superclasse conten!aJ alm de mtodos concretos *aqueles que 43 possuem um comportamento definido+J mtodos a%stratosJ assim c!amados devido ao fato de !aver apenas a declarao deles dentro da classe. 2 implementao do c>digo relativo ao mtodo fica a cargo das su%classes que derivam dessa classe a%strata. 2 definio de uma classe a%strata dada pelo acrscimo da palavra reservada a%stract ap>s o modificador de escopo. "ara estudar este conceitoJ vamos criar uma pequena classe que permite a converso de unidades de medida. O c>digo para essa classe o da seguinte listagemK pu%lic a%stract class Conversao edida 7 private float fltUlrOriginalJ fltUlrConvertidoS pu%lic Conversao edida*float fltUlrOriginal+ 7 t!is.fltUlrOriginal ^ fltUlrOriginalS 8 pu%lic float getUlrOriginal* + 7 return fltUlrOriginalS 8 pu%lic void setUlrConvertido*float fltUlrConvertido+ 7 t!is.fltUlrConvertido ^ fltUlrConvertidoS 8 pu%lic float get edida* + 7 return fltUlrConvertidoS 8 pu%lic a%stract void Convertei* +S 8 O%serve como foi declarada a classeJ com o emprego da palavra reservada abstract. -m seguida temos a declarao de dois atri%utos utiliHados na classeJ am%os do tipo float. /emos tam%m a definio do construtor e de tr#s mtodos concretosK um respons3vel pelo retorno do valor do atri%uto 7*tV3r-ri ina*J outro que armaHena no atri%uto 7*tV3rConvertido o valor referente M converso da unidade de medida e o Pltimo que tem por funo retornar o valor da converso. -sses mtodos so necess3rios devido ao fato de os atri%utos serem declarados como privateJ o que impossi%ilita o acesso direto pelas classes derivadas.
Curso Tcnico em Informtica

Capo Bonito - SP

0<.

-@iste ainda a declarao de um mtodo a%strato *pub*ic abstract void ConverteAB+ cu4a implementao ser3 criada nas su%classes. -ssa classe deve ser gravada com o nome ConversaoMedida%"ava% 2 seguir crie outro arquivoF fonte com o seguinte c>digoK pu%lic class Converte"olCent e@tends Conversao edida 7 pu%lic Converte"olCent*float flt edida+ 7 super*flt edida+S 8 pu%lic void Converte* + 7 super.setUlrConvertido*super.getUlrOriginal*+ ] 1.9$f+S 8 pu%lic float getUalor* + 7 return super.get edida* +S 8 8 -ssa nova classe !erda os mtodos pP%licos da superclasse ConversaoMedida. Lela encontramos a definio do construtorJ a implementao do c>digo referente ao mtodo a%strato ConverteAB e um terceiro mtodo respons3vel pelo retorno do valor convertido. O construtor dessa su%classe c!amaJ atravs da palavra reservada superJ o construtor da superclasse. La implementao do mtodo a%strato Converte*+J o valor da unidade de medida *dado em polegadas+ convertido em centmetros atravs da multiplicao pela constante 1.9$. Como este um valor de ponto flutuanteJ devemos adicionar o caractere XfX. S> para lem%rarJ a converso de centmetro em decimal dada pela f>rmula Z ^ b ] 1J9$J em que b representa o valor da medida em polegadas. [ importante notar como o valor da medida em polegadas recuperado pela c!amada ao mtodo getUlrOriginal*+ da superclasse. (a mesma formaJ para o armaHenamento do valor convertido no atri%uto fltUIrConvertidoJ e@istente na superclasseJ faHemos uso da c!amada ao seu mtodo setUlrConvertido. J3 o mtodo getUalor*+J que retorna o valor calculadoJ tam%m c!ama get edida*+ da superclasse.

Curso Tcnico em Informtica

Capo Bonito - SP

0<:

Uamos escrever o c>digo para testar essa classe. O c>digo o apresentado na listagem a seguirK import 4ava@.sEing.JOption"aneS pu%lic class /esteConversao0 7 pu%lic static void main*String args56+ 7 String StrUalor"olS &loat fltUalor"olJfltUalorCentS strUalor"ol ^ JOption"ane.s!oEInput(ialog *X-ntre com a medida em polegadasK X+ S fltUalor"ol ^ &loat.parse&loat*strUalor"ol+S Converte"olCent "olCent ^ neE Converte"olCent*fltUalor"ol+S "olCent.Converte* +S fltUalorCent ^ "olCent.getUalor* +S JOption"ane.s!oE essage(ialog*nullJXUalor convertido para centmetros ^ X W fltUalorCentJX2tenoXJJOption"ane.IL&O, 2/IOLq -SS2\-+S 8 8 Lesse c>digoJ primeiramente referenciada a %i%lioteca de classes SOIL\ com a instruo import 4ava@.sEing.JOption"aneJ para que se4a possvel acessar o mtodo s!oEInput(ialog da classe JOption"ane e apresentar uma cai@a de di3logo de entrada de valor. O valor retomado por esse mtodo armaHenado na vari3vel strUalor"ol e posteriormente convertido num valor numrico de ponto flutuante atravs da e@presso fltUalor"ol ^ &loat.parse&loat*strUalor"ol+. -m seguida declarado um o%4eto para a classe Converte"olCent e passado ao seu construtor o valor digitado pelo usu3rio. 2 converso efetuada quando o mtodo Converte*+ invocado pela instruo "olCent.Converte*+. O valor resultante armaHenado ento na vari3vel fltUalorCent e por fimJ apresentado ao usu3rio pelo mtodo s!oE essage(ialog*+ da classe JOptions"ane. Compile os arquivos Conversao edida.4avaJ Converte"olCent.4ava e /esteConversaol .4avaJ nessa ordem. Uamos criar ainda uma outra classe derivada de Conversao edida que faH o processo inversoJ ou se4aJ converte uma medida dada em centmetros em um valor em polegadas. O c3lculo feito multiplicando o valor em centmetros por <J3;3..

Curso Tcnico em Informtica

Capo Bonito - SP

0<;

Ue4a a seguir o c>digo para essa classeK pu%lic class ConverteCent"ol e@tends Conversao edida 7 pu%lic ConverteCent"ol*float flt edida+ 7 super*flt edida+S 8 pu%lic void Converte* + 7 super.setUlrConvertido*super.getUlrOriginal* + ] <.3;3.f+S 8 pu%lic float getUalor* + 7 return super.get edida* +S 8 8 Como o leitor deve ter perce%idoJ o c>digo %astante parecido com o anteriorJ diferenciandoFFse principalmente na e@presso de c3lculo. O c>digo para utiliHar essa classe apresentado a seguirK import 4ava@.sEing.JOption"aneS pu%lic class /esteConversao1 7 pu%lic static void main*String args56+ 7 String strUalorCentS float fltUalor"olJfltUalorCentS strUalorCent ^ JOption"ane.s!oEInput(ialog *X-ntre com a medida em centmetrosKX+S fltUalorCent ^ &loat .parse&loat*strUalorCent+S ConverteCent"ol Cent"ol ^ neE ConverteCent"ol*fltUalorCent+S Cent"ol.Converte* +S fltUalor"ol ^ Cent"ol.getUalor* +S JOption"ane.s!oE essage(ialog*nullJXUalor convertido para polegadas ^ XWfltUalor"olJX2tenoXJJOption"ane.IL&O, 2/IOLq -SS2\-+S 8 8

Curso Tcnico em Informtica

Capo Bonito - SP

00<

Interfaces (e forma similar Ms classes a%stratasJ as interfaces foram a reescrita dos mtodos a%stratos dentro das su%classesJ uma veH que elas cont#m apenas a declarao. Com issoJ so implementadas as suas aAes. Bma caracterstica interessante que numa interface no encontramos mtodos concretosJ assim como os atri%utos podem ser somente est3ticos. Lo pode !aver tam%m construtores nas interfaces. 2 linguagem Java permite que uma interface estenda outra interfaceJ e neste casoJ a classe que faH uso da primeira deveJ o%rigatoriamenteJ implementar todos os mtodos e@istentes nas interfaces envolvidas *a ancestral e a !erdeira+. Uamos criar uma interface para a classe de converso de medidas. 2%ra o editor de te@tos e digite o seguinte c>digoK pu%lic interface UalorConversao 7 pu%lic float getUalor* +S 8 O%serve que ele contm apenas a declarao de um mtodo. \rave o arquivo com o nome UalorConversao.4ava. 2 seguirJ altere as seguintes lin!as do arquivo ConverteCent"ol.4avaK pu%lic class ConverteCent"ol e@tends Conversao edida implementa UalorConversao 7 pu%lic ConverteCent"ol*float flt edida+ 7 super*flt edida+S 8 pu%lic void Converte* + 7 super.setUlrConvertido*super.getUlrOriginal* + ] <.3;3.f+S 8 pu%lic float getUalor*+ 7 retum get edida *+ S 8 8 I3 duas importantes modificaAes que devem ser notadas. 2 primeira diH respeito M incluso da e@presso implements UalorConversaoJ logo na declarao da classe. Isso indica que a classe define a implementao para os mtodos e@istentes na interface. 2 segunda modificao reside na lin!a que contm a instruo return do mtodo getUalor*+. 2 refer#ncia M superclasseJ o%tida atravs da palavra reservada superJ foi removida. Isso necess3rio para todos os mtodos da interface.
Curso Tcnico em Informtica

Capo Bonito - SP

000

Compile a interface *arquivo UalorConversao.4ava+J em seguida recompile a classe ConverteCent"ol.4ava e o e@emplo /esteConversao1.4ava. Or#ani2a/0o em pacotes Com a tecnologia Java possvel que as classes utiliHadas no desenvolvimento de uma aplicao se4am organiHadas no que c!amamos de XpacotesX. -ssa organiHao feita com o armaHenamento dos arquivos em que se encontram definidas as classes em diret>rios. "ara indicar que uma classe pertence a um pacoteJ devemos utiliHar a palavra reservada pacGage seguida da especificao do nome do pacoteJ antes da declarao da classe. Crie a pasta pacotes e dentro dela outra pasta denominada c3lculos. Copie para essa nova pasta os arquivos &igura\eometrica.4avaJ Nuadrado.4avaJ /rapeHio.4ava e /riangulo.4ava. 2gora adicione a seguinte lin!a a esses arquivosK pacGage pacotes.calculosS O ponto *.+ serve para indicar um outro nvel de su%diret>rio ou pasta. [ similar M %arra invertida *Y+. "ara especificar o pacote a ser utiliHado numa aplicao em JavaJ necess3rio adicionar logo no incio do c>digo a palavra reservada import seguida da sua refer#ncia. -m nosso caso ela definida pela e@presso pacotes.calculos. Sendo assimJ os tr#s c>digos devem ser alterados para o seguinteK 2rquivo 2reaNuadrado.4ava import pacotes.c3lculos.]S pu%lic class 2reaNuadrado 7 pu%lic static void main*String args56+ 7 float flt2realJflt2rea1S Nuadrado O%4Nuadradol ^ neE Nuadrado*$J$+S flt2real ^ O%4Nuadradol.srea* +S Nuadrado O%4Nuadrado1 ^ neE Nuadrado*9.9fJ 9.9f+S flt2rea1 ^ O%4Nuadrado1.srea* +S SCstem.out.println*Xsrea do quadrado 0 ^ XWfIt2real+S SCstem.out.println*Xsrea do quadrado 1 ^ XWflt2rea1+S 8 8

Curso Tcnico em Informtica

Capo Bonito - SP

001

2rquivo AreaPrape<io%"ava import pacotes.c3lculos.]S pu%lic class 2rea/rapeHio 7 pu%lic static void main*String args56+ 7 int intDase enorJintDase aiorS float fIt2realJflt2rea1JfltDase enorJfltDase aiorS intDase enor ^ 3S intDase aior ^ 9S /rapeHio O%4/rapeHiol ^ neE /rapeHio**intDase enor W intDase aior+J$+S flt2real ^ O%4/rapeHiol.srea*+S fltDase enor ^ 3.9fS fltDase aior ^ 9.9fS /rapeHio <%4/rapeHio1 ^ neE /rapeHio**fltDase enor W fltDase aior+ J $ . 9f+ S flt2rea1 ^ <%4/rapeHio1.2rea* +S SCstem.out.println*Xsrea do trapeHio 0 ^ XWfIt2rea0+S SCstem.out.println*Xsrea do trapeHio 1 ^ XWflt2rea1+S 8 8 2rquivo AreaPrian u*o%"ava import pacotes.c3lculos.]S pu%lic class 2rea/riangulo 7 pu%lic static void main*String args56+ 7 float flt2realJflt2rea1JfltDase enorJfltDase aiorS /ri?ngulo O%4/riangulol ^ neE /ri?ngulo*'J3+S flt2real ^ O%4/riangulol.srea* +S /ri?ngulo <%4/riangulo1 ^ neE /ri?ngulo*:.9fJ3.9f+S flt2rea1 ^ <%4/riangulo1.srea* +S SCstem.out.println*Xsrea do trapeHio 0 ^ XWfIt2real+S SCstem.out.println*Xsrea do trapeHio 1 ^ XWflt2rea1+S 8 8 Lo tente compilar esses arquivosJ pois ocorrero diversas mensagens de erro. as no pense que isso tudo. "recisamos a4ustar a vari3vel de am%iente C=2SS"2/I para o discoVdiret>rio em que se encontra o pacote. Seu valor utiliHado pelo compilador 4avac para localiHar as classes no momento da compilao.
Curso Tcnico em Informtica

Capo Bonito - SP

003

Como o pacote est3 localiHado na pasta pacotesYcalculosJ o valor dessa vari3vel deve ser a identificao do disco *unidade ou partio+ em que se encontram essas pastas. Supondo que o disco ten!a a identificao (KJ o comando a ser e@ecutado na 4anela de prompt do OindoEs o seguinteK (KYfS-/ C=2SS"2/I^(KYS 2gora tente compilar os e@emplos. Uoc# pode ver que so criados automaticamente pelo compilador os arquivos de pseudoc>digo das classes *arquivos com e@tenso .class+J como mostra a figura a%ai@o

,ode as aplicaAes para voc# ter as sadas mostradas na figura a%ai@o

Curso Tcnico em Informtica

Capo Bonito - SP

00$

S-ar putea să vă placă și