Java Use a Cabeça

496

Click here to load reader

Transcript of Java Use a Cabeça

Use a Cabea!~f'\

Aprenda como os segmentos (threads) podem mudar sua vida

(\

banho no

..;.ct;.f )-i : ;j~

'"

I

Faa os conceitos de Java se incorporarem ..,..---- sua mente

/"'.

Evite erros embaraosos

--- - de-OO------ .--

/"'.

Bote-a cabea - a:ca--p ~ funcionar com os 42 '" quebra-cabeas em Java~

.,I

o que esto dizendo sobre Use a Cabea!A Amazon escolheu Use a Cabea! Java como Top Ten Editor's Choice for . _. Compll!er Books of 23(primeira edio) A Software Development Magazine indicou Use a CabeaFlava para finalista do 14'h Annual Jolt ColaIProduct Excellence Awards

"O livro ' Use a Cabea! Java', de Kathy e Bert, transfonnar a pgina impressa na coisa mais prxima de uma QUI que voc jamais viu. De uma maneira divertida e moderna, os autores tornam o aprendizado de Java uma experincia envolvente do tipo 'o que eles vo inventar agora?'."

- Warren Keuffel, Software Development Magazine

r'\ '

" .. . a nica maneira de saber valor de um tutorial comprovar se ele eficiente em ensinar. Use a Cabea! Java sobressai-se ao ensinar. Certo, achei infantil, porm percebi que estava entendendo completamente os tpicos enquanto percorria o livro."" O estilo de Use a Cabea! Java tornou o aprendizado, digamos, mais fcil."

o

- slashdot (resenha de um alternativo srio)

"Alm do estilo atraente que o conduzir de leigo ao status de defensor exaltado da Java, Use a Cabea! Java aborda vrias questes prticas que outros livros deixam de lado, como o temvel 'exerccio para o leitor... ' . inteligente, ousado, moderno e prtico - no existem muitos livros que conseguem alegar isso e sustentar a alegao enquanto ensinam a serializao deobjetos e . protocolos de inicializao de rede."

.- Dr. Dan Russell, Diretor do Use r Sciences and Experience Research mM Almaden Research Center (e que ensina Inteligncia Artificial na Universidade de Stanford)

" rpido, irreverente, divertido e interessante. Tome cuidado - voc pode realmente aprender algo!".. '.'~

.....-."

- Ken Arnold, ex-engenheiro snior da Sun Microsyst~ms Co-autor de "A Linguagem de Programao Java" (com James Gosling, criador do Java)

I

"I

"A tecnologia Java est em todos os lugares - se voc for desenvolvedor de softwares e no tiver aprendido Java, definitivamente 'chegou a hora de mergulhar - de cabea."

- Scott McNealy, Presidente, conselheiro e CEO da Sun Microsystems

"Use a Cabea! lava como o Monty Python encontrando a gangue dos quatro ... O texto to bem dividido por quebra-cabeas e histrias. testes e exemplos, que voc abordar terreno como em nenhum outro livro de computao." - Douglas Rowe, Grupo de Usurios Java de Columbia

11111111m~ 11111 111m 11011l1li1111 gllLlV 33661 Reg.100289 Use a cabea ! Java '005.133 JAVA S571u 2005 2.ed."f,,~

~~

--x.2S--

."';.

~ .h

.I

........__________________________________ ________~

t\

....Elogios a Use a Cabea! Java

ssc- ----1 S!8L10TECA -I

"Leia Use a Cabea! Java e voc passar a experimentar novamente a diverso ao aprender... Para pessoas que gostam de aprender novas linguagens, e no tm experincia em cincia da computao e programao, este livro uma jia.. . um livro que torna divertido o aprendizado de uma linguagem de computador complexa. Espero que haja mais autores querendo deixar o velho molde dos estilos de escrita 'tradicionais'. Apreuder linguagens de computao deve ser divertido e no difcil."- Judith Taylor, Southeast Ohio Macromedia User Group

"Ir-.. I' --'"

"Se voc quer aprender Java, no procure mais: bem-vindo ao primeiro livro tcnico baseado em GUls! Este formato inovador e bem-elaborado fornece benefcios que outros textos sobre Java simplesmente no conseguem .. . Prepare-se para uma jornada realmente notvel pelo universo do Java."- Neil R. Bauman, Capito & CEO, Geek Cruises (www.GeekCruises.com)

=1~ I1" I

