IntROdUçãO À lIngUageM java -...

123
INTRODUÇÃO À LINGUAGEM J AVA

Transcript of IntROdUçãO À lIngUageM java -...

Page 1: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

IntROdUçãO À

lIngUageM java

Page 2: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

AdministrAção regionAl do senAc no estAdo de são PAulo

Gerência de Desenvolvimento

Sidney Zaganin Latorre

Coordenação Técnica

OzeasVieira Santana Filho

Apoio Técnico

Ana Cristina Manzano dos Santos

© Senac-SP 2006

Elaboração do material didático

Fábio Luís Ramon

Edição e Produção

Edições Jogo de Amarelinha

Page 3: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

IntROdUçãO À lIngUageM java

2006

Page 4: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

Introdução à Linguagem Java

Senac São Paulo

SUMÁRIO

1 – Introdução / 7ObjetivOs dO cursO

java e seus váriOs aspectOs

O que é realmente java?Origem da linguagem

características da linguagem

2 – Java MachIne / 17java virtual machine

compiladores e Interpretadoresvantagensdesvantagens

arquitetura java machine java e suas edições

3 – aMbIente de deSenvolvIMento / 23java develOpment Kit

eclipse

criando um projetoPerpectivasacrescentando uma classeexecutando um programa depurando um programaMudando a versão do JdK

4 – eStrutura de uM PrograMa Java / 33requisitOs básicOs

tipOs e classes básicas

variáveis

declaraçãO e inicializaçãO

OperadOres e expressões

cOmandOs básicOs

parâmetrOs de entrada

pacOtes

5 – claSSeS e obJetoS / 47Importanteconceito de classe

atributOs, métOdOs e interfaces regras geraisMétodos especiais

Page 5: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

Introdução à Linguagem Java

Senac São Paulo

definiçãO de uma classe e alOcaçãO

construtores e instanciaçãoreferências a objetosdeclaração de métodosnotação uMlSobrecarga de métodosSobrecarga de construtoresclasses e métodos abstratosatributos e métodos estáticos

api java

6 – arrayS e StrIng / 66alOcaçãO de arrays

arrays multidimensiOnais

string

7 – herança e InterfaceS / 71anatOmia da herança

herança e hierarquia de classesdefinição de subclasseschamada de métodos na herança

sObrescrita de métOdOs

herança e cOnstrutOres

interfaces

declaração de interfacesexemplo do uso de interfacesdefinição das classes basesexemplo – definição das classes derivadasexemplo – definição da interfaceexemplo – redefinição das classes basesexemplo – redefinição das classes

mOdificadOr finAl

8 – encaPSulaMento / 85mOdificadOres de acessO

9 – PolIMorfISMo / 90exemplO cOnceitual

pOlimOrfismO e herança

exemplo completo

10 – entrada e Saída / 98entrada

InputStream – exemploclasses herdadas de InputStream

saída – Outputstreams

readers e Writers

a classe file

Page 6: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

Introdução à Linguagem Java

Senac São Paulo

11 – threadS / 105diagrama

implementaçãO

exemplosincrOnizaçãO de threads

12 – exceçõeS e erroS / 110Maneira comum de tratar exceções/errostratamento em JavaModificador throwstratamento “in loco”Passando o tratamento adiantetratamento múltiploa cláusula finallydefinindo exceções

13 – tóPIcoS avançadoS / 117cOleções

netWOrKing

generics

Page 7: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

CAPÍTULO Iintrodução

Page 8: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

Introdução à Linguagem Java

Senac São Paulo

ObjetIvOS dO cURSO

n TravarconhecimentobásicocomaLinguagemJava,suaestruturaesintaxeesuasapli-

caçõesnainternet.

n Editar,compilar,depurareexecutarprogramasJavautilizandooEclipse.

OprincipalobjetivodestecursoéfazeroalunotravarumprimeirocontatocomaLingua-gemJava,mostrandosuaestreitarelaçãocomainternet.

Estecursovisaesclarecerosprincipaispontosquecercamessa linguagem,mostrarsuapotencialidadeerecursoseprincipalmentefornecersubsídiosparaqueosprofissionaisdaáreadeinformáticapossamjulgarcomcritériosadequadosoquantoJavaéútildentrodesuaáreadeatuação.

Além disso, será apresentado o Eclipse, que é uma ferramenta de uso livre, feita para a edição, compilação, depuração e execução de programas Java.

Java e seus vários aspectos

• Aspectostécnicos

- Recursosepotencialidades

- Ambientededesenvolvimento

- Segurança

• Aspectosconceituais

- Novoparadigmadecomputaçãoeredes

- Novomercadodeserviços

- AspectosconceituaisintroduzidoscomJava

Aspectos técnicos

ALinguagemJavajánasceuadulta,ouseja,nãofoiumalinguagemquepassoupeloproces-sotradicionaldeavaliação,enriquecimentoeagregaçãoderecursos.Comissonãosepercebe,nalinguagem,estruturasacomodadasaposteriori,ouadapta-ções,queparaoprogramadorrepresentamverdadeirasarmadilhas.Tecnicamente,aLinguagemJavaébastantehomogêneaemtermosdeestruturaesintaxe.Consegueserverdadeiramenteorientadaaobjetoseaomesmotempodefácilprogramação.

Page 9: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

Introdução à Linguagem Java

Senac São Paulo

Em termos de ambiente de desenvolvimento, Java apresenta características peculiares.Podecomportarodesenvolvimentodeumaaplicaçãodegrandeporte,talcomoC++,eoferecerecursosparatal.Noentanto,podesereficientementeusadaparaaplicaçõesdepoucaslinhas,gerando“executáveis”bemreduzidoseenxutos.Javaotimizaageraçãodecódigoemfunçãodotamanhodaaplicação.Asegurançaoferecidaaoprogramadoremtempodecompilaçãoeexecuçãopermiteageraçãodeaplicativoscommenosbugsecommenosriscosdeperdadecontroledaexe-cução,acelerandooprocessodedesenvolvimento.

Aspectos conceituais

Javanãorepresentaapenasumalinguagem,representatambémumnovomodelodecom-putaçãoedesenvolvimentosobreainternet.Podemosdizerque,mesmoqueJavanãosejaalinguagemdoséculoXXI,porrazõesmer-cadológicas,oconceitoqueJavacarregajáéamplamenteexploradopelaslinguagensdeprogramaçãoparaainternetqueestãosurgindo.Esteconceitonadamaisédoquetornarainternetummeiodeinteraçãonãoapenasentreaspessoas,masentreasaplicaçõeseobjetosdeprogramação,deformaqueosrecursosestarãocompartilhadosnessagranderedeeoseuusoficarátransparenteaousuáriofinal.Esteconceitoderedeecomputaçãogeraumasériedeoutrosserviçosefazcomqueasempresasdedesenvolvimentonorteiemseusesforçosnessesentido.

O que é realmente Java?

n Limitada?

• Simplicidadeouincapacidade?

n Ineficiente?

• Interpretadaversuscompilada?

• Javaéumalinguagemlimitada?

O fatode Javanãoapresentaralguns recursosdisponíveisemoutras linguagensdealtonível,taiscomoponteiros,destrutoreseherançamúltiplanãoaqualificacomoinferiornes-sesaspectos.ComJavaépossívelrealizarpraticamenteasmesmascoisasqueemqualqueroutra linguagemqueutilizaesses recursos,comavantagemdehavereliminadograndepartedasfontesdeerrosebugsqueprejudicameatrasamumdesenvolvimento.Dessaforma, esta simplificação do ponto de vista do programador representou uma enormecomplicaçãoparaos idealizadoresda linguagem,quetiveramdegarantirque Java fosseigualmenteeficientecommenosrecursos.

Page 10: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

10

Introdução à Linguagem Java

Senac São Paulo

• Javaéineficiente?

Javaéindependentedaplataforma.ParachegaraissoocódigobinárioemJavaénarealida-deumcódigointerpretado.Veremosmaisafundoessaquestãoposteriormente.Dessaforma,odesempenhodeumaaplicaçãoJavadependeessencialmentedointerpre-tadorutilizado.Com isso,vê-seaplicações idênticas,emmáquinas iguais, rodandocomdiferençasdevelocidade.Sobessepontodevista,podemosafirmarqueJavaserásempremenoseficienteoupelomenosigualaumamesmaaplicaçãoemC.AtendênciaverificadanosinterpretadoresJavaéatingirníveisdeperformanceiguaisaoC,comousodetécnicasespecíficasedesenvolvidasespecialmenteparaisto.NoentantoolimitesuperiordeveserolimiteimpostoporC.

Padrão?

Códigoabertoversusproprietário?

Portabilidadeversuseficiência?

Economicamenteviável?

Custoversusbenefício

• Javaéumnovopadrão?

Javanãoéumpadrãoaberto,massimumalinguagemdefinidaecontroladapelaSun,noentantocomamplaparticipaçãodecomunidadesdeusuáriosecomprocessosdedefiniçãoeevoluçãomuitoparecidoscomosprocedimentosadotadospelossoftwaresdecódigoaberto.ExistemsoluçõesalternativasaJava,emníveisdiferentes.C#daMicrosoft,porexemplo,émuitosimilarconceitualmenteeemtermosdelinguagem,semnoentantocompartilhartodasascaracterísticasdeJava.

• Javaéportável?

Acaracterísticamultiplataformade Java tornadesnecessária,emprincípio,apreocupa-çãocomsuaportabilidade.Noentanto,tem-severificadoquesurgiramferramentasqueconvertemJavaparaC,a fimdeseganharemperformance.Utiliza-setambém,e Javasuporta, a inclusão de rotinas em C nos programas (código nativo). Com isso surgemaplicaçõesdesenvolvidasemJava,masquesãoespecificasparadeterminadasplataformas.Nestecaso,asconsideraçõessobreportabilidadeemJavapassamaserasmesmasqueasaplicadasaC.

Page 11: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

11

Introdução à Linguagem Java

Senac São Paulo

• Javaéeconomicamenteviável?

Váriosfatoresdevemserlevadosemconsideração,entreelesarealutilidadedalinguagem,oesforçodesuaaprendizagemeseupoder.Osucessodeumaferramentadependedoquesepodefazercomelaecomqueesforço.JavapretendeofereceromesmoqueC++emtermosdepoderdecódigoeaomesmotempoofereceumambientededesenvolvimentomaisbugfreeeconcisoqueC,almejandoexigirmenosesforçoqueprogramaremC.Estaúltimacaracterísticaémuitoimportanteporquepossibilitaousodeferramentasdedesen-volvimentomaispoderosaseautomatizadas,semelhantesaoVB,porexemplo.

n JavaScript?

n Programaçãoparadesktop?

• Executáveislinhadecomando

• Programasgráficos- AWT- Swing- Games

n Programaçãoparadispositivos

• Cartões,Celulares,Palms,etc.

• JavaéomesmoqueJavaScript?

JavaScriptéumaoutra linguagem,orientadaamodelosenãoaobjetos,eque temumnomesimilarsimplesmenteporquecompartilhaosmodelosdedadoseobjetosdeJava.Assim, muito pouco do que se aplica a Java pode ser aplicado a JavaScript, que é umalinguagempuramenteinterpretadaeportantogozadessebenefícioemsuaestruturadeprogramação.JavaScriptéutilizadoparaacrescentarprocessamentolocalàspáginasHTML,einteragedi-retamentecomasdiretivasdapágina.PodeserconsideradocomoumaespéciedeHTMLprocedural.Convém ressaltar que JavaScript é muito poderosa e pode substituir Java em muitasaplicações,oquegeralmentenãoélevadoemcontaquandoseestudaJava.

• Programaçãoparadesktops

Javaéutilizadaparaodesenvolvimentodeaplicaçõesparadesktop,especialmentepelasempresasquedesejamterumaúnicaferramentaparadiferentesplataformas(Windows,

Page 12: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

12

Introdução à Linguagem Java

Senac São Paulo

Linux,Unix,Macetc.).Javapossuitodososrecursosparaodesenvolvimentodeaplica-çõescompletas,inclusivejogos.Noentanto,paraaexecuçãodeumprogramaJavanumdesktopénecessárioqueoprogramapossuaumaJavaVirtualMachineinstalada,comoveremosadiante.Aconstruçãodeprogramasgráficospodeserfeitacombibliotecasgráficassimples(AWT)oumaisricas(Swing).

• Programaçãoparadispositivos

Javaéamplamenteutilizadaparaodesenvolvimentodeaplicaçõesemdispositivos,espe-cialmenteosdepequenoporte,taiscomocartões,telefonescelulares,computadoresdemãoeatémesmorobôs.AgrandevantagemdautilizaçãodeJavaéqueummesmopro-gramapoderodaremdispositivosdiferentesdevidoàcaracterísticamultiplataformadosprogramas.ParaaprogramaçãodedispositivoséutilizadoumsubconjuntodebibliotecasdalinguagemchamadoJME(JavaMicroEdition).

n Programaçãoparaainternet

• Applets

• Servlets

• EJB

• StoredProcedures

• WebServices

UmaaplicaçãoWebnormalmentepossuicomponentesquesãoexecutadosnumservidorWeb(ounumservidordeaplicação).Alémdessescomponentesquerodamnoservidor,umaaplicaçãoWebpodedependerdecomponentesquesãoexecutadosnocliente(nave-gador)emesmocomponentesquesãoexecutadosnobancodedados.ALinguagemJavapodeserutilizadaparaaconstruçãodetodosessestiposdecomponentes.OscomponentesquesãoexecutadosnosnavegadoressãochamadosdeApplets.MuitosbancodedadospermitemaconstruçãodeStoredProceduresescritasemJava.Oscom-ponentesquerodamnosservidorespodemserdotipoServletsoudotipoEnterpriseJavaBeans(EJB).ExistemaindaoscomponentesquerodamemservidoresqueimplementamumoumaisWebServices.Independentedotipodecomponente,alinguageméamesma,diferindoapenasaformacomoosprogramassãoconstruídoseaformacomoosdiferentesservidores,bancodedadosounavegadoressuportamaexecuçãodessescomponentes.

Page 13: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

13

Introdução à Linguagem Java

Senac São Paulo

n IntegraçãoaoHTML

• Appletssãoprogramasquerodamdentrodeumapágina

n Ampladifusão

• temporecordededifusão

• buscadosprincipaisfornecedorespelacompatibilidadeesuporteàJava

• IntegraçãoJava-HTML

Javaencontra-setotalmenteintegradoaoHTMLnasaplicaçõeschamadasApplets.AppletssãoprogramasemJavaquerodamemumapartedapáginaHTMLdelimitadaporumadiretivaespecífica.NãosóoespaçoalocadonapáginaédefinidopordiretivasHTML,comotambémapassagemdeparâmetrosparaoApplet.JavaportantointroduziunovasdiretivasàlinguagemHTML.Outroaspectoaserconsideradoéa integraçãoJava-browser,quetranscendeasimplesintegraçãocomoHTMLenãosebaseiaemnenhumpadrãoformal.Javaconseguemani-pularrecursosdaprópriajaneladebrowser,comoporexemploforçaraaberturadeumanovainstânciadobrowser.EstetipodeinteraçãoémaisforteetornaJavamaisdoqueumparceirodoHTML—umparceirodobrowser.

• AdifusãodeJava

NenhumaoutralinguagemconseguiusedifundiremtempotãocurtoquantoJava.Todososbrowsersbuscamcompatibilidadeegrandepartedosservidoresdeaplicaçãoebancodedadossuportamalinguagem.Existemcertificaçõesdeferramentasqueatestamasuacompatibilidadeàlinguagem,garantindoqueprogramasconstruídosparaumservidorpos-sarodaremqualqueroutro.

n Enormepotencialidade

• multimídia

• recursosdeIU,I/Oerede

• inúmerasbibliotecaseferramentasdeterceirosouemcódigoaberto

n Fácilaprendizado

n Constanteaprimoradamento

• geraçãodepacotesebibliotecas

• papeldeoutrascompanhias

• Sunnãodesejamanterocontrole

Page 14: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

1�

Introdução à Linguagem Java

Senac São Paulo

• Javaéricoemrecursos

Javaapresentatodososrecursosparaprogramaçãodeinterfacescomusuário,fácilmani-pulaçãodeI/Oecapacidadedeinteraçãoemambientesderede.Todoesseconjuntoderecursosdáàlinguagemumaenormepotencialidadedeaplicações.Alémdisso,écrescenteonúmerodeusuários,gruposouempresasquecolaboramcomodesenvolvimentosdeferramentasoubibliotecas,grandepartedelasdeusolivre.

• Javapodeseraprendidafacilmente

