Vous êtes sur la page 1sur 30

Captulo 1

Fundamentos da
linguagem Java
Schildt_01.indd 1 05/12/12 11:41
2 Java para iniciantes
Principais habilidades e conceitos

Saber a histria e a filosofia de Java

Entender a contribuio da linguagem para a Internet

Entender a importncia do bytecode

Conhecer o jargo Java

Entender os princpios bsicos da programao orientada a objetos

Criar, compilar e executar um programa Java simples

Usar variveis

Usar as instrues de controle if e for

Criar blocos de cdigo

Entender como as instrues so posicionadas, recuadas e finalizadas

Saber as palavras-chave Java

Entender as regras dos identificadores Java
O
avano da Internet e da World Wide Web reformulou a computao. Antes da Web,
o panorama ciberntico era dominado por PCs isolados. Hoje, quase todos os PCs
esto conectados Internet. A prpria Internet foi transformada originalmente, oferecia
uma maneira conveniente de compartilhar arquivos e informaes; hoje, um universo
de computao vasto e distribudo. Com essas mudanas, surgiu uma nova maneira de
programar: Java.
Java a principal linguagem da Internet, porm mais do que isso. Ela revolucionou
a programao, mudando a maneira de pensarmos tanto sobre a forma, quanto sobre a
funo de um programa. Atualmente, ser um programador profissional exige a habilidade
de programar em Java, tal sua importncia. No decorrer deste livro, voc aprender as
aptides necessrias para dominar essa habilidade.
O objetivo deste captulo apresent-lo linguagem Java, inclusive sua histria,
filosofia de design e vrios de seus recursos mais importantes. Sem dvida, o mais difcil
no aprendizado de uma linguagem de programao o fato de nenhum elemento existir
isoladamente. Os componentes da linguagem trabalham em conjunto uns com os outros,
e essa interatividade tem destaque especial em Java. Na verdade, difcil discutir um
aspecto de Java sem envolver outros. Para ajudar a resolver esse problema, este captulo
fornece um resumo de vrios recursos Java, entre eles a forma geral de um programa
Java, algumas estruturas bsicas de controle e os operadores. Ele no entra em detalhes,
mas se concentra nos conceitos comuns a qualquer programa Java.
Schildt_01.indd 2 05/12/12 11:41
Captulo 1 Fundamentos da linguagem Java 3
Origem da linguagem Java
A inovao nas linguagens de computador impulsionada por dois fatores: melhorias na
arte de programar e alteraes no ambiente de computao. Java no exceo. Cons-
truda a partir do rico legado herdado das linguagens C e C, Java adiciona melhorias
e recursos que refletem o estado atual da arte de programar. Respondendo ascenso do
ambiente online, a linguagem Java oferece recursos que otimizam a programao para
uma arquitetura altamente distribuda.
Java foi concebida por James Gosling, Patrick Naughton, Chris Warth, Ed Frank e
Mike Sheridan na Sun Microsystems, em 1991. Inicialmente, a linguagem se chamava
Oak, mas foi renomeada como Java em 1995. Surpreendentemente, a motivao ori-
ginal para a criao de Java no foi a Internet! A principal motivao foi a necessidade
de uma linguagem independente de plataforma que pudesse ser usada na criao de soft-
ware embutido em vrios dispositivos eletrnicos domsticos, como torradeiras, fornos
de micro-ondas e controles remotos. Como era de se esperar, muitos tipos de CPUs di-
ferentes so usados como controladores. O problema era que (na poca) a maioria das
linguagens era projetada para ser compilada para um destino especfico. Por exemplo,
considere C.
Embora fosse possvel compilar um programa C para quase todo tipo de CPU,
isso requeria um compilador C completo destinado a uma CPU especfica. O proble-
ma, no entanto, que caro e demorado criar compiladores. Em uma tentativa de encon-
trar uma soluo melhor, Gosling e outros trabalharam em uma linguagem com portabili-
dade entre plataformas que pudesse produzir cdigo para ser executado em vrias CPUs
com ambientes diferentes. Esse esforo acabou levando criao de Java.
Mais ou menos na poca em que os detalhes de Java estavam sendo esboados, sur-
giu um segundo fator muito importante que desempenharia papel crucial no futuro da
linguagem. claro que essa segunda fora foi a World Wide Web. Se a Web no estivesse
se formando quase ao mesmo tempo em que Java estava sendo implementada, talvez ela
continuasse sendo uma linguagem til porm obscura para a programao de utenslios
eletrnicos domsticos. No entanto, com o surgimento da Web, Java foi impulsionada
para a dianteira do design das linguagens de computador, porque a Web tambm precisa-
va de programas portteis.
A maioria dos programadores aprende cedo em suas carreiras que a criao de pro-
gramas portteis , ao mesmo tempo, desejvel e ilusria. Embora a luta por uma maneira
de criar programas eficientes e portteis (independentes da plataforma) seja quase to
antiga quanto a prpria disciplina de programao, ela foi deixada em segundo plano
devido a problemas mais urgentes. No entanto, com o advento da Internet e da Web, o
velho problema da portabilidade se intensificou. Afinal, a Internet composta por um
universo diversificado e distribudo povoado por muitos tipos de computadores, sistemas
operacionais e CPUs.
O que tinha sido um problema irritante porm de baixa prioridade se tornou uma
necessidade urgente. Perto de 1993, ficou bvio para os membros da equipe de design
de Java que, com frequncia, os problemas de portabilidade encontrados na criao de
cdigo para controladores embutidos tambm so encontrados quando tentamos criar c-
digo para a Internet. Essa percepo fez o foco de Java mudar dos utenslios eletrnicos
domsticos para a programao na Internet. Logo, embora a fagulha inicial tenha sido
gerada pelo desejo por uma linguagem de programao independente da arquitetura, foi
a Internet que acabou levando ao sucesso em larga escala de Java.
Schildt_01.indd 3 05/12/12 11:41
4 Java para iniciantes
Qual a relao entre Java, C e C?
Java est diretamente relacionada a C e C. Ela herda sua sintaxe da linguagem C. Seu
modelo de objetos adaptado de C. O relacionamento de Java com C e C im-
portante por vrias razes. Em primeiro lugar, muitos programadores conhecem a sintaxe
C/C. Isso facilita um programador C/C aprender Java e, da mesma forma, um
programador Java aprender C/C.
Em segundo lugar, os projetistas no reinventaram a roda, eles refinaram ainda mais
um paradigma de programao j altamente bem-sucedido. A era moderna da programao
comeou com C. Passou para C e depois para Java. Ao herdar e se basear nesse rico
legado, Java fornece um ambiente de programao poderoso e logicamente coerente que
aproveita o melhor do passado e adiciona novos recursos requeridos pelo ambiente online.
Talvez o mais importante seja que, devido s suas semelhanas, C, C e Java definem
uma estrutura conceitual comum para o programador profissional. Os programadores no
encontram grandes diferenas quando passam de uma linguagem para outra.
Uma das filosofias de design centrais tanto em C quanto em C a de que o pro-
gramador est no comando! Java tambm herda essa filosofia. Exceto pelas restries
impostas pelo ambiente da Internet, a linguagem d ao programador controle total. Se
voc programar bem, seus programas refletiro isso. Se programar mal, eles tambm o
refletiro. Em outras palavras, Java no uma linguagem prova de falhas. uma lin-
guagem para programadores profissionais.
A linguagem Java tem outro atributo em comum com C e C: foi projetada, testa-
da e aprimorada por programadores inseridos no mercado de trabalho. uma linguagem
baseada nas necessidades e experincias das pessoas que a projetaram. No h maneira
melhor de produzir uma linguagem de programao profissional de alta qualidade.
Devido s semelhanas entre Java e C, principalmente seu suporte programao
orientada a objetos, tentador pensar em Java como a verso de C para a Internet.
No entanto, isso seria um erro. Java tem diferenas prticas e filosficas significativas.
Embora tenha sido influenciado por C, no uma verso melhorada dessa linguagem.
Por exemplo, no compatvel com verses anteriores ou futuras de C. Claro, as se-
melhanas com C so significativas, e, se voc for programador C, vai se sentir
em casa com Java. Outro ponto: Java no foi projetada para substituir C. Foi projetada
para resolver determinado conjunto de problemas. C foi projetada para resolver um
conjunto de problemas diferente. Elas ainda coexistiro por muitos anos.
Qual a relao entre Java e C#?
Alguns anos aps a criao de Java, a Microsoft desenvolveu a linguagem C#. Isso im-
portante, porque C# est intimamente relacionada a Java. Na verdade, muitos dos recur-
sos C# tm equivalentes diretos em Java. Tanto Java quanto C# compartilham a mesma
sintaxe geral de estilo C, do suporte programao distribuda e utilizam o mesmo
modelo de objetos. claro que h diferenas entre Java e C#, mas a aparncia geral
dessas linguagens muito semelhante. Se voc conhece C#, ser particularmente fcil
aprender Java. Da mesma forma, se estiver em seus planos usar C#, seu conhecimento
de Java ser til.
Dada a semelhana entre as duas linguagens, seria natural algum perguntar: C#
substituir Java? A resposta no. As linguagens Java e C# foram otimizadas para dois
tipos de ambiente de computao diferentes. Da mesma forma que C e Java coexisti-
ro por muito tempo, o mesmo ocorrer com C# e Java.
Schildt_01.indd 4 05/12/12 11:41
Captulo 1 Fundamentos da linguagem Java 5
Contribuies da linguagem Java para a Internet
A Internet ajudou a impulsionar Java para a dianteira da programao e, por sua vez,
Java teve um efeito profundo sobre a Internet. Alm de simplificar a programao geral
na Web, ela inovou com um tipo de programa de rede chamado applet, que mudou a ma-
neira do mundo online pensar em contedo. Java tambm resolveu alguns dos problemas
mais complicados associados Internet: portabilidade e segurana. Examinaremos mais
detalhadamente cada um deles.
Applets Java
Um applet um tipo especial de programa Java projetado para ser transmitido pela In-
ternet e executado automaticamente por um navegador Web compatvel com Java. Alm
disso, ele baixado sob demanda, sem nenhuma interao com o usurio. Se o usurio
clicar em um link que contm um applet, esse ser automaticamente baixado e executado
no navegador. Os applets so projetados como programas pequenos. Normalmente, so
usados para exibir dados fornecidos pelo servidor, tratar entradas do usurio ou fornecer
funes simples, como uma calculadora de emprstimos, que executada localmente
em vez de no servidor. Basicamente, os applets permitem que uma funcionalidade seja
movida do servidor para o cliente.
A criao do applet mudou a programao na Internet porque expandiu o universo de
objetos que podem se mover livremente no ciberespao. Em geral, h duas grandes cate-
gorias de objetos que so transmitidas entre o servidor e o cliente: informaes passivas e
programas ativos, dinmicos. Por exemplo, quando voc l seus emails, est visualizando
dados passivos. At mesmo quando baixa um programa, seu cdigo ainda so apenas
dados passivos at voc execut-lo. Por outro lado, o applet um programa dinmico de
execuo automtica. Esse tipo de programa um agente ativo no computador cliente,
mas inicializado pelo servidor.
J que esses programas dinmicos de rede so to desejveis, eles tambm tm que
evitar problemas srios nas reas de segurana e portabilidade. claro que um programa
que baixado e executado automaticamente no computador cliente deve ser impedido
de causar danos. Ele tambm deve poder ser executado em vrios ambientes diferentes e
em sistemas operacionais distintos. Como voc ver, Java resolveu esses problemas de
maneira muito eficaz e elegante. Examinaremos os dois problemas com mais detalhes.
Segurana
Sempre que baixamos um programa normal, estamos nos arriscando, porque o c-
digo baixado pode conter vrus, cavalo de Troia ou outro cdigo danoso. A parte mais
importante do problema o fato de que um cdigo malicioso pode causar dano, j que
ganhou acesso no autorizado a recursos do sistema. Por exemplo, um vrus pode coletar
informaes privadas, como nmeros de carto de crdito, saldos de conta bancria e
senhas, pesquisando o contedo do sistema local de arquivos do computador. Para Java
permitir que o applet fosse seguramente baixado e executado no computador cliente, era
necessrio impedir que ele iniciasse esse tipo de ataque.
A linguagem conseguiu fornecer essa proteo confinando o applet ao ambiente de
execuo Java e negando acesso a outras partes do computador. (Voc ver como isso
feito em breve.) Poder baixar applets com a certeza de que nenhum dano ser causado e
de que a segurana no ser violada considerado por muitos o aspecto mais inovador
em Java.
Schildt_01.indd 5 05/12/12 11:41
6 Java para iniciantes
Portabilidade
A portabilidade um aspecto importante da Internet, porque h muitos tipos de compu-
tadores e sistemas operacionais diferentes conectados a ela. Se fosse para um programa
Java ser executado em praticamente qualquer computador conectado Internet, teria que
haver alguma maneira de permitir que esse programa fosse executado em diferentes sis-
temas. Por exemplo, no caso de um applet, o mesmo applet tem que poder ser baixado
e executado pela grande variedade de CPUs, sistemas operacionais e navegadores co-
nectados Internet. No prtico haver diferentes verses do applet para computadores
distintos. O mesmo cdigo deve funcionar em todos os computadores. Portanto, algum
meio de gerar cdigo executvel portvel era necessrio. Como voc ver em breve, o
mesmo mecanismo que ajuda a manter a segurana tambm ajuda a gerar portabilidade.
O segredo da linguagem Java: o bytecode
O segredo que permite que Java resolva os problemas de segurana e portabilidade que
acabamos de descrever a sada do compilador Java no ser cdigo executvel. Em vez
disso, bytecode. O bytecode um conjunto de instrues altamente otimizado projeta-
do para ser executado pelo sistema de tempo de execuo Java, que se chama Mquina
Virtual Java (JVM, Java Virtual Machine). Na verdade, a JVM original foi projetada
como um interpretador de bytecode. Isso pode parecer novidade porque muitas lin-
guagens modernas so projetadas para ser compiladas para cdigo executvel devido a
preocupaes de desempenho. No entanto, o fato de o programa Java ser executado pela
JVM ajuda a resolver os principais problemas associados a programas baseados na Web.
Vejamos por qu.
Converter um programa Java em bytecode facilita muito a execuo de um programa
em uma grande variedade de ambientes, porque s a JVM tem que ser implementada para
cada plataforma. Uma vez que o pacote de tempo de execuo estiver presente em um
determinado sistema, qualquer programa Java poder ser executado nele. Lembre-se, em-
bora os detalhes da JVM sejam diferentes de uma plataforma para outra, todas entendem
o mesmo bytecode Java. Se um programa Java fosse compilado para cdigo nativo, de-
veriam existir diferentes verses do mesmo programa para cada tipo de CPU conectada
Internet. claro que essa no uma soluo vivel. Logo, a execuo de bytecode pela
JVM a maneira mais fcil de criar programas realmente portteis.
O fato de um programa Java ser executado pela JVM tambm ajuda a torn-lo segu-
ro. J que a JVM est no controle, ela pode reter o programa e impedi-lo de gerar efeitos
colaterais fora do sistema. A segurana tambm aumentada por certas restries exis-
tentes na linguagem Java.
Quando um programa interpretado, geralmente ele executado mais lentamente
do que o mesmo programa sendo executado quando compilado para cdigo executvel.
No entanto, em Java, a diferena entre os dois no to grande. J que o bytecode foi
altamente otimizado, seu uso permite que a JVM execute programas de maneira mais
rpida do que o esperado.
Embora Java tenha sido projetada como uma linguagem interpretada, no h nada que
impea a compilao dinmica de bytecode para cdigo nativo visando a melhoria do de-
sempenho. Portanto, a tecnologia HotSpot foi introduzida pouco tempo aps o lanamen-
to inicial da linguagem. O HotSpot fornece um compilador just-in-time (JIT) para byte-
code. Quando um compilador JIT faz parte da JVM, partes de bytecode selecionadas so
compiladas em tempo real, fragmento a fragmento e sob demanda para cdigo executvel.
Schildt_01.indd 6 05/12/12 11:41
Captulo 1 Fundamentos da linguagem Java 7
importante entender que no prtico compilar um programa Java inteiro para cdigo
executvel de uma s vez porque Java executa vrias verificaes que s podem ser feitas no
tempo de execuo. Em vez disso, um compilador JIT compila cdigo quando necessrio,
durante a execuo. Mas nem todas as sequncias de bytecode so compiladas s as que se
beneficiaro da compilao. O cdigo restante simplesmente interpretado. Mesmo assim, a
abordagem just-in-time gera uma melhora significativa no desempenho. At mesmo quando
a compilao dinmica aplicada ao bytecode, os recursos de portabilidade e segurana con-
tinuam aplicveis, porque a JVM ainda est no comando do ambiente de execuo.
O jargo Java
Nenhuma viso geral de Java est completa sem um exame de seu jargo. Embora as
foras bsicas que precisavam da inveno Java tenham sido a portabilidade e a seguran-
a, outros fatores desempenharam um papel importante na moldagem da forma final da
linguagem. As consideraes-chave foram reunidas pela equipe de design Java na lista
de palavras a seguir.
Simples Java tem um conjunto de recursos conciso e coeso que a torna fcil de
aprender e usar.
Segura Java fornece um meio seguro de criar aplicativos de Internet.
Portvel Os programas Java podem ser executados em qualquer ambiente para o qual
houver um sistema de tempo de execuo Java.
Orientada a objetos Java incorpora a moderna filosofia de programao orientada a objetos.
Robusta Java incentiva a programao sem erros por ser fortemente tipada e executar
verificaes de tempo de execuo.
Vrias threads Java fornece suporte integrado programao com vrias threads.
Neutra quanto
arquitetura
Java no tem vnculos com uma determinada mquina ou arquitetura de
sistema operacional.
Interpretada Java d suporte a cdigo para vrias plataformas com o uso do bytecode.
Alto desempenho O bytecode Java altamente otimizado para obteno de velocidade de execuo.
Distribuda Java foi projetada visando o ambiente distribudo da Internet.
Dinmica Os programas Java carregam grandes quantidades de informaes de tipo
que so usadas na verificao e resoluo de acessos a objetos no tempo de
execuo.
Pergunte ao especialista
P: Ouvi falar de um tipo especial de programa Java chamado servlet. De que se trata?
R: Um servlet um programa pequeno executado no servidor. Da mesma forma que os applets esten-
dem dinamicamente a funcionalidade de um navegador Web, os servlets estendem dinamicamente
a funcionalidade do servidor Web. Temos que entender que, mesmo sendo teis, os applets so
apenas uma metade da equao cliente/servidor. Pouco tempo aps o lanamento inicial de Java,
ficou bvio que a linguagem tambm seria til do lado do servidor. O resultado foi o servlet. Logo,
com o advento do servlet, Java se estendeu pelos dois lados da conexo cliente/servidor. Embora
a criao dos servlets no faa parte do escopo deste guia do iniciante, eles so algo que voc vai
querer conhecer melhor ao avanar na programao Java. (Uma discusso dos servlets pode ser en-
contrada em meu livro Java: The Complete Reference, publicado pela Oracle Press/McGraw-Hill.)
Schildt_01.indd 7 05/12/12 11:41
8 Java para iniciantes
Programao orientada a objetos
A programao orientada a objetos (OOP, object-oriented programming) a essncia de
Java. A metodologia orientada a objetos inseparvel da linguagem, e todos os progra-
mas Java so, pelo menos at certo ponto, orientados a objetos. Devido importncia da
OOP para Java, til entendermos seus princpios bsicos antes de escrever at mesmo
um programa Java simples.
A OOP uma maneira poderosa de abordar a tarefa de programar. As metodologias
de programao mudaram drasticamente desde a inveno do computador, principalmen-
te para acomodar a crescente complexidade dos programas. Por exemplo, quando os
computadores foram inventados, a programao era feita pela ativao das instrues
binrias da mquina com o uso do painel frontal do computador. Contanto que os pro-
gramas tivessem apenas algumas centenas de instrues, essa abordagem funcionava.
medida que os programas cresceram, a linguagem de montagem foi inventada para que o
programador pudesse lidar com programas maiores e cada vez mais complexos, usando
representaes simblicas das instrues de mquina. Como os programas continuaram
a crescer, foram introduzidas linguagens de alto nvel que davam ao programador mais
ferramentas para lidar com a complexidade. claro que a primeira linguagem ampla-
mente disseminada foi FORTRAN. Embora FORTRAN fosse uma primeira etapa bem
impressionante, no uma linguagem que encoraje a criao de programas claros e f-
ceis de entender.
Os anos 60 deram origem programao estruturada. Esse o mtodo encorajado
por linguagens como C e Pascal. O uso de linguagens estruturadas tornou possvel criar
mais facilmente programas de complexidade moderada. As linguagens estruturadas so
caracterizadas por seu suporte a sub-rotinas autnomas, variveis locais e estruturas de
controle sofisticadas e independentes de GOTO. Embora sejam uma ferramenta podero-
sa, at elas alcanam seu limite quando um projeto fica grande demais.
Considere isto: a cada marco no desenvolvimento da programao, tcnicas e ferra-
mentas eram criadas para permitir que o programador lidasse com a crescente comple-
xidade. A cada etapa do percurso, a nova abordagem pegava os melhores elementos dos
mtodos anteriores e fazia avanos. Antes da inveno da OOP, muitos projetos estavam
perto do ponto (ou excedendo-o) em que a abordagem estruturada no funcionava mais.
Os mtodos orientados a objetos foram criados para ajudar os programadores a ultrapas-
sar essas barreiras.
Pergunte ao especialista
P: Por que foi necessrio criar uma nova linguagem de programao como Java para resolver
os problemas de portabilidade e segurana? Uma linguagem como C no poderia ser
adaptada? Em outras palavras, no poderia ser criado um compilador C que gerasse
bytecode?
R: Embora fosse possvel um compilador C gerar algo semelhante a bytecode em vez de cdigo
executvel, C tem recursos que desencorajam seu uso para a criao de programas da Inter-
net o mais importante deles o suporte a ponteiros. Um ponteiro o endereo de algum objeto
armazenado na memria. Com o uso de um ponteiro, seria possvel acessar recursos fora do pro-
grama, o que resultaria em uma falha na segurana. Java no d suporte a ponteiros, eliminando
esse problema.
Schildt_01.indd 8 05/12/12 11:41
Captulo 1 Fundamentos da linguagem Java 9
A programao orientada a objetos pegou as melhores ideias da programao estru-
turada e combinou-as com vrios conceitos novos. O resultado foi uma maneira diferente
de organizar um programa. De um modo mais geral, um programa pode ser organizado
de uma entre duas maneiras: a partir de seu cdigo (o que est ocorrendo) ou a partir de
seus dados (o que est sendo afetado). Com o uso somente da programao estruturada,
normalmente os programas so organizados a partir do cdigo. Essa abordagem pode ser
considerada como o cdigo atuando sobre os dados.
Os programas orientados a objetos funcionam ao contrrio. So organizados a partir
dos dados, com o seguinte princpio-chave: dados controlando o acesso ao cdigo. Em
uma linguagem orientada a objetos, voc define os dados e as rotinas que podem atuar
sobre eles. Logo, um tipo de dado define precisamente que tipo de operaes pode ser
aplicado a esses dados.
Para dar suporte aos princpios da programao orientada a objetos, todas as lingua-
gens OOP, inclusive Java, tm trs caractersticas em comum: encapsulamento, polimor-
fismo e herana. Examinemos cada uma.
Encapsulamento
O encapsulamento um mecanismo de programao que vincula o cdigo e os dados
que ele trata, e isso mantm os dois seguros contra a interferncia e m utilizao exter-
na. Em uma linguagem orientada a objetos, o cdigo e os dados podem ser vinculados
de tal forma que uma caixa preta autnoma seja criada. Dentro da caixa, esto todo o
cdigo e os dados necessrios. Quando o cdigo e os dados so vinculados dessa forma,
um objeto criado. Em outras palavras, um objeto o dispositivo que d suporte ao
encapsulamento.
Dentro de um objeto, o cdigo, os dados ou ambos podem ser privados desse objeto
ou pblicos. O cdigo ou os dados privados s so conhecidos e acessados por outra
parte do objeto. Isto , o cdigo ou os dados privados no podem ser acessados por uma
parte do programa que exista fora do objeto. Quando o cdigo ou os dados so pblicos,
outras partes do programa podem acess-los mesmo que estejam definidos dentro de
um objeto. Normalmente, as partes pblicas de um objeto so usadas para fornecer uma
interface controlada para os elementos privados do objeto.
A unidade bsica de encapsulamento de Java a classe. Embora a classe seja exami-
nada com mais detalhes posteriormente neste livro, a breve discusso a seguir ser til
agora. Uma classe define a forma de um objeto. Ela especifica tanto os dados quanto o
cdigo que operar sobre eles. Java usa uma especificao de classe para construir ob-
jetos. Os objetos so instncias de uma classe. Logo, uma classe essencialmente um
conjunto de planos que especificam como construir um objeto.
O cdigo e os dados que constituem uma classe so chamados de membros da classe.
Especificamente, os dados definidos pela classe so chamados de variveis membro ou
variveis de instncia. Os cdigos que operam sobre esses dados so chamados de mto-
dos membro ou apenas mtodos. Mtodo o termo em Java para uma sub-rotina. Se voc
conhece C/C, talvez ajude saber que o que um programador Java chama de mtodo,
um programador C/C chama de funo.
Polimorfismo
Polimorfismo (do grego, muitas formas) a qualidade que permite que uma interface
acesse uma classe geral de aes. A ao especfica determinada pela natureza exata
Schildt_01.indd 9 05/12/12 11:41
10 Java para iniciantes
da situao. Um exemplo simples de polimorfismo encontrado no volante de um au-
tomvel. O volante (isto , a interface) o mesmo no importando o tipo de mecanismo
de direo usado. Ou seja, o volante funciona da mesma forma se seu carro tem direo
manual, direo hidrulica ou direo de cremalheira. Portanto, se voc souber como
operar o volante, poder dirigir qualquer tipo de carro.
O mesmo princpio tambm pode ser aplicado programao. Por exemplo, con-
sidere uma pilha (que uma lista primeiro a entrar, ltimo a sair). Voc poderia ter
um programa que precisasse de trs tipos de pilhas diferentes. Uma pilha usada para
valores inteiros, uma para valores de ponto flutuante e uma para caracteres. Nesse caso,
o algoritmo que implementa cada pilha o mesmo, ainda que os dados armazenados
sejam diferentes. Em uma linguagem no orientada a objetos, voc seria obrigado a criar
trs conjuntos de rotinas de pilhas diferentes, com cada conjunto usando um nome. No
entanto, devido ao polimorfismo, em Java voc pode criar um conjunto geral de rotinas
de pilhas que funcione em nas trs situaes especficas. Dessa forma, se souber como
usar uma pilha, poder usar todas.
Geralmente, o conceito de polimorfismo representado pela expresso uma inter-
face, vrios mtodos. Ou seja, possvel projetar uma interface genrica para um grupo
de atividades relacionadas. O polimorfismo ajuda a reduzir a complexidade permitindo
que a mesma interface seja usada para especificar uma classe geral de ao. tarefa do
compilador selecionar a ao (isto , mtodo) especfica conforme cada situao. Voc,
o programador, no precisa fazer essa seleo manualmente. S tem que lembrar da in-
terface geral e utiliz-la.
Herana
Herana o processo pelo qual um objeto pode adquirir as propriedades de outro objeto.
Isso importante porque d suporte ao conceito de classificao hierrquica. Se voc
pensar bem, grande parte do conhecimento pode ser gerenciada por classificaes hierr-
quicas (isto , top-down). Por exemplo, uma ma Red Delicious faz parte da classifica-
o ma, que por sua vez faz parte da classe fruta, que fica sob a classe maior alimento.
Isto , a classe alimento possui certas qualidades (comestvel, nutritivo, etc.) que, logica-
mente, tambm se aplicam sua subclasse, fruta. Alm dessas qualidades, a classe fruta
tem caractersticas especficas (suculenta, doce, etc.) que a distinguem de outros alimen-
tos. A classe ma define as qualidades especficas de uma ma (cresce em rvores, no
tropical, etc.). Por sua vez, uma ma Red Delicious herdaria as qualidades de todas as
classes precedentes e s definiria as qualidades que a tornam nica.
Sem o uso de hierarquias, cada objeto teria que definir explicitamente todas as suas
caractersticas. Com o uso da herana, um objeto s tem que definir as qualidades que o
tornam nico dentro de sua classe. Ele pode herdar seus atributos gerais de seu pai. Logo,
o mecanismo de herana que possibilita um objeto ser uma instncia especfica de um
caso mais geral.
Obtendo o Java Development Kit
Agora que a base terica de Java foi explicada, hora de comear a escrever programas
Java. No entanto, antes de voc poder compilar e executar esses programas, precisa ter
Schildt_01.indd 10 05/12/12 11:41
Captulo 1 Fundamentos da linguagem Java 11
o Java Development Kit (JDK) instalado em seu computador. O JDK est disponvel
gratuitamente na Oracle. Quando este texto foi escrito, a verso corrente do JDK era a 7.
Essa a verso usada pelo Java SE 7. (SE a abreviao de Standard Edition.) J que o
JDK 7 contm muitos recursos novos que no so suportados em verses anteriores do
Java, necessrio usar essa verso (ou uma posterior) para compilar e executar os pro-
gramas deste livro.
O JDK pode ser baixado de www.oracle.com/technetwork/java/javase/downloa-
ds/index.html. Simplesmente acesse a pgina e siga as instrues para o tipo de compu-
tador que voc tem. Aps ter instalado o JDK, voc poder compilar e executar progra-
mas. O JDK fornece dois programas principais. O primeiro o javac, que o compilador
Java. O segundo o java, que o interpretador padro de Java, tambm chamado de
iniciador de aplicativos.
Mais uma coisa: o JDK executado no ambiente de prompt de comando e usa fer-
ramentas de linha de comando. Ele no um aplicativo de janelas. Tambm no um
ambiente de desenvolvimento integrado (IDE).
NOTA
Alm das ferramentas bsicas de linha de comando fornecidas com o JDK, h vrios IDEs
de alta qualidade disponveis para Java, como o NetBeans e o Eclipse. Um IDE pode ser
muito til no desenvolvimento e implantao de aplicativos comerciais. Como regra geral,
voc tambm pode usar um IDE para compilar e executar os programas deste livro, se
assim quiser. No entanto, as instrues apresentadas aqui para a compilao e execuo
de um programa Java s descrevem as ferramentas de linha de comando do JDK. fcil
entender o motivo. Em primeiro lugar, o JDK est prontamente disponvel para todos os
leitores. Em segundo lugar, as instrues para uso do JDK sero as mesmas para todos.
Alm disso, para os programas simples apresentados no livro, usar as ferramentas de
linha de comando do JDK a abordagem mais fcil. Se voc estiver usando um IDE, ter
que seguir suas instrues. Devido s diferenas entre os IDEs, no possvel fornecer
um conjunto geral de instrues.
Pergunte ao especialista
P: Voc diz que a programao orientada a objetos uma maneira eficaz de gerenciar progra-
mas grandes. No entanto, parece que ela pode adicionar uma sobrecarga significativa aos
programas relativamente pequenos. J que voc diz que todos os programas Java so, at
certo ponto, orientados a objetos, isso uma desvantagem para os programas pequenos?
R: No. Como voc ver, para programas pequenos, os recursos orientados a objetos de Java so
quase transparentes. Embora seja verdade que Java segue um modelo de objeto rigoroso, voc
livre para decidir at que nvel quer empreg-lo. Em programas pequenos, a orientao a obje-
tos quase imperceptvel. medida que seus programas crescerem, voc poder integrar mais
recursos orientados a objetos sem esforo.
Schildt_01.indd 11 05/12/12 11:41
12 Java para iniciantes
Um primeiro programa simples
Comecemos compilando e executando o exemplo de um programa curto mostrado aqui:
/*
Este um programa Java simples.

Chame este arquivo de Example.java.
*/
class Example {
// Um programa Java comea com uma chamada a main().
public static void main(String args[]) {
System.out.println("Java drives the Web.");
}
}
Voc seguir estas trs etapas:
1. Insira o programa.
2. Compile o programa.
3. Execute o programa.
Inserindo o programa
Os programas mostrados neste livro esto disponveis no site da McGraw-Hill: www.
oraclepressbooks.com. No entanto, se quiser inserir o programa manualmente, voc
pode fazer isso. Nesse caso, deve inserir o programa em seu computador usando um edi-
tor, e no um processador de texto. Normalmente, os processadores de texto armazenam
informaes de formato junto com o texto. Essas informaes de formato confundiro o
compilador Java. Se voc estiver usando uma plataforma Windows, poder empregar o
WordPad ou o editor de programao que quiser.
Na maioria das linguagens de computador, o nome do arquivo que contm o cdigo-
-fonte de um programa arbitrrio. Porm, no esse o caso em Java. A primeira coisa
que voc deve aprender sobre Java que o nome dado a um arquivo-fonte muito im-
portante. Para esse exemplo, o nome do arquivo-fonte deve ser Example.java. Vejamos
o porqu.
Em Java, um arquivo-fonte chamado oficialmente de unidade de compilao. um
arquivo de texto que contm (entre outras coisas) uma ou mais definies de classe. (Por
enquanto, usaremos arquivos-fonte contendo apenas uma classe.) O compilador Java re-
quer que o arquivo-fonte use a extenso de nome de arquivo .java. Como voc pode ver
examinando o programa, o nome da classe definida por ele tambm Example. Isso no
coincidncia. Em Java, todo cdigo deve residir dentro de uma classe. Por conveno, o
nome da classe principal deve coincidir com o nome do arquivo que contm o programa.
Voc tambm deve se certificar de que a capitalizao do nome do arquivo coincida com
a do nome da classe. Isso ocorre porque Java diferencia maisculas de minsculas. Nesse
momento, a conveno de que os nomes de arquivo devem corresponder aos nomes das
classes pode parecer arbitrria. Contudo, essa conveno facilita a manuteno e a orga-
nizao dos programas.
Schildt_01.indd 12 05/12/12 11:41
Captulo 1 Fundamentos da linguagem Java 13
Compilando o programa
Para compilar o programa Example, execute o compilador, javac, especificando o nome
do arquivo-fonte na linha de comando, como mostrado aqui:
javac Example.java
O compilador javac criar um arquivo chamado Example.class contendo a verso em
bytecode do programa. Lembre-se, bytecode no cdigo executvel. Ele deve ser exe-
cutado por uma Mquina Virtual Java. Logo, a sada do javac no cdigo que possa ser
executado diretamente.
Para executar realmente o programa, voc deve usar o interpretador de Java, java.
Para fazer isso, passe o nome da classe Example como argumento de linha de comando,
como mostrado abaixo:
java Example
Quando o programa for executado, a sada a seguir ser exibida:
Java drives the Web.
Quando o cdigo-fonte Java compilado, cada classe inserida em seu prprio ar-
quivo de sada com o mesmo nome da classe usando a extenso .class. Por isso, e uma
boa ideia dar a seus arquivos-fonte Java o mesmo nome da classe que eles contm o
nome do arquivo-fonte coincidir com o nome do arquivo .class. Quando voc executar
o interpretador de Java como acabei de mostrar, estar especificando o nome da classe
que deseja que o interpretador execute. Ele procurar automaticamente um arquivo com
esse nome que tenha a extenso .class. Se encontrar, executar o cdigo contido na classe
especificada.
NOTA
Se, quando voc tentar compilar o programa, o computador no puder achar o javac (e
supondo que o JDK tenha sido instalado corretamente), talvez seja preciso especificar o
caminho que conduz s ferramentas de linha de comando. Ou seja, no Windows, voc ter
que adicionar o caminho das ferramentas de linha de comando aos caminhos da varivel
ambiental PATH. Por exemplo, quando o JDK 7 instalado nos diretrios padro, o caminho
das ferramentas de linha de comando C:\Program Files\Java\jdk1.7.0\bin. ( claro que
a verso especfica do JDK pode ser diferente.) Voc ter que consultar a documentao
de seu sistema operacional para saber como definir o caminho, porque esse procedimento
varia entre os sistemas. Se estiver com pressa e quiser apenas testar o primeiro exemplo
de programa, especifique o caminho completo de cada ferramenta. Por exemplo,
C:\"Program Files"\Java\jdk1.7.0\bin\javac Example.java
C:\"Program Files"\Java\jdk1.7.0\bin\java Example
No entanto, essa abordagem no deve ser usada como prtica geral. muito melhor de-
finir o caminho.
Primeiro exemplo de programa linha a linha
Embora Example.java seja bem curto, ele inclui vrios recursos-chave que so comuns a
todos os programas Java. Examinemos com detalhes cada parte do programa.
Schildt_01.indd 13 05/12/12 11:41
14 Java para iniciantes
O programa comea com as linhas a seguir:
/*
Este um programa Java simples.

Chame este arquivo de Example.java.
*/
Isso um comentrio. Como a maioria das outras linguagens de programao, Java
permite a insero de uma observao no arquivo-fonte de um programa. O contedo de
um comentrio ignorado pelo compilador. Em vez disso, o comentrio descreve ou ex-
plica a operao do programa para quem estiver lendo seu arquivo-fonte. Nesse caso, ele
est descrevendo o programa e lembrando que o arquivo-fonte deve se chamar Example.
java. claro que, em aplicativos reais, geralmente os comentrios explicam como algu-
ma parte do programa funciona ou o que um recurso especfico faz.
Java d suporte a trs estilos de comentrios. O mostrado no incio do programa se
chama comentrio de vrias linhas. Esse tipo de comentrio comea com /* e termina
com */. Qualquer coisa que estiver entre esses dois smbolos de comentrio ser ignorada
pelo compilador. Como o nome sugere, um comentrio de vrias linhas pode ter muitas
linhas.
A prxima linha de cdigo do programa mostrada aqui:
class Example {
Essa linha usa a palavra-chave class para declarar que uma nova classe est sendo defini-
da. Como mencionado, a classe a unidade bsica de encapsulamento de Java. Example
o nome da classe. A definio da classe comea com a chave de abertura ({) e termina
com a chave de fechamento (}). Os elementos existentes entre as duas chaves so mem-
bros da classe. Por enquanto, no se preocupe tanto com os detalhes de uma classe; pre-
ciso saber apenas que em Java toda a atividade do programa ocorre dentro de uma. Essa
uma das razes porque todos os programas Java so (pelo menos um pouco) orientados
a objetos.
A linha seguinte do programa o comentrio de linha nica, mostrado aqui:
// Um programa Java comea com uma chamada a main().
Esse o segundo tipo de comentrio suportado por Java. Um comentrio de linha nica
comea com // e termina no fim da linha. Como regra geral, os programadores usam
comentrios de vrias linhas para observaes mais longas e comentrios de linha nica
para descries breves, linha a linha.
A prxima linha de cdigo a mostrada abaixo:
public static void main (String args[]) {
Essa linha comea o mtodo main( ). Como mencionado anteriormente, em Java, uma
sub-rotina chamada de mtodo. Como o comentrio que a precede sugere, essa a li-
nha em que o programa comear a ser executado. Todos os aplicativos Java comeam a
execuo chamando main( ). O significado exato de cada parte dessa linha no pode ser
fornecido agora, j que envolve uma compreenso detalhada de vrios outros recursos da
linguagem Java. No entanto, como muitos dos exemplos deste livro usaro essa linha de
cdigo, examinaremos rapidamente cada parte.
Schildt_01.indd 14 05/12/12 11:41
Captulo 1 Fundamentos da linguagem Java 15
A palavra-chave public um modificador de acesso. Um modificador de acesso de-
termina como outras partes do programa podem acessar os membros da classe. Quando
o membro de uma classe precedido por public, ele pode ser acessado por um cdigo de
fora da classe em que foi declarado. (O oposto de public private, que impede que um
membro seja usado por um cdigo definido fora de sua classe). Nesse caso, main( ) deve
ser declarado como public, j que tem que ser chamado por um cdigo de fora de sua
classe quando o programa for iniciado. A palavra-chave static permite que main( ) seja
chamado antes de um objeto da classe ter sido criado. Isso necessrio porque main( )
chamado pela JVM antes de qualquer objeto ser criado. A palavra-chave void simples-
mente informa ao compilador que main( ) no retorna um valor. Como voc ver, os m-
todos tambm podem retornar valores. Se tudo isso parece um pouco confuso, no se pre-
ocupe. Todos esses conceitos sero discutidos com detalhes em captulos subsequentes.
Como mencionado, main( ) o mtodo chamado quando um aplicativo Java co-
mea a ser executado. Qualquer informao que voc tiver que passar para um mtodo
ser recebida por variveis especificadas dentro do conjunto de parnteses que seguem
o nome do mtodo. Essas variveis so chamadas de parmetros. Mesmo se nenhum
parmetro for necessrio em um determinado mtodo, voc ter que incluir os parnteses
vazios. Em main( ) h somente um parmetro, String args[ ], que declara um parmetro
chamado args. Ele um array de objetos de tipo String. (Arrays so conjuntos de obje-
tos semelhantes.) Os objetos de tipo String armazenam sequncias de caracteres. Nesse
caso, args recebe qualquer argumento de linha de comando presente quando o programa
executado. O programa em questo no faz uso dessas informaes, mas outros progra-
mas mostrados posteriormente neste livro faro.
O ltimo caractere da linha {. Ele sinaliza o incio do corpo de main( ). Todo o
cdigo includo em um mtodo ocorrer entre a chave de abertura do mtodo e sua chave
de fechamento.
A prxima linha de cdigo mostrada a seguir. Observe que ela ocorre dentro de
main( ).
System.out.println("Java drives the Web.");
Essa linha exibe a string Java drives the Web. seguida por uma nova linha na tela. Na
verdade, a sada exibida pelo mtodo interno println( ). Nesse caso, println( ) exibe o
string que passado para ele. Como voc ver, println( ) tambm pode ser usado para
exibir outros tipos de informaes. A linha comea com System.out. Embora seja muito
complicada para explicarmos com detalhes nesse momento, em resumo, System uma
classe predefinida que d acesso ao sistema, e out o fluxo de sada que est conectado
ao console. Portanto, System.out um objeto que encapsula a sada do console. O fato
de o Java usar um objeto para definir a sada do console mais uma evidncia de sua
natureza orientada a objetos.
Como voc deve ter notado, a sada (e a entrada) do console no usada com frequn-
cia em aplicativos Java do mundo real. J que a maioria dos ambientes de computao
modernos tem janelas e grfica, o I/O (input/output ou entrada/sada) do console mais
usado para programas utilitrios simples, programas de demonstrao e cdigo do lado do
servidor. Posteriormente neste livro, voc aprender outras maneiras de gerar sada usan-
do Java, mas, por enquanto, continuaremos a usar os mtodos de I/O do console.
Observe que a instruo println( ) termina com um ponto e vrgula. Todas as ins-
trues em Java terminam com um ponto e vrgula. As outras linhas do programa no
terminam em um ponto vrgula porque, tecnicamente, no so instrues.
Schildt_01.indd 15 05/12/12 11:41
16 Java para iniciantes
O primeiro smbolo } do programa termina main( ) e o ltimo termina a definio
da classe Example.
Um ltimo ponto: Java diferencia maisculas de minsculas. Esquecer disso pode
lhe causar problemas graves. Por exemplo, se voc digitar acidentalmente Main em vez
de main, ou PrintLn em vez de println, o programa anterior estar incorreto. Alm dis-
so, embora o compilador Java compile classes que no contm um mtodo main( ), ele
no tem como execut-las. Logo, se voc digitasse errado main, o compilador compilaria
seu programa. No entanto, o interpretador de Java relataria um erro por no conseguir
encontrar o mtodo main( ).
Tratando erros de sintaxe
Se ainda no tiver feito isso, insira, compile e execute o programa anterior. Como voc
deve saber por sua experincia anterior em programao, muito fcil digitar algo incor-
retamente por acidente ao inserir cdigo no computador. Felizmente, se voc inserir algo
errado em seu programa, o compilador exibir uma mensagem de erro de sintaxe quando
tentar compil-lo. O compilador Java tenta entender o cdigo-fonte no importando o
que foi escrito. Portanto, o erro que relatado nem sempre reflete a causa real do pro-
blema. No programa anterior, por exemplo, uma omisso acidental da chave de abertura
depois do mtodo main( ) faria o compilador relatar os dois erros a seguir:
Example.java:8: ';' expected
public static void main(String args[])
^
Example.java:11: class, interface, or enum expected
}
^
claro que a primeira mensagem de erro est totalmente errada, porque o que est
faltando no um ponto e vrgula, mas uma chave.
O importante nessa discusso que, quando seu programa tiver um erro de sintaxe,
voc no deve aceitar literalmente as mensagens do compilador. Elas podem ser engano-
sas. Voc pode ter de decifrar uma mensagem de erro para encontrar o problema real.
Examine tambm as ltimas linhas de cdigo de seu programa que antecedem a linha que
est sendo indicada. s vezes, um erro s relatado vrias linhas aps o ponto em que
ele realmente ocorreu.
Um segundo programa simples
Talvez nenhuma outra estrutura seja to importante para uma linguagem de programao
quanto a atribuio de um valor a uma varivel. Uma varivel um local nomeado na
memria ao qual pode ser atribudo um valor. Alm disso, o valor de uma varivel pode
ser alterado durante a execuo de um programa. Isto , o contedo de uma varivel
altervel e no fixo. O programa a seguir cria duas variveis chamadas var1 e var2:
/*
Este cdigo demonstra uma varivel.

Chame este arquivo de Example2.java.
*/
Schildt_01.indd 16 05/12/12 11:41
Captulo 1 Fundamentos da linguagem Java 17
class Example2 {
public static void main(String args[]) {
int var1; // esta instruo declara uma varivel
int var2; // esta instruo declara outra varivel

var1 = 1024; // esta instruo atribui 1024 a var1

System.out.println("var1 contains " + var1);

var2 = var1 / 2;

System.out.print("var2 contains var1 / 2: ");
System.out.println(var2);
}
}
Declara
variveis.
Atribui um valor
a uma varivel.
Quando voc executar esse programa, ver a sada abaixo:
var1 contains 1024
var2 contains var1 / 2: 512
Esse programa introduz vrios conceitos novos. Primeiro, a instruo
int var1; // esta instruo declara uma varivel
declara uma varivel chamada var1 de tipo inteiro. Em Java, todas as variveis devem ser
declaradas antes de serem usadas. Alm disso, o tipo de valor que a varivel pode conter
tambm deve ser especificado. Ele chamado de tipo da varivel. Nesse caso, var1 pode
conter valores inteiros. So valores que representam nmeros inteiros. Em Java, para
declarar uma varivel como de tipo inteiro, preciso preceder seu nome com a palavra-
-chave int. Portanto, a instruo anterior declara uma varivel chamada var1 de tipo int.
A linha seguinte declara uma segunda varivel chamada var2:
int var2; // esta instruo declara outra varivel
Observe que essa linha usa o mesmo formato da primeira, exceto pelo nome da varivel
ser diferente.
Em geral, para declarar uma varivel, usamos uma instruo como esta:
tipo nome-var;
Aqui, tipo especifica o tipo de varivel que est sendo declarado e nome-var o
nome da varivel. Alm de int, Java d suporte a vrios outros tipos de dados.
A linha de cdigo abaixo atribui a var1 o valor 1024:
var1 = 1024; // essa instruo atribui 1024 a var1
Em Java, o operador de atribuio o sinal de igualdade simples. Ele copia o valor do
lado direito para a varivel sua esquerda.
Schildt_01.indd 17 05/12/12 11:41
18 Java para iniciantes
A prxima linha de cdigo exibe o valor de var1 precedido pelo string var1 con-
tains:
System.out.println("var1 contains " + var1);
Nessa instruo, o sinal de adio faz o valor de var1 ser exibido aps o string que o pre-
cede. Essa abordagem pode ser generalizada. Usando o operador , voc pode encadear
quantos itens quiser dentro da mesma instruo println( ).
A linha de cdigo seguinte atribui a var2 o valor de var1 dividido por 2:
var2 = var1 / 2;
Essa linha divide o valor de var1 por 2 e armazena o resultado em var2. Portanto, aps
a linha ser executada, var2 conter o valor 512. O valor de var1 permanecer inalterado.
Como a maioria das outras linguagens de computador, Java d suporte a um conjunto
completo de operadores aritmticos, inclusive os mostrados aqui:
Adio
Subtrao
* Multiplicao
/ Diviso
Estas so as duas linhas seguintes do programa:
System.out.print("var2 contains var1 / 2: ");
System.out.println(var2);
Dois fatos novos esto ocorrendo aqui. Em primeiro lugar, o mtodo interno print( )
usado para exibir o string var2 contains var1 / 2: . Esse string no seguido por uma
nova linha. Ou seja, quando a prxima sada for gerada, ela comear na mesma linha.
O mtodo print( ) exatamente igual a println( ), exceto por no exibir uma nova linha
aps cada chamada. Em segundo lugar, na chamada a println( ), observe que var2
usada sozinha. Tanto print( ) quanto println( ) podem ser usados parar exibir valores de
qualquer um dos tipos internos do Java.
Mais uma coisa sobre a declarao de variveis antes de avanarmos: possvel
declarar duas ou mais variveis usando a mesma instruo de declarao. Apenas separe
seus nomes com vrgulas. Por exemplo, var1 e var2 poderiam ter sido declaradas assim:
int var1, var2; // as duas declaradas com o uso de uma instruo
Outro tipo de dado
No programa anterior, uma varivel de tipo int foi usada. No entanto, a varivel de tipo
int s pode conter nmeros inteiros. Logo, no pode ser usada quando um componente
fracionrio for necessrio. Por exemplo, uma varivel int pode conter o valor 18, mas no
o valor 18.3. Felizmente, int apenas um dos vrios tipos de dados definidos por Java.
Para permitir nmeros com componentes fracionrios, Java define dois tipos de ponto
flutuante: float e double, que representam valores de preciso simples e dupla, respecti-
vamente. Dos dois, double o mais usado.
Schildt_01.indd 18 05/12/12 11:41
Captulo 1 Fundamentos da linguagem Java 19
Para declarar uma varivel de tipo double, use uma instruo semelhante mostrada
abaixo:
double x;
Aqui, x o nome da varivel, que de tipo double. J que x tem um tipo de ponto flutu-
ante, pode conter valores como 122,23, 0,034 ou 19,0.
Para entender melhor a diferena entre int e double, teste o programa a seguir:
/*
Esse programa ilustra a diferena
entre int e double.

Chame esse arquivo de Example3.java.
*/
class Example3 {
public static void main(String args[]) {
int var; // essa instruo declara uma varivel int
double x; // essa instruo declara uma varivel de ponto flutuante

var = 10; // atribui a var o valor 10

x = 10.0; // atribui a x o valor 10,0

System.out.println("Original value of var: " + var);
System.out.println("Original value of x: " + x);
System.out.println(); // exibe uma linha em branco

// agora, divide as duas por 4
var = var / 4;
x = x / 4;

System.out.println("var after division: " + var);
System.out.println("x after division: " + x);
}
}
Exibe uma linha
em branco.
A sada do programa mostrada aqui:
Original value of var: 10
Original value of x: 10.0

var after division: 2
x after division: 2.5
Componente fracionrio perdido
Componente fracionrio preservado
Como voc pode ver, quando var dividida por 4, uma diviso de nmeros inteiros
executada e o resultado 2 o componente fracionrio perdido. No entanto, quando x
dividida por 4, o componente fracionrio preservado e a resposta apropriada exibida.
H outro fato novo a ser observado no programa. Para exibir uma linha em branco,
simplesmente chamamos println( ) sem nenhum argumento.
Schildt_01.indd 19 05/12/12 11:41
20 Java para iniciantes
Tente isto 1-1: Converta gales em litros
Embora os exemplos de programas anteriores ilustrem vrios recursos im-
portantes da linguagem Java, eles no so muito teis. Mesmo que voc
ainda no saiba muito sobre Java, pode colocar em ao o que aprendeu para criar um
programa prtico. Neste projeto, criaremos um programa que converte gales em litros.
O programa funcionar declarando duas variveis double. Uma conter o nmero de
gales e a outra o nmero de litros aps a converso. Seja um galo equivalente a 3,7854
litros. Logo, na converso de gales em litros, o valor do galo multiplicado por 3,7854.
O programa exibe tanto o nmero de gales quanto o nmero equivalente em litros.
1. Crie um novo arquivo chamado GalToLit.java.
2. Insira o programa a seguir no arquivo:
/*
Tente isto 1-1

Este programa converte gales em litros.

Chame-o de GalToLit.java.
*/
class GalToLit {
public static void main(String args[]) {
double gallons; // contm o nmero de gales
double liters; // contm a converso para litros

gallons = 10; // comea com 10 gales
liters = gallons * 3.7854; // converte para litros

System.out.println(gallons + " gallons is " + liters + " liters.");
}
}
GalToLit.java
Pergunte ao especialista
P: Por que Java tem tipos de dados diferentes para inteiros e valores de ponto flutuante? Isto ,
por que no so todos valores numricos do mesmo tipo?
R: Java fornece tipos de dados diferentes para que voc possa criar programas eficientes. Por exem-
plo, a aritmtica de inteiros mais rpida do que os clculos de ponto flutuante. Logo, se voc
no precisar de valores fracionrios, no ter que sofrer a sobrecarga associada aos tipos float ou
double. Alm disso, a quantidade de memria requerida para um tipo de dado pode ser menor do
que a requerida para outro. Fornecendo tipos diferentes, Java permite que voc use melhor os re-
cursos do sistema. Para concluir, alguns algoritmos requerem (ou pelo menos se beneficiam de) o
uso de um tipo de dado especfico. Em geral, Java fornece vrios tipos internos para proporcionar
maior flexibilidade.
Schildt_01.indd 20 05/12/12 11:41
Captulo 1 Fundamentos da linguagem Java 21
3. Compile o programa usando a linha de comando a seguir:
javac GalToLit.java
4. Execute o programa usando este comando:
java GalToLit
Voc ver esta sada:
10.0 gallons is 37.854 liters.
5. Como se encontra, esse programa converte 10 gales em litros. No entanto, alterando
o valor atribudo a gallons, voc pode fazer o programa converter um nmero dife-
rente de gales em seu nmero equivalente em litros.
Duas instrues de controle
Dentro de um mtodo, a execuo se d da instruo atual para a prxima, de cima para
baixo. Porm, possvel alterar esse fluxo com o uso das diversas instrues de controle
de programa suportadas pelo Java. Vamos examinar as instrues de controle com deta-
lhes mais frente, mas duas sero introduzidas brevemente porque iremos us-las para
criar exemplos de programas.
A instruo if
Voc pode executar seletivamente parte de um programa com o uso da instruo con-
dicional de Java: a instruo if. A instruo if da linguagem Java funciona de maneira
semelhante instruo IF de qualquer outra linguagem. Sua forma mais simples mos-
trada abaixo:
if(condio) instruo;
Aqui, condio uma expresso booleana. Se a condio for verdadeira, a instruo ser
executada. Se a condio for falsa, a instruo ser ignorada. Veja um exemplo:
if(10 < 11) System.out.println("10 is less than 11");
Nesse caso, j que 10 menor do que 11, a expresso condicional verdadeira e println( )
ser executado. No entanto, considere o seguinte:
if(10 < 9) System.out.println("this won't be displayed");
Como 10 no menor do que 9, agora a chamada a println( ) no ocorrer.
Schildt_01.indd 21 05/12/12 11:41
22 Java para iniciantes
Java define uma lista completa dos operadores relacionais que podem ser usados em
uma expresso condicional. Eles so mostrados aqui:
Operador Significado
< Menor que
< Menor ou igual
> Maior que
> Maior ou igual
Igual a
! Diferente
Observe que o teste de igualdade usa o sinal de igual duplo.
Aqui est um programa que ilustra a instruo if:
/*
Demonstra a instruo if.

Chame este arquivo de IfDemo.java.
*/
class IfDemo {
public static void main(String args[]) {
int a, b, c;

a = 2;
b = 3;

if(a < b) System.out.println("a is less than b");

// esta instruo no exibir nada
if(a == b) System.out.println("you won't see this");

System.out.println();

c = a - b; // c contm -1

System.out.println("c contains -1");
if(c >= 0) System.out.println("c is non-negative");
if(c < 0) System.out.println("c is negative");

System.out.println();

c = b - a; // agora c contm 1

System.out.println("c contains 1");
if(c >= 0) System.out.println("c is non-negative");
Schildt_01.indd 22 05/12/12 11:41
Captulo 1 Fundamentos da linguagem Java 23
if(c < 0) System.out.println("c is negative");

}
}
A sada gerada pelo programa mostrada abaixo:
a is less than b
c contains -1
c is negative
c contains 1
c is non-negative
Observe outra coisa nesse programa. A linha
int a, b, c;
declara trs variveis, a, b e c, usando uma lista separada por vrgulas. Como mencionado
anteriormente, quando voc precisar de duas ou mais variveis do mesmo tipo, elas podero
ser declaradas na mesma instruo. Apenas separe os nomes das variveis com vrgulas.
O lao for
Voc pode executar repetidamente uma sequncia de cdigo criando um lao. Java for-
nece um grupo poderoso de estruturas de lao. A que examinaremos aqui o lao for. A
forma mais simples do lao for mostrada a seguir:
for(inicializao; condio; iterao) instruo;
Em sua forma mais comum, a parte de inicializao do lao define uma varivel de
controle de lao com um valor inicial. Condio uma expresso booleana que testa a
varivel de controle do lao. Se o resultado desse teste for verdadeiro, o lao for con-
tinuar a iterar. Se for falso, o lao ser encerrado. A expresso de iterao determina
como a varivel de lao alterada sempre que o lao itera. Aqui est um programa curto
que ilustra o lao for:
/*
Demonstra o lao for.

Chame este arquivo de ForDemo.java.
*/
class ForDemo {
public static void main(String args[]) {
int count;

for(count = 0; count < 5; count = count+1)
System.out.println("This is count: " + count);

System.out.println("Done!");
}
}
Esse lao itera
cinco vezes.
Schildt_01.indd 23 05/12/12 11:41
24 Java para iniciantes
A sada gerada pelo programa mostrada aqui:
This is count: 0
This is count: 1
This is count: 2
This is count: 3
This is count: 4
Done!
Nesse exemplo, count a varivel de controle do lao. Ela configurada com zero na
parte de inicializao de for. No comeo de cada iterao (inclusive a primeira), o teste
condicional count < 5 executado. Se o resultado desse teste for verdadeiro, sero exe-
cutadas a instruo println( ) e ento a parte de iterao do lao. Esse processo continua
at o teste condicional ser falso, momento em que a execuo retomada no final do
lao. O interessante que em programas Java criados profissionalmente quase nunca
vemos a parte de iterao do lao escrita como mostrado no programa anterior. Isto ,
raramente vemos instrues como esta:
count = count + 1;
Isso ocorre porque Java inclui um operador de incremento especial que executa essa
operao com mais eficincia. O operador de incremento (ou seja, dois sinais de
adio seguidos). Ele aumenta seu operando em uma unidade. Com o uso do operador de
incremento, a instruo anterior pode ser escrita assim:
count++;
Logo, o lao for do programa anterior normalmente ser escrito desta forma:
for(count = 0; count < 5; count++)
Se quiser, faa o teste. Como ver, o lao continuar sendo executado exatamente como
antes.
Java tambm fornece um operador de decremento, que especificado na forma .
Esse operador diminui seu operando em uma unidade.
Crie blocos de cdigo
Outro elemento-chave de Java o bloco de cdigo. Um bloco de cdigo um agrupa-
mento de duas ou mais instrues. Isso feito com a incluso das instrues entre chaves
de abertura e fechamento. Quando um bloco de cdigo criado, ele se torna uma unidade
lgica que pode ser usada em qualquer local onde seria usada uma nica instruo. Por
exemplo, um bloco pode ser o alvo de instrues if e for em Java. Considere a seguinte
instruo if:
if(w < h) {
v = w * h;
w = 0;
}
Incio do bloco
Fim do bloco
Schildt_01.indd 24 05/12/12 11:41
Captulo 1 Fundamentos da linguagem Java 25
Aqui, se w for menor do que h, as duas instrues do bloco sero executadas. Logo, elas
formam uma unidade lgica, e uma instruo no pode ser executada sem a outra. O pon-
to-chave que sempre que voc precisar vincular logicamente duas ou mais instrues,
pode fazer isso criando um bloco. Os blocos de cdigo permitem que muitos algoritmos
sejam implementados com maior clareza e eficincia.
A seguir, temos um programa que usa um bloco de cdigo para impedir a diviso
por zero:
/*
Demonstra um bloco de cdigo.

Chame este arquivo de BlockDemo.java.
*/
class BlockDemo {
public static void main(String args[]) {
double i, j, d;

i = 5;
j = 10;

// o alvo desta instruo if um bloco
if(i != 0) {
System.out.println("i does not equal zero");
d = j / i;
System.out.print("j / i is " + d);
}
}
}
O alvo de if
este bloco
inteiro.
A sada gerada por esse programa mostrada abaixo:
i does not equal zero
j / i is 2.0
Nesse caso, o alvo da instruo if um bloco de cdigo e no uma instruo individual.
Se a condio que controla if for verdadeira (como aqui), as trs instrues do bloco
sero executadas. Tente configurar i com zero e observe o resultado. Voc ver que o
bloco inteiro ignorado.
Pergunte ao especialista
P: O uso de um bloco de cdigo introduz alguma ineficincia de tempo de execuo? Em outras
palavras, Java executa realmente { e }?
R: No. Os blocos de cdigo no adicionam nenhuma sobrecarga. Na verdade, devido sua habilida-
de em simplificar a codificao de certos algoritmos, geralmente seu uso aumenta a velocidade e
a eficincia. Alm disso, os smbolos { e } existem apenas no cdigo-fonte do programa. Java no
executa { e }.
Schildt_01.indd 25 05/12/12 11:41
26 Java para iniciantes
Como voc ver posteriormente neste livro, os blocos de cdigo tm propriedades e
usos adicionais. No entanto, a principal razo de sua existncia a criao de unidades de
cdigo logicamente inseparveis.
Ponto e vrgula e posicionamento
Em Java, o ponto e vrgula um separador que usado para terminar uma instruo. Isto
, cada instruo individual deve ser finalizada com um ponto e vrgula. Ele indica o fim
de uma entidade lgica.
Como voc sabe, um bloco um conjunto de instrues conectadas logicamente que
so delimitadas por chaves de abertura e fechamento. Ele no finalizado com um ponto
e vrgula. J que um grupo de instrues, com um ponto e vrgula aps cada instruo,
faz sentido que o bloco no seja terminado com um ponto e vrgula; em vez disso, o fim
do bloco indicado pela chave de fechamento.
Java no reconhece o fim da linha como um terminador. Portanto, no importa onde
na linha inserimos uma instruo. Por exemplo,
x = y;
y = y + 1;
System.out.println(x + " " + y);
o mesmo que o seguinte, em Java:
x = y; y = y + 1; System.out.println(x + " " + y);
Alm disso, os elementos individuais de uma instruo tambm podem ser inseridos
em linhas separadas. Por exemplo, o cdigo a seguir perfeitamente aceitvel:
System.out.println( "This is a long line of output" +
x + y + z +
"more output");
A diviso de linhas longas dessa forma costuma ser usada para a criao de programas
mais legveis. Tambm pode ajudar a impedir que linhas excessivamente longas passem
para a prxima linha.
Prticas de recuo
Voc deve ter notado nos exemplos anteriores que certas instrues foram recuadas. Java
uma linguagem de forma livre, ou seja, no importa onde inserimos as instrues em
uma linha em relao umas s outras. No entanto, com o passar dos anos, desenvolveu-se
um estilo de recuo comum e aceito que proporciona programas mais legveis. Este livro
segue o estilo e recomendvel que voc faa o mesmo. Usando esse estilo, voc recuar
um nvel aps cada chave de abertura e se mover para trs em um nvel aps cada chave
de fechamento. Certas instrues encorajam algum recuo adicional; elas sero abordadas
posteriormente.
Schildt_01.indd 26 05/12/12 11:41
Captulo 1 Fundamentos da linguagem Java 27
Tente isto 1-2: Melhore o conversor
Voc pode usar o lao for, a instruo if e blocos de cdigo para
criar uma verso melhorada do conversor de gales em litros de-
senvolvida no primeiro projeto. Essa nova verso exibir uma tabela de converses co-
meando com 1 galo e terminando em 100 gales. A cada 10 gales, uma linha em
branco ser exibida. Isso feito com o uso de uma varivel chamada counter que conta o
nmero de linhas que foram exibidas. Preste uma ateno especial no seu uso.
1. Crie um novo arquivo chamado GalToLitTable.java.
2. Insira o programa a seguir no arquivo:
/*
Tente isto 1-2

Este programa exibe uma tabela de converses
de gales em litros.

Chame-o de GalToLitTable.java.
*/
class GalToLitTable {
public static void main(String args[]) {
double gallons, liters;
int counter;

counter = 0;
for(gallons = 1; gallons <= 100; gallons++) {
liters = gallons * 3.7854; // converte para litros
System.out.println(gallons + " gallons is " +
liters + " liters.");

counter++;
// a cada dcima linha, exibe uma linha em branco
if(counter == 10) {
System.out.println();
counter = 0; // zera o contador de linhas
}
}
}
}
Inicialmente o contador de linhas confgurado com zero.
Incrementa o contador de
linhas a cada iterao do loop.
Se o valor do contador for 10,
exibe uma linha em branco.

3. Compile o programa usando a linha de comando abaixo:
javac GalToLitTable.java
4. Execute o programa usando este comando:
java GalToLitTable
GalToLitTable.java
(continua)
Schildt_01.indd 27 05/12/12 11:41
28 Java para iniciantes
Aqui est uma parte da sada que voc ver:
1.0 gallons is 3.7854 liters.
2.0 gallons is 7.5708 liters.
3.0 gallons is 11.356200000000001 liters.
4.0 gallons is 15.1416 liters.
5.0 gallons is 18.927 liters.
6.0 gallons is 22.712400000000002 liters.
7.0 gallons is 26.4978 liters.
8.0 gallons is 30.2832 liters.
9.0 gallons is 34.0686 liters.
10.0 gallons is 37.854 liters.
11.0 gallons is 41.6394 liters.
12.0 gallons is 45.424800000000005 liters.
13.0 gallons is 49.2102 liters.
14.0 gallons is 52.9956 liters.
15.0 gallons is 56.781 liters.
16.0 gallons is 60.5664 liters.
17.0 gallons is 64.3518 liters.
18.0 gallons is 68.1372 liters.
19.0 gallons is 71.9226 liters.
20.0 gallons is 75.708 liters.
21.0 gallons is 79.49340000000001 liters.
22.0 gallons is 83.2788 liters.
23.0 gallons is 87.0642 liters.
24.0 gallons is 90.84960000000001 liters.
25.0 gallons is 94.635 liters.
26.0 gallons is 98.4204 liters.
27.0 gallons is 102.2058 liters.
28.0 gallons is 105.9912 liters.
29.0 gallons is 109.7766 liters.
30.0 gallons is 113.562 liters.
As palavras-chave Java
H 50 palavras-chave definidas atualmente na linguagem Java (consulte a Tabela 1-1).
Essas palavras-chave, combinadas com a sintaxe dos operadores e separadores, formam
a definio da linguagem. Elas no podem ser usadas como nomes de varivel, classe ou
mtodo.
As palavras-chave const e goto esto reservadas, mas no so usadas. Nos pri-
mrdios de Java, vrias outras palavras-chave estavam reservadas para possvel uso
futuro. No entanto, a especificao atual s define as palavras-chave mostradas na
Tabela 1-1.
Schildt_01.indd 28 05/12/12 11:41
Captulo 1 Fundamentos da linguagem Java 29
Tabela 1-1 As palavras-chave Java
abstract assert boolean break byte case
catch char class const continue default
do double else enum extends final
finally float for goto if implements
import instanceof int interface long native
new package private protected public return
short static strictfp super switch synchronized
this throw throws transient try void
volatile while
Alm das palavras-chave, Java reserva as palavras a seguir: true, false e null. So
valores definidos pela linguagem. Voc no pode usar essas palavras em nomes de vari-
veis, classes e assim por diante.
Identificadores em Java
Em Java, um identificador o nome dado a um mtodo, uma varivel ou qualquer outro
item definido pelo usurio. Os identificadores podem ter de um a vrios caracteres. Os
nomes de varivel podem comear com qualquer letra do alfabeto, um sublinhado ou
um cifro. Em seguida pode haver uma letra, um dgito, um cifro ou um sublinhado. O
sublinhado pode ser usado para melhorar a legibilidade do nome da varivel, como em
line_count. As letras maisculas e minsculas so diferentes, ou seja, para Java, myvar e
MyVar so nomes diferentes. Aqui esto alguns exemplos de identificadores aceitveis:
Test x y2 MaxLoad
$up _top my_var sample23
Lembre-se, voc no pode iniciar um identificador com um dgito. Logo, 12x um iden-
tificador invlido, por exemplo.
Voc no pode usar nenhuma das palavras-chave Java como nomes de identifica-
dor. Tambm no deve atribuir o nome de nenhum mtodo padro, como println, a um
identificador. Alm dessas duas restries, a boa prtica de programao preconiza o uso
de nomes de identificador que reflitam o significado ou o uso dos itens que esto sendo
nomeados.
As bibliotecas de classes Java
Os exemplos de programa mostrados neste captulo fazem uso de dois dos mtodos inter-
nos da linguagem Java: println( ) e print( ). Esses mtodos so membros da classe Sys-
tem, uma classe predefinida pelo Java que includa automaticamente nos programas.
De um modo geral, o ambiente Java depende de vrias bibliotecas de classes internas
que contm muitos mtodos internos para dar suporte a coisas como I/O, manipulao
Schildt_01.indd 29 05/12/12 11:41
30 Java para iniciantes
de strings, rede e elementos grficos. As classes padro tambm do suporte sada em
janelas. Portanto, Java como um todo uma combinao da prpria linguagem Java mais
suas classes padro. Como voc ver, as bibliotecas de classes fornecem uma poro
considervel da funcionalidade que vem com Java. Na verdade, faz parte de se tornar
programador Java aprender a usar as classes Java padro. No decorrer deste livro, vrios
elementos das classes e mtodos de biblioteca padro so descritos. No entanto, a biblio-
teca Java algo que voc tambm vai querer explorar melhor por sua prpria conta.
Teste do Captulo 1
1. O que bytecode e por que ele importante para o uso de Java em programao na
Internet?
2. Quais so os trs princpios bsicos da programao orientada a objetos?
3. Onde os programas Java comeam a ser executados?
4. O que uma varivel?
5. Quais dos nomes de varivel a seguir so invlidos?
A. count
B. $count
C. count27
D. 67count
6. Como se cria um comentrio de linha nica? E um comentrio de vrias linhas?
7. Mostre a forma geral da instruo if. Mostre tambm a do lao for.
8. Como se cria um bloco de cdigo?
9. A gravidade da Lua cerca de 17% a da Terra. Crie um programa que calcule seu
peso na Lua.
10. Adapte o cdigo da seo Tente isto 1-2 para que ele exiba uma tabela de converses
de polegadas para metros. Exiba 12 ps de converses, polegada a polegada. Gere
uma linha em branco a cada 12 polegadas. (Um metro igual a aproximadamente
39,37 polegadas.)
11. Se voc cometer um engano na digitao ao inserir seu programa, isso resultar em
que tipo de erro?
12. importante o local onde inserimos uma instruo em uma linha?
Schildt_01.indd 30 05/12/12 11:41

Vous aimerez peut-être aussi