"Se voc for relativamente iniciante em programao e estiver interessado em Java, aqui est seu livro ... Abordando tudo, dos objetos criao de interfaces grficas de usurio (GUI, graphical user inteiface), da manipulao de excees (erros) s redes (soquetes) e segmentao mltipla, e at mesmo o empacotamento de sua pilha de classes em um arquivo de instalao, este livro bem completo .. . Se voc aprecia esse estilo, estou certo de que amar o livro e, como eu, desejar que a srie Use a Cabea! se estenda a muitos outros assuntos! "- LinuxQuestions.org

"Fiquei viciado nos contos, cdigos comentados, entrevistas engraadas e exerccios mentais."- Michael Yuan, autor, Enterprise J2ME

" 'Use a Cabea! Java' ... d um novo sentido frase de marketing 'H sempre um O'Reilly para isso'. Adquiri este livro porque vrias pessoas que respeito o descreveram com termos como 'revolucionrio' , dizendo que era uma abordagem totalmente diferente para um livro. O resultado engraado, irreverente, atual, interativo e brilhante ... Ler este livro como sentar na sala de espera de uma conferncia, aprendendo - e rindo - com colegas ... Se voc quiser ENTENDER Java, compre-o."- Andrew Pollack, www.thenorth.com

"Se h algum no mundo familiarizado com o conceito de 'Use a Cabea! ', provavelmente sou eu. Este livro to bom, que me casmia com ele na TV! "- Rick Rockwell, comediante noivo original do programa de televiso da Fox "Who wants to marry a millionaire"

"Esse negcio to estranhamente bom que me faz querer CHORAR! Estou perplexo."- Floyd Jones, autor snior de textos tcnicoslPoolboy, BEA

"A lguns dias atrs recebi minha cpia de Use a Cabea! Java de Kathy Sierra e Bert Bates. Li apenas parte do livro, mas o que me surpreendeu que, mesmo no tendo conseguido dormir naquel a primeira noite, me vi pensando: 'Certo s mais uma pgina, ent.o irei para a cama. '"- Joe Litton

a introduo

Elogios a outros livros da srie Use a Cabea! de co-autoria de Kathy e SertA Amazon escolheu Use a Cabea! Servlets como Tap Ten Editor's Choice for Computer Books of 2004 (prim~ira edio) A Software Development Magazine indicou Use a Cabea! Servlets e Use a Cabea! Design Patterns como finalistas do lS'hAnnual Product Excellence Awards

'" ."Sinto-me como se milhares de livros tivessem sido tirados de cima de minha cabea."

- Ward Cunningham, inventor do Wiki e fundador do Hillside Group

"Ri, chorei, fiquei comovido."

- Dan Steinberg, editor-chefe, java.net

"Minha primeira reao foi rolar no cho de tanto rir. Depois de me refazer, percebi que este livro no apenas altamente preciso, e sim que se trata da melhor obra de introduo j publicada sobre padres de projeto."

- Dr. Timothy A. Budd, professor associado de cincia da computao na Universidade do Estado do Oregon e autor de vrios livros, inclusive C++ for Java programmers.........

"O tom preciso para o codificador genial e casual guru que existe em todos ns. A obra de referncia certa para estratgias prticas de desenvolvimento - este livro me fez acompanhar o assunto sem a necessidade de agentar a ultrapassada e cansativa ladainha acadmica."

- Travis Kalanick, fundador do Scour and Red Swoosh e membro do MIT TRIOO

"FINALMENTE - um livro sobre Java escrito da maneira que eu escolheria se eu fosse eu mesmo . Falando srio - este livro definitivamente deixa para trs qualquer outro livro sobre s01tware que j li ... Um bom livro muito difcil de escrever; preciso muito tempo para deixar as coisas se desdobrarem em uma seqncia natural, "orientada ao leitor". muito trabalhoso. A maioria dos autores claramente no est altura do desafio. Parabns equipe do Use a Cabea! EJB por um trabalho de primeira classe!

- Wally Flint

"No poderia imaginar uma pessoa sorrindo ao estudar um livro de TI! Usando os materiais do Use a Cabea! ElB, acertei bastante (91 %) e consegui um recorde mundial como o mais jovem SCBSD, 14 anos."

- Afsah Shafquat (SCBCD mais jovem do mundo)

"O livro Use a Cabea! Servlets to bom quanto o Use a Cabea! ElB , que me fez rir E acertar 97% do exame!"

- Jef Cumps, consultor de J2EE, Cronos

- --

- - -----

--

-

,~

~

-------..

rUse a Cabea! Java

