Table Of Content© CasadoCódigo
Todos os direitos reservados e protegidos pela Lei nº9.610, de
10/02/1998.
Nenhumapartedestelivropoderáserreproduzida,nemtransmitida,sem
autorização prévia por escrito da editora, sejam quais forem os meios:
fotográficos,eletrônicos,mecânicos,gravaçãoouquaisqueroutros.
CasadoCódigo
Livrosparaoprogramador
RuaVergueiro,3185-8ºandar
04101-300–VilaMariana–SãoPaulo–SP–Brasil
CasadoCódigo
“ÀsfamíliasBertoldo,FerreiraeTurini.”
–RodrigoTurini
i
CasadoCódigo
Agradecimentos
Emprimeirolugar,gostariamuitodeagradeceravocê,oleitor.Foiparavocê
que cuidadosamente escrevi esse livro, pensando sempre em como o con-
teúdo poderia ser aplicado em seu dia a dia. Espero atender e, quem sabe,
superarassuasexpectativas.
Paraevitarconsequênciasimprevisíveis,nãopossodeixardeagradecerà
minha esposa Jordana. Sem seu valioso incentivo este livro não passaria de
umplano.EtambémparapequenaKatherine,quenessemomentoprovavel-
menteestáchutandoasuabarriga.
Não posso deixar de mencionar a família Silveira, que, pra mim, são os
maioresincentivadoresdomundo.AoPaulo,pelapresença,incentivoemen-
toring. AoGuilherme,pelasideias,pareamentosetodoconhecimentocom-
partilhado.EfinalmenteaoSr.Carlos,pelaculturaeinspiraçãodiária.
Porfim,masnemumpoucomenosimportante,atodaequipedaCaelum
e Alura. Em especial ao Victor Harada, pois sem suas ideias, críticas e dis-
cussões,boapartedestelivroseriadiferente.
iii
CasadoCódigo Sumário
Sumário
1 Introdução 1
1.1 Oprojetoeastecnologias . . . . . . . . . . . . . . . . . . . . . 1
1.2 InstalandoeconfigurandooEclipse . . . . . . . . . . . . . . . 2
1.3 Downloaddosarquivosproprojeto . . . . . . . . . . . . . . . 3
1.4 Acesseocódigodesselivro . . . . . . . . . . . . . . . . . . . . 4
1.5 Aproveitandoaomáximooconteúdo . . . . . . . . . . . . . . 5
1.6 Tirandosuasdúvidas . . . . . . . . . . . . . . . . . . . . . . . 5
2 JavaFX 7
2.1 NossaprimeiraAppemJavaFX . . . . . . . . . . . . . . . . . 7
2.2 Configurandoalivraria-base . . . . . . . . . . . . . . . . . . . 11
2.3 Preparandonossocenário . . . . . . . . . . . . . . . . . . . . 13
2.4 Umalistagemdeprodutos . . . . . . . . . . . . . . . . . . . . 18
3 JavaIO 29
3.1 Entradaesaídadedados . . . . . . . . . . . . . . . . . . . . . 29
3.2 Lendoumarquivodetexto . . . . . . . . . . . . . . . . . . . . 30
3.3 LendotextodotecladocomSystem.in . . . . . . . . . . . . . 34
3.4 TornandotudomaissimplescomScanner . . . . . . . . . . . 36
3.5 SaídadedadoseoOutputStream . . . . . . . . . . . . . . . . 38
3.6 EscritamaissimplescomPrintStream . . . . . . . . . . . . . 42
3.7 GerandoumCSVdeprodutos . . . . . . . . . . . . . . . . . . 43
3.8 Botãodeexportarprodutos . . . . . . . . . . . . . . . . . . . 48
3.9 AdicionandoaçõescomsetOnAction . . . . . . . . . . . . . . 49
3.10 JavaFxeJava8 . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
v
Sumário CasadoCódigo
4 BancodeDadoseJDBC 57
4.1 IniciandocomMySQL . . . . . . . . . . . . . . . . . . . . . . 57
4.2 Criandoatabeladeprodutos . . . . . . . . . . . . . . . . . . . 60
4.3 Opacotejava.sqleoJDBC . . . . . . . . . . . . . . . . . . . . 61
4.4 AbrindoconexãocomMySQLemJava . . . . . . . . . . . . . 63
4.5 Listandotodososprodutosdobanco . . . . . . . . . . . . . . 66
4.6 Importandoprodutosdeumdump . . . . . . . . . . . . . . . 69
4.7 Parasabermais:Adicionandoprogramaticamente . . . . . . 71
4.8 Qualamelhorformadefecharaconexão? . . . . . . . . . . . 75
4.9 OpadrãodeprojetoDAO . . . . . . . . . . . . . . . . . . . . 78
5 ThreadseParalelismo 85
5.1 Processamentodemorado,eagora? . . . . . . . . . . . . . . . 86
5.2 TrabalhandocomThreadsemJava . . . . . . . . . . . . . . . 87
5.3 OcontratoRunnable . . . . . . . . . . . . . . . . . . . . . . . 89
5.4 Threadscomclassesanônimaselambdas . . . . . . . . . . . 91
5.5 Exportandoemumathreadseparada . . . . . . . . . . . . . . 94
5.6 UmpoucomaissobreasThreads . . . . . . . . . . . . . . . . 99
5.7 GarbageCollector . . . . . . . . . . . . . . . . . . . . . . . . . 101
5.8 JavaFXassíncrono . . . . . . . . . . . . . . . . . . . . . . . . . 103
5.9 TrabalhandocomaclasseTask . . . . . . . . . . . . . . . . . . 104
5.10 Códigofinalcomesemlambdas. . . . . . . . . . . . . . . . . 112
6 CSSnoJavaFX 117
6.1 SeuprimeiroCSSnoJavaFX . . . . . . . . . . . . . . . . . . . 118
6.2 Extraindoestilospraumarquivo.css . . . . . . . . . . . . . . 120
7 JAR,bibliotecasebuild 135
7.1 JAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
7.2 GerandoJARexecutávelpelaIDE . . . . . . . . . . . . . . . . 136
7.3 Executandoalivraria-fx.jar . . . . . . . . . . . . . . . . . . . . 138
7.4 BibliotecasemJava . . . . . . . . . . . . . . . . . . . . . . . . 140
7.5 DocumentandoseuprojetocomJavadoc . . . . . . . . . . . . 141
vi
CasadoCódigo Sumário
7.6 AutomatizandobuildcomMaven . . . . . . . . . . . . . . . . 146
7.7 TransformandonossaappemumprojetoMaven . . . . . . . 147
7.8 AdicionandoasdependênciascomMaven . . . . . . . . . . . 151
7.9 ExecutandoalgumastasksdoMaven . . . . . . . . . . . . . . 157
7.10 AdicionandoplugindoJavaFX . . . . . . . . . . . . . . . . . 159
7.11 Mavennalinhadecomando . . . . . . . . . . . . . . . . . . . 163
7.12 Comoficounossopom.xml . . . . . . . . . . . . . . . . . . . 165
8 Refatorações 169
8.1 Refatoração . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
8.2 OstãopopularesDesignPatterns . . . . . . . . . . . . . . . . 175
9 PróximospassoscomJava 179
9.1 Entreemcontatoconosco . . . . . . . . . . . . . . . . . . . . 180
vii
Description:Uma vez que você aprende Orientação a Objetos e o básico do Java, é necessário se tornar fluente em suas APIs, que não são poucas. Um programador Java eficaz conhece o que há disponível e sabe quando pode usar cada uma das possibilidades que a linguagem lhe oferece. É isso que queremos pa