Estepontoécontroverso.Maspodemosdividiraafirmaçãoacimaemoutrastrêsquesãomaisamplamenteaceitas:

- Javaéfácildeseraprendidaporquemnãoconhecenenhumalinguagemdeprogra-

mação;

- Java é muito fácil de ser aprendida por quem já conhece uma linguagem de

programação;

- Javaémaisfácildeseraprendidaporquemjáconheceumalinguagemorientadaaobjetos.

• Javaéconstantementeaprimorada

AprimoramentodeJavanãosignificasuprirdeficiências,masacrescentarpotencialidadescujanecessidadeésentidaquandosedesejaprogramarparaainternet.ASundesenvolveuumconjuntocompletodebibliotecasparaJavaequedefiniucomoimplementaçãobásicadalinguagem.Outrascompanhiasestãoacrescentandonovosrecursospordofornecimen-todenovasbibliotecas.ASunestimulaessetipodeatividadeesabequedelesdependeocrescimentoda linguagem.Alémda iniciativadecompanhias,oesforçodegruposdeusuáriosedecomunidadesbaseadasnocódigoabertoenriquecemconstantementeousodalinguagem.

Origem da Linguagem

n ConcebidaedesenvolvidapelaSunSoft–braçodaSun

• SuporteecompatibilidadenosprodutosdaNetscape–importânciafundamental

nadifusãodalinguagem

n HerançadoC++eSmalltalk–orientaçãoaobjetos

n Aplicaçõesinternet

n AppletseApplications

n Ambientedestino:JavaMachine

Page 15: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

1�

Introdução à Linguagem Java

Senac São Paulo

ALinguagemJavafoiconcebidaedesenvolvidainteiramentepelaSunSoft,braçodacom-panhiaSun,responsávelpelodesenvolvimentodosoftwarebásicodosequipamentosSunequeatuavatambémnaáreadedesenvolvimentodecompiladoresparaoutraslinguagens.OsuporteoferecidodesdeoiníciopelaNetscapeemseusbrowsersfoidecisivoparaadi-vulgaçãoedifusãodeJava.Ofascíniocausadopelosprimeirosappletsfoifatordeconquistadeadeptosemtodaainternet.ASunSoftvinhatrabalhandohámuitotemponodesenvolvimentodeambientesSmalltalk.Dessaforma,JavaherdouafidelidadedoSmalltalkaosconceitosdeProgramaçãoOrien-tadaaObjetos(OOP)eosrecursosconcisos,poderososepráticosdoC.QuemconheceC++ percebe que Java se encaixa mais corretamente nos conceitos de OOP e quemconheceSmalltalkpercebequeJavapermiteumcontrolemaiordosrecursosdosistema,comoC.Portanto,éumcasamentofeliz.OgrandetrunfodeJavaépermitirqueseprogramemaplicaçõesqueutilizamosrecursosdainternet.Comaproliferaçãodoswebserverseapopularizaçãodainternet,Javaocu-pouumespaçoqueestavavazio.

Características da linguagem

n Totalmenteorientadaaobjetos

n Multithread(paralelizaçãodeprocessos)

n Sintaticamente e morfologicamente quase idêntica ao C++ (existem diferenças

fundamentais)

n Ausênciadeponteiros

• reduçãodebugs

• aumentodasegurança

n Independedaplataforma

n Orientadaaaplicaçõesderede(especialmenteWeb)

n QuatroS’s:small,simple,safeandsecure

• Orientadaaobjetos

Implementaosprincipaisconceitosdaorientaçãoaobjetos.

Page 16: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

1�

Introdução à Linguagem Java

Senac São Paulo

• Multithread

Afacilidadedeprogramarmultithreadshabilita Javaparaodesenvolvimentodegrandesaplicações e de IU poderosas. A capacidade da linguagem em fazer um gerenciamentopreemptivodesterecursootimizaetornageraloseuuso.

• FormatosemelhanteaoC++OformatodalinguagemsemelhanteaoC++éfatorimportantenoreaproveitamentodeprofissionaisdedesenvolvimento.Noentanto,asdiferençasdevemsercuidadosamenteestudadaspoissãosignificativas.

• AusênciadeponteirosAumentaaprodutividadedosprofissionaisdedesenvolvimento,poiseliminagrandefon-tedeerros.Podegeraralgumadificuldadenacriaçãoderotinasqueutilizariam(emC)aritméticadeponteiros.

• OrientadaàWebPreenche uma lacuna existente para criação de aplicações Web, e disto decorre suacaracterísticamultiplataforma.

Page 17: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

CAPÍTULO 2JAVA MACHINE

Page 18: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

1�

Introdução à Linguagem Java

Senac São Paulo

java vIRtUal MachIne

CódigofonteécompiladoparacódigobinárioJava,queéinterpretadoeexecutadoemdiferentesplataformas

• JavaVirtualMachine

Denominaçãodadaao interpretadorJavarodandosobreosistemaoperacionaldequal-quer máquina. Esta combinação (interpretador+OS) tem um comportamento idênticopara qualquer OS suportado por Java. Dessa forma, caracteriza-se como uma máquinavirtualqueexecutaseucódigobinárioJava,chamadostambémdebytecodes.

Compiladores e Interpretadores

JavaVirtualMachineéumconceitoimplementadohojeporumconjuntorazoáveldeinter-pretadoresparaasplataformasmaiscomuns.

Page 19: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

1�

Introdução à Linguagem Java

Senac São Paulo

Verifica-sequeexisteumasériedecompiladoresJavaparacadaplataformadistinta,masnoentantoexistetambémumúnicocompiladorJava,escritoemJava,utilizadoemtodasasplataformas.

Assim,parasesustentaroconceitodeJavaVirtualMachine,exige-seapenasinterpretado-resdistintos.

O JavaRuntimeEnvironment (JRE)éum interpretador JavaquesuportaaexecuçãodeaplicaçõesJavaemdesktops.

n InterpretadorJavaseguemodelosimpleseestruturadopermitindograndedesempenho

n “Compilaçãojust-in-time”

n “Cache”deexecução

n Possibilidadedeusodecódigonativo

n Informaçãoextrapodeserpassadaaointerpretador

n ExistemtradutoresparaC

• ArquiteturaJava

Osbytecodes Javasãodestinadosaumamáquinadeestruturasimplesepoderosa. Istoresultaemuminterpretadorsimplesereduzido,notocanteàparteque“interage”comocódigoJava.Apartedointerpretadorque“interage”comoOSvariaemsimplicidadeconformeoambiente.

• “Turbinando”ointerpretadorUma sériede artifícios sãoutilizadosparamelhorar aperformancedeumcódigo Java.Entreelespodemoscitar:

- Compilação “just-in-time”:códigoécompiladoparacódigonativoàmedidaqueécar-

regadopordownload–técnicausadaemaplicaçõesquetrafegampelarede.

- Cache:códigodemaquinainterpretadoéarmazenadoem“cache”,evitandoarepe-

tiçãoda interpretaçãodepartesrepetitivasdocódigo.Aceleraexecuçãode loops.

Paraprogramasbemestruturadosoganhodevelocidadedeexecuçãopodeserde10

vezes.

- Uso de “pedaços” de código nativo dentro do código Java:causaperdadacaracterística

multiplataformadeumaaplicaçãoqueutilizeesterecurso.

- Parâmetros extras:informaçõesrelativasàmáquinaondeocódigoestásendointerpre-

tadopodemaceleraresseprocesso,ouseja,osbytecodes“ajudam”ointerpretador

sobdeterminadaplataforma.

Page 20: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

20

Introdução à Linguagem Java

Senac São Paulo

Vantagensn Multiplataforma

n Compatibilidade

n Portabilidade

n Verificaçãodasegurançadocódigo

n TodamáquinapodeserJavaVirtualporsoftware

AlémdasvantagensclássicasdeutilizaruminterpretadorJava(compatibilidade,multiplata-forma,portabilidadeetc.),umoutropontodeveserconsideradocomopositivo:averifica-ção,pelointerpretador,da“confiabilidade”doprogramasendoexecutado.

Istosignificaqueo interpretadorrealizarigorosaverificaçãoa fimdecertificar-sequeoprogramaJavaéconfiávelemtermosdeutilizaçãodosrecursosdamáquina.Ointerpreta-dorécapazdeverificarseumprogramaestá“malintencionado”alocandorecursosexces-sivosouindevidosebloqueá-lo.Podetambémlimitaraaçãodeobjetosnãocorretamenteidentificados e delimitados, criados por programadores experientes, cuja atuação podesignificarriscosparaousuário.Ointerpretadorpodebloqueartambémoacessoaodiscolocaldeprogramascarregadosviainternet.Assim,estacaracterísticasignificaumnívelamaisdesegurançaoferecidoaousuáriodeaplicaçõesJava,cujaorigempodeeventualmen-teserignorada.

Desvantagensn Interpretação-quedadedesempenho

n Duasferramentas:compiladoreinterpretador

n Códigonativo-plataformaespecífica

Ainterpretaçãodosbytecodes,pormaisquesejaotimizada,temumcustodeperfor-mance.Noentanto,ocrescentedesenvolvimentodohardwareeosbenefíciosdeseguran-çatrazidospelainterpretaçãocompensamessecustoadicional.OinterpretadorJavasempreprecisaestarinstaladonamáquina,oquedificultaaexecuçãodosprogramasdedesktopnossistemasoperacionaisquenãovêmoriginariamentecomointerpretadorinstalado.

AutilizaçãodecódigonativoemprogramasJavavinculaasuaexceçãoàsplataformasparaasquaisocódigonativofoiconstruído.

Page 21: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

21

Introdução à Linguagem Java

Senac São Paulo

Arquitetura Java Machinen Conjuntodeinstruções

• Bytecodes,emgeralcom2operandose32bits

n Conjuntoderegistradores(apenas5)

n Pilhailimitadamas“imune”aoverflow

n GarbageCollector

• rodaembackground

• compressãodememória

Java e suas edições

• Java2StandardEdition

ÉaediçãodeJavafeitapararodaremdesktops,dispositivosembarcados(robôs,eletro-domésticosetc.)emáquinasdecontroleemtemporeal(robôsdeprecisão,servodispo-sitivosetc.).OJRE(JavaRuntimeEnvironment)éamaquinavirtual,semasferramentasdecompila-ção,quepodeserutilizadaemqualquercomputadorqueiráapenasexecutarosprogra-masJava.

Page 22: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

22

Introdução à Linguagem Java

Senac São Paulo

• Java2EnterpriseEdition

Éaediçãocomtodoosuportepararodaraplicaçõesemservidoreswebeservidoresdeaplicação.Ofereceumconjuntocompletodebibliotecasque implementamasrigorosasnecessidadesdeumambientedeexecuçãoseguroecrítico.

• Java2MicroEdition

Éaediçãopararodaremdispositivosdepequenoporte,taiscomocelularesepalms.Estádisponívelemumasériedesubedições,cadaumamaisadequadaaumdeterminadotipodedispositivo.

Page 23: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

CAPÍTULO 3AMBIENTE DE DESENVOLVIMENTO

Page 24: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

2�

Introdução à Linguagem Java

Senac São Paulo

n ASunlançou,juntamentecomalinguagem,umkitdedesenvolvimento,oJavaDeve-

lopmentKit(JDK)

n Existeumgrandeconjuntodeferramentasdedesenvolvimentodisponíveisnomerca-

do

• Livres

- Eclipse

- NetBeans

- Outros

• Proprietários

- JBuilderdaBorland

- StudiosdaIBM,BEAeSun

- JDevdaOracle

- Outros

ASunlançou,juntamentecomalinguagem,umkitdedesenvolvimentoque,emborabempoderoso,édedifícilusoenãosatisfazasnecessidadesdeumdesenvolvedordemédioporteoumaior,poisapresentarecursospobres.Aolongodotempo,outrasempresas,ougrupos/comunidadesdeusuáriosdesenvolveramoutras ferramentas.Hojeexistemdezenasde ferramentasde código livreeumaoutradezenadeboasferramentasproprietárias.NessaapostilautilizaremosoEclipse,decódigolivre.

Java Development KitCompilador

javacMinhaClasse.java

Interpretador

javaMinhaClasse

Visualizadordeapplets

appletviewermeuapplet.html

Debugger

jdb

Page 25: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

2�

Introdução à Linguagem Java

Senac São Paulo

OJavaDevelopmentKitéaprimeiraferramentaparadesenvolvimentodeJava.DistribuídalivrementeedesenvolvidapelaSun,dispõedeumconjuntomínimoderecursossuficientesparagerarqualqueraplicação.

Eclipse

n Ferramentadeedição,compilação,depuraçãoeexecuçãodeprogramasJava

n Códigoaberto

n Extensívelporplugins

n http://www.eclipse.org

OEclipseéumaferramentadedesenvolvimentodeaplicaçõesJavaquepodeserutilizadalivremente,sempagamentodelicenças.

AgrandevantagemdoEclipseéasuaarquiteturadeplugins,quepermitequesepossaterseusrecursosexpandidosindefinidamente.

• Instalação

Senãoestiverinstaladonamáquina,façaodownloadeinstaleaúltimaversãodoJDKnositehttp://java.sun.com(sigaolinkdedownloads).FaçaodownloaddaultimaversãodobináriodoEclipsenositehttp://www.eclipse.org.Namáquina,bastaapenasdescomprimiroarquivodedownloaddoEclipsenumdiretórioqualquer(C:\soft,porexemplo).

• ExecuçãodoEclipse

Para rodar o Eclipse basta apenas executar o arquivo C:\soft\eclipse-SDK-3.1.1-win32\eclipse\eclipse.exe.Sempre que o Eclipse for aberto, ele pede que seja indicado um diretório de trabalho(workspace),ondeficarãoosarquivosJavaeditadosnele.

Page 26: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

2�

Introdução à Linguagem Java

Senac São Paulo

Criando um projeto

n Cada programa Java pode ser composto por várias classes. Essas classes e as suas

configuraçõesficamagrupadosnumPROJETO

n MenuFile>>New>>Project...

n SelecionarJavaProject

n Acrescentaronomedoprojeto

Page 27: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

27

Introdução à Linguagem Java

Senac São Paulo

Perpectivas

n OEclipsetrabalhacomperspectivas,quenadamaissãodoquevisõesdeseuambiente

detrabalho

n AbriraPerspectivaJavaparaeditarcódigo

Acrescentando uma classe

n Criarumanovaclasseeadicionaraoprojeto

Menu File >> New... >> Class

n NoWizard,definironomedaclasseemarcarparacriarométodo

public static void main(String[] args)

• Criarumanovaclasse

Page 28: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

2�

Introdução à Linguagem Java

Senac São Paulo

• Acrescentarumaclasse

n Adicionaraseguintelinhadecódigoaométodomain

System.out.println(“Hello Word”);

Adicionarcódigoaométodomain

Page 29: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

2�

Introdução à Linguagem Java

Senac São Paulo

Executando um programa

n Rodaroprograma

• SelecionaroarquivoJavae,comobotãodireitodomouse,escolher

Run As >> Java Application

(oEclipsepediráparavocêsalvaroarquivo;selecione-oesalve-o)

• SelecionaroprojetoedispararaexecuçãocomoJavaApplication

Depurando um programa

n Adepuraçãoéumrecursonecessárioparadarprodutividadeaqualquer

desenvolvimento

• SelecionarclasseJavae,comobotãodireitodomouse,escolher Debug as >> Java Application...

(oEclipsepediráparavocêmudaraperspectivaparaDebug,masnãoénecessário

fazerissonesteexemplo)

Page 30: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

30

Introdução à Linguagem Java

Senac São Paulo

• ExecutarlinhaalinhacomateclaF6

• Dispararodepurador

n Paraobservarovalordeumavariávelcoloqueoponteirodomousesobreelaoumude

aperspectivaparaDebug(todasasvariáveispodemserinspecionadasnessapers-

pectiva)

Menu Window >> Open Perspective >> Debug

n Paravoltarparaoprograma Javaeaexecuçãododepurador linhaa linhamudara

perspectivaparaJava

Menu Window >> Open Perspective >> Java

• MudandoaperspectivaparaDebug

Page 31: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

31

Introdução à Linguagem Java

Senac São Paulo

Mudando a versão do JDK

n NoEclipsepode-setrabalharcomváriasversõesdoJDKouJRE

n MenuWindow>>Preferences

• NoitemJava/Compilerselecionaracompatibilidadedocompiladorcomaversão

doJava(compilercompliancelevel1.3,1.4ou5.0)

• NoitemJava/InstalledJREsselecionaraversãodoJDKouJRE.Senãoestiverins-

taladaaversãodesejadaclicarem

- Add...

- Browse...(eselecionarofolderondeestáinstaladooJDKouJRE)

• AbriraconfiguraçãodoEclipse

• Selecionaroníveldecompatibilidadedocompilador(1.3,1.4ou5.0)

Page 32: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

32

Introdução à Linguagem Java

Senac São Paulo

• SelecionaroJDK/JREentreosexistentes

• AcrescentarousodeumnovoJDK/JRE,seforocaso

Page 33: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

33

Introdução à Linguagem Java

Senac São Paulo

CAPÍTULO 4ESTRUTURA DE UM PROGRAMA JAVA

Page 34: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

3�

Introdução à Linguagem Java

Senac São Paulo

Requisitos Básicos

n UmprogramaJavaéumacoleçãodeclassesqueinteragementresideformatotalmen-

teorientadaaobjetos

n Ométodomain()departidadeexecuçãodoprogramadevepertenceràclasseprinci-

paldoprograma

n Onomedoarquivoprincipaldoprogramadeveteromesmonomequeaclasseprin-

cipal(aquelaquecontémométodomain())

OmétododepartidadeumprogramaJavaéchamadodemain,quedevenecessariamen-tepertenceraumaclasse.Estaclasse(àqualpertencemain),éaclassequedánomeaoprograma.

Exemplo

import java.util.Date;

public class HelloWorld {

public static void main(String args[]) {

System.out.println(‘‘Hello World’’);

System.out.println(new Date());

}

}

n Aassinaturademain()devesercomoamostradaacima

n OnomedoarquivodeveserHelloWorld.javaquedepoisdecompiladogeraoarquivo

HelloWorld.class

>edit HelloWorld.java

>javac HelloWorld.java

>java HelloWorld

Exercício1.Digitar,compilaredepuraroprogramaHelloWordnoEclipse.

Page 35: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

3�

Introdução à Linguagem Java

Senac São Paulo

Tipos e Classes básicas

n Tiposprimitivos

• Inteiro:

- byte 8bits

- short 16bits

- int 32bits

- long 64bits

• ponto-flutuante

- float 32bits

- double64bits

• caracter(unicode)

- char 16bits

• boleano

- boolean,trueoufalse

Faixadevaloresdostiposprimitivosbyte -128a127short -32.768a32.767int -2.147.483.648a2.147.483.647long -9.223.372.036.854.775.808a9.223.372.036.854.775.807float -3,4E-38a3,4E_38double -1.7E-308a1.7E+308

n Classesespeciais

• String–implementaumobjetoString,deformamaisprecisaeclaradoqueum

arraydecaracteres

• System–realizapartedainteraçãodoprogramacomosistemaoperacionalnativo

n Sãotiposprimitivos

n Nãosãoobjetos

n Independemdamáquinaem

termosdeprecisãoetamanho

Page 36: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

3�

Introdução à Linguagem Java

Senac São Paulo

AlgumasclassesemJavaassumemumpapelespecialouapresentamumcomportamentoespecial.Entreelas,éinteressantecitarduas:

• String

• nãosãoarraysdecaracteres

• dispõedemétodosquefacilitamseuuso

• umobjetodaclasseStringécriadoautomaticamentequandosedeclaraeinicializa

umavariável.Ex.: String curso=“curso de Java”;

• implementamconcatenação(emboraJavanãoimplementesobrecargadeopera-

dores).Ex.: curso=“Meu primeiro”+curso; usodooperador+= curso+=“Meu primeiro”;

• System

• contémamaioriadosmétodosque interagemcomo sistemaoperacional.Ex.:System.out.println(……);

Variáveis

n Declaradasantesdeseremutilizadas,emqualquerpartedoprograma(declaraçãoé

darotipoeonome)

n Podemserinicializadasnadeclaração

n Variáveislocaisdevemserinicializadasantesdeseremutilizadas

n Podemserutilizadossufixosparadefinirotipodeumliteral

AsvariáveisemJavapodemserdeclaradasempraticamentequalquerpartedoprograma.Lembrarquenãoexistemvariáveisglobais.Umavezque todooprogramaestáencap-suladodentrodeclasses,asvariáveismais“externas”desteprogramapertencemaestaclasse.Existemportantodoistiposdevariáveis:

• declasseoudeinstância

• locaisafunçõesoublocos

Page 37: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

37

Introdução à Linguagem Java

Senac São Paulo

n Asrestriçõesaplicadasàsvariáveissão:

• nomesdasvariáveis

• nãopodemcomeçarpornúmero

• cuidadocomsímbolosquerepresentamoperadores:*,+etc.

• conjuntodecaracteresUnicode(existemexceções)

n Tipos:

• primitivos

• classeouinterface

• array

n Sufixos

• Loulparalong

• Doudparadouble

• Foufparafloat

Declaração e inicialização

int a;

String nome;

fl oat b;

boolean isNunber;

byte c, d, e, f;

long g=0;

fl oat h, I, j=1.2;

char primeira_letra=‘a’;

String sobrenome=‘‘Silva’’;

boolean isChar=true;

long k=10L;

fl oat l=4f;

int m=0xff; // Literal hexadecimal

Osliterais,quandodigitadosnanotaçãohexadecimal,devemvirprecedidosde0Xou0x.Osliterais,quandodigitadosnanotaçãooctal,devemvirprecedidosde0.

Page 38: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

3�

Introdução à Linguagem Java

Senac São Paulo

n Escopodevariáveis

• Variáveislocais:

Podemserutilizadasdentrodométodooublocoondeforamdeclaradas

• Variáveisdeclasseoudeinstância:

Podemserutilizadasdentrodaclasseouobjeto,ouatémesmoporoutrasclasses

eobjetos,dependendodesuaacessibilidade.

n Conversãodetipos

• Implícita:detipos“menores”paratipos“maiores”(emnúmerosdebitsdotipo)

byte b = 5;

int a = b; // 5 é convertido para inteiro

float f = 123.756F;

double d = f;

• Explícita:detipos“maiores”paratipos“menores”(emnúmerosdebitsdotipo).

Deveserfeitocasting.

long l = 12000000L;

int i = (int)l;double d = 395E+45;

float f = (float)d;;

Conversãoimplícitaéaquelaondeovalornãocorreoriscodesofreralgumaperda,por-queacapacidadedotipoconvertidoémaiorqueacapacidadedotipooriginal.Parafazeressaconversãobastafazeraatribuiçãodiretadosvalores.

Conversãoexplícitaéaquelaondeovalordotipooriginalcorreoriscodeseralterado,porqueacapacidadedotipoconvertidoémenor.Conversõesexplícitassomentepodemserfeitascomousodocasting,queédefinirjuntoaovalororiginal,otipoparaoqualsequeraconversão,entreparênteses.

Page 39: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

3�

Introdução à Linguagem Java

Senac São Paulo

Operadores e expressões

n Operadoresaritméticos:

• Básicos+,-,*,/e%

• Osinalmenos(-)podeserusadocomooperadorunário

n Operadoresconjugadoscomatribuiçãodevalores: a+=b <=> a=a+b a-=b <=> a=a-b a*=b <=> a=a*b a/=b <=> a=a/b

• Cuidadocomaordemdeavaliaçãodasexpressões!

• Operadoresaritméticos:

• Básicos:+(adição),-(subtração),*(multiplicação),/(divisão)e%(módulo,ou

seja,restodadivisãointeira)

• Osinalmenos(-)podeserusadocomooperadorunário

• Tipodoresultado:omaisprecisoentreostiposdosoperandos.Portanto26/7=3,

umavezqueoresultadoéinteiro

• Operadoresconjugadoscomatribuiçãodevalores: a+=b <=> a=a+b a-=b <=> a=a-b a*=b <=> a=a*b a/=b <=> a=a/b

Cuidado com a ordem de avaliação das expressões, pois uma mesma expressão lógicapodeafetardeformadiferenteoresultadoesperado.

• Operadoreseexpressões

Operadoresdeincrementoedecremento

a++ou++a <=> a=a+1

a--ou--a<=> a=a-1Cuidado:b=a++podenãoteromesmoefeitoqueb=++a!!!

Page 40: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

�0

Introdução à Linguagem Java

Senac São Paulo

• Operadoresdecomparação: == igual != diferente < menor > maior <= menorouigual >= maiorouigual

• Operadoresdeincrementoedecremento: a++ou++a<=> a=a+1 a--ou--a <=> a=a-1

Cuidado:b=a++nãoforneceomesmoresultadoqueb=++a!!!Ooperadordeincremento,quandocolocadoantesdavariável,fazcomqueelasejaincre-mentadaantesdeserutilizada.Ooperadordeincremento,quandocolocadodepois,fazcomqueovalordavariávelsejautilizadoantesdoincremento.inta=5;intb=a++;//resultaembcomvalor5a=5;b=++a;//resultaembcomvalor6

• Operadoreslógicos: &ou&& <=> AND |ou|| <=> OR ! <=> NORExistemdiferençasentre&e&&;eentre|e||!!!

• Operadoresbitabit:

& <=> AND

| <=> OR

^ <=> XOR

<< <=> deslocamentoàesquerda

>> <=> deslocamentoàdireita

~ <=> complemento

>>> <=> deslocamentoàdireita,preenchimentocomzero

Osoperadores&&e||somentepodemseraplicadosatiposbooleanos.Osoperadores&e|podemseraplicadosaqualquertipoprimitivo,sendoquenessecasoelerealizaaoperaçãobitabitentreosbitsdosoperandos.

Page 41: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

�1

Introdução à Linguagem Java

Senac São Paulo

Comandos básicos

n Comentários

• Comentáriosdeumalinha

//linhacomentada

• Comentáriosdemúltiplaslinhas

/*Linhascomentadas

linhascomentadas

*/

• Comentáriosqueaparecemnageraçãoautomáticadecódigo(javadoc)

/**Linhascomentadas

linhascomentadas

*/

Condicionais

if (condição) {// bloco de código

} else {

// bloco de código

}

switch(expressao) { case valor: // bloco de código

break;

// outros cases

default: // bloco de código

}

Page 42: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

�2

Introdução à Linguagem Java

Senac São Paulo

• Comandoif else

• Acondiçãosempredeveserumliteral,variávelouexpressãobooleana(incluem-

seaítambémosretornosdemétodos).

• Quando o bloco de código possuir apenas uma linha, não são necessárias as

chaves.

• Ousodoelseéopcional.

• Comandoswitch

• Aexpressãodeveserumavariávelouexpressãoqueresultenumnúmerointeiro

ounumnúmeroquepossaserconvertidoparainteiro(byte,shortechar).

• Ovalordevesersempreumliteralinteiro.

• Obreaknãoéobrigatório.Nessecasoaexecuçãodoprogramaprosseguepara

opróximoblocodecódigo.

• Odefaultnãoéobrigatório.Nocasodenenhumcaseserigualaexpressão,ne-

nhumcódigoéexecutado.

n Laçoswhile(condição) { // bloco de código

}

do {

// bloco de código

} while (condição);

• ComandoswhileedowhileAcondiçãosempredeveserumliteral,variávelouexpressãobooleana(incluem-seaítam-bémosretornosdemétodos).Quandooblocodecódigopossuirapenasumalinha,nãosãonecessáriasaschaves.

Page 43: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

�3

Introdução à Linguagem Java

Senac São Paulo

Exemplos:

while(i<2) {

...

i++;

}

do {

...

i++;

} while (i<10);

n Laçosfor(inicialização; condição; comando) { // bloco de código

}

for(iteração sobre coleção) { // bloco de código

}

• Comandofor

• A inicialização pode declarar uma ou mais variáveis cujo escopo é o bloco de

código.

• Acondiçãosempredeveserumliteral,variávelouexpressãobooleana(incluem-

seaítambémosretornosdemétodos).

• O comando pode um ou um conjunto deles, separados por vírgulas e sempre

serãoexecutados.

• Ainicialização,acondiçãoeocomandonãosãoobrigatórios.

• Quando o bloco de código possuir apenas uma linha, não são necessárias as

chaves.

• Ainteraçãosobrecoleçãodeclarasempreumobjetodotipodacoleção.Oíndice

dacoleçãonãoestádisponívelnoblocodecódigo.

Page 44: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

��

Introdução à Linguagem Java

Senac São Paulo

Exemplos:

for(int i=0; i<10; i++) {

...

}

int[] arrVal = new int[5];

...

for(int a : arrVal) {

soma += a;

}

n Importarparaoarquivofonteasclassesoupacotesindicados import <classe ou pacote>;

n Definiropacoteaoqualpertenceaclassesendodefinida package <nome do pacote>;

n Interrompeaexecuçãodeumblocoindicado break [label];

n Forçaapróximainteraçãodolaçoindicado continue [label];

AimportaçãodearquivosoupacotesdeveserfeitasemprenoiníciodoarquivoJava.

Adefiniçãodopacotedevesempreserfeitaantesdadefiniçãodequalquerclasseouinter-facenoarquivoJava.

Obreaksomentepodeinterromperblocoqueoenglobe.Comoadefiniçãodesselabeléopcional,nasuaausência,oblocomaisinternoepróximodobreakéointerrompido.Omesmovaleparaocontinue,comrelaçãoaoslaços.Casoolabelsejaespecificado,essescomandosinterrompemolaçoidentificadopelolabel.

Oslabelssomentepodemseratribuídosalaços

label1:for(...){...}

Page 45: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

��

Introdução à Linguagem Java

Senac São Paulo

Parâmetros de entrada

n Umprogramade linhadecomandopodereceberparâmetrospelaprópria linhade

comando

n OparâmetroString[]domainéquerecebeosvalorespassadospelalinhadecomando

java TesteParametro primeiro 2 “terceiro parâmetro”

• Programaparatestarparâmetrosdeentradapublic class TesteParametro {

public static void main(String[] args) {

for(int i=0; i< args.length; i++) {

System.out.println(args[i]);

}

}

}

n NoEclipseéprecisoconfigurarumLauncher

• Comobotãodireitodomousesobreoprograma,escolher

Run as >> Run...

• SelecionartabArgumentseacrescentarosparâmetrosdalinhadecomando

• PressionarbotãoRun

• SelecionaroLauncher

Page 46: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

��

Introdução à Linguagem Java

Senac São Paulo

• Editarlinhadecomando

Page 47: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

�7

Introdução à Linguagem Java

Senac São Paulo

CAPÍTULO 5CLASSES E OBJETOS

Page 48: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

��

Introdução à Linguagem Java

Senac São Paulo

Pacotesn Defineonomecompletodaclasse(“fullyqualifiednameclass”)

n Usodapalavrareservadapackage

• Primeiralinha“útil”doprograma

n Umoutroarquivofontereferenciaumaclassepeloseunomecompletooucomouso

deimport

n Oimporttambémpodeimportaratributosestáticosdeclasses

import java.lang.Math.PI;

Onomecompletodeumaclassecompreendeonomedopacoteaoqualelapertencejun-tocomonomecomoqualelafoideclarada.AclasseDate,doJava,estánopacotejava.util,portantoseunomecompletoé java.util.Date.Numarquivofontequalquer,paraseutilizaraclasseDate,ouimportamosopacotenoiníciodofonteouareferenciamospeloseunomecompleto.importjava.util.Date;...Datedt=newDate();Ouimportjava.util.*;//importatodasasclassesdopacote...Datedt=newDate();Oujava.util.Datedt=newjava.util.Date();

AclasseString,doJava,porexemplo,estánopacotejava.lang,portantoonomecompletodessaclasseéjava.lang.String.Noentanto,opacotejava.langéautomaticamenteimporta-doportodososarquivosfontes.

Adefiniçãodopacoteaoqualpertenceumaclasseéfeitausandopackagebr.com.empresa.nomepacote;publicclassNomeClasse{...}Essaclasse,temonomecompletobr.com.empresa.nomepacote.NomeClasse

Exercícios:

1.FaçaumaAplicaçãoJavaqueimprimenasaídapadrãoonúmerodeargumentoseosargumentospassadosparaoprograma.

Page 49: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

��

Introdução à Linguagem Java

Senac São Paulo

Exemplo:

>javaArgumentosabcde2“MaisumTeste”3,1416Númerodeargumentos:4abcde2MaisumTeste3,1416

2.FaçaumaAplicaçãoquecalculeofatorialdeumnúmeropassadocomoargumento.

3.FaçaumaAplicaçãoquecalculeofatorialdeumnúmeropassadocomoargumentoequetesteaintegridadedomesmo–verificaseonúmeroéinteiroesetemumvalorsuficiente-mentepequenoparaqueoresultadosejacoerente–eimprimamensagensparaousuárioalertandoparapossíveiserrosnoargumento(inclusiveavisandocasoousuárionãotenhapassadonenhumargumento).

4.FaçaumaAplicaçãoqueconvertanúmerosdecimaisemnúmeroshexadecimais.Exemplo:>javaConversor13Decimal:13Hexadecimal:DjavaConversor64Decimal:64Hexadecimal:40

5.Façaoconversorinversotambém.

Para pensar

Oqueaconteceseeutentarcompilarocódigoabaixo?

shortf=1;shortg=2;shorth;h=f+g;

Page 50: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

�0

Introdução à Linguagem Java

Senac São Paulo

n Programaçãoorientadaaobjetos

• Oqueé?

•Unidadesdecódigoqueinteragemsãoosobjetos

• Classes

• atributosecomportamento-variáveisemétodos

• variáveisemétodosinternospodemnãoservisíveisexternamente

• classespodemserdefinidasdeformaincremental(herança)

• Paraqueserve?

• Metodologiaeficiente

• Programasgrandesedesenvolvidosporequipes

• Grandeíndicedereaproveitamentodocódigo

Page 51: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

�1

Introdução à Linguagem Java

Senac São Paulo

n Objetossãoentes

n Classessãodefinições

• Objetossãomodeladoscomoosobjetosdomundoreal,ouseja,possuemexistência

“física”dentrodeumprograma,ocupandoespaçodememória e armazenando as

informaçõespertinentes.

• Classessãodefiniçõesgenéricasdeobjetos(moldesdeobjetos).Podemexistirportan-

továriosobjetosdeumaúnicaclasse.

Classessãodefinidasafimdequeapartirdelaspossamsergeradososobjetosqueassu-memaquelaspropriedadeseexecutamaquelafuncionalidadedefinidanaclasse.

Uma conceito simples que pode ser atribuído à classe, suficiente para sua compreen-sãode formaclara,éassociá-laaumnovotipo.Portanto,asclassesseriamostiposde“variáveis”definidospeloprogramadoreosobjetosseriamaspróprias“variáveis”declara-dasdaqueletipo.Narealidade,umobjetoémuitomaisqueumavariável,oqueserávistonaspróximaspáginas.

Page 52: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

�2

Introdução à Linguagem Java

Senac São Paulo

IMpORtante

n Definircuidadosamenteumaclasselevando-seemcontaaspectosdefuncionalidade,

generalidadeeacessibilidade

n Nomenclatura:classesdefinidaseobjetosinstanciados(ouseja,umobjetoéumains-

tânciadeumadadaclasse)

• Definirfuncionalmenteasclasses–tornamaislógicooencapsulamento.

• Definir claramente que elementos compõem a interface - permite que outros

usemseusobjetosdeformasimplesecorreta.

• Partirdeclassesmaisgenéricas–facilitareaproveitamentodocódigoaomesmo

tempoquedefineoalcancedaclasse.

• Teremmentequeasclassessãodefinidaseosobjetosdeclarados.Portanto,

todoobjetocriadoocupaespaçonoseuprogramaounamáquinarodandoopro-

grama,edeve-seevitarcriarobjetosnãoutilizados.

• Consideraraspectosdesegurançanadefiniçãodaacessibilidadedaclasse.

• Nomenclaturadelinguagem:classessãodefinidaseobjetossãoinstanciados(ou

seja,umobjetoéumainstânciadeumadadaclasse).

Page 53: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

�3

Introdução à Linguagem Java

Senac São Paulo

Conceito de classe

Umaclassecontémumadefiniçãodeumconjuntodevariáveisefunçõesquesãoencap-suladasconjuntamenteecompartilhamomesmoescopodedefinições.Assim,umaclasseédefinidapor seusatributos (variáveis)ecomportamento (métodosou funções).Estascaracterísticaspermitemqueaclasseassumaempapeldentrodeumprogramaunicamen-teemtermosdesuaspropriedades,ouseja,fatoresexternosàclassenãopodemafetá-la,alémdopermitidoporela.Esteencapsulamentoéutilizadocomumasériedebenefíciosemrelaçãoaoconceitoconvencionaldeprogramaçãonãoorientadaaobjetos.

Todaclasseédefinidaemtermosdesuainterfaceesuaimplementação.

Atributos, métodos e interfaces

n Atributos:variáveisoupropriedadesdeumobjeto

n Métodos:comportamentodoobjeto<Modificadores> <tipo de retorno> <nome do método>(<lista de

parâmetros>) {

//blocos de comandos

}

Interface

classe TextWindow

Implementaçãodos atributos

private int x, y;private int dx, dy;private boolean min;

Implementaçãodos métodos

private resize(...);private maxim();private clear();

public String Título;

public int getX();public int getY();public boolean getMin();public int setX(int X);public int setY(int Y);

public int resizeWin(int dx, int dy);public int moveWin(int X, int Y);public int clearWin();public int max();public int min();public int loadWin(String Texto);

programa

Page 54: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

��

Introdução à Linguagem Java

Senac São Paulo

n Interface:métodosouvariáveisvisíveisaomundoexterior

• Variáveis:sãolocaisaoobjetoeimplementamoconceitodeatributosoupropriedades

deumobjeto.

• Métodos: são locais ao objeto e implementam o conceito de comportamento do

objeto,oucomosuaspropriedadesserelacionam,tantoentresi,comocomomundo

exterior.

• Interface:sãométodosouvariáveisvisíveisaomundoexterioraoobjeto.Éapartedo

objetoqueinteragecomosoutrosobjetosdeumprograma.

Regras gerais

n Atributos

• clareza

n Métodos

• abrangência

n Interfaces

• segurança

• Atributos

• Clarasesignificativascomrespeitoàspropriedadesquerepresentam

• Podemseroutrasclasses

• Métodos

• Deveabranger,pordefinição, “todo”ocomportamentodesejadodaclasse, in-

clusiveaquelesaindanãoimplementados,ouquedevemserimplementadospor

subclasses

• Interfaces

• Maissegurançaseimplementadaapenascommétodos

• Verificaçãodeparâmetrosdeentrada

• Mínima,masfuncional.Deve-sebuscarocompromissoidealentreestascaracte-

rísticas.

Page 55: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

��

Introdução à Linguagem Java

Senac São Paulo

Métodos especiais

n Construtor

• inicializaoobjeto

• deveteromesmonomedaclasse

n MétodosAbstratos

• Métododeclaradomasnãodefinido

n Destrutor

• Finalizaobjeto

n Construtor

• Métodoqueinicializaoobjeto.Éoprimeirométodochamadoquandooobjetoé

criado(instanciado)esomentepodeserchamadonestasituação

• Usadoparainicializaratributosdoobjetoeexecutarosmétodosdeinicialização

(abrirumarquivo,porexemplo)

• Deveteromesmonomedaclasse;nãopossuivalorderetornoepodeexistirem

qualquernúmeroparaumamesmaclasse(diferepelonúmerodeargumentos)

n MétodoAbstrato

• Métododeclaradomasnãodefinido,usadoparaforçara implementaçãodeum

comportamentodesejadonassubclassesqueherdaremestemétodo

n Destrutor

• Finalizaobjeto,“limpa”variáveiseliberarecursos.EmJavanãopodeserinvocado

diretamente.Éinvocadonadealocaçãodoobjeto.Chama-sefinalizeetemomes-

monomepratodosasclasses.

Page 56: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

��

Introdução à Linguagem Java

Senac São Paulo

Definição de uma classe e alocação

n Declaraçãodaclasse

public class Biometrica {

public int altura, peso, idade;

}

n Declaraçãodoobjeto

Biometrica entrada, saida;

n Instanciaçãodoobjeto

entrada = new Biometrica ();

saida = new Biometrica ();

• Declaraçãodaclasse

AclasseBiométricapossuitrêsatributospúblicos.

• Declaraçãodoobjeto

Adeclaraçãodoobjetonadamaisédoquedeclararasvariáveisqueapontarão

para as instâncias.Nadeclaração,osobjetosnãoestão ainda instanciados,mas

apenasnomeados.

• Instanciaçãodeobjetos

Osobjetossempresãoinstanciadospelooperadornew,queinvocaumconstrutor

daclasse.Nesseexemplo,oconstrutordefaultfoiutilizado.Oconstrutordefault

édefinidoimplicitamenteatodasasclassesquenãopossuemconstrutordefinido.

Eleéumconstrutorquenãorecebeargumentonenhum.

entrada saida

altura: 0

peso: 0

idade: 0

altura: 0

peso: 0

idade: 0

altura: 0

peso: 0

idade: 0

altura: 0

peso: 0

idade: 0

Page 57: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

�7

Introdução à Linguagem Java

Senac São Paulo

Construtores e instanciação

n Definirumconstrutormaisútil

public class Biometrica {

public int altura, peso, idade;

public Biometrica (int altura, int peso, int idade) {

this.altura = altura;

this.peso = peso;

this.idade = idade;

}

}

n Instanciaçãodeobjetosentrada = new Biometrica (120, 34, 12);

saida = new Biometrica (134, 42, 15);

Construtorespodemserdefinidosemqualquernúmero,desdequedifiramentresinalistadeargumentosquerecebem.

Apalavrareservadathis,dentrodeumaclasse,refere-seàinstânciacorrentedessaclasse.Assim,this.alturarefere-seaoatributoalturadaclasse,enquantoavariávellocalalturanãoéreferenciadaporela.

Referências a objetos

n Declaraçãodeobjetosquerecebemoutrasinstâncias

entrada = new Biometrica (120, 34, 12);

saida = new Biometrica (134, 42, 15);

Biometrica aux1 = entrada;

aux1.peso = 35;

Objetosdeclarados(masnão instanciados)podemseratribuídosaobjetos instanciados.Nessecaso,tem-seduasreferênciasparaomesmoobjeto.Qualqueralteraçãofeitaatra-vésdequalquerreferênciaafetaoobjetoemquestão.

entrada saida

altura: 120

peso: 34

idade: 12

altura: 120

peso: 34

idade: 12

altura: 134

peso: 42

idade: 15

altura: 134

peso: 42

idade: 15

entrada saida

altura: 120

peso: 35

idade: 12

altura: 120

peso: 35

idade: 12

altura: 134

peso: 42

idade: 15

altura: 134

peso: 42

idade: 15

aux1

Page 58: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

��

Introdução à Linguagem Java

Senac São Paulo

Declaração de métodos

Métodossãofunçõesinternasàclasse.

Ummétodoéumafunçãodefinidadentrodeumaclasseequeimplementaumcompor-tamentodestaclasse.Quandonãopossuir tipoderetornodeveserutilizadaapalavrachavevoid.

public void incrementarIdade() {

this.idade++;

}

Os argumentos de um método devem ser defi nidos pelos seus ti-

pos.

public void acrescentarAltura(int aumento) {

this.altura += aumento;

}

public class Biometrica {

public int altura, peso, idade;

public Biometrica (int altura, int peso, int idade) {

this.altura = altura;

this.peso = peso;

this.idade = idade;

}

public fl oat obterRelacaoAlturaPeso() {

return this.altura/this.peso;

}

}

Page 59: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

��

Introdução à Linguagem Java

Senac São Paulo

Notação UML

n UML:UnifiedModelingLanguage

n Padrãoparaespecificaçãodesistemasorientadoaobjetos

n Classe

AnotaçãoUMLéumpadrãoutilizadoamplamenteparaespecificarsistemasorientadosaobjetos.Odiagramadeclasseséumdosmaisutilizados.

Anotaçãoparaespecificarumaclasseéumretânguloquepossuitrêsregiões:umacomonomedaclasse,outracomosseusatributoseumaterceiracomosseusmétodosouconstrutores.

Osatributossãoespecificadoscomseustiposesuaacessibilidade: +paraacessopúblico -paraatributosprivados

Osmétodossãoespecificadoscomseustiposderetornoelistadeargumentos,alémdaacessibilidade,comoosatributos.

Biometrica

+ peso: int+ altura: int+ idade: int

+ Biometrica(peso:int, altura: int, idade:int)+ obterRelacaoAlturaPeso(): float

Nome da classe

Atributos

Métodos / Construtores

Page 60: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

�0

Introdução à Linguagem Java

Senac São Paulo

Sobrecarga de métodos

n Definiçãodemúltiplosmétodoscomomesmonomemastiposdeparâmetros

diferentes

Polimorfismodemétodosousobrecargademétodospermitequemétodoscomomesmonomesejamimplementadosdeformadiferente.Istosetornamuitoútilquandoempre-gadoparaprovero“mesmo”comportamentoparaconjuntodeparâmetrosdiferentes.Porexemplo:umconjuntodemétodoschamadossomapodeserdefinidoparaexecutarasomaentreinteiros,floatsestrings,eoempregodomesmonomefacilitaaprogramaçãoealeituradocódigo.

n Métodoscommesmonomemaslistadeargumentosdiferentes public void setPeso(int peso) {

this.peso = peso;

}

public void setPeso(int peso, int redutor) {

this.setPeso(peso – redutor);

}

n Invocaçãodosdiferentesmétodosentrada.setPeso(55);

entrada.setPeso(48, 5);

método B

método B

método B

método Bparâmetros

verificaçãode tipos

Page 61: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

�1

Introdução à Linguagem Java

Senac São Paulo

n Métodoscommesmaassinaturacausamerrodecompilação

void resize(int x, int y, int dx, int dy) {

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

this.dx=dx; this.dy=dy;

}

void resize(int x1, int y1, int x2, int y2) {

x=x1; y=y1;

dx=x2-x1; dy=y2-y1;

}

n Tipoderetornonãodiferenciammétodos

int calc(int a, int b, int c, int d) {..}

float calc(int a, int b, int c, int d) {..}

Cuidado:osnomesdosargumentosnãodiferenciamummétododooutro,portantodoismétodos com lista de argumentos em igual número e tipos, mas com nomesdiferentes,nãosãosobrecarregadosegeramumerrodecompilação.

Sobrecarga de construtores

n Construtorescomlistadeargumentosdiferentes public Biometrica(int altura, int peso, int idade) {

this.peso = peso;

this.altura = altura;

this.idade = idade;

}

public Biometrica(int altura, int idade) {

this(altura, altura – 110, idade);

}

n Invocaçãodosdiferentesconstrutoresentrada = new Biometrica(155, 49, 17);

saida = new Biometrica(180, 21);

Damesmaformaquemétodos,construtorestambémpodemsersobrecarregados.Adi-ferenciaçãoocorredamesmaforma,pelalistadeargumentos.

Ainvocaçãodeumconstrutordentrodeoutroutilizaanotaçãothis(...),onde,pelalistadeargumentospassadoséidentificadooconstrutorinvocado.

Page 62: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

�2

Introdução à Linguagem Java

Senac São Paulo

Aidentificaçãodequalconstrutorfoiinvocadoéfeitapelosargumentos.Construtoresso-brecarregadosdevempossuirlistasdeargumentosdiferentesemquantidadee/outipos.

Cuidado:osnomesdosargumentosnãodiferenciamumconstrutordooutro,portantodoisconstrutorescomlistadeargumentosemigualnúmeroetipos,mascomnomesdiferentes,nãosãosobrecarregadosegeramumerrodecompilação.

Classes e métodos abstratos

n Métodosabstratossãoaquelesquenãopossuemimplementação

n Umaclassecomapenasummétodoabstratonãopodeser instanciadaeétambém

chamadadeclasseabstrata

n Pertenceàinterfacedaclasse,impondoumcontratoparaassubclasses(nopróximo

capítuloissoseráestudado)

abstract public class Biometrica {

...

abstract public int calcularPesoIdeal();

}

Classesabstratasnãopodemserinstanciadas,umavezque“falta”partedesuaimplemen-tação.Umaclasseabstrataserveparaestabelecerumainterfacecujasubclasses,sepreci-saremserinstanciadas,necessariamenteterãoqueimplementar.Noscapítulosseguintes,quandofortratadootemaPolimorfismo,ficaráclaraavantagemdousodeclassesabstratas.

Page 63: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

�3

Introdução à Linguagem Java

Senac São Paulo

Atributos e métodos estáticos

n Atributosemétodosdeclasse

n Alocaçãonaclasse

n Compartilhamentoentretodososobjetosdaclasse

public class Biometrica {

public static int pesoMinimo = 25;

public int altura, peso, idade;

public Biometrica (int altura, int peso, int idade) {

this.altura = altura;

this.peso = peso;

this.idade = idade;

}

public static int obterPesoMinimo() {

return pesoMinimo

}

}

Atributosemétodosestáticossãotambémchamadosdeatributosoumétodosdeclasse,emcontraposiçãoaosatributosemétodosdeinstância,queassumemumvalorparacadainstância(objeto).Sãoalocadosumaúnicavezemmemória,epermanecemalocadosenquantoaclasseesti-vercarregada.Umatributoestáticoécompartilhadoentretodososobjetosdaclasse.Seoatributoforpúblico,outrasclasseseobjetostambémutilizamasuaúnicaalocaçãoemmemória.

Page 64: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

��

Introdução à Linguagem Java

Senac São Paulo

n Referênciaavariáveis/métodosestáticos

Asvariáveisestáticassãoalocadasnasclassesenãonosobjetos.Noexemplo,amesmavariávelpodeseralocadadequalquerumadasformasaseguir:

Biometrica.pesoMinimoentrada.pesoMinimosaida.pesoMinimo

API Javan AdocumentaçãodetodasasclassesJavaquevemjuntocomaJVMdeveserbaixada

separadamentenositejava.sun.com

n Procurarpelodownloadde“J2SE(TM)DevelopmentKitDocumentation”

n Baixaroarquivocomprimido

n Descomprimirnumdiretórioeabriroindex.html

Exercícios:

1.Construaumaclasse–chamadaPonto–quedefinaumpontonoplano.Umpontoécaracterizadoporduascoordenadas(xey,porexemplo).OnomedoarquivodeveserPonto.java.

Biometrica.pesoMinimo = 20;

int p = Biometrica.obterPesoMinimo();

entrada.pesoMinimo = 28

int q = saida.obterPesoMinimo();

entradasaida

altura: 120

peso: 35

idade: 12

altura: 120

peso: 35

idade: 12

altura

peso

idade

pesoMinimo: 28 pesoMinimo

altura: 134

peso: 42

idade: 15

altura: 134

peso: 42

idade: 15

pesoMinimo

Biometrica

Page 65: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

��

Introdução à Linguagem Java

Senac São Paulo

Façaummétodomainparaessaclasse.Nestemétodo,definadoisobjetospontosp1ep2.Atribuaaopontop1ascoordenadas(10,10).Mostreosvaloresdessascoordenadasnasaídapadrão.Atribuaaopontop2ascoordenadas(50,50).Mostreosvaloresdessascoordenadasnasaídapadrão.DeclareumareferênciaaPontocomnomep3.Atribuap1ap3.Atribuaaopontop3ascoordenadas(30,30);Mostreascoordenadasdetodosostrêspontos.

2.FaçaummétodoparaPontoquecalculeadistânciaentreopontoeumoutropassadocomoargumento.Adefiniçãodométodopodeser:

double distancia(Ponto p) {

...

}

3-FaçaumaclasseQuadrilaterocompostaporquatropontos.Definaummétodoqueve-rifiquemseoQuadrilateroéumretânguloortogonal(ouseja,seospontosestãodispostossegundoafiguraabaixo.

Page 66: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

CAPÍTULO 6ARRAYS E STRING

Page 67: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

�7

Introdução à Linguagem Java

Senac São Paulo

n Arrays

• DeclaraçãoString palavras[]; ou String[] palavras;

Data vencimentos[]; ou Data[] vencimentos;

int arrVal[]; ou int[] arrVal;

• InstanciaçãodoArrayarrVal=new int[200];

vencimentos =new Data[10];

String[] frase = {“Estas”, “palavras”, “formam”, “a”, “frase”);

• AcessoarrVal[0]=23;

vencimento[8] = new Data(23, 4, 2005);

String s = frase[2];

• Tamanhoint l = arrVal.length;

UmarrayémuitosemelhanteaumobjetoemJava.Eleprecisaserdeclaradoeinstanciado.Issopodeserfeitonumamesmalinha:

Data[] vencimentos =new Data[10];

Esse “objeto” array tem um único atributo já pedefinido chamado length, que dá otamanhoaoarray.

EmJava,umarrayédelimitadonasuainstanciação.Assim,oscasosdereferênciaaíndicesnãoexistentesnãopodemocorrer.Issogaranteumaformasegura,diretaesimplesdeusodearrays.Osíndicesdosarrayssempreseiniciamem0.Assim,umarraydeNelementos,podeserindexadode0aN-1.

int[] intervalos = {2, 5, 6};

int x = intervalos[0]; // x recebe 2

int y = intervalos[3]; // ERRO!

//Array de 3 elementos tem

//índices de 0 a 2

Arrayspodemserdetiposprimitivosoudeobjetos.Nocasodearraydeobjetosconvémnotarqueainstanciaçãodoarraynãoinstanciaosobjetosqueelepodeconter.

Page 68: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

��

Introdução à Linguagem Java

Senac São Paulo

alOcaçãO de aRRayS

Array de tipos primitivos

byte[] mascara;

mascara = new byte[5];

mascara[2] = 5;

byte[] aux = mascara;

aux[0] = 7;

Umarray, ao serdeclarado, apenas reservaumareferênciaquepodeapontarparaum“objeto”array.Noexemplo,mascaraéapenasumareferência.Maisdeumareferênciapodemapontarparaomesmoarray,assimcomoocorremparareferênciasdeobjetos.Noexemplo,mascaraeauxapontamparaomesmoarray.

Umarraydetiposprimitivos,aoserinstanciado,temoseuespaçoalocadoemmemória,etodosvaloresalocadossãoinicializadoscom0.

n Arraysdeobjetos

Data[] vctos;

vctos = new Data[3];

vctos[0] = new Data(2, 3, 2004);

vctos[2] = new Data(10, 12, 2003);

vctos[1] = vctos[2];

vctos[1].setDia(23);

Umarraydeobjetos,aoserinstanciado,temoseuespaçoalocadoemmemória,etodososvaloresalocadossãoinicializadoscomnull.

Cadaelementodoarrayprecisaserinstanciadoindividualmenteecomporta-secomoumareferênciaparaoobjetoalocadoparaele.Expressõesdotipovctos[1].setDia(23)servemparaacessarosobjetosdecadaposiçãodoarray.

mascara

0 0 0000 0 000mascara

0 0 0050 0 005mascara

0 0 0050 0 005mascara

aux

7 0 0057 0 005mascara

aux

vctos

nullvctos nullnull

vctos

3

2004

2

12

2004

23

Page 69: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

��

Introdução à Linguagem Java

Senac São Paulo

aRRayS MUltIdIMenSIOnaIS

n Arraysdedimensõeshomogêneasint[][] matriz = new int[5][3];

matriz[0][2] = 67;

Ponto[][][] cubo = new Ponto[3][6][2];

cubo[2][5][1] = new Ponto(34, 65);

n Arraysdedimensõesheterogêneasint[][] amostras = new int[3][];

amostras[0] = new int[3];

amostras[1] = new int[4];

amostras[2] = new int[2];

amostras[2][1] = 15;

amostras[0][1] = 56;

amostras[1][2] = 31;

Arraysmultidimensionaiscomdimensõeshomogêneaspodemserinstanciadosnumaúnicalinhadecomando,passando-seasduasdimensões.

int[][]matriz=newint[5][3];

Asdimensõespodemserobtidasseparadamente:matriz.lenghtresultaem5ematriz[0].lengthresultaem3.

Arrayscomdimensõesheterogêneasprecisamtercadadimensãoalocadaseparadamente.Nainstanciaçãodaprimeiradimensão,asdemaissãodeixadassemvalor.

int[][] amostras = new int[3][];

Edepois,paracadaposiçãodaprimeiradimensãodevemseralocadasasdemaisdimen-sões.

amostras[0] = new int[3];

amostras[1] = new int[4];

amostras[2] = new int[2];

0 0 0000 0 000

matriz

0 0 0000 0 000

67 0 00067 0 000

0 0 0

amostras

56 0 15

0 31

0

Page 70: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

70

Introdução à Linguagem Java

Senac São Paulo

StRIng

n Stringéumaclasse,nãoumtipoprimitivo

n Stringtemalgunscomportamentosespeciais,típicosdetiposprimitivos

• Instanciaçãoésemelhanteainicialização

• Strings=“teste”;

• Concatenação

s=“umoutro”+“teste”;

n Stringssãosempreconstantes

n Stringsdevemsercomparadascomoobjetos(usarmétodoEqualsdaclasseString) str1.Equals(str2)

StringemJavaéumaclassequetemalgunscomportamentosdiferenciadosdasdemaisclas-ses.UmaStringpodeserinstanciadadamesmaformaqueumtipoprimitivoéinicializado.Repararquecontinuasendoumainstanciação,ouseja,umobjetoécriadoemmemória.Stringspodemserconcatenadascomooperador+.EssaoperaçãodeconcatenaçãogeraumaoutraString.

StringsdevemsercomparadasatravésdométodoEquals,daprópriaclasse.Essemétodocompara,caractereacaractere,duasStrings.Ooperador==aoseraplicadosobreStrin-gscomparaasreferênciasenãoosconteúdos.MuitasvezesesseoperadortemresultadosemelhanteaométodoEquals,issoporqueaJavaVirtualMachineprocuracompartilharasStringsiguais,evitandoamúltiplainstanciaçãodeStringsiguais.IssosóépossívelporqueStringssãoconstantes.

Exercícios:

1.FazerumaarreymétodoquetransformeumarraydeStringsemumaStringconcatenada.

2.Monteumarraymétodoquefaçaamultiplicaçãodematrizesusandoarrays.Lembrarque:

a11 a12 X b11 b12 =

a21 a22 b21 b22

a11*b11 + a12*b21 a11*b12 + a12*b22

a21*b11 + a22*b21 a21*b12 + a22*b22

ConsiderarqueasdimensõesdasmatrizespodemserNXMondeNeM>=1.

Para PensarComofazercópiadearrays?

Page 71: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

CAPÍTULO 7HERANÇA EINTERFACES

Page 72: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

72

Introdução à Linguagem Java

Senac São Paulo

n Herança

Formapelaqualumanovaclassesédefinidaapartirdeoutra,preservandosuainterfaceeacrescentandooualterandosuaimplementação:

• Formapelaqualnovasclassessãodefinidasdeformaincremental

• Definiçãodeumanovaclasseespecificandoumaclassemãeeumconjuntoadicionalde

atributose/oumétodos

• Aclassedefinidadessaformaherdatodososatributosemétodosdaclassemãe

• Aacessibilidadedainterfacedaclassemãenãopodeserredefinidanaclasseherdada

• Javanãopermiteherançamúltiplacomclasses,masapenascominterfaces.

Page 73: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

73

Introdução à Linguagem Java

Senac São Paulo

Anatomia da herança

Dadaumaclassemãecomsuaimplementaçãoesuainterface,vemosqueumaclassefilhapodeserdefinidacomsuainterfaceesuaimplementaçãoapartirdaclassemãecomasseguintescaracterísticas:

• Ainterfaceoriginaldaclassemãeémantida.Aherançanunca“perde”interface.

• Aclassefilhapodeestenderainterface.

• A implementação da classe mãe é totalmente herdada pela filha, no entanto parte

dessaimplementaçãopodesersobrescritapelaclassefilha.Nessecaso,sobainterface

herdadadaclassemãepodemestarimplementaçõescompletamentediferentes.

• Aclassefilhapodeestenderaimplementação.

implem

entação

intereface

Classe mãe

Classe filha

Interface originalda classe mãe

Interface estendidapela classe filha

Implementaçãoexclusiva daclasse filha

Implementaçãosobrescrita pela

classe filha

Implementaçãoherdada da classe mãe

Page 74: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

7�

Introdução à Linguagem Java

Senac São Paulo

Herança e hierarquia de classes

n l1éasuperclassedeCl1_1eCl1_2

n Cl1_1eCl1_2sãosubclassesdeCl1

n Cadaclassepodepossuirumaúnicasuperclasse

n Cadaclassepodepossuirqualquernúmerodesubclasses

n Cl1_1_1eCl_1_2sãoclassesdistintas,bemcomoCl1_2_1.

Aaplicaçãodeherançacriaumahierarquiadeclasses,ondeasclassesprimáriassãomaisgenéricaseasclassesfinaissãomaisespecíficas.Oesquemahierárquicodeclassespermiteestabelecerrelaçõesespeciaisentredetermi-nadasclasses,ouseja,umasubclassetemumrelacionamentodiferenciadocomsuasuper-classeeestaporsuavezenglobaváriascaracterísticascomunsatodasassuassubclasses.A utilização destas relações especiais dá um grande poder a um programa orientado aobjetos.

Noesquemadoaltodapáginapode-severcomoéanotaçãoUMLparaindicarherança.

Cl1

Cl1_2Cl1_1

Cl1_1_2Cl1_1_1 Cl1_2_1

Notação UMLpara herança

Page 75: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

7�

Introdução à Linguagem Java

Senac São Paulo

Definição de subclasses

n Usodapalavrareservadaextends

Apalavrachaveextendséusadaparaestabelecerumarelaçãodeherançaentreduasclas-ses. Gerente é subclasse de Funcionário, e Funcionário, por sua vez, é superclasse deGerente.Notequea relaçãoestabeleceque todasaspropriedadesdeFuncionário sãoherdadasporGerente,quetambémpodedefinirpropriedadesadicionais.

Chamada de métodos na herança

Umadasrelaçõesespeciaisentresuperclasseesubclasseéocompartilhamentodeméto-dos.Oesquemadeherançaéresponsávelpeladeterminaçãodolocalexatodadefiniçãodeummétodo,nãodefinidanasubclasse,masemumdeseusancestrais.

public class Gerente {public String nome;public double salario;public double bonus;

}

public class Gerente extends Funcionario {public double bonus;

}

publicclassFuncionario{publicString nome;

publicdoublesalario;}

Objeto

método A();

método B();

chamada de B()

chamada de A()

Page 76: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

7�

Introdução à Linguagem Java

Senac São Paulo

Sobrescrita de métodos

ClasseFuncionariocommétodoparacalcularcustomensaltotaldoFuncionario

n ClasseGerentecomomesmométodo

NaclasseGerenteaimplementaçãodométodoobterCusto()deveserdiferente,poisdevelevaremcontaobônusquesomenteogerenterecebe.Quandoumasubclassereimple-mentaummétododasuperclasse,diz-sequeessemétodofoisobrescritonasubclasse.Nessecaso,aimplementaçãoqueveioporherançadeFuncionariofoidescartada.

n Gerentecomsobrescritademétodos,masutilizandoométododasuperclasse

public class Funcionario {

public String nome;

public double salario;

public static double encargo = 1.8;

public double obterCusto() {

return this.salario * encargo;

}

}

public class Gerente extends Funcionario {

public double bonus;

static public double encargoBonus = 2.1;

public double obterCusto() {

return this.salario * encargo + this.bonus *

encargoBonus;

}

}

public class Gerente extends Funcionario {

public double bonus;

static public double encargoBonus = 2.1;

public double obterCusto() {

return super.obterCusto() + this.bonus *

encargoBonus;

}

}

Page 77: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

77

Introdução à Linguagem Java

Senac São Paulo

Aosobrescreverummétodo,umasubclassedevereaproveitarométodooriginal,afimdenãoreescreverregras.Asobrecargademétodosdevepreferencialmenteproverumcomportamentoadicionalànovaclasse.Sendoassim,ocomportamentooriginal,herdadodasuperclasse,devecolaborarparacomportambémonovocomportamento.

Apalavrareservadasupertemafunçãodereferenciarmembrosdefinidosnasuperclasse.Assim,super.obterCusto()referenciaométododefinidonasuperclasse(Funcionario).

Herança e construtores

n Construtoresnãosãoherdados

• ConstrutordeFuncionario public Funcionario(String nome, double salario) {

this.nome = nome;

this.salario = salario;

}

Construtor de Gerente

public Gerente(String nome, double salario,

double bonus) {

super(nome, salario);

this.bonus = bonus;

}

Osconstrutoresdeumaclassenãosãoherdadospelas suas subclasses.Noentanto,asregrasdefinidasnos construtoresdas superclassespodemedevemser reutilizadasnosconstrutoresdassubclasses.NaclasseGerente,ousodesuper(...)invocaoconstrutordasuperclasseeportantoutilizaocomportamentojádefinidoemFuncionario.

Exercícios

1.Façaumaclassequerepresenteumacontabancária.

2.Façaumasubclassedecontaemqueométododebitaleveemcontaolimite.

3.FaçaumaclasseBancoquecontenhaumgrupodecontas(quedevemseralocadoemumarraydeContas).Façamétodosqueefetuemcadastramentodecontas,movimenta-çõesfinanceiras(débitosecréditosemcontasespecificadaspeloseunúmero).Façaummétodoqueinformeoativodobanco(somadetodosossaldos).Façaummétodoquedebiteumvalorfixo(taxadeadministraçãodeR$3,50)detodasascontas.

Page 78: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

7�

Introdução à Linguagem Java

Senac São Paulo

Interfaces

n Interfacessãoconjuntodeatributosestáticosoumétodosabstratosqueestabelecem

umasériedecomportamentosqueseesperadaclassequeaimplementa

n Classeseinterfacessãoequivalentes,excetopelofatodequeinterfacesnãopodem

serinstanciadas

n Interfaceéumaclasseabstratacomtodososmétodosabstratos

n HerançamúltiplaemJava

• CadaclassepodeterapenasUMAsuperclasseeimplementarVÁRIASinterfaces.

Interfacessãoconjuntodeatributosestáticos(variávelúnicacompartilhadaportodososobjetosdeumamesmaclasse)e/oumétodosabstratos(métodoscomassinaturadefinida,mascorponãodefinido)queestabelecemumasériedecomportamentosqueseesperadaclassequeaimplementa.

AusênciadeherançamúltiplaemJavaéumalimitaçãoamenizadapeloempregodeinterfa-ces.Javapermitequeumaclasseimplementeumaoumaisinterfaces.

• Vantagem:

• Duasclassesdistintasqueimplementamamesmainterfacerespondemaumcon-

juntoidênticodefunções(emboranãonecessariamentedamesmaforma).

Classeseinterfacessãoequivalentes,excetopelofatodequeinterfacesnãopodemserinstanciadas.Interfaceéumaclasseabstratacomtodososmétodosabstratos.

Page 79: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

7�

Introdução à Linguagem Java

Senac São Paulo

Declaração de interfaces

n Declaraçãodeumainterface

public interface Colaborador {

public double obterCusto();

}

n Implementaçãodeumainterface

public class Consultor implements Colaborador { public double valorHora;

public int totalHoras;

public double obterCusto() {

return this.valorHora * this.totalHoras;

}

}

Umainterfaceédeclaradacomousodapalavrareservadainterface,queeliminaane-cessidadededeclararosmétodoscomoabstratos.Numainterface,todososmétodossãonecessariamenteabstratos.

Umaclassepode implementar umaoumais interfaces.Para a classe ser concreta (nãoabstrata) é necessário que todos os métodos das interfaces que ela implementa sejamimplementados.

NanotaçãoUMLumainterfaceérepresentadacomoumaclasse,masmarcadacomoes-tereótipodeinterface(umcírculonocantosuperiordireitodoretângulodaclasse).

Exemplo do uso de interfaces

n Vamossuporumprogramausadoporumpaís fictícioquecobraumimpostoúnico

anualsobretodasaspropriedadese/oubensdeseuscidadãos.Vamoslimitarosbens

aimóveiseautomóveisemodelarasclassesquecomporiamesteprograma.

• Comosetrataeumpaísmoderno,asunidadesderegistrosãoosbensenãoas

pessoas(direitoàprivacidade)

• Comoexistemváriostiposdeimóveiseautomóveis,convémcriarasclassesbási-

casapartirdasquaissãoherdadososváriosregistros(classes)diferentes

• Vamossimplificarnossoexemplo!

Colaborador

Consultor

Page 80: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

�0

Introdução à Linguagem Java

Senac São Paulo

Definição das classes bases

Umainterfaceéutilizadaparasedefinirumcontratoquedeveserobedecidoportodasasclassesqueaimplementam.

Noexemplodado,sãodefinidasduashierarquiasdeclasses,umarelacionadasabensmó-veiseoutraabensimóveis.Comosãohierarquiasdistintas,nãoexisteumasuperclasseco-mumatodasessasclassesqueformaumcontratoparatodasaomesmotempo.Asolução,então,édefinirumainterfacequeforçaaimplementaçãodeummétodoquesedesejaquetodasasclassesimplementem.

class Imovel {

String proprietario;

String localizacao;

int valor;

void mudaProp(String p) {

//verifi ca e efetua;

}

void mudaValor(int v) {

//verifi ca e efetua;

}

}

class Auto {

String proprietario;

String endereco;

String placa;

int valor;

boolean licenciamento() {

//efetua;

}

int verifi caMulta() {

//verifi ca e efetua;

}

}

Page 81: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

�1

Introdução à Linguagem Java

Senac São Paulo

Exemplo - Definição das classes derivadas

Exemplo - Definição da interface

n Imposto único se aplica a todos os bens, portanto a todas as classes anteriores.

Ocálculopodeserdistinto,masexisteumprocedimentoúniconacobrança,cálculoe

registro,portantopodeserimplementadaumainterfaceparaisso

Omodificarfinal,quandoaplicadoavariáveis,astornamconstantes,ouseja,umavezatri-buídas,nãopodemseralteradas.

class Casa extends Imovel {

int areaConstruida;

int numPavimentos;

boolean usoComercial;

.

.

}

class Predio extends Imovel {

int areaTerreno;

int numApto;

.

boolean vistoria() {..}

}

class Terreno extends Imovel {

int area;

boolean murado;

.

.

}

class Carro extends Auto {

String modelo;

String cor;

int numPassageiros;

.

}

class Caminhao extends Auto {

String modelo;

int taraMax;

.

void autorizaCarga() {..}

}

class Moto extends Auto {

String modelo;

int cc;

.

.

}

public interface IUSB { //Imposto Unico Sobre Bens

static fi nal fl oat aliquota=0.01; // 1% - aliquota unica

static fi nal Data venc = new Data(30, 9, 2006);

abstract double calculoImposto();

abstract boolean verifi caVencimento(Data data);

}

Page 82: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

�2

Introdução à Linguagem Java

Senac São Paulo

Exemplo - Redefinição das classes bases

AodefinirqueasclassesbasesimplementamainterfaceIUSB,força-separaquetodasassuassubclassesdevamimplementarosmétodosdefinidosnainterface.

Comoasclassesbasesnãoimplementam(nesseexemplo)osmétodosabstratosdainterfa-ce,elasdevemserdeclaradasabstratas(poispossuemagoramétodosabstratos,herdadosdainterface).

abstract class Imovel

implements IUSB{

String proprietario;

String localizacao;

int valor;

void mudaProp(String p) {

//verifi ca e efetua;

}

void mudaValor(int v) {

//verifi ca e efetua;

}

}

abstract class Auto

implements IUSB{

String proprietario;

String endereco;

String placa;

int valor;

boolean licenciamento() {

//efetua;

}

int verifi caMulta() {

//verifi ca e efetua;

}

}

Page 83: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

�3

Introdução à Linguagem Java

Senac São Paulo

Exemplo - Redefinição da classes

AssubclassesdeImoveledeAutoqueforemconcretas(podemserinstanciadas)devemagora implementarosmétodosdefinidospela interface.Notarqueessassubclassesnãosãoabstratas,porquenãopossuemmaismétodosabstratos.

Exercício:

1.Codificaretestaroexemplodeusodeinterfaces.

class Casa extends Imovel {

int areaConstruida;

int numPavimentos;

boolean usoComercial;

.

int calculoImposto() {

return valor*indiceArea(areaConstruida)*aliquota;

}

boolean verifi caVencimento(Data data) { . . . }

}

class Caminhao extends Auto {

String modelo;

int taraMax;

.

int calculoImposto() {

return valor*aliquota-desconto(taraMax);

}

boolean verifi caVencimento(Data data) { . . . }

}

Page 84: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

��

Introdução à Linguagem Java

Senac São Paulo

Modificador final

Omodificadorfinal,quandoaplicadoavariáveis,astransformamemconstantes.Umavezatribuídas,nãopodemmaisseralteradas.

Omodificadorfinal,quandoaplicadoamétodos,impedemqueelessejamsobrescritos.

Omodificadorfinal,quandoaplicadoaclasses,impedequeelassejamutilizadascomosu-perclasses.Ouseja,umaclassefinalnãopodeserherdadapornenhumaoutraclasse.

Page 85: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

CAPÍTULO 8ENCAPSULAMENTO

Page 86: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

��

Introdução à Linguagem Java

Senac São Paulo

n Éacaracterísticadaorientaçãoaobjetosquepermitequeumaclassedefinaaacessi-

bilidadedeseusmembros

n Outrasclassesouobjetosdeoutrasclassessomentetêmacessoaosmembroscuja

classepermitiuacesso

n Nemmesmoumasubclassepodeteracessoamembrosqueasuperclassenãodeu

acessibilidade

Oencapsulamentoéumacaracterísticaqueconfereàclasseopoderdedeterminarcomoseráoacessoaseusmembros.Essacaracterísticapossibilitaqueatributossejamcorreta-menteprotegidosdeacessosindevidos.

Comousocorretodoencapsulamentoevita-sequeobjetosassumamvaloresdeproprie-dadesinconsistentes.Evita-setambémquecomportamentosnãopúblicosdeumaclassesejamutilizadasexternamenteaela.

Osmodificadoresdeacessosãoosinstrumentosdalinguagemparadefiniroencapsula-mento.

Modificadores de acesso

n Palavrasreservadasquedeterminamoacessopermitidoaclasseseseusmembros

• public• protected

• private

n NotaçãoUML(+,-e#) +public -private #protected

Page 87: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

�7

Introdução à Linguagem Java

Senac São Paulo

EmJava,existem4modificadoresdeacesso:ostrêsindicadospelaspalavras-chavespu-blic,protectedeprivate,maisomodificadordadopelaausênciadepalavra-chave.Ouseja,aausênciademodificadordeacessoéumadefiniçãodeacessibilidadetambém.

AnotaçãoUMLempregaossímbolos+paraindicarqueummembroépúblico,-paraprivadoe#paraprotegido.

public

• Aplicadoaclasseseinterfaces:determinamqueaclassepodeserutilizadalivre-menteporqualqueroutraclasseouinterface.

• Aplicadaamembros:determinamqueomembropodeserutilizado livrementeporqualqueroutraclasse.

protected

• Nãoseaplicaaclasseseinterfaces.• Aplicadaamembros:determinamqueomembropodeserinvocadoouutilizado

apenasporclassesdomesmopacoteouporsubclasses.

Sem modificador

• Aplicadoaclasseseinterfaces:determinamqueaclassepodeserutilizadaapenasnomesmopacote.

• Aplicadaamembros:determinamqueomembropodeserutilizadoapenasno

mesmopacote.

private

• Nãoseaplicaaclasseseinterfaces.

• Aplicadaamembros:determinamqueomembropodeserinvocadoouutilizadoape-

naspelaprópriaclasse.

Page 88: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

��

Introdução à Linguagem Java

Senac São Paulo

Exemplo:

TodososatributosdeData sãoprivados,oque impedequeeles recebamdiretamentevaloresvindosexternamenteàclasse.Assim,data1.dia=35,nãoépermitindo,evitandodatasinconsistentes.ParaatribuirumvaloraumatributodeDatadeve-seutilizarummétodopúblico.Naim-plementaçãodessesmétodoségarantidoaconsistênciadosseusatributos.Assim,acadamêsépermitidoumvalormáximoparaodia.SeousuáriodeumobjetodaclasseDatapassarcomoargumentoalgumvalorincompatível,ométodoimpedequeessevalorche-gueaoatributo.

public class Data {

private int dia, mes, ano;

public void setDia(int dia) {

if(dia<0) this.dia=1;

else if(dia>28 && this.mes==2 && !this.isBissexto()) this.dia=28;

else if(dia>29 && this.mes==2 && this.isBissexto()) this.dia =29;

else if(dia>30 && (this.mes==4 || this.mes==6 || this.mes==9 || this.mes==11))

this.dia = 30;

else if(dia>31) this.dia = 31;

else this.dia = dia;

}

public void setMes(int mes) {

if(mes<0) this.mes = 1;

else if(mes>12) this.mes = 12;

else this.mes = mes;

}

public void setAno(int ano) {

this.ano = ano;

}

fi nal public boolean isBissexto() {

return (this.ano%4==0 && (this.ano%100!=0 || this.ano%400==0));

}

}

Page 89: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

��

Introdução à Linguagem Java

Senac São Paulo

Exemplo:

n ConstrutordeData

Oconstrutordevegarantirtambémoencapsulamento.

Exercícios:

1.DigitaretestaraclasseDatadestecapítulo.

2.EncapsularcorretamenteasclassesContaeContaEspecialdocapítuloanterior.

public class Data {

...

public Data(int dia, int mes, int ano) {

this.setAno(ano);

this.setMes(mes);

this.setDia(dia);

}

}

Page 90: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

CAPÍTULO 9POLIMORFISMO

Page 91: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

�1

Introdução à Linguagem Java

Senac São Paulo

n Característicaquepermitequeumamesmainterfaceassumaimplementaçõesdistintas.

n Classescominterfacessemelhantes,masimplementaçõesdiferentes,sãopolimórficas.

Polimorfismoéacaracterísticadaorientaçãoaobjetosquedeterminaqueumainterfaceesuaimplementaçãosãoelementosdistintosdeumaclasse.Assim,classesdiferentespodemimplementaramesmainterface.Sãoclassespolimórficas.

Exemplo conceitual

Asclassespolimórficasdãoumagrandeflexibilidadeparaodesenvolvimentodeaplicaçõesondeoscontratosestabelecidosentreosobjetossãomuitobemdefinidos(essascontratossãoasinterfacesatravésdasquaisosobjetosinteragementresi).Umobjeto(daclasseA),construídoparatrabalharcomumsegundoobjeto(daclasseB),nãoconheceaimplemen-taçãodessesegundo,masapenasasuainterface(IB).Umoutroobjeto(daclasseC,mascomamesmainterfacedeB)podesubstituiressesegundoobjeto,semnecessidadedealteraçõesnaclasseA.

implementaçãoImplementação

interface interface

Implementação CImplementação B

Interface IB Interface IB

classe A

classe B

Contratode A com IB

classe A

Contratode A com IB

classe C

Page 92: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

�2

Introdução à Linguagem Java

Senac São Paulo

public interface IB { ... }

public class B implements IB { ...}

public class C implements IB { ...}

public class A {

private IB obj;

public void setObj(IB obj) {

this.obj = obj;

}

}

A a = new A();

a.setObj(new B());

a.setObj(new C());

n NotaçãoUML

IB

B C

A

Indica que A tem umadependência para com IB

Page 93: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

�3

Introdução à Linguagem Java

Senac São Paulo

Polimorfismo e Herança

n Umasubclasseimplementaainterfacedasuperclasse

n Classesnumamesmahierarquiapodemserpolimórficaspelainterfacemaisgenérica

SeaclasseAédependentedeB,entãoqualquerinstânciadeB,C,D,E,FouGpodeserutilizadanestadependência.

Exemplo completo

DeptoPessoal

+ custoTotal(): double

DeptoPessoal

+ custoTotal(): double- nome: String

+ obterNome(): String<<abstract>> + obtercusto(): double

- salario: String

+ obtercusto(): double

Funcionario

Gerente

- bonus: double

+ obtercusto(): double

Consultor

- horas: int- valorHora: double

+ obtercusto(): double

A B

G

FEC

B b = new B();b = new C();b = new D();b = new E();b = new F();b = new G();

Page 94: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

��

Introdução à Linguagem Java

Senac São Paulo

Comentáriosecódigo:

• NodiagramaUMLestãoindicadosapenasosprincipaisatributosemétodos.Ocódigo

estácompleto.

• Oestereótipo<<abstract>>indicaqueaclasseouométodosãoabstratos.

• AclasseDeptoPessoalnãoestácompleta.

Colaborador:

• Classeabstrata.

• Umconstrutorquerecebeonome.

• Ummétodoabstrato,quedeveráserimplementadoportodasassubclasses.

abstract public class Colaborador {

private String nome;

abstract public double obterCusto();

public String obterNome() {

return this.nome;

}

public Colaborador(String nome) {

this.nome = nome;

}

}

Consultor:

• SubclassedeColaborador.

• Classeconcreta:implementaobterCusto().

• Oconstrutorutilizaoconstrutordasuperclasse(super).

public class Consultor extends Colaborador {

private int horas;

private double valorHora;

public Consultor(String nome, int horas, double valorHora)

{

super(nome);

this.horas = horas;

this.valorHora = valorHora;

}

public double obterCusto() {

return this.valorHora * this.horas

}

}

Page 95: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

��

Introdução à Linguagem Java

Senac São Paulo

Funcionário:

• SubclassedeColaborador.

• Classeconcreta:implementaobterCusto().

• Oconstrutorutilizaoconstrutordasuperclasse(super).

• UmatributoestáticonãoestánodiagramaUML.

public class Funcionario extends Colaborador {

public double salario;

public static double encargo = 1.8;

public double obterCusto() {

return this.salario * encargo;

}

public Funcionario(String nome, double salario) {

super(nome);

this.salario = salario;

}

}

Page 96: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

��

Introdução à Linguagem Java

Senac São Paulo

Gerente:

• SubclassedeFuncionario.

• SobrescreveobterCusto()porquesuaimplementaçãoédiferentedadefuncionario.

Utilizaaimplementaçãodasuperclassenasobrescrita.

• Umconstrutorutilizaoconstrutordasuperclasse(super).

• Ooutroconstrutorésobrecarregadoeutilizaoprimeiroconstrutor(this).

• UmatributoestáticonãoestánodiagramaUML.

public class Gerente extends Funcionario {

public double bonus;

static public double encargoBonus = 2.1;

public double obterCusto() {

return super.obterCusto() +

this.bonus * encargoBonus;

}

public Gerente(String nome, double salario,

double bonus) {

super(nome, salario);

this.bonus = bonus;

}

public Gerente(String nome, double salario) {

this(nome, salario, 0D);

}

}

Page 97: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

�7

Introdução à Linguagem Java

Senac São Paulo

Departamento Pessoal:

• DependeapenasdeColaborador.

• UtilizaobterCusto()atravésdainterfacedeColaborador.

• OlaçopodeiterarsobrequalquerobjetodahierarquiadeColaborador,invocandoa

implementaçãodeobterCusto()correspondente.

• ArelaçãodedependênciadaUML(umaagregação)éimplementadacomumatributo

dotipoarray.

public class DeptoPessoal {

private Colaborador[] colaboradores;

public DeptoPessoal() {

super();

}

public double custoTotal() {

double total = 0D;

for(int i=0; i<colaboradores.length; i++){

total += colaboradores[i].obterCusto();

}

return total;

}

}

Exercício:1.Digitaretestaroexemplo.

Page 98: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

CAPÍTULO 10ENTRADA E SAÍDA

Page 99: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

��

Introdução à Linguagem Java

Senac São Paulo

n Conceitodestream

n Classesbásicas

• InputSream

• OutputStream

• são“simétricas”

Podemseraninhadas(flexibilidade)Streaméumconceitoquerepresentaqualquercaminhodecomunicaçãoentreumafontedeinformaçãoeseudestino.Este conceito pode ser empregado para qualquer fonte ou destino de informação, etorna-se útil porque padroniza essa comunicação independentemente destes. Assim, aclassestreamimplementaosmesmosmétodos,sejaostreamorigirário(oudestinatário),umdispositivodeI/O,amemória,outraaplicaçãoououtrothreaddamesmaaplicação.

Os streams que implementam I/O são os mais empregados e o escopo maior destaseção.

Osstreamsdeentradaesaídasão“simétricos”emmuitosaspectos.Assim,apenasumdoscasosseráestudadodetalhadamente.

ApossibilidadedeaninharclassesdestreamemJavatornaseuusomuitoflexíveleprático.

Entrada

n InputStream-métodos

• read()

• skip()

• available()

• mark()

• reset()

• close()

Page 100: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

100

Introdução à Linguagem Java

Senac São Paulo

AclassebásicaqueimplementastreamsdeentradaéchamadadeInputStream.Essaclasseincorporaumasériedemétodos.Osprincipaisestãodescritosabaixo:

• read( ):realizaaleituradebytesdostream;

• skip( ):ignoraumnúmerodebytesdostream,passadocomoseuparâmetro;

• available( ):retornaonúmerodebytesdisponíveisnostream;

• mark( ):marcaumaposiçãosobreostream;

• reset( ):retornaàposiçãomarcadapormark();

• close( ):fechaostream(nãoéobrigatório).

InputStream – Exemplo

Noexemplo,aprimeirachamadaaread()realizaaleituradeumúnicobyte.Nasegundachamada,avariávelbufferépreenchidacombytesdostream(desdequeexistam).Naterceirachamada,aleituraérealizadaapartirdaposição300dostream.

Ométodomark()exigecomoparâmetroonúmerodebytesdostreamondeseestendeasuavalidade.Assim,seumreset()forchamadoapós1024posiçõesjápercorridas,umerroserágerado.Essemecanismoforçaoprogamadoraalocarrecursosbemdefinidosparaousodomark().

InputStream s=getUmStream(…);

byte[ ] buffer= new byte[256];

byte b;

b=s.read();

s.read(buffer);

s.read(buffer, 300, 256);

s.skip(2048);

if (s.available()=2048) {

s.mark(1024);

s.reset();

}

s.close();

Page 101: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

101

Introdução à Linguagem Java

Senac São Paulo

Classes herdadas de InputStream

n ByteArrayInputStreameStringBufferInputStream

• criaumstreamapartirdeumbufferoudeumastring

n FileInputString

• tipomaiscomumdestream

• podeabrireacessararquivosdosistema

• podetratarcomostreamarquivosjáabertos

Exemplo:InputStreamfilein=newFileInputStream(“/usr/fulano/arquivo”);

AsdemaisclassesdestreamsdeentradasãoherdadasapartirdeInputStream.

ByteArrayStreameStringBufferStreamcriamumstreamapartirdebufferdebytesouapartirdeumastring,respectivamente.Portanto,agemdeformainversaaomostradonoexemploanterior.

FileInputStringpermiteaaberturaeamanipulaçãodestreamorigináriosdearquivosdosistema.JuntamentecomFileOutputStreamfornecemabasedeacessoaarquivosemJava.

n FilterInputStream

• fornecebaseparaclassesdestreamquepossamseraninhadas

n SubclassesdeFilterInputStream

• BufferedInputStream:streamcomcache

• DataInputStream:streamdetiposdistintos(enãosomentedebytes,comovimos

atéagora)

• PushBackInputStream: implementa o método unread(), que coloca de volta no

streamumbytejálido

FilterInputStreaméaclassebásicaqueimplementaabaseparaclassesdestreamquepos-samseraninhadas.Oaninhamentodeclassestornabemflexívelousodosstreams,comopodeservistonosexemplosaseguir.

AlgumasclassessãogeradasdiretamentedeFilterInputStringeimplementamalgumasfaci-lidadesbásicasnousodestreams,taiscomocacheeinterpretaçãodetipos.

Page 102: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

102

Introdução à Linguagem Java

Senac São Paulo

Umexemplodeaninhamentodestream:InputStreamsin=newBufferdInputStream(newFileInputStream(“arquivo”));

Essadeclaraçãocriaumstreamorigináriodeumarquivodosistemaeaomesmotempoutilizacache.

Podemserfeitosquantosaninhamentossedesejar,desdequeasclassesaninhadassejamsubclassesdeFilterInputStream.

n PipedInputStream

• streamqueestabelececomunicaçãoentredoisthreads

n SequenceInputStream

• executaaconcatenaçãodestreams

Exemplo:

InputStreamsin1=newFileInputStream(“metade1”);InputStreamsin2=newFileInputStream(“metade2”);

InputStringsin=newSequnceInputStream(sn1,sn2);

Existemoutrasclassesnãomencionadasaquipoissãodeusomuitorestrito.Noentanto,naliteraturaavançadapodemserencontradasalgumasdescrições.

Saída – OutputStreamsn SimétricoaInputStream

• implementawrite()aoinvésderead(),emtodasassuassubclassesherdeiras

• flush()

• close()

n PrintStream

• nãotemInputStreamcorrespondente

• System.out.print()

• System.out.println();

Page 103: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

103

Introdução à Linguagem Java

Senac São Paulo

NãoconvémrepetirtodootextoparaasclassesOutputStreamesuassubclasses.Étrivialcompreenderqueoseucomportamentoésimétricoemrelaçãoaofluxodostream,comrespeitoàsclassesdeInputStream.

Evidentemente,ométodoread()eseusequivalentesésubstituídopelométodowrite()(eseusequivalentes).Alémdesse,existeométodoflush()queforçaostreamaescrevernasaídaosdadosqueeventualmenteestejamemcacheoutemporariamenteemalgumlugar.

AclassePrintStreamnãoencontracorrespondentenosstreamsdeentrada.Elajáfoiusa-danestecurso,umavezqueavariáveldeclasseSystem.outcontémumainstânciadestaclasse.

ReadeRS e WRIteRS

n Asclassesdemanipulaçãodestreamstrabalhamcombytes.

n Parasetrabalharcomcaracteresutilizam-seosReadereWriters,quesãoequivalentes

respectivamenteaosstreamsdeentradaesaída.

• Superclasse:Reader

- BufferedReader,FilterReader,StringReader,InputStreamReader(ponteentre

streamsereaders)

• Superclasse:Writer

- BufferedWriter,FilterWriter,StringWriter,OutputStreamReader(ponteentre

streamsewriters)

Paraamanipulaçãodearquivos,ousodeReaderseWritersémaisprático.

FileInputStreamfis=newFileInputStream(“C:\\arquivo.txt”);InputStreamReaderisr=newInputStreamReader(fis);BufferedReaderin=newBufferedReader(isr);System.out.println(in.readLine());

Observarqueoarquivo foi abertousandoumstreamemanipuladousandoumreader.Paraissofoiusadaaponteentreeles.

Page 104: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

10�

Introdução à Linguagem Java

Senac São Paulo

A classe File

n Manipulaarquivosediretórios(enãoseuconteúdo)

• Testedosatributosdoarquivo:

- canRead,canWrite,isHidden,isFile,isDirectory

• Manipulaçãofísica

- getAbsolutePath,getName,createNewFile,renameTo,length

• Manipulaçãodediretórios

- listFiles,mkdirOmesmoexemploanterioragorautilizandoaclasseFile.

Filefile=newFile(“C:\\arquivo.txt”);FileInputStreamfis=newFileInputStream(file);InputStreamReaderisr=newInputStreamReader(fis);BufferedReaderin=newBufferedReader(isr);System.out.println(in.readLine());

Exercícios:

1.Façaumaaplicaçãoquemostrenatelaoconteúdodeumarquivoqualquer.

2. Faça uma aplicação que copie o conteúdo de um arquivo de caracteres para outro,substituindotodasasletraspelasualetraseguinte(aporb,bporcetc.).Façaoprocessoinversotambém.UtilizeReaderseWriters.

3.Façaumaaplicaçãoquefiqueesperandostringsnaentradapadrãoeasmostrenasaídapadrão.AaplicaçãoesperaaentradadeumalinhaeapósaENTER,mostraestalinha.

Page 105: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

CAPÍTULO 11THREADS

Page 106: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

10�

Introdução à Linguagem Java

Senac São Paulo

n Possibilidadedeexecutarsimultaneamenteváriasthreadsdeumúnicoprograma

n Aexecuçãodoprogramanãosegueumpadrãolinear,maisderivativoeparalelo

n Usarmultithreadéumaboaprática,noentantoamaioriadosservidoresWebede

Aplicaçãorealizamissoimplicitamente

n Situaçõesnecessárias:

• loopsinfinitos(animação,socketsagents)

• longostrechosdecódigoseminteraçãocomterceiros

• múltiplasinstânciasdeummesmotrechodeprograma

Multithreadéacapacidadedeumprogramaderodardiferentestrechos(oudiferentesins-tânciasdomesmotrecho)deformaindependente.Permiteporexemploqueoprogramarealizetarefasembackgroundenquantomantém“viva”ainterfacecomousuário.

OusodemultithreademJavaéfácileimplementadodiretamentepelalinguagem,ouseja,ocontroledosdiferentesthreadséfeitoautomaticamente.

Umexemplodeusodemultithreadsãoosprópriosbrowsersinternet.Enquantoumthreadrealizaabuscadosdadosnarede,oquemuitasvezesocorredeformalenta,outrosthre-adspermitemqueapáginasendocarregadajásejaexpostanatela,comrolagemelinksativos.

Numambientedejanelasficaevidentequeaprogramaçãoemthreadséfundamental.

Page 107: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

107

Introdução à Linguagem Java

Senac São Paulo

Diagrama

n Fluxodeumprogramamultithread

Odiagramaacimadáumaidéiadofluxodeexecuçãodeumprogramamultithread.Todasas linhasmostradassão implementadascomthreads, inclusivea linha“principal”.Estaéumaboapolíticadeprogramação.

Verifica-sequealgunsthreadspodemtercurtaduração(inicialização)eoutrospodemficarrodando indefinidamenteem loop infinito, tais comoprocessospermanentes emback-ground,terminandoapenasquandoaaplicaçãofinaliza.

Umbomprocedimentoéfinalizartodososthreadsiniciadosantesdeterminaraexecuçãodoprograma.Istonãoéobrigatório,masnãoseguirestaregrapodecomprometerrecur-sosdosistemadeformaindesejável.

Implementação

n ClassedeveimplementarinterfaceRunnable

n ClassedevepossuirumavariávelquecontenhaumtipoThread

n Métodostart()deveserinvocadoparadispararumnovothread

n Ométodorun()deveconterocódigoquerodadentrodothread

início fim

inicialização

processo em background(som, etc.)

piped stream

4 threads

Page 108: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

10�

Introdução à Linguagem Java

Senac São Paulo

Acriaçãodeumaclassepara trabalharcommultithreadsémuitosimples.Basicamentedeve-sedeclararaclassecomainterfaceRunnable,portantocomaassinatura:publicclassRelogioMultiThread implements Runnable { …. }Esta interface forçaa implementaçãoummétodorun()queagoradevepassaracontertodoocódigoaserexecutadodentrodothread.

Umaaplicaçãocommultithreadémostradanaspáginasseguintes.ÉoexemplodeRelógiorodandodentrodeumthread,enquantoaaplicaçãoprincipalcontinuaseufluxonormaldeexecução.

Exemplo

import java.util.*;

public class RelogioMultiThread implements Runnable {

Date data;

public void run() {

while (true) {

data = new Date( );

System.out.println(data);

try { Thread.sleep(1000); }

catch (InterruptedException e) { }

}

}

}

public class Programa {

public static void main(String[] args) {

RelogioMultiThread relogio = new RelogioMultiThread();

Thread t = new Thread(relogio);

t.start();

}

}

Page 109: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

10�

Introdução à Linguagem Java

Senac São Paulo

Sincronização de threads

n Mecanismoparaevitarqueummesmotrechodecódigosejaexecutadopordoisthre-

adssimultaneamente

• Manipulaçãoderecursosúnicos(arquivos,entradaesaída,variáveis)quenãopo-

demseracessadossimultaneamente.

public synchronized void metodo() {

... // acesso a recursos de forma única

}

// dentro de um método qualquer..

synchronized(this) {

... // acesso a recursos de forma única

}

Asincronizaçãodeacessoarecursosquesãocompartilhadosentrethreadsémuitoútilparaevitarerrosdeacessosimultâneos,emrecursosquenãoosuportam,ounãopodemteracessossimultâneos,comoporexemplo,arquivosabertos,variáveisdecontroleetc.

Asincronizaçãopodeserfeitapelométodousandoomodificadorsynchronized,ondetodoocorpodométodosomentepodeserexecutadoporumthreaddecadavez;oupeloblocosynchronized(objeto) {...}ondeoblocoéexecutadoporumúnicothreaddecadavez.

Quandomaisdeumthreadtentausarosmétodos/blocossincronizados,ointerpretadorenfileira-os,suspendendoaquelesqueestãoesperandosuavezdeexecução.

Exercícios:

1.Façaumaaplicaçãoquedisparetrêsthreads.Cadaumdelesdevemostrarnasaídapa-drão,emumloopinfinito,oinstantequeeleroda(comSystem.out.println(...+newjava.util.Date()).

2.ColoqueumcontadoremcadathreadeverifiquequantasvezescadaumdelesexecutaoSystem.out.println.

3.Crieumapilhadedadoscujosacessos(pushepop)sejamsincronizados.

Page 110: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

CAPÍTULO 12EXCEÇÕES E ERROS

Page 111: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

111

Introdução à Linguagem Java

Senac São Paulo

n Tratamento de situações eventuais mas que comprometem a correta execução do

programa

n Maneirasimplificadadeextensivamentecapturarsituaçõesdeexceçõeseerros

n Situaçõesprevisíveis,masgenéricas

n Javaforçaotratamentoemmuitoscasos,nemquesejapassaraexceção/erroparao

sistema.

OtratamentodeexceçõeseerrosemJavaéumaformadetornarocódigomaisprevisívelecontrolável.Poroutroladoétambémumaformadefacilitaraprogramaçãoderotinasnecessáriasaessetratamento.

Normalmenteassituaçõesdeexceçõeseerros,comoopróprionomediz,sãoeventuais.Noentantoseutratamentoénecessárioparaumbomcódigo.Umasistemáticadetratamentodestascondiçõespodeabrangergrandesporçõesdecódigo,deformacomplexaeextensa.

Javaprovêumamaneiradesistematizarotratamentodessassituações,afimdefacilitaraprogramação,aomesmotempoquepermiteaextensãodestasistemáticaparagrandepartedocódigodeformasimplificada.

MuitosdosmétodosdospacotesbásicosdeJavanecessitamqueousuáriodefinaumtra-tamentodeerroespecífico.Istopodesertãosimplesoutãocomplexoquantoqueiraoprogramador.

Porfim,éimportantesalientarqueotratamentodeexceções/errosnãoéumcódigomági-coquevaitornarseuprogramaerror-free.Assituaçõestratadaspodemserbemgenéricas,masdevemserprevisíveis.

Maneira comum de tratar exceções/erros

n repetitivaeextensa

n dificultaocódigo

n altarelaçãocustobenefício,masnecessário

int valret=metodo_que_preve_exc();

switch (valret) {

case …

}

Page 112: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

112

Introdução à Linguagem Java

Senac São Paulo

Amaneiraconvencionaldetratarexceçõeseerrostendeasercansativa,repetitivaeex-

tensa.Exigealteraçõesnafuncionalidadepropriamenteditadocódigo.Podetambémexi-

girousodevariáveisglobaisnapassagemdeindicadoresdeerros.

Estaabordagem,alémdepoucoprática,passaaserirritantequandonecessitaserutilizada

emgrandepartedocódigo.

Tem-seumaformadeprogramaçãodealtocusto,combenefíciospoucoutilizados(jáque

asocorrênciassãoraras),masnoentantonecessária.

Tratamento em Java

n Exceçõeseerrossãomodeladosporobjetos(classebásicachama-seThrowable)

n Atitudesdoprogramador:

• avisarusuáriodométodoqueumaexceçãopodesergerada;

• tratamento“inloco”daexceção;

• passagemdaexceçãoadiante.

Asexceçõese erros sãomodeladosporobjetosherdadosda classebásicaThrowable.

Estemodelamentoemobjetospermiteestabelecerumahierarquiadeerros,muitoútilna

definiçãodetratamentosespecíficose/ougenéricos.

Diantedeummétodoquepodegeraralgumacondiçãodeexceçãoouerro,oprograma-

dorpodetomartrêsatitudes:

• nãocapturar,declararapassagemdaexceção/erroparaumaclasseespecíficaenão

implementaroseutratamento;

• capturaretrataracondição“inloco”;

• capturarepassaracondiçãoparaonívelsuperiordeseucódigo.

Cadasituaçãoemparticularpodeexigirumaatitudeespecíficadoprogramador.Noen-

tanto,aalternativadetrataracondiçãolocalmenteéamaisesperadanormalmente,por

motivosóbvios.

Page 113: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

113

Introdução à Linguagem Java

Senac São Paulo

Modificador throws

n Usodapalavra reservada throws indicaquemétodopodegerarumacondiçãode

exceção/erro

n Normalmentedeixaotratamentoacargodequemutilizarométodo

n Nãoémuitopráticoparaprojetosemequipes

Apalavrareservadathrowaplicadoaummétodoindicaqueaquelemétodopodegerarumaexceção/errodotipodefinidopelacláusula throws.Estadeclaraçãoapenasdiz,aousuáriodaquelemétodo,quetipodeexceções/errospode-seesperardesuaexecução.Forneceumainformaçãomuitoútil,masnãoprovêumaformadetrataressacondição.

Esteéoesquemabásicodeindicaçãodecondiçãodeexceções/errosemJavaequemuitosmétodosdasbibliotecasbásicasdeinterfacesimplementam.Issoacabaforçandoousuáriodestasinterfacesacapturaretrataroserrospassados.

Tratamento “in loco”

n Maneiramais“educada”–oautordométodoespecificaumtratamentoparaoerro

queeleespera

n Usode try{…} catch (Erro e) {…}

public void metodoQuePreveExc() throws umaExcecao {

...

// chamada a métodos que podem gerar uma exceção

// do tipo umaExcecao

}

public void metodoQuePreveExc() {

try {

// algum método que pode gerar uma exceção

// do tipo umaExcecao

} catch (umaExcecao e) {

// tratamento da exceção

}

}

Page 114: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

11�

Introdução à Linguagem Java

Senac São Paulo

Otratamentolocaldeexceções/errosexigeumpoucomaisdecódigo,masrepresentaaformamaisclaraecompletadeprogramaressetipodetratamento.

Nestecaso,ousuáriousaacláusulatryaplicadaaumblocoparaespecificarqueesperacap-turarumacondiçãodeexceção/erronaquelebloco.Aofimdoblocotry,acláusulacatchcapturaaexceção/erroespecífica(indicadaentreparênteses)edeterminaumtratamento.Emoutraspalavras:oprogramatentarodarocódigodentrodoprimeirobloco;casoalgumacondiçãodeexceção/errosurja,tratadoresespecíficossãochamadosnosblocosseguintes.

Estaformadiretapermitequecondiçõesdeexceções/errosgeremapenasumdesviodocódigoparaumtratadorespecífico.Estedesvioécompletamentedefinidoedelimitadopelocláusulacatch,eportantonãodesestruturaocódigo,comoalgunspoderiamsupor.

Definirumtratamentopassaaserapartecomplexadocódigoeemgeralexigeexperiênciadoprogramador.Basicamentedevemosnospreocuparcomasexceçõesmaiscomunsefornecerumtratamentocurtoerápido.Comoopróprionomediz,estassãocondiçõesespeciaiseobomsensodizoquantodeesforçodevemoscolocarnotratamentodecon-diçõesquepodemcomprometeroresultadodonossocódigo.

Passando o tratamento adiante

CapturaraexceçãomaspassaroseutratamentoadianteUtilizarcomexceçõesbásicasquandosesabequeonívelexternotemcondiçõesdetratá-la

Umaoutraalternativaparatratamentodeexceção/erroécapturá-loesimplesmentepas-sá-loadiante.Esteerroéentãopassadoparaonívelimediatamenteexternoàclasseemquestão.Seaclassemaisexternanãotrataresteerro,entãoesteépassadonovamenteparaapróximaclasseeassimsucessivamenteatéchegaraosistema.

É importanteobservarqueasexceções lançadascomocomandothrow,precisamserdeclaradasnométodocomapalavrareservadathrows.Adoçãodestaatitudeémaisaconselhávelparaerrosbásicosdosistema,ondesabemosterosistemacondiçõesdetratá-lo.

public void metodoQuePreveExc() throws MinhaExcecao{

try {

// algum método que pode gerar uma excecao

// do tipo MinhaExcecao

} catch (MinhaExcecao e) {

throw e; // …para o nível externo tratar….

}

...

}

Page 115: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

11�

Introdução à Linguagem Java

Senac São Paulo

Tratamento múltiplo

Umblocotrypodecapturartantoserrosquantosequeira.Aúnicaressalvaaserfeitaéquanto aoordenamentodos tratadoresnas cláusulascatch. Énecessárioqueoserrosmaisespecíficossejamdeclaradosprimeiro.Assim,comonoexemploacima,apenasumacondiçãomuitoparticularepoucoprováveliriachamarumtratamentodebaixoníveldeumobjetodaclassebásicaThrowable.

A cláusula finally

Alémdemúltiploscatches,umacláusulafinallypodeseracrescentadaaotratamentodeexceções.Oblocofinallysempreéexecutado,independentedacapturadaexceção.

public void metodo() {

try {

// algum código que pode gerar vários tipos de exceções

} catch (NullPointerException n) {

// … tratamento de ponteiro nulo

} catch (RunTimeException r) {

// … tratamento de exceções run-time (exceto anterior)

} catch (IOException i) {

// … tratamento de exceções de I/O

} catch (MinhaExcecao u) {

// … tratamento de minha exceção

} catch (Exception e) {

// … tratamento exceções diferentes dos casos acima

} catch (Throwable t) {

// … tratamento de não-excções, p. ex. erros

}

...

}

try {

// algum código que pode gerar exceções

} catch (Exception e) {

// … tratamento

} fi nally {

// ... sempre é executado

}

Page 116: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

11�

Introdução à Linguagem Java

Senac São Paulo

Definindo exceções

n Erroseexceçõespodemserdefinidaspelodesenvolvedor

n QualquersubclassedeThrowablepodeserdefinidacomoumerroouexceção

n Paraadefiniçãodeexceçõesnormalmenteseutilizacomosuperclasseaclasse

Exception.

Omecanismodecapturaelançamentodeexceçõespodeserutilizadoparatrabalharcomexceçõesdefinidaspelodesenvolvedor,dandoumagrandeflexibilidadedeprogramação.Émuitocomumseutilizaressemecanismoparadefinirdesviosnofluxodeprogramação,comexceçõesassociadasaregrasdeexecuçãodoprogramaenãoapenasafalhas.

Exercícios:

1.Façaumaclassequerepresenteumadata(dia,mêseano).Definaexceçõeselance-as,noconstrutor,paradatasinconsistentes.

2.Façaumprogramaqueleiaumadatadoteclado,edevolvaparaumusuárioumamensa-gemamigávelcasoadatasejainconsistente.

public class MinhaExcecao extends Exception {

...

}

...

public void metodo() throws MinhaExcecao {

...

throw new MinhaExcecao();

}

Page 117: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

CAPÍTULO 13TÓPICOS AVANÇADOS

Page 118: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

11�

Introdução à Linguagem Java

Senac São Paulo

n Coleções

n Networking

n Generics

Coleções

n Javaofereceumasériedeclassesqueestruturamobjetosdeumaformamaisprática

doquearrays

n Listas

n Listasligadas

n Hashtables

n Características

• Sincronizadasparaacessosemmúltiplosthreads

• Métodosdeordenação

• Estruturascomusodetiposespecíficos(generics)

Nopacotejava.utilexisteumasériedeclassesqueimplementamainterfaceCollection.Todasasclassesconcretasqueimplementamessainterfacesãoestruturasparaarmaze-narumconjuntodeobjetoscomasmaisvariadasfinalidades.Asprincipaisclassesdessepacotesão:

• ArrayListeVector:Arraysdetamanhoajustávelaoselementosarmazenados;

• Hashtable:Armazenapareschave-valorescommétodosquefacilitamabuscadosva-

lorespelassuaschaves;

• LinkedList:Listaduplamenteligada;

• Stack:pilha.

Observar,nadocumentaçãodaAPI,quaisdessascoleçõespermitemacessosincronizadoaseuselementos.

AclasseArrayspossuiumasériedemétodosdeordenaçãodearrays.

Page 119: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

11�

Introdução à Linguagem Java

Senac São Paulo

Amaioriadasclassesquemanipulamcoleçõessãoparametrizadasportipos.

import java.util.*;

public class Listas {

public static void main(String[] args) {

ArrayList<String> arr = new ArrayList<String>();

arr.add(“um”);

arr.add(“dois”);

for(String s: arr){

System.out.println(s);

}

}

}

n Iteratores

• Ascoleçõespodemser“percorridas”comiteratores,quepodemserobtidosdi-

retamentedelas

Iterator it = colecao.iterator();

hasNext()testaseexistemelementoainda

next() retornapróximoelemento

Exemplodousodeiteratores:import java.util.*;

public class Listas {

public static void main(String[] args) {

ArrayList<String> arr = new ArrayList<String>();

arr.add(“um”);

arr.add(“dois”);

Iterator it = arr.iterator();

while(it.hasNext()) {

System.out.println(it.next());

}

}

}

Page 120: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

120

Introdução à Linguagem Java

Senac São Paulo

Exercícios:

1.FaçaumaclassequefuncionacomoumafábricadeDatas.Acadadataqueoprogramaprecisarelepedeparaummétodoestáticodessaclasse.EssemétodoverificaseexisteumaDatapreviamentecriada(earmazenadanumHashtable),retornando-a.Seadatanãoexistir,entãoelaécriadaearmazenadanoHashtable.Dessaforma,umaúnicainstânciadecadadataexisteemtodooprograma.

2.Façaummétodonessaclassequecoloquenumarray,emordemcronológica,todasasdatasarmazenadasporela.

3.ListetodasaschavesdoHashtableusandoumiterador.

Networking

n URLConnection

EfetuaumaconexãocomumservidorWeb.Permiteoenviodedadoserecebimento

dearquivosdeumservidorWeb(páginasHTML,imagensetc.)

AclasseURLConnectionpermiteumamaneirafácilesimplesdeabrirumaconexãocomqualquerservidornainternet.

import java.net.*;

import java.io.*;

public class Conexao {

public static void main(String[] args) throws Exception{

URL url = new URL(“http”, “127.0.0.1”, 8080, “/index.

htm”);

BufferedReader reader = new BufferedReader(new

InputStreamReader(url.openStream()));

String linha = null;

while((linha = reader.readLine()) !=null)

System.out.println(linha);

}

}

Exercício:1.EscreverumprogramaquelêumapáginadainternetcujaURLfoidigitadapelousuárionalinhadecomando.

Page 121: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

121

Introdução à Linguagem Java

Senac São Paulo

n ServerSocketeSocket

ServidoreclienteTCP/IP,paraenviodepacotesTCP/IPsobrearede.

Servidor fica “escutando” (listening, em inglês) uma porta TCP/IP, esperando porconexões.

import java.net.*;

import java.io.*;

public class Servidor {

public static void main(String[] args) throws Exception{

ServerSocket servidor = new ServerSocket(10000);

while(true) {

Socket socket = servidor.accept();

OutputStream saida = socket.getOutputStream();

saida.write(“Conectou!”.getBytes());

saida.close(); socket.close();

}

}

}

Clienteseconectanaportadoservidor.

import java.net.*;

import java.io.*;

public class Cliente {

public static void main(String[] args) throws Exception{

Socket socket = new Socket(“127.0.0.1”, 10000);

InputStream entrada = socket.getInputStream();

byte[] bytes = new byte[100];

entrada.read(bytes);

for(int i=0; i<100; i++) {

if(bytes[i]==0) break;

System.out.print((char)bytes[i]);

}

}

}

Exercício:1.Escreverumclientesocketqueenviadadosparaumservidorsocket.

Page 122: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

122

Introdução à Linguagem Java

Senac São Paulo

Generics

n Declaraçãodeclassesemétodoscomtiposparametrizados

n Ostipossãoresolvidosemtempodecompilação

n Eliminaçãodecasting

Exemploqueutilizaumapilhadeumaclassedefinidapelodesenvolvedor.Notarqueapilha

manipulaapenasotipoparametrizado(Dupla).

import java.util.*;

public class Generic {

public static void main(String[] args) {

Stack<Dupla> pilha = new Stack<Dupla>();

pilha.add(new Dupla(1,34));

pilha.add(new Dupla(2,67));

for(Dupla d : pilha) {

System.out.println(d.toString());

}

}

}

class Dupla {

Dupla(int a, int b) {

this.a = a;

this.b = b;

}

int a, b;

public String toString() {

return “(“ + this.a + “,” + this.b + “)”;

}

}

Page 123: IntROdUçãO À lIngUageM java - pedrofcarvalho.com.brpedrofcarvalho.com.br/.../uploads/2016/08/Apostila-Java-Final.pdf · criando um projeto Perpectivas ... tratamento em Java Modificador

123

Introdução à Linguagem Java

Senac São Paulo

Agora a classeDupla foi parametrizadapara servir comodupladedois tiposparame-trizadosquaisquer.Notarquena instanciaçãodosobjetosos tipossãopassadoscomoparâmetros.

public class Generic {

public static void main(String[] args) {

Stack<Dupla> pilha = new Stack<Dupla>();

pilha.add(new Dupla<Integer, String>(1,”trinta e quatro”));

pilha.add(new Dupla<Integer, String>(2,”sesseta e sete”));

pilha.add(new Dupla<String, String>(“tres”, “quarenta”));

for(Dupla d : pilha) {

System.out.println(d.toString());

}

}

}

class Dupla<E, T> {

E e;

T t;

Dupla(E e, T t) {

this.e = e;

this.t = t;

}

public String toString() {

return “(“ + e.toString() + “,” + t.toString() + “)”;

}

}

Porfim,usandoowildcarddetipos<?>.

public class Generic {

public static void main(String[] args) {

Stack<Dupla> pilha = new Stack<Dupla>();

pilha.add(new Dupla<Integer, Integer>(1,34));

pilha.add(new Dupla<Integer, String>(2,”sesseta e sete”));

pilha.add(new Dupla<String, String>(“tres”, “quarenta”));

for(Dupla d : pilha) {

println(d);

}

}

public static void println(Dupla<?,?> dupla) {

System.out.println(dupla.toString());}

}