Do original Head First Java Copyrigh t 2005 da Prii tora.AJt9. Boe-b-I=t-da. . - . - --Authorized translation Irom English language editiol1, enfitled Head First Java, ISBN 0-596-00920-8, by Kathy Sierra and Berf Bates, published by O 'ReiUy Media, Inc., Copyright 2003, 2005 by O 'Rei!!)' Media, lnc. PORTUGUESE language edition published by Editora Alta Books, Copyright 2005 by Editora Alta Books. Todos os direitos reservados e protegidos pela Lei 5988 de 14/12/73. Nenhuma parte deste livro, sem autorizao prvia por escrito da editora, poder ser reproduzida ou transmitida sejam quais forem os meios empregados: eletrnico, mecnico, fotogrfico, gravao ou quaisquer outros. Todo o esforo foi feito para fornecer a mais completa e adequada informao, contudo a editora e o(s) autor(es) no assumem responsabilidade pelos resultados e usos da informao fornecida. Recomendamos aos leitores testar a informao, bem como tomar todos os cuidados necessrios (como o backup), antes da efetiva utilizao. Este livro no contm CD-ROM, disquete ou qualquer outra mdia.Erratas e atualizaes: Sempre nos esforamos para entregar a voc, leitor, um livro livre de erros tcnicos ou de contedo; porm, nem sempre isso conseguido, seja por motivo de alterao de software, interpretao ou mesmo quando alguns deslizes constam na verso original de alguns livros que traduzimos. Sendo assim, criamos em nosso site, www.altabooks.com.br. a seo Erratas, onde relataremos, com a devida correo, qualquer erro encontrado em nossos livros. Avisos e Renncia de Direitos: Este livro vendido como est, sem garantia de qualquer tipo, seja expressa ou implcita. Marcas Registradas: Todos os termos mencionados e reconhecidos como Marca Registrada e/ou comercial so de responsabilidade de seus proprietrios. A Editora informa no estar associada a nenhum produto e/ou fornecedor apresentado no livro. No decorrer da . obra, imagens, nomes de produtos e fabricantes podem ter sido utilizados, e desde j a Editora informa que o uso apenas ilustrativo e/ou educativo, no visando ao lucro, favorecimento ou desmerecimento do produto/fabricante.

---,,--..

,

I

r---. I

Produo Editorial Editora Alta Books Preparao e Coordenao: Fernanda Silveira Traduo: Aldir Jos Coelho Reviso: Gustav Schmid Reviso Tcnica: Kssia Nina - Licenciatura em Computao pela Universidade de Braslia (UNB) Diagramao: Eduardo Rodrigues RioI ,-.

Impresso no Brasil

o cdigo de propriedade intelectual de r de Julho de 1992 probe expressamente o uso coletivo sem autorizao dos detentores do direito autoral da obra, bem como a cpia ilegal do original. Esta prtica generalizada nos estabelecimentos de ensino, provoca uma brutal baixa nas vendas dos livros a ponto de impossibilitar os autores de criarem novas obras.

Av. Nil o Peanha. 155, ejs. 110 1 a 11 06 - Castelo Rio de Janeiro - RJ . CEP : 20020- 100 Tel: 2 1 2532-6556/ Fax: 2215-0225www.aII Llhooks.coOl.br

e-mail : [email protected]

a introduo

Use a Cabea! JavaJava que fosse mais interessante do que esperar na fila do DETRAN para renovar sua carteira de habilitao? Talvez seja apenas um sonho .. .

Traduo da segunda edio

Kathy Sierra Bert Bates

a introduo

. nossa mente, por estar sempre presente(apesar de .qualquer prova em contrrio)

~-~------------------------------------------------------------------

Criadores da srie Use aC~bE3a!

Bert

