CasadoCódigo Sumário Sumário 1 Agradecimentos 1 2 Certificação? 3 3 ObásicodeJava 7 3.1 Definaoescopodevariáveis . . . . . . . . . . . . . . . . . . . 7 3.2 DefinaaestruturadeumaclasseJava . . . . . . . . . . . . . . 13 3.3 CrieaplicaçõesJavaexecutáveiscomummétodomain . . . 22 3.4 ImporteoutrospacotesJavaedeixe-osacessíveisaoseucódigo 32 4 TrablhandocomtiposdedadosemJava 47 4.1 Declarareinicializarvariáveis . . . . . . . . . . . . . . . . . . 47 4.2 Diferencia entre variáveis de referências a objetos e tipos primitivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 4.3 Leiaouescrevaparacamposdeobjetos . . . . . . . . . . . . . 66 4.4 Expliqueociclodevidadeumobjeto(criação,“dereferência” egarbagecollection) . . . . . . . . . . . . . . . . . . . . . . . . 68 4.5 Chamemétodosemobjetos . . . . . . . . . . . . . . . . . . . 73 4.6 ManipuledadosusandoaclasseStringBuildereseusmétodos 78 4.7 CriandoemanipulandoStrings . . . . . . . . . . . . . . . . . 81 5 Usandooperadoreseconstruçõesdedecisão 95 5.1 UseoperadoresJava . . . . . . . . . . . . . . . . . . . . . . . . 95 5.2 Useparentêsesparasobrescreveraprecedênciadeoperadores 119 i Sumário CasadoCódigo 5.3 TesteaigualdadeentreStringseoutrosobjetosusando==e equals() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 5.4 Utilizeoifeif/else . . . . . . . . . . . . . . . . . . . . . . . . . 130 5.5 Utilizeoswitch . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 6 Criandoeusandoarrays 147 6.1 Declare,instancie,inicializeeuseumarrayuni-dimensional 147 6.2 Declare,instancie,inicializeeuseumarraymulti-dimensional 158 6.3 DeclareeuseumaArrayList . . . . . . . . . . . . . . . . . . . 162 7 Usandolaços 173 7.1 Crieeuselaçosdotipowhile . . . . . . . . . . . . . . . . . . 173 7.2 Crieeuselaçosdotipofor,incluindooenhancedfor . . . . 177 7.3 Crieeusolaçosdotipodo/while . . . . . . . . . . . . . . . . 184 7.4 Compareostiposdelaços . . . . . . . . . . . . . . . . . . . . 187 7.5 Usebreakecontinue . . . . . . . . . . . . . . . . . . . . . . . 190 8 Trabalhandocommétodoseencapsulamento 199 8.1 Criemétodoscomargumentosevaloresderetorno . . . . . 199 8.2 Apliqueapalavrachavestaticamétodosecampos . . . . . . 208 8.3 Criemétodossobrecarregados . . . . . . . . . . . . . . . . . . 214 8.4 Diferenciaentreoconstrutorpadrãoeconstrutoresdefinidos pelousuário . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 8.5 Crieesobrecarregueconstrutores . . . . . . . . . . . . . . . . 229 8.6 Apliquemodificadoresdeacesso . . . . . . . . . . . . . . . . 234 8.7 Apliqueprincípiosdeencapsulamentoaumaclasse . . . . . 249 8.8 Determineoefeitoqueocorrecomreferênciasaobjetosea tiposprimitivosquandosãopassadosaoutrosmétodoseseus valoresmudam . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 9 Trabalhandocomherança 259 9.1 Implementandoherança . . . . . . . . . . . . . . . . . . . . . 259 9.2 Desenvolvacódigoquemostraousodepolimorfismo . . . . 269 9.3 Diferencieentreotipodeumareferênciaeotipodeumobjeto285 ii CasadoCódigo Sumário 9.4 Determinequandoénecessáriofazercasting . . . . . . . . . 297 9.5 Usesuperethisparaacessarobjetoseconstrutores . . . . . . 308 9.6 Useclassesabstrataseinterfaces . . . . . . . . . . . . . . . . . 321 10 Lidandocomexceções 331 10.1 Diferencieentreexceçõesdotipochecked,runtimeeerros . 331 10.2 DescrevaoquesãoexceçõeseparaquesãoutilizadasemJava 333 10.3 Crieumblocotry-catchedeterminecomoexceçõesalteram ofluxonormaldeumprograma . . . . . . . . . . . . . . . . . 335 10.4 Invoqueummétodoquejogaumaexceção . . . . . . . . . . 342 10.5 Reconhecaclassesdeexceçõescomunsesuascategorias . . . 357 11 Boaprova 365 12 RespostasdosExercícios 367 iii Capítulo1 Agradecimentos “Àstrêsfamíliasquemeacolhemnodiaadia,AzevedoSilveira,BaeSonge Caelum”-GuilhermeSilveira Escrever um livro é difícil, descrever pequenos detalhes de uma lin- guageméumdesafiomaiordoquepoderíamosimaginar. Fica um agradecimento ao Gabriel Ferreira, Márcio Marcelli, Leonardo CordeiroeaoAlexandreGammapelasvaliosasrevisõesdostextoseexercí- cios. AgradecimentoespecialaoLeonardoWolterporsuarevisãocompleta, alémdediversassugestõesemelhorias. Um abraço a todos da Caelum, do Alura e da Casa do Código, que nos incentivamnabuscacontínuadeconhecimentocomafinalidadedemelho- riadaqualidadedeensinoeaprendizadodedesenvolvimentodesoftwareno Brasil. CAPÍTUL2 O Certificação? Asc ertifiJcaavçasõã eosp, e lboe m oup loe mal ,m uit or econhecnidoa s mercadEom. sua última av perrisnãcoic,pe atrflii cafçãoqoi uebraedam duapsr ovaEss.t lei vvraogi u i-láo porq uetõsese assuntaobso rdadpoasra a primeiprrao vaa, J avaS E 7 ProgrammIe,rd e maneirpar ofundea desafiadora. O lvirov aip ercorcraedrat emac,o md etaleh eesx ercícpiaorsva,o cê chegàa prr ovcao nfiaDnetceo.r raerg rsaesr uimaa m aneidreae studmaars, nãoe stimulaPonrtq eu.en ãoc ompilPao?rq uen ãoe xecuctoam oe sperado? Maisd oq ueu m guiap arqau ev octêe nhsau cesnsaop rovnao,s sian tenéç ão mostrcaorm oa l inguagfeumn cniaop ort rás. Ao termineasrsl ao ngcaa minhavdoac,sê e rcáa padze e ntendmeerl hor al inguagaesmims, c omop odedri zecro me xatiodsãm oo tivdoesd etermi nadacso ntsrçuõeesi dimoismos. CasadoCódigo Comoestudar Lembre-sedeusaralinhadecomandodoJava,nãouseoEclipseouqual- queroutraIDE:oserrosqueocompiladordalinhadecomandomostrapo- demserdiferentesdodaIDE,evocênãoquerqueissoatrapalheseudesem- penho. Lembre-se de ficar atento, na prova não ficará claro qual o assunto que estásendotestadoevocêdeveseconcentraremtodoocódigo,nãosóemum assuntoououtro. Esse processo é longo e a recomendação é que agende a prova agora mesmo no site da Oracle, para que não haja pausa desde o primeiro dia de leitura,atéoúltimodiadeleitura,aexecuçãodediversossimuladoseaprova emsi. Nãodeixedetestartodoocódigoemquenãosentirconfiança. Osexer- cícios são gerados de propósito para causar insegurança no candidato, para levá-lo para um lado, sendo que o problema pode estar em outro. E faça muitosexercíciosesimulados. Nãohesite,tiresuasdúvidasnositedoGUJenosavisedesuacertificação viatwitteroufacebook: http://www.guj.com.br http://www.twitter.com/casadocodigo http://www.facebook.com/casadocodigo Bomestudo,boaprova,boasortee,acimadetudo,bem-vindoaogrupo daquelesquenãosóusamumalinguagem,masadominam. Seçõesdaprova Osassuntoscobradoseabordadosaquisão: 1) JavaBasics • Definethescopeofvariables • DefinethestructureofaJavaclass • CreateexecutableJavaapplicationswithamainmethod • ImportotherJavapackagestomakethemaccessibleinyourcode 4 CasadoCódigo Capítulo2. Certificação? 2) WorkingWithJavaDataTypes • Declareandinitializevariables • Differentiatebetweenobjectreferencevariablesandprimitivevari- ables • Readorwritetoobjectfields • Explain an Object’s Lifecycle (creation, “dereference” and garbage collection) • Callmethodsonobjects • ManipulatedatausingtheStringBuilderclassanditsmethods • CreatingandmanipulatingStrings 3) UsingOperatorsandDecisionConstructs • UseJavaoperators • Useparenthesistooverrideoperatorprecedence • TestequalitybetweenStringsandotherobjectsusing==andequals () • Createifandif/elseconstructs • Useaswitchstatement 4) CreatingandUsingArrays • Declare,instantiate,initializeanduseaone-dimensionalarray • Declare,instantiate,initializeandusemulti-dimensionalarray • DeclareanduseanArrayList 5) UsingLoopConstructs • Createandusewhileloops • Createanduseforloopsincludingtheenhancedforloop • Createandusedo/whileloops 5