Kathy tem interesse no ensino de teoria desde quando era projetista de jogos (criou jogos para a Virgin, MGM e Amblin'). Ela desenvolveu grande parte do formato Use a Cabea! enquanto ensinava Criao em Nova Mdia no programa de extenso em Estudos de Entretenimento da UCLA. Recentemente foi instrutora mestre na Sun Microsystems, preparando os professores da Sun para ensinar as tecnologias Java mais novas, e foi a principal criadora de vrios exames de certificao da Sun para programadores e desenvolvedores Java. Junto com Bert Bates, tem usado ativamente os conceitos do Use a Cabea! lava para instruir centenas de professores, desenvolvedores e at noprogramadores. Tambm foi a fundadora de um dos maiores sites Web de comunidade Java do mundo, o javaranch.com, e do blog Creating Passionate Users.Alm deste livro, Kathy foi co-autora de Use a Cabea! Servlets, Use a Cabea.' ElE e Use a Cabea! Design Patterns. Em seu tempo livre ela aprecia seu novo cavalo islands, gosta de esquiar, correr e da velocidade da luz.

Bert desenvolvedor e projetista de softwares, mas a experincia de uma dcada em inteligncia artificial direcionou seu interesse para o ensino de teoria e para treinamentos baseados em tecnologia. Desde ento tem ensinado programao para clientes. Recentemente, foi membro da equipe de desenvolvimento de vrios exan1es de certificao em Java da Sun.Ele passou a primeira dcada de sua caITeira em softwares viajando pelo mundo para ajudar clientes de radiodifuso como a Radjo New Zealand, o Weather Channel e a Arts & Entertainment Network (A & E). Um de seus projetos favoritos foi construir a simulao completa de um sistema de ferrovias para a Union Pacific Railroad. Bert um adepto inveterado do player GO e h muito tempo trabalha em um programa Go . Ele um guitarrista razovel que agora passou para o banjo e gosta de se divertir esquiando, correndo e tentando adestrar (ou ser adestrado por) seu cavalo islands Andi. Bert foi co-autor dos mesmos livros que Kathy e est trabalhando muito na prxima remessa (consulte o blog para ver as atualizaes). Voc pode enconti-Io no servidor Go IGS (sob o login jackStraw).I

kathy@wickedlysmart:.com

.~.'~

[email protected]

.LEmbora Karh y e Ber! renre m respo nd er o m xim o possvel de men sagens el e correio ele trt)nico , () vo lum e ue corres pomJ nci a e sua agencia ele v iage ns lorn

o

()

3.000

c. 2.500

Q)

:c

o

2.000 1.500 '1.000

:.ctI 'O

ctI ()

cn Q) 500 cn cn

O

Java 1.02250 classesLenta.Nome e logotipo in teressante s. Divertida de u sar . uito s erros . Os M applets so o destaque.

~

Java 1.1500 classesUm pouco ma is rpida. Mais recursos , mais amigvel. Comeando a se tornar muito popular. Cdigo de GUI mais adequado .

Java 2 (verses 1.2 2.300 classesMUito mais rpida.

1.4)

Java 5.0 (verses 1.5 e posteriores)3.500 classesMais recursos, mais fcil de desenvolver.Alm d e ad ici ona r mais de n;lil clas s es comp l ement ares, a Java 5. O (conhecida como "Tiger'j ) acre s cento u alteraes sign if icativas prpria l ingu agem, tornando-a maiS j fCil (pe lo menos em teoria) p ar l os prog r a madores e f ornecendo novo s recu r sos que eram populare; em ou tr a s linguagens.

Po de (em al gumas situaes) ser exec ut ada e m velocidades condi zentes . Pro fi ssion al, poderosa. Vem e m trs verses: Micro Edition (J2ME), Standard Edit ion (J 2SE) e Enterprise Edition .(J2EE). Torna - se a linguagem preferida para novos ap li cativos empresari ai s (pr incipa lmente os baseados na Web) e mvei s .

~ .. ,(

( ( ( ( ( ( ( (' ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (' ( ( ( ( \ ( ;(

,.J (.(

aponte seu pis

Tente adivinhar o que cada linha de cdigo est faze ndo ... (As respostas esto na prxima pgina.) Veja como fcil escrever cdigo Java.int size=

'"'~

.'.

27;'=

String name Dog myDog x if= =

"Fido";

new Dog(name, si ze);

s i ze - 5; (x < 1 5) myDog.bark(S);

wh ile (x

>

3)

{

myDog.play();

~III~ I

,-... !

int[] nurnList = {2 , 4,6,S}; System. out.print("Hello"); System.out.print("Dog: String num " + name);

:'j

=

"S";

:;{,..--.., 1~!- '!

I

int z = In teger .pars e l nt(num) ;

---I

try { readTheFile("myFile . txt" );

catch (F ileNotFoundException ex) System.out.prin t("File no t

{

found .") ;

P: Sei que existem o Java 2 e o Java 5.0, mas existiram o Java 3 e 4? E por que Java 5.0 e no Java 2.0?As brincadeiras do marketing ... Quando a verso do Java passou de 1.1 para 1.2, as alteraes foram to significativas, que os anunciantes decidiram que precisavam de um "nome" totalmente novo, portanto .comearam a cham-Ia de Java 2 , ainda que a verso fosse realmente a 1.2. Porm, as verses 1.3 e 1.4 continuaram a ser consideradas como Java 2. Nunca houve o Java 3 ou 4. Comeando pelo Java verso 1.5, os anunciantes decidiram novamente que as alteraes eram to significativas, que um novo nome era necessrio (e a maioria dos desenvolvedores concordou) , logo, eles avaliaram as opes. O prximo nmero na seqncia do nome seria "3", mas chamar o Java 1.5 de Java 3 parecia mais confuso, portanto, decidiram nome-lo Java 5.0 para usar o "5" da verso "1. 5". Logo, o Java original compreendeu as verses que iam da 1.02 (o primeiro lanamento oficial) s conhecidas simplesmente como "Java". As verses 1.2, 1.3 e 1.4 consistiram no "Java 2". E comeando na verso 1.5, ele passou a se chamar "Java 5.0". Mas voc tambm o ver sendo chamado de "Java 5" (sem o ".0") e "Tiger" (seu codinome original) . No temos idia do que acontecer com a prxima verso ...

R:

:)::.4 capluio

~~ ';~ L~

.r".

l

d um Mergulho Rpido

Respostas do exerccioAinda no preciso se preocupar em entender tudo isso!Tudo que se encontra aqui explicado com maiores detalhes no livro, grande parte nas primeiras 40 pginas . Se o Java lembrar uma linguagem que voc usou no passado, alguns desses itens parecero simples. Ca~o contrrio, no se preocupe com isso. Chegaremos l ...

Veja como fcil escrever cdigo Java.int si ze=

27;'

declara uma varivel de tipo inteiro

ch~da

size' e lhe atribui o valor 27

Str i ng name = "Fido"; Dog myDog = new Dog (name, x size );

declara uma varivel de string de ~aracteres cbamada 'name' e lhe atribu o valor "Fido" declara a nova v arivel de tipo Dog chamada 'myDog' e cria o novo objeto Dog usando 'name' e 'size'subtrai 5 de 27 "(valor de 'size') e atribui o valor a uma varivel chamada 'x'

=

size - 5;

if (x < 15) myDog.bark(8);

se

X '

(valor = 22) for menor do que 15, informa ao co (dog) para latir

while (x

>

3)

myDog.p l ay() ;

int[ ] numList = {2 ,4 ,6,8} ; System.out.print ( "Hello") ; System. out.print("Dog: St ri ng num=

declara a lista de variveis de tipo inteiro 'numList' e insere :1, 4, 6, 8. nela exibe "Bel.lo"... I'rovave1.mente na 1.inha de comando exibe "Hello Fido" (o valor de 'name' "Fido") na 1.inba de comandodec1.ara a varivel. de string de caracteres

" + name)

" 8";

'num' e 1.he atribui o valor "S"

int z = I ntege r.parse l nt (num) ;

converte a string de caracteres "8"

DO

valor numrico real 8

try { readTheFi l e ("myF ile. txt" )

tenta fazer algo Pode ser que o que estamos tentando no funcione ...l um arquivo de texto chamado "myFile . tx~U (ou pelo menos TENTA ler .0 arquivo ... ) deve ser o fim das "tentativas" , fazer muitas coisas . .. portanto, acho que l'ossvel tentar

catch(FileNotFoundExc e pti on ex) System.out.print("File n ot fo und. " );

aqui deve ser - onde voc . saber se o que tentou no funcionou . .se o que tentamos no deu certo, exibiremos "File Dot found u na lillha de comandoparece que tudo que se encontra entre { } o que deve .ser rei to se a 'tentativa' no funcionar . ..

Estrutura do cdigo em Java

o que existe emarquivo-FONTE?

ump ublic class Dog{

r",..-."

Um arquivo de cdigo-fonte (com a extenso .java) contm uma definio de classe . A classe representa uma parte de seu programa, embora um aplicativo muito pequeno possa precisar apenas de uma classe. A classe deve ficar dentro de uma par de chaves.

J

-======.=:1public class Dog {void bark ( ) {

classe

I j

,..-."

O que existe em uma CLASSE?Uma classe tem um ou mais mtodos. Na classe Dog, o mtodo bark conter instrues de como o co deve latir. Seus mtodos devem ser declarados dentro de uma classe (em outras palavras, dentro das chaves da classe).

! .,

,>

~

'"',..-."

mtodo voc est aqui5

I>

.~

a==---=""",,~~

_ _

~

_ _ _ _ _ _____-_ _

~_-

_ _ __

uma classe Java

o que existe em um MTODO?Dentro das chaves de um mtodo, escreva as in strues de como e le deve ser executado. O cdigo do mtodo basicamente um conjunto de instrues, e por enquanto voc pode considerar o mtodo como se fosse uma funo ou procedimento.

nllhl i r

clas-s__ Dog

_{_

void bark ( )

[

instruol; instruo2;

i~instrues

r

Anatomia de uma classe

'" ,'" i

Quando a JVM comear a ser executada, procurar a classe que voc forn eceu na linha de comando. Em seguida, comeaGl a procurar um mtodo especialmente escrito que se parea exatamente com:public static void main (String[] II seu cdigo entra aqui args) {

;::"1~:

Depois a JVM executar tudo que estiver entre as chaves { } de seu mtodo principal. Todo aplicativo Java precisa ter pelo menos uma classe e um mtodo main (no um mtodo main por classe, apenas um por aplicativo) . chave de assa umaclasse (.uh) o nome dessa

pblica para que todospo

=

aama-'. \

\\ Ipublic I~?assll::r:tAPpl tlolretorno.. voids:i..gnl.r~ca

II

c1.a sse

! /que

abertu== .e

classe

nome dessemtodo

.

~

.

\\, \

\,

( abordaremos isso depois)\\

no h valorde retorno

/'

\

\

\\

ar....:me-nt-os do !1ltodo. Ess mcoo deve receber uma . d . matr~z e str~ngs , e a matriz se chamar l args JI

Ipublicllstaticl~in' ll(stI;"ing[ . l args>l8JISystm ~ otit ~prfntessa instruo significa exibir ne sada padro (o padro a linha de comando)

\\

I

.R~l!"~~~\

chave de aberturado mtodo

/

/

/

tl"I

/

a string que voc4 que: exibir

\

~.

toda instr-oDEVE

terminar com

ponto-e - virgu~a!!

[I]:- ~:--

cbave $ fecnamento do mtodo manchave de fechamento

.8

c.1.a sse MyFirsf:App

No se preocupe em memorizar nada agora. Est e oaptulo apenas uma. aprese.!'ltao.

Criando uma classe com um mtodo mainEm Java, tudo inserido em um a classe. Voc criar seu arquivo de cdi go-fonte (com extenso .Java) e, em seguida, o converter em um novo arqui vo de classe (com extenso .class). Quando ex'ecutar seu program a. na verdade estar executando um a classe. Executar um program a significa informar Java Virtual Machine (JVM ) para "carregar a classe Helio e, em seguida , execute seu m.todo main( ). Continue executando at todo o cdigo de main ter termin ado". No Captulo 2, nos aprofundare mos no assunto das classes, mas, por enqu anto, voc s precisa pensar ni sto : como escrever um cdigo Java de modo que ele seja exectttado? E tudo comea com main( ). O mtodo main ( ) onde seu programa comear a ser executado. Inde pe ndentemente cio tamanho de !-.eu programa (em outras palavras , no importa quantas c/asses () seu programa vai usar), preciso que haja um mtodo main( ) que d incio ao processo.

d um Mergulho Rpido

,".......

publ ic classHyF irs t App {

p ubl i cstaci c v o id main (S t ring[]args) {

I ]public class MyFirstApp {

System . out .p rint (" I Rul e !") ;)

I]

)

public static void main (String[] argsl System . out.println("I Rule!") ; System.out .println("The World");

o o

I,......"

t

Salve MyFirstApp . java

Et Compile javac MyFirstApp.javaExecute

Method Par t y ()

o

aload_O

1

i n v okes p e ci a l#- 1 4 return

o ~(~'~'~~]:.,jgetstatic #-2 12) x = x - 1;

x = x + 1; - Um comentrio de linha nica comea com dua s barras .x

= 22;

II esta linha me incomoda

- A maioria dos espaos em branco no importante .x3

for (int x = O; x < 1 0 ; x = x + 1 ) { System.out.print("x is now " + xl;

E)

fazer algo sob essa condioRamificao: testes if/else if (x == 10) ( System.out.print("x must be 10"); else ( System . out.print ( "x isn't 10");

- As variveis so declaradas com um nome e um tipo (voc aprender todo s os tipos Java no Cap tul o 3). Int weight;II tipo: int, nome: weight

- As classes e mt o dos devem ser definidos dentro de um par de chaves. public void go( )II o cdigo entra aqui}

_ _ _...Ji...Jf ,(....~x_ -

3)

(

('

S yste m. out . pr int ln ( " big

x") ;

ccla ss Ex er cisel b 'i nt x = 5 ; whi1e ( x > 1

r"~

x

=

__________________________________

~f i

x - 1; ( x < . 3)x");

S yst em. out .p rint 1n ("s ma 11

"r--

I

......,.-..-. .r-'

i

voc est aqui

~

15

'"

L

,--

quebra-cabea: palavra cruzada

~. nr --~ ~ '. "~~

~

Cruzadas Java

Agora daremos algo para o lado direito de seu crebro fazer. uma palavra cruzada pad ro , mas quase todas as palavras da soluo vm do Captulo 1. Apenas para que voc fique alerta, tambm inclumos algumas palavras (no relacionadas Java) do universo tecnolgico.

Horizontais4. Cdigo de linha de comando 6. Ma is uma vez? 8. No pode seguir dois caminhos 9. Acrnimo do tipo de energia de seu laptop 11. Tipo numrico de varivel 12. Acrnimo de um chip 13. Exibir algo 17. Um conjunto de caracteres 18. Anunciar uma nova classe ou mtodo 20. Para que serve um prompt?

.--.,

I

Verticais1. No um inteiro (ou seu barco um objeto _ _ ) 2. Voltou de mos vazias 3. As portas esto abertas 4. Depto. de manipuladores de LAN 5. Contineres de 'itens' 7. At que as atitudes melhorem 10. Consumidor de cdigo-fonte 12. No possvel fix-Ia 14. Modificador inesperado 15. preciso ter um 16. Como fazer algo 19. Consumidor de bytecode Um programa Java curto listado a seguir. Um bloco do programa est faltando. Seu desafio comparar o bloco de cdigo candidato ( esquerda) com a sada que voc veria se ele fosse inserido. Nem todas as linhas de sada sero usadas e algumas delas podem ser usadas mais de uma vez. Desenhe linhas conectando os blocos de cdigo candidatos sada de linha de comando correspondente. (As respostas esto no final do captulo.) Candidatos : Sadas possveis:{y

Mensagens misturadas

class Test { p ub l ic static void ma i n(String [] args) i n t x = o; int y = o; wh ile ( x < 5 ) {

= x

-

y;

L:;i2'~4611 34 59

{

X

sY",em + ou,.pr~. ::: X li

J\\ \ \

1;+ Y +"") ;

.,

02 14 26 38 02" '14 36 48 00 11 21 32 42-~, ~

xY, if

x

} }

=(

1; Y + ,_ Xiy

-T

-

}

x Igual ao operador de deslocamento direita PORM sempre preenche os bits da extrema esquerda com zeros. O bit de sinal pode ser alterado:

Operador bit a bit OU:Esse operador retorna um valor cujos bits s sero ativados se um dos bits originais estiver ativado:

int: a

=x I

int y

= x>

2;

II

os bits so 00111101

y;

I I os bits so 00001110

Operador de deslocamento esquerda: Operador bit a bit XOR (OU Exclusivo):1\

Esse operador retorna um valor cujos bits s sero ativados se exatamente um dos bits originais estiver ativado:

Igual ao operador de deslocamento direita sem sinal, mas na outra direo; os bits da extrema direita so preenchidos com zeros. O bit de sinal pode ser alterado:

int a

=x

y;

I I os bits so 00001100

int

y

=x

2;

I I os bits so 11010100

#9 Imutabilidade

Por que se importar com o fato de que as Strings so imutveis?Quando seus programas Java comearem a ficar grandes, voc inevitavelmente acabar com vrios objetos String. Por razes de segurana, e com a finalidade de conservar espao na memria (lembre-se de que seus programas Java podem ser executados em pequenos celulares habilitados com Java) as Strings em Java so imutveis. Isso significa que quando voc escrever: 460 apndice 8

String s = "O"; for (int x = 1; x < 10; x++J s = s + x;}

{

Na verdade estar criando dez objetos String (com os valores "O", "01", "012" at "0123456789"). A varivel s acabar referenciando a String de valor "0123456789", mas nesse momento teremos criado dez Strings! Sempre que voc criar uma nova String, a JVM a inserir em uma parte especial da memria chamada ' Reservatrio de

apndice B:

Ten

Strings' (parece refrescante no?) , Se j houver uma String !lO Reservatrio de Strings com o mesmo valor, a JVM no criar uma duplicata, simp lesmente apontar sua varivel de referncia para a entrada existente, A JVM pode fazer lSSO porque as Strings so imutveis; uma varivel de referncia no pode alterar o valor da String de outra varivel de referncia que aponte para a mesma String, Reservatrio de Strings que o Co letor de Lixo no chega at l. Portanto, em nosso exemplo, a menos que por coincidncia posteriormente voc crie uma String chamada, digamos, "01234", as primeiras nove Strings criadas em nosso loop for ficaro apenas aguardando desperdiando memria.

- Usar os mtodos estticos utilitrios [por exemplo, Integer.parseJntO l. importante lembrar que quando voc criar um objeto empacotador como:

Integer iWrap

= new

Integer(42);

o outro problema do

Esse objeto empacotador estar definido. Seu valor sempre ser 42. No h mtodo de configurao para um objeto empacotador. claro que voc pode apontar iWrap para um objeto empacotador diferente, mas ento ter dois objetos. Quando voc criar um objeto empacotador, no ter como alterar o valor desse objeto'A Java

Como isso economiza memria?Bem, se voc no for cuidadoso, no economizar! Mas se entender como a imutabilidade de Strings funciona, ento, em algumas situaes poder se beneficiar dela para economizar memria. No entanto, se voc tiver que executar muitas manipulaes com Strings (como concatenaes, etc.), h uma classe StringBuilder, mais adequada para essa finalidade. Falaremos mais sobre StringBuilder algumas pginas adiante.

Torne fcH lemb_ melhas, as violetas so de um azul As rosas sao ver assustador. As Stnng

Por que se importar com o fato de que os Empacotadores so imutveis?No captulo sobre Math falamos sobre as duas principais utilidades das classes empacotadoras: - Empacotar um tipo primitivo para que ele possa simular ser um objeto .

.

s so imutveis, assim como o

empacotador.

. #8 AsseresNo falamos muito sobre como depurar seu programa Java enquanto voc estiver desenvolvendo-o. Acreditamos que voc deve aprender Java na linha de comando, como fizemos no decorrer do livro. Quando for um profissional em Java, se decidir usar um IDE,'" pode ter outras ferramentas de depurao para usar. Antigamente, quando um programador Java queria depurar seu cdigo, inseria vrias instrues System.out.printlnO no decorrer do programa, exibindo os valores atuais das variveis e mensagens "Estou aqui", para ver se o controle do t1uxo estava funcionando apropriadamente. (O cdigo predefinido do captulo 6 continua com algumas instrues 'print' de depurao.) Em seguida, se o programa estivesse funcionando corretamente, ele o percorria e removia novamente todas essas instrues System.out.printlnO. Era tedioso e propenso a erros. Mas, a partir da Java IA Ce 5.0), a depurao ficou muito mais fcil. A resposta?

no retardaro seu programa. Mas se voc solicitar JVM que ative suas asseres, elas o ajudaro a fazer a depurao, sem alterar uma linha de cdigo! Algumas pessoas tm reclamado por terem que deixar instrues assert em seu cdigo de produo, mas deix-las pode ser muito til quando seu cdigo j tiver sido distribudo. Se seu cliente estiver com problemas, voc poder instru-lo a executar o programa com as asseres ativadas e solicitar que lhe envie a sada. Se as asseres fossem removidas do cdigo implantado, voc no teria essa opo. E quase no h desvantagens; quando as asseres no esto ativadas, so totalmente ignoradas pela JVM, portanto, no preciso se preocupar com perdas no desempenho.

1.:',.--,(,

Como fazer as asseres funcionaremAdicione as instrues de assero a seu cdigo onde achar que algo tenha que ser verdadeiro . Por exemplo:

assert (height > O);II se verdadeiro, o programa continuar normalmente II se falso, lance um AssertionError

,-...

AsseresAs asseres so instrues System.out.prinlnO reforadas. Adicione-as a seu cdigo como faria com as instrues de exibio. O compilador do Java 5.0 presumir que voc est compilando arquivos de cdigo-fonte compatveis com a verso 5.0, portanto a partir do Java 5.0, a compilao com asseresvem a vada por paorf:l':-No tempo de execuo, se voc no fizer nada, as instrues assert que adiciunou a se u cdigo seru iglmwclas pela JVM e

- Voc pode adicionar um pouco mais de informaes ao"'~U~"'Uv"cv

C!l..cb:a...o:u::a.a..nto

do .... ; l b!:L.e...c.c :re...l.Le.r.ulo.:... "" lt''''''' _ ..-~_._ . _~.

assert (height > O) "height = height + " weight = " + weight;voc est

"

+

461

escopo de bloco

A expresso aps o sinal de dois-pontos pode ser qualquere~pre ss c

(Observe que no foi necessria nenhuma opo de linha de Para executar com asseres:java -ea TestDriveGame

13va v;ilidD. qu.e reslte e;ii

iiiii

-valr qit

i

seja - - efittttid7 - - - - - .

/lulo. Mas o que quer que voc faa, no crie asseres que alterem o estado de um objeto! Se o fizer. a ativao das asseres no tempo de exe