java basico

70
Java Basico Versão 1.0.0

Upload: hudson-augusto

Post on 08-Jul-2015

824 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Java Basico

Java BasicoVersão 1.0.0

Page 2: Java Basico

Sumário

I Sobre essa Apostila 3

II Informações Básicas 5

III GNU Free Documentation License 10

IV Java Básico 19

1 O que é Java 20

2 Plano de ensino 212.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.2 Público Alvo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.3 Pré-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.4 Descrição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.5 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.6 Cronograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.7 Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.8 Avaliação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.9 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3 Introdução 243.1 Histórico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

3.1.1 História . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243.2 Instalação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.2.1 Instalação através de pacote binário . . . . . . . . . . . . . . . . . . . . . . . 253.2.2 Distribuições derivadas do Debian . . . . . . . . . . . . . . . . . . . . . . . . 26

3.3 Introdução à Linguagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.4 Tipos de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

4 Conceitos Básicos 324.1 Classes, Objetos, Atributos e Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . 32

4.1.1 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324.1.2 Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344.1.3 Atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354.1.4 Atributos estáticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

1

Page 3: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

4.1.5 Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374.2 Estruturas de Controle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

4.2.1 Estruturas de Repetição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414.2.2 Estruturas Condicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

4.3 E/S Teclado e Arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464.3.1 E/S Teclado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474.3.2 E/S Arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

4.4 Vetores e Cadeia de Caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514.4.1 Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514.4.2 Cadeia de Caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

5 Conceitos Avançados 575.1 Tratamento de erros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575.2 Encapsulamento, Herança e Polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . 59

5.2.1 Encapsulamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595.2.2 Herança . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605.2.3 Polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

5.3 Interfaces Gráficas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625.3.1 Gerência de Janelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

5.4 Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

2

Page 4: Java Basico

Parte I

Sobre essa Apostila

3

Page 5: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Conteúdo

O conteúdo dessa apostila é fruto da compilação de diversos materiais livres publicados na in-ternet, disponíveis em diversos sites ou originalmente produzido no CDTC (http://www.cdtc.org.br.)

O formato original deste material bem como sua atualização está disponível dentro da licençaGNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seção demesmo nome, tendo inclusive uma versão traduzida (não oficial).

A revisão e alteração vem sendo realizada pelo CDTC ([email protected]) desde outubrode 2006. Críticas e sugestões construtivas serão bem-vindas a qualquer hora.

Autores

A autoria deste é de responsabilidade de Edson Hungria Junior ([email protected]) .

O texto original faz parte do projeto Centro de Difusão de Tecnologia e Conhecimento quevêm sendo realizado pelo ITI (Instituto Nacional de Tecnologia da Informação) em conjunto comoutros parceiros institucionais, e com as universidades federais brasileiras que tem produzido eutilizado Software Livre apoiando inclusive a comunidade Free Software junto a outras entidadesno país.

Informações adicionais podem ser obtidas através do email [email protected], ou dahome page da entidade, através da URL http://www.cdtc.org.br.

Garantias

O material contido nesta apostila é isento de garantias e o seu uso é de inteira responsabi-lidade do usuário/leitor. Os autores, bem como o ITI e seus parceiros, não se responsabilizamdireta ou indiretamente por qualquer prejuízo oriundo da utilização do material aqui contido.

Licença

Copyright ©2006, Instituto Nacional de Tecnologia da Informação ([email protected]) .

Permission is granted to copy, distribute and/or modify this document under the termsof the GNU Free Documentation License, Version 1.1 or any later version published bythe Free Software Foundation; with the Invariant Chapter being SOBRE ESSA APOS-TILA. A copy of the license is included in the section entitled GNU Free DocumentationLicense.

4

Page 6: Java Basico

Parte II

Informações Básicas

5

Page 7: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Sobre o CDTC

Objetivo Geral

O Projeto CDTC visa a promoção e o desenvolvimento de ações que incentivem a dissemina-ção de soluções que utilizem padrões abertos e não proprietários de tecnologia, em proveito dodesenvolvimento social, cultural, político, tecnológico e econômico da sociedade brasileira.

Objetivo Específico

Auxiliar o Governo Federal na implantação do plano nacional de software não-proprietário ede código fonte aberto, identificando e mobilizando grupos de formadores de opinião dentre osservidores públicos e agentes políticos da União Federal, estimulando e incentivando o mercadonacional a adotar novos modelos de negócio da tecnologia da informação e de novos negóciosde comunicação com base em software não-proprietário e de código fonte aberto, oferecendotreinamento específico para técnicos, profissionais de suporte e funcionários públicos usuários,criando grupos de funcionários públicos que irão treinar outros funcionários públicos e atuar comoincentivadores e defensores dos produtos de software não proprietários e código fonte aberto, ofe-recendo conteúdo técnico on-line para serviços de suporte, ferramentas para desenvolvimento deprodutos de software não proprietários e do seu código fonte livre, articulando redes de terceiros(dentro e fora do governo) fornecedoras de educação, pesquisa, desenvolvimento e teste de pro-dutos de software livre.

Guia do aluno

Neste guia, você terá reunidas uma série de informações importantes para que você comeceseu curso. São elas:

• Licenças para cópia de material disponível;

• Os 10 mandamentos do aluno de Educação a Distância;

• Como participar dos foruns e da wikipédia;

• Primeiros passos.

É muito importante que você entre em contato com TODAS estas informações, seguindo oroteiro acima.

Licença

Copyright ©2006, Instituto Nacional de Tecnologia da Informação ([email protected]).

6

Page 8: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

É dada permissão para copiar, distribuir e/ou modificar este documento sob os termosda Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posteriorpúblicada pela Free Software Foundation; com o Capitulo Invariante SOBRE ESSAAPOSTILA. Uma cópia da licença está inclusa na seção entitulada "Licença de Docu-mentação Livre GNU".

Os 10 mandamentos do aluno de educação online

• 1. Acesso à Internet: ter endereço eletrônico, um provedor e um equipamento adequado épré-requisito para a participação nos cursos a distância;

• 2. Habilidade e disposição para operar programas: ter conhecimentos básicos de Informá-tica é necessário para poder executar as tarefas;

• 3. Vontade para aprender colaborativamente: interagir, ser participativo no ensino a distân-cia conta muitos pontos, pois irá colaborar para o processo ensino-aprendizagem pessoal,dos colegas e dos professores;

• 4. Comportamentos compatíveis com a etiqueta: mostrar-se interessado em conhecer seuscolegas de turma respeitando-os e se fazendo ser respeitado pelos mesmos;

• 5. Organização pessoal: planejar e organizar tudo é fundamental para facilitar a sua revisãoe a sua recuperação de materiais;

• 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigações erealizá-las em tempo real;

• 7. Curiosidade e abertura para inovações: aceitar novas idéias e inovar sempre;

• 8. Flexibilidade e adaptação: requisitos necessário à mudança tecnológica, aprendizagense descobertas;

• 9. Objetividade em sua comunicação: comunicar-se de forma clara, breve e transparente éponto - chave na comunicação pela Internet;

• 10. Responsabilidade: ser responsável por seu próprio aprendizado. O ambiente virtual nãocontrola a sua dedicação, mas reflete os resultados do seu esforço e da sua colaboração.

Como participar dos fóruns e Wikipédia

Você tem um problema e precisa de ajuda?

Podemos te ajudar de 2 formas:

A primeira é o uso dos fóruns de notícias e de dúvidas gerais que se distinguem pelo uso:

. O fórum de notícias tem por objetivo disponibilizar um meio de acesso rápido a informaçõesque sejam pertinentes ao curso (avisos, notícias). As mensagens postadas nele são enviadas a

7

Page 9: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

todos participantes. Assim, se o monitor ou algum outro participante tiver uma informação queinteresse ao grupo, favor postá-la aqui.Porém, se o que você deseja é resolver alguma dúvida ou discutir algum tópico específico docurso. É recomendado que você faça uso do Fórum de dúvidas gerais que lhe dá recursos maisefetivos para esta prática.

. O fórum de dúvidas gerais tem por objetivo disponibilizar um meio fácil, rápido e interativopara solucionar suas dúvidas e trocar experiências. As mensagens postadas nele são enviadasa todos participantes do curso. Assim, fica muito mais fácil obter respostas, já que todos podemajudar.Se você receber uma mensagem com algum tópico que saiba responder, não se preocupe com aformalização ou a gramática. Responda! E não se esqueça de que antes de abrir um novo tópicoé recomendável ver se a sua pergunta já foi feita por outro participante.

A segunda forma se dá pelas Wikis:

. Uma wiki é uma página web que pode ser editada colaborativamente, ou seja, qualquer par-ticipante pode inserir, editar, apagar textos. As versões antigas vão sendo arquivadas e podemser recuperadas a qualquer momento que um dos participantes o desejar. Assim, ela oferece umótimo suporte a processos de aprendizagem colaborativa. A maior wiki na web é o site "Wikipé-dia", uma experiência grandiosa de construção de uma enciclopédia de forma colaborativa, porpessoas de todas as partes do mundo. Acesse-a em português pelos links:

• Página principal da Wiki - http://pt.wikipedia.org/wiki/

Agradecemos antecipadamente a sua colaboração com a aprendizagem do grupo!

Primeiros Passos

Para uma melhor aprendizagem é recomendável que você siga os seguintes passos:

• Ler o Plano de Ensino e entender a que seu curso se dispõe a ensinar;

• Ler a Ambientação do Moodle para aprender a navegar neste ambiente e se utilizar dasferramentas básicas do mesmo;

• Entrar nas lições seguindo a seqüência descrita no Plano de Ensino;

• Qualquer dúvida, reporte ao Fórum de Dúvidas Gerais.

Perfil do Tutor

Segue-se uma descrição do tutor ideal, baseada no feedback de alunos e de tutores.

O tutor ideal é um modelo de excelência: é consistente, justo e profissional nos respectivosvalores e atitudes, incentiva mas é honesto, imparcial, amável, positivo, respeitador, aceita asidéias dos estudantes, é paciente, pessoal, tolerante, apreciativo, compreensivo e pronto a ajudar.

8

Page 10: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

A classificação por um tutor desta natureza proporciona o melhor feedback possível, é crucial, e,para a maior parte dos alunos, constitui o ponto central do processo de aprendizagem.’ Este tutorou instrutor:

• fornece explicações claras acerca do que ele espera e do estilo de classificação que iráutilizar;

• gosta que lhe façam perguntas adicionais;

• identifica as nossas falhas, mas corrige-as amavelmente’, diz um estudante, ’e explica por-que motivo a classificação foi ou não foi atribuída’;

• tece comentários completos e construtivos, mas de forma agradável (em contraste com umreparo de um estudante: ’os comentários deixam-nos com uma sensação de crítica, deameaça e de nervossismo’)

• dá uma ajuda complementar para encorajar um estudante em dificuldade;

• esclarece pontos que não foram entendidos, ou corretamente aprendidos anteriormente;

• ajuda o estudante a alcançar os seus objetivos;

• é flexível quando necessário;

• mostra um interesse genuíno em motivar os alunos (mesmo os principiantes e, por isso,talvez numa fase menos interessante para o tutor);

• escreve todas as correções de forma legível e com um nível de pormenorização adequado;

• acima de tudo, devolve os trabalhos rapidamente;

9

Page 11: Java Basico

Parte III

GNU Free Documentation License

10

Page 12: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

(Traduzido pelo João S. O. Bueno através do CIPSGA em 2001)Esta é uma tradução não oficial da Licença de Documentação Livre GNU em Português Brasi-

leiro. Ela não é publicada pela Free Software Foundation, e não se aplica legalmente a distribuiçãode textos que usem a GFDL - apenas o texto original em Inglês da GNU FDL faz isso. Entretanto,nós esperamos que esta tradução ajude falantes de português a entenderem melhor a GFDL.

This is an unofficial translation of the GNU General Documentation License into Brazilian Por-tuguese. It was not published by the Free Software Foundation, and does not legally state thedistribution terms for software that uses the GFDL–only the original English text of the GFDL doesthat. However, we hope that this translation will help Portuguese speakers understand the GFDLbetter.

Licença de Documentação Livre GNU Versão 1.1, Março de 2000

Copyright (C) 2000 Free Software Foundation, Inc.59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

É permitido a qualquer um copiar e distribuir cópias exatas deste documento de licença, masnão é permitido alterá-lo.

INTRODUÇÃO

O propósito desta Licença é deixar um manual, livro-texto ou outro documento escrito "livre"nosentido de liberdade: assegurar a qualquer um a efetiva liberdade de copiá-lo ou redistribui-lo,com ou sem modificações, comercialmente ou não. Secundariamente, esta Licença mantémpara o autor e editor uma forma de ter crédito por seu trabalho, sem ser considerado responsávelpelas modificações feitas por terceiros.

Esta Licença é um tipo de "copyleft"("direitos revertidos"), o que significa que derivações dodocumento precisam ser livres no mesmo sentido. Ela complementa a GNU Licença Pública Ge-ral (GNU GPL), que é um copyleft para software livre.

Nós fizemos esta Licença para que seja usada em manuais de software livre, por que softwarelivre precisa de documentação livre: um programa livre deve ser acompanhado de manuais queprovenham as mesmas liberdades que o software possui. Mas esta Licença não está restrita amanuais de software; ela pode ser usada para qualquer trabalho em texto, independentementedo assunto ou se ele é publicado como um livro impresso. Nós recomendamos esta Licença prin-cipalmente para trabalhos cujo propósito seja de introdução ou referência.

APLICABILIDADE E DEFINIÇÕES

Esta Licença se aplica a qualquer manual ou outro texto que contenha uma nota colocada pelodetentor dos direitos autorais dizendo que ele pode ser distribuído sob os termos desta Licença.O "Documento"abaixo se refere a qualquer manual ou texto. Qualquer pessoa do público é um

11

Page 13: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

licenciado e é referida como "você".

Uma "Versão Modificada"do Documento se refere a qualquer trabalho contendo o documentoou uma parte dele, quer copiada exatamente, quer com modificações e/ou traduzida em outralíngua.

Uma "Seção Secundária"é um apêndice ou uma seção inicial do Documento que trata ex-clusivamente da relação dos editores ou dos autores do Documento com o assunto geral doDocumento (ou assuntos relacionados) e não contém nada que poderia ser incluído diretamentenesse assunto geral (Por exemplo, se o Documento é em parte um livro texto de matemática, aSeção Secundária pode não explicar nada de matemática).

Essa relação poderia ser uma questão de ligação histórica com o assunto, ou matérias relaci-onadas, ou de posições legais, comerciais, filosóficas, éticas ou políticas relacionadas ao mesmo.

As "Seções Invariantes"são certas Seções Secundárias cujos títulos são designados, comosendo de Seções Invariantes, na nota que diz que o Documento é publicado sob esta Licença.

Os "Textos de Capa"são certos trechos curtos de texto que são listados, como Textos de CapaFrontal ou Textos da Quarta Capa, na nota que diz que o texto é publicado sob esta Licença.

Uma cópia "Transparente"do Documento significa uma cópia que pode ser lida automatica-mente, representada num formato cuja especificação esteja disponível ao público geral, cujosconteúdos possam ser vistos e editados diretamente e sem mecanismos especiais com editoresde texto genéricos ou (para imagens compostas de pixels) programas de pintura genéricos ou(para desenhos) por algum editor de desenhos grandemente difundido, e que seja passível deservir como entrada a formatadores de texto ou para tradução automática para uma variedadede formatos que sirvam de entrada para formatadores de texto. Uma cópia feita em um formatode arquivo outrossim Transparente cuja constituição tenha sido projetada para atrapalhar ou de-sencorajar modificações subsequentes pelos leitores não é Transparente. Uma cópia que não é"Transparente"é chamada de "Opaca".

Exemplos de formatos que podem ser usados para cópias Transparentes incluem ASCII sim-ples sem marcações, formato de entrada do Texinfo, formato de entrada do LaTex, SGML ou XMLusando uma DTD disponibilizada publicamente, e HTML simples, compatível com os padrões, eprojetado para ser modificado por pessoas. Formatos opacos incluem PostScript, PDF, formatosproprietários que podem ser lidos e editados apenas com processadores de texto proprietários,SGML ou XML para os quais a DTD e/ou ferramentas de processamento e edição não estejamdisponíveis para o público, e HTML gerado automaticamente por alguns editores de texto comfinalidade apenas de saída.

A "Página do Título"significa, para um livro impresso, a página do título propriamente dita,mais quaisquer páginas subsequentes quantas forem necessárias para conter, de forma legível,o material que esta Licença requer que apareça na página do título. Para trabalhos que nãotenham uma página do título, "Página do Título"significa o texto próximo da aparição mais proe-minente do título do trabalho, precedendo o início do corpo do texto.

12

Page 14: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

FAZENDO CÓPIAS EXATAS

Você pode copiar e distribuir o Documento em qualquer meio, de forma comercial ou nãocomercial, desde que esta Licença, as notas de copyright, e a nota de licença dizendo que estaLicença se aplica ao documento estejam reproduzidas em todas as cópias, e que você não acres-cente nenhuma outra condição, quaisquer que sejam, às desta Licença.

Você não pode usar medidas técnicas para obstruir ou controlar a leitura ou confecção decópias subsequentes das cópias que você fizer ou distribuir. Entretanto, você pode aceitar com-pensação em troca de cópias. Se você distribuir uma quantidade grande o suficiente de cópias,você também precisa respeitar as condições da seção 3.

Você também pode emprestar cópias, sob as mesmas condições colocadas acima, e tambémpode exibir cópias publicamente.

FAZENDO CÓPIAS EM QUANTIDADE

Se você publicar cópias do Documento em número maior que 100, e a nota de licença doDocumento obrigar Textos de Capa, você precisará incluir as cópias em capas que tragam, clarae legivelmente, todos esses Textos de Capa: Textos de Capa da Frente na capa da frente, eTextos da Quarta Capa na capa de trás. Ambas as capas também precisam identificar clara elegivelmente você como o editor dessas cópias. A capa da frente precisa apresentar o título com-pleto com todas as palavras do título igualmente proeminentes e visíveis. Você pode adicionaroutros materiais às capas. Fazer cópias com modificações limitadas às capas, tanto quanto estaspreservem o título do documento e satisfaçam a essas condições, pode ser tratado como cópiaexata em outros aspectos.

Se os textos requeridos em qualquer das capas for muito volumoso para caber de formalegível, você deve colocar os primeiros (tantos quantos couberem de forma razoável) na capaverdadeira, e continuar os outros nas páginas adjacentes.

Se você publicar ou distribuir cópias Opacas do Documento em número maior que 100, vocêprecisa ou incluir uma cópia Transparente que possa ser lida automaticamente com cada cópiaOpaca, ou informar, em ou com, cada cópia Opaca a localização de uma cópia Transparentecompleta do Documento acessível publicamente em uma rede de computadores, à qual o públicousuário de redes tenha acesso a download gratuito e anônimo utilizando padrões públicos deprotocolos de rede. Se você utilizar o segundo método, você precisará tomar cuidados razoavel-mente prudentes, quando iniciar a distribuição de cópias Opacas em quantidade, para assegurarque esta cópia Transparente vai permanecer acessível desta forma na localização especificadapor pelo menos um ano depois da última vez em que você distribuir uma cópia Opaca (direta-mente ou através de seus agentes ou distribuidores) daquela edição para o público.

É pedido, mas não é obrigatório, que você contate os autores do Documento bem antes deredistribuir qualquer grande número de cópias, para lhes dar uma oportunidade de prover vocêcom uma versão atualizada do Documento.

13

Page 15: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

MODIFICAÇÕES

Você pode copiar e distribuir uma Versão Modificada do Documento sob as condições das se-ções 2 e 3 acima, desde que você publique a Versão Modificada estritamente sob esta Licença,com a Versão Modificada tomando o papel do Documento, de forma a licenciar a distribuiçãoe modificação da Versão Modificada para quem quer que possua uma cópia da mesma. Alémdisso, você precisa fazer o seguinte na versão modificada:

A. Usar na Página de Título (e nas capas, se houver alguma) um título distinto daquele do Do-cumento, e daqueles de versões anteriores (que deveriam, se houvesse algum, estarem listadosna seção "Histórico do Documento"). Você pode usar o mesmo título de uma versão anterior seo editor original daquela versão lhe der permissão;

B. Listar na Página de Título, como autores, uma ou mais das pessoas ou entidades responsá-veis pela autoria das modificações na Versão Modificada, conjuntamente com pelo menos cincodos autores principais do Documento (todos os seus autores principais, se ele tiver menos quecinco);

C. Colocar na Página de Título o nome do editor da Versão Modificada, como o editor;

D. Preservar todas as notas de copyright do Documento;

E. Adicionar uma nota de copyright apropriada para suas próprias modificações adjacente àsoutras notas de copyright;

F. Incluir, imediatamente depois das notas de copyright, uma nota de licença dando ao públicoo direito de usar a Versão Modificada sob os termos desta Licença, na forma mostrada no tópicoabaixo;

G. Preservar nessa nota de licença as listas completas das Seções Invariantes e os Textos deCapa requeridos dados na nota de licença do Documento;

H. Incluir uma cópia inalterada desta Licença;

I. Preservar a seção entitulada "Histórico", e seu título, e adicionar à mesma um item dizendopelo menos o título, ano, novos autores e editor da Versão Modificada como dados na Página deTítulo. Se não houver uma sessão denominada "Histórico"no Documento, criar uma dizendo otítulo, ano, autores, e editor do Documento como dados em sua Página de Título, então adicionarum item descrevendo a Versão Modificada, tal como descrito na sentença anterior;

J. Preservar o endereço de rede, se algum, dado no Documento para acesso público a umacópia Transparente do Documento, e da mesma forma, as localizações de rede dadas no Docu-mento para as versões anteriores em que ele foi baseado. Elas podem ser colocadas na seção"Histórico". Você pode omitir uma localização na rede para um trabalho que tenha sido publicadopelo menos quatro anos antes do Documento, ou se o editor original da versão a que ela se refirader sua permissão;

K. Em qualquer seção entitulada "Agradecimentos"ou "Dedicatórias", preservar o título da

14

Page 16: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

seção e preservar a seção em toda substância e fim de cada um dos agradecimentos de contri-buidores e/ou dedicatórias dados;

L. Preservar todas as Seções Invariantes do Documento, inalteradas em seus textos ou emseus títulos. Números de seção ou equivalentes não são considerados parte dos títulos da seção;

M. Apagar qualquer seção entitulada "Endossos". Tal sessão não pode ser incluída na VersãoModificada;

N. Não reentitular qualquer seção existente com o título "Endossos"ou com qualquer outrotítulo dado a uma Seção Invariante.

Se a Versão Modificada incluir novas seções iniciais ou apêndices que se qualifiquem comoSeções Secundárias e não contenham nenhum material copiado do Documento, você pode optarpor designar alguma ou todas aquelas seções como invariantes. Para fazer isso, adicione seustítulos à lista de Seções Invariantes na nota de licença da Versão Modificada. Esses títulos preci-sam ser diferentes de qualquer outro título de seção.

Você pode adicionar uma seção entitulada "Endossos", desde que ela não contenha qual-quer coisa além de endossos da sua Versão Modificada por várias pessoas ou entidades - porexemplo, declarações de revisores ou de que o texto foi aprovado por uma organização como adefinição oficial de um padrão.

Você pode adicionar uma passagem de até cinco palavras como um Texto de Capa da Frente, e uma passagem de até 25 palavras como um Texto de Quarta Capa, ao final da lista de Textosde Capa na Versão Modificada. Somente uma passagem de Texto da Capa da Frente e uma deTexto da Quarta Capa podem ser adicionados por (ou por acordos feitos por) qualquer entidade.Se o Documento já incluir um texto de capa para a mesma capa, adicionado previamente porvocê ou por acordo feito com alguma entidade para a qual você esteja agindo, você não podeadicionar um outro; mas você pode trocar o antigo, com permissão explícita do editor anterior queadicionou a passagem antiga.

O(s) autor(es) e editor(es) do Documento não dão permissão por esta Licença para que seusnomes sejam usados para publicidade ou para assegurar ou implicar endossamento de qualquerVersão Modificada.

COMBINANDO DOCUMENTOS

Você pode combinar o Documento com outros documentos publicados sob esta Licença, sobos termos definidos na seção 4 acima para versões modificadas, desde que você inclua na com-binação todas as Seções Invariantes de todos os documentos originais, sem modificações, e listetodas elas como Seções Invariantes de seu trabalho combinado em sua nota de licença.

O trabalho combinado precisa conter apenas uma cópia desta Licença, e Seções InvariantesIdênticas com multiplas ocorrências podem ser substituídas por apenas uma cópia. Se houvermúltiplas Seções Invariantes com o mesmo nome mas com conteúdos distintos, faça o título de

15

Page 17: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

cada seção único adicionando ao final do mesmo, em parênteses, o nome do autor ou editororigianl daquela seção, se for conhecido, ou um número que seja único. Faça o mesmo ajustenos títulos de seção na lista de Seções Invariantes nota de licença do trabalho combinado.

Na combinação, você precisa combinar quaisquer seções entituladas "Histórico"dos diver-sos documentos originais, formando uma seção entitulada "Histórico"; da mesma forma combinequaisquer seções entituladas "Agradecimentos", ou "Dedicatórias". Você precisa apagar todas asseções entituladas como "Endosso".

COLETÂNEAS DE DOCUMENTOS

Você pode fazer uma coletânea consitindo do Documento e outros documentos publicadossob esta Licença, e substituir as cópias individuais desta Licença nos vários documentos comuma única cópia incluida na coletânea, desde que você siga as regras desta Licença para cópiaexata de cada um dos Documentos em todos os outros aspectos.

Você pode extrair um único documento de tal coletânea, e distribuí-lo individualmente sobesta Licença, desde que você insira uma cópia desta Licença no documento extraído, e siga estaLicença em todos os outros aspectos relacionados à cópia exata daquele documento.

AGREGAÇÃO COM TRABALHOS INDEPENDENTES

Uma compilação do Documento ou derivados dele com outros trabalhos ou documentos se-parados e independentes, em um volume ou mídia de distribuição, não conta como uma Ver-são Modificada do Documento, desde que nenhum copyright de compilação seja reclamado pelacompilação. Tal compilação é chamada um "agregado", e esta Licença não se aplica aos outrostrabalhos auto-contidos compilados junto com o Documento, só por conta de terem sido assimcompilados, e eles não são trabalhos derivados do Documento.

Se o requerido para o Texto de Capa na seção 3 for aplicável a essas cópias do Documento,então, se o Documento constituir menos de um quarto de todo o agregado, os Textos de Capado Documento podem ser colocados em capas adjacentes ao Documento dentro do agregado.Senão eles precisarão aparecer nas capas de todo o agregado.

TRADUÇÃO

Tradução é considerada como um tipo de modificação, então você pode distribuir traduçõesdo Documento sob os termos da seção 4. A substituição de Seções Invariantes por traduçõesrequer uma permissão especial dos detentores do copyright das mesmas, mas você pode incluirtraduções de algumas ou de todas as Seções Invariantes em adição às versões orignais dessasSeções Invariantes. Você pode incluir uma tradução desta Licença desde que você também in-clua a versão original em Inglês desta Licença. No caso de discordância entre a tradução e a

16

Page 18: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

versão original em Inglês desta Licença, a versão original em Inglês prevalecerá.

TÉRMINO

Você não pode copiar, modificar, sublicenciar, ou distribuir o Documento exceto como expres-samente especificado sob esta Licença. Qualquer outra tentativa de copiar, modificar, sublicen-ciar, ou distribuir o Documento é nula, e resultará automaticamente no término de seus direitossob esta Licença. Entretanto, terceiros que tenham recebido cópias, ou direitos de você sob estaLicença não terão suas licenças terminadas, tanto quanto esses terceiros permaneçam em totalacordo com esta Licença.

REVISÕES FUTURAS DESTA LICENÇA

A Free Software Foundation pode publicar novas versões revisadas da Licença de Documen-tação Livre GNU de tempos em tempos. Tais novas versões serão similares em espirito à versãopresente, mas podem diferir em detalhes ao abordarem novos porblemas e preocupações. Vejahttp://www.gnu.org/copyleft/.

A cada versão da Licença é dado um número de versão distinto. Se o Documento especificarque uma versão particular desta Licença "ou qualquer versão posterior"se aplica ao mesmo, vocêtem a opção de seguir os termos e condições daquela versão específica, ou de qualquer versãoposterior que tenha sido publicada (não como rascunho) pela Free Software Foundation. Se oDocumento não especificar um número de Versão desta Licença, você pode escolher qualquerversão já publicada (não como rascunho) pela Free Software Foundation.

ADENDO: Como usar esta Licença para seus documentos

Para usar esta Licença num documento que você escreveu, inclua uma cópia desta Licençano documento e ponha as seguintes notas de copyright e licenças logo após a página de título:

Copyright (c) ANO SEU NOME.É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos da Licençade Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior publicada pela Free Soft-ware Foundation; com as Seções Invariantes sendo LISTE SEUS TÍTULOS, com os Textos daCapa da Frente sendo LISTE, e com os Textos da Quarta-Capa sendo LISTE. Uma cópia da li-cença está inclusa na seção entitulada "Licença de Documentação Livre GNU".

Se você não tiver nenhuma Seção Invariante, escreva "sem Seções Invariantes"ao invés dedizer quais são invariantes. Se você não tiver Textos de Capa da Frente, escreva "sem Textos deCapa da Frente"ao invés de "com os Textos de Capa da Frente sendo LISTE"; o mesmo para osTextos da Quarta Capa.

Se o seu documento contiver exemplos não triviais de código de programas, nós recomenda-mos a publicação desses exemplos em paralelo sob a sua escolha de licença de software livre,

17

Page 19: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

tal como a GNU General Public License, para permitir o seu uso em software livre.

18

Page 20: Java Basico

Parte IV

Java Básico

19

Page 21: Java Basico

Capítulo 1

O que é Java

Java é uma linguagem de programação orientada a objetos, segura, robusta, distribuída, mul-tiplataforma e de alto desempenho. Esta linguagem possui estrutura muito semelhante à daslinguagens C e C++, muito embora tenham filosofias diferentes. São esses e outros motivos quea tornam uma linguagem tão atraente tanto para usuários e programadores experientes quantopara os iniciantes.

Este curso, será baseado na distribuição Debian e possibilitará ao usuário aprender os con-ceitos, estruturas, declarações, métodos e funções básicas dessa linguagem. Além da criaçãode aplicativos e programas que irão inserir o usuário dentro do universo JAVA.

20

Page 22: Java Basico

Capítulo 2

Plano de ensino

2.1 Objetivo

Qualificar técnicos e programadores na linguagem de programação Java.

2.2 Público Alvo

Técnicos e Programadores que desejam trabalhar com Java.

2.3 Pré-requisitos

Os usuários deverão ser, necessariamente, indicados por empresas públicas e ter conheci-mento básico acerca da lógica de programação.

2.4 Descrição

O curso será realizado na modalidade Educação a Distância e utilizará a Plataforma Moodlecomo ferramenta de aprendizagem. Ele será dividido em tópicos e cada um deles é compostopor um conjunto de atividades (lições, fóruns, glossários, questionários e outros) que deverão serexecutadas de acordo com as instruções fornecidas. O material didático está disponível on-linede acordo com as datas pré-estabelecidas em cada tópico. A versão adotada do Java é a 1.5.0,caso possua outra versão instalada poderão ocorrer poucas diferenças.

Todo o material está no formato de lições e estará disponível ao longo do curso. As liçõespoderão ser acessadas quantas vezes forem necessárias. Aconselhamos a leitura de "Ambien-tação do Moodle", para que você conheça o produto de Ensino a Distância, evitando dificuldadesadvindas do "desconhecimento"sobre o mesmo.

Ao final de cada lição haverá uma questão referente módulo estudado anteriormente quetambém poderá conter perguntas sobre os textos indicados caso existam. No final do cursohaverá uma prova de Avaliação de Aprendizagem no formato da construção de um programa.Utilize o material de cada semana e os exemplos disponibilizados para se preparar para prova.

As lições contém o contéudo principal. Elas poderão ser acessadas quantas vezes forem ne-cessárias, desde que esteja dentro da semana programada. Ao final de uma lição, você receberáuma nota de acordo com o seu desempenho. Responda com atenção às perguntas de cada lição,

21

Page 23: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

pois elas serão consideradas na sua nota final. Caso sua nota numa determinada lição for menordo que 6.0, sugerimos que você faça novamente esta lição.

Os instrutores estarão a sua disposição ao longo de todo curso. Qualquer dúvida deve serdisponibilizada no fórum ou enviada por e-mail. Diariamente os monitores darão respostas eesclarecimentos.

2.5 Metodologia

O curso está dividido da seguinte maneira:

2.6 Cronograma

Semana 1 - Introdução

• Histórico;

• Instalação;

• Introdução à linguagem;

• Tipos de Dados.

Semana 2 - Conceitos Básicos

• Classe, Objetos, Atributos e Métodos;

• Estruturas de Controle;

• E/S Teclado e Arquivos;

• Vetores e Cadeia de Caracteres.

Semana 3 - Conceitos Avançados

• Tratamento de Erros;

• Encapsulamento, Herança e Polimorfismo;

• Interfaces Gráficas;

• Threads;

• Avaliação de Aprendizagem.

22

Page 24: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

2.7 Programa

O curso de Java oferecerá o seguinte conteúdo:

• Introdução

• Conceitos Básicos e Avançados de Orientação à Objeto

2.8 Avaliação

Toda a avaliação será feita on-line.Aspectos a serem considerados na avaliação:

• Iniciativa e autonomia no processo de aprendizagem e de produção de conhecimento;

• Capacidade de pesquisa e abordagem criativa na solução dos problemas apresentados.

Instrumentos de avaliação:

• Participação ativa nas atividades programadas;

• Avaliação de Aprendizagem ao final do curso;

• O participante fará várias avaliações referente ao conteúdo do curso. Para a aprovação eobtenção do certificado o participante deverá obter nota final maior ou igual a 6.0 de acordocom a fórmula abaixo:

• Nota Final = ((ML x 7) + (AF x 3)) / 10

• AF = Nota da Avaliação de Aprendizagem

• ML = Média aritmética das Avaliações de Lições

2.9 Bibliografia

• Site official: http://www.sun.com

• Guias em Português: http://br.sun.com, http://www.javafree.org, http://www.portaljava.com.br

• Guias extras: Pinheiro, Francisco A. C.Fundamentos de Computação e Orientação a Obje-tos Usando Java, LTC - Livros Técnicos e Científicos Editora S/A, Rio de Janeiro, 2006.

• ftp://ftp.unicamp.br/pub/apoio/treinamentos/linguagens/java_basico.pdf

• http://www.ime.usp.br/ mms/mac2121s2003/mac2121s2003aula28.pdf

• http://www.inf.puc-rio.br/ jmacedo/doc/inf1341%209%20JavaConcorrencia.pdf

23

Page 25: Java Basico

Capítulo 3

Introdução

Apresentação geral e histórico da linguagem Java

3.1 Histórico

O que é Java?Java é uma linguagem de programação orientada à objetos resultado de um consistente de-

senvolvimento e trabalho de pesquisa realizado por projetistas da Sun Microsystems, que intro-duziu a linguagem no mercado em 1995. Mais do que uma simples linguagem de programaçãoJava é um ambiente de desenvolvimento e execução de programas, uma plataforma segura ecapaz proporcionar as facilidades da orientação à objetos aliadas à uma portabilidade instrínsecaque facilita a sua integração aos diversos ambientes existentes.

3.1.1 História

Um grupo de engenheiros da Sun Microsystems denominado Green, em 1991, foram encar-regados de criar uma nova geração de computadores inteligentes, simples e portáteis capazesde se comunicar entre si, ou seja, com uma capacidade de uso potencialmente alta. Para tal, eranecessário que fosse utilizada uma plataforma de desenvolvimento em que os softwares pudes-sem ser portáveis para os mais diferentes equipamentos como controles de TV, telefones, fornos,geladeiras, etc.

O C++ foi a primeira escolha como ponto de partida para tal desenvolvimento. No entanto, asfacilidades de orientação à objeto introduzidas pelo C++ não foram suficientes para alcançar tudoaquilo que o grupo almejava. Foi então que James Gosling, coordenador do projeto Green, optoupela criação de uma nova linguagem de programação que fosse realmente portátil, simples einterpretada. Assim surgiu o Oak(carvalho em inglês), que em 1995 após várias melhorias mudade nome, por problemas de direitos autorais, e passa a ser chamado de Java.

Hoje, Java não é utilizada em eletrodomésticos(pelo menos comercialmente). Ao invés disso,juntamente com o crescimento da Internet e o desenvolvimento dos applets(mini-aplicativos)elase tornou um das linguagens de programação mais utilizadas no mundo.

As especificações da linguagem Java são mantidas uniformes através de um processo comu-nitário gerido pela Sun Microsystems, que é também detentora da marca registrada com o nomeda linguagem.

24

Page 26: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Características principais da linguagem Java são:

• Orientada a objeto por basear-se nos quatro princípios do paradigma da programação quesão:

• Abstração, encapsulamento, herança e polimorfismo;

• Neutra porque a Máquina Virtual Java (JVM) pode ser implementada em qualquer plata-forma;

• Distribuída por suportar vários tipos de conectividade em aplicações distribuídas na rede;

• Sem ponteiros pois a JVM possui o garbage collector capaz de gerenciar automática edinâmicamente a memória;

• Segura protege as "máquinas-alvo"contra quaisquer operações em seus sistema de arqui-vos por aplicações obtidas pela rede, já que os applets são desenhados para existirem namáquina cliente somente em tempo de execução.

A maioria dessas características da linguagem serão desenvolvidas durante o curso.

3.2 Instalação

Temos à nossa disposição uma variedade de métodos de instalação do Java, podendo variardependendo da distribuição GNU/Linux sendo utilizada.

É importante notar que diferentes métodos de instalação poderão prover versões diferentes dosoftware. Neste curso, por exemplo, utilizaremos a versão 1.5.0, o pacote disponível no repositóriotesting/non-free do Debian. Vale observar que o pacote do Java se encontra na seção non-free,o que indica que ele é considerado não-livre. Isto ocorre porque ele possui uma licença que nãoé considerada livre pelos padrões do Debian.

Podemos diferenciar os métodos de instalação basicamente entre aqueles que utilizam pa-cotes pré-compilados da própria distribuição, ou aqueles que utilizam um binário genérico paraLinux, provido pela própria Sun Microsystems.

Distribuições derivadas do Debian utilizam pacotes nativos às distribuições (.deb), e parainstalá-los simplesmente os descompactam e movem os arquivos para os lugares apropriados.Já o pacote binário da Sun deverá ser baixado do site do fabricante, e prosseguiremos com ainstalação do mesmo.

3.2.1 Instalação através de pacote binário

O primeiro método que iremos abordar quanto à instalação do Java será o da instalação dopacote binário provido pela Sun. Para atingir sucesso por esse método de instalação devemossaber como obter esse pacote e instalá-lo, além de adicionar entradas apropriadas nos arquivosde configuração do sistema.

O pacote binário do Java pode ser obtido a partir do site da Sun, na página de downloads doJava SE( http://java.sun.com/javase/downloads/index_jdk5.jsp).

Nesta página, podemos observar que existem várias versões a serem baixadas, porém a que(provavelmente) se adequa à sua necessidade é a JDK 5.0 Update 11, que inclui o RuntimeEnvironment para o Java (JRE) e também o development kit (JDK) básico para o Java.

25

Page 27: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Clicando no referido link, você deverá aceitar a licença e baixar o pacote apropriado para oseu sistema operacional, que, no caso do autor, é Linux self-extracting file para arquiteturasde 32 bits (para 64 bits, o pacote se chama Linux x64 self-extracting file). Caso esteja utilizandodistribuições derivadas de Red Hat, você pode ainda obter o RPM, caso queira.

Obtido o pacote, agora você deve descompactá-lo, o que implica apenas executar o arquivoem questão, já que ele tem a extensão (.bin) . Caso ele não esteja executável, pode ser neces-sário dar permissões de execução ao arquivo utilizando o comando:

$ chmod a+x jdk(...).bin

Feito isso, execute o arquivo com o comando:

$ ./jdk(...).bin

Recomenda-se que, antes de executar este arquivo, você o mova para o diretório /opt, quesegundo a FHS (File Hierarchy System) é o diretório padrão para instalações de programasindependentemente instalados. Outro benefício é que todos os usuários da máquina poderãoutilizar-se do software, pois o /opt é legível para todos do sistema. Para fazê-lo, porém, vocêdeverá ser o usuário root, já que apenas este possui privilégios de escrita nesse diretório.

Seguidos estes passos, um diretório será gerado (caso tenha seguido o conselho, dentro do/opt), contendo binários, documentação e arquivos adicionais da JDK e JRE do Java. Agora,basta adicionar o caminho desses binários ao caminho de busca de binários do sistema, desig-nado pela variável de ambiente $ PATH , setada pelo arquivo de configuração /etc/profile.

Para adicionar esses binários do Java a esse caminho, você pode atualizar a variável $PATH (o que será apagado após o próximo reboot do computador) ou setar a variável PATHno /etc/profile, que é lido pelo sistema.

Pronto, instalamos o Java através de seu pacote binário! Não foi nada difícil, não é mesmo?

3.2.2 Distribuições derivadas do Debian

Para instalar o Java em distribuições derivadas do Debian podemos simplesmente utilizar ogerenciador de pacotes nativo, o apt-get. Vale lembrar que, como o Java não é consideradolivre pelos padrões do Debian, você deve adicionar a seção non-free à sua lista de repositórios.Feito isso, devemos primeiramente buscar o nome do pacote correspondente ao Java utilizandoo comando apt-cache:

hungria@debian3:~$ apt-cache search java5sun-java5-bin - Sun Java(TM) Runtime Environment (JRE) 5.0sun-java5-demo - Sun Java(TM) Development Kit (JDK) 5.0 demos and examplessun-java5-doc - Sun JDK(TM) Documention -- integration installersun-java5-fonts - Lucida TrueType fonts (from the Sun JRE)sun-java5-jdk - Sun Java(TM) Development Kit (JDK) 5.0sun-java5-jre - Sun Java(TM) Runtime Environment (JRE) 5.0sun-java5-plugin - The Java(TM) Plug-in, Java SE 5.0sun-java5-source - Sun Java(TM) Development Kit (JDK) 5.0 source fileshungria@debian3:~$

26

Page 28: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Como podemos ver, o nome do pacote correspondente ao Java JDK é sun-java5-jdk, acom-panhado de uma série de bibliotecas e plugins. Sabendo disso, basta-nos agora instalar, comousuário root, o pacote utilizando o comando apt-get:

debian3:~# apt-get install sun-java5-jdkReading package lists... DoneBuilding dependency tree... DoneThe following extra packages will be installed:odbcinst1debian1 sun-java5-bin sun-java5-demo sun-java5-jre unixodbcSuggested packages:sun-java5-doc sun-java5-source sun-java5-plugin ia32-sun-java5-plugin sun-java5-fontsttf-baekmukttf-sazanami-gothicttf-sazanami-mincho ttf-arphic-bsmi00lp libmyodbc odbc-postgresql libct1Recommended packages:gsfonts-x11The following NEW packages will be installedodbcinst1debian1 sun-java5-bin sun-java5-demo sun-java5-jdk sun-java5-jre unixodbc0 upgraded, 6 newly installed, 0 to remove and 58 not upgraded.Need to get 45.1MB of archives.After unpacking 114MB of additional disk space will be used.Do you want to continue [Y/n]? y0% [Connecting to ftp.at.debian.org]debian3:~#

Pronto, agora já temos o JDK Java instalado através do gerenciador de pacotes apt-get. Foibem fácil também, não é?

Vale lembrar que os exemplos acima foram testados na distribuição Debian GNU/Linux, po-rém poderiam ser executados da mesma maneira em qualquer outra distribuição compatível como Debian, como o Ubuntu Linux, Kurumin ou Knoppix, dentre outras.

3.3 Introdução à Linguagem

Aspectos de programação

Um programa é a implementação de um algoritmo em uma linguagem de programação. Oalgoritmo precisa ser bem definido do início ao fim, tendo comandos ordenados e finitos capazesde produzirem um resultado visível. Para programar bem deve-se fazer um algoritmo apropriadoe ter um conhecimento léxico, sintático e semântico da linguagem de programação a ser utlizada.

No campo léxico as linguagens de programação permitem que o programador crie novas pa-lavras, desde que se respeite as regras nativas da linguagem. Já a sintaxe habilita o programadora exercer sua função de implementar o algoritmo através do uso de símbolos, termos e pala-vras que formarão expressões válidas. Finalmente, a semântica é a representação do resultadoobservável do algoritmo implementado na máquina pelo programador.

27

Page 29: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Estrutura, Compilação e Execução

Um programa é um texto (chamado de programa fonte) que possui comandos e declaraçõesnecessárias para a implementação de um algoritmo que é traduzido para um produto equivalenteescrito em comandos binários (código binário) os quais são executados pelo computador. Oprocesso de tradução é chamado de compilação e posteriormente a ele se produz a ligação docódigo binário a outros códigos para se obter finalmente o programa executável.

O programa executável é carregado na memória e colocado sob o controle de um ambientede execução, que faz com que cada comando seja executado pelo processador.

Todo programa deve ter uma estrutura que permita definir seu inicio e fim, de tal forma que oambiente de execução possa identificar precisamente o ponto de entrada do programa, isto é, oprimeiro comando que será executado e o término da execução.

A estrutura de um programa em Java

Os programas orientados a objetos são baseados no conceito classe. Cada classe contémas declarações e os comandos que, em conjunto, implementam o algoritmo do programa. Estescomandos são organizados na forma de métodos e devem possuir um método principal que é oponto de início da execução, a partir dele os demais métodos são acionados.

Em Java, especificamente, a sua estrutura consiste de um conjunto de unidades de com-pilação. Cada uma delas contêm as especificações de classes e interfaces, juntamente com asdeclarações necessárias para a compilação. Quando compiladas essas unidades geram arquivoscom os códigos binários referentes às classes e interfaces nelas descritas.

A estrutura básica de uma classe consiste de uma palavra chave class, de um identifica-dor (o nome da classe), e de um corpo que é delimitado por chaves e contém opcionalmentedeclarações e comandos próprios da classe.

Programando em Java

Em Java todos os arquivos com os respectivos códigos podem ser escritos em um editor detexto utilizando UNICODE e terminadas com a extensão (.java). Cada arquivo representa umaunidade de compilação, podendo conter uma ou mais especificações de classes e interfaces.

Em java temos alguns comandos que nos ajudam na compilação e execução dos programas,como o comando javac e o comando java.

javac: ele é o compilador da linguagem Java que ao ser executado este comando em umarquivo que contenha o codigo da linguagem, irá gerar um segundo código contendo o códigobinário que é utilizado para a execução do programa. Para compilar seu código digite javacNomeDoArquivo.java.

java: O executável Java é a máquina virtual Java (JVM), ou seja, é o programa respon-sável pela execução do código compilado pelo javac. Para fazer uso do comando digite javaNomeDoArquivo, para executar um arquivo não deve-se colocar a sua extensão.

Comentários

Os comentários são textos normalmente explicativos que servem para informar tanto o pro-gramador que o escreveu quanto outros que venham a utilizar ou somente ler aquele código. EmJava os comentários podem ser de três tipos:

28

Page 30: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Uma linha - Utiliza duas barras // marcando seu início. Exemplo:

// tudo após as barras é considerado como comentário

Múltiplas linhas - Utiliza barra asterisco no início /* e asterisco barra no fim */. Exemplo:

/* comentário iniciale final de multiplas linhas */

Documentação - Semelhante ao de múltiplas linhas mas com propósito de documentar ocódigo. Exemplo:

/* comentário de documentação* pode conter diversas* linhas*/

3.4 Tipos de dados

Variáveis

Na linguagem Java todas as variáveis têm seus tipos de dados definidos. Os tipos de dadosdefinem quais são os valores que uma variável pode armazenar e quais operações pode executar.Esses tipos básicos são os mesmos para qualquer ambiente de programação Java, por se tratarde uma linguagem portável.

As variáveis locais são declaradas no corpo de um método*, existindo somente durante aatividade dele. Já as variáveis de instância e variáveis de classe são declaradas ambas nocorpo de uma classe*, mas as de instância especificam atributos próprios de cada objeto daclasse, enquanto que as de classe especificam atributos comuns a todos objetos da classe.

Existem também as variáveis paramétricas que são declaradas como tratadoras de exceção,construtoras e parâmetros formais de métodos. São variáveis declaradas na especificação de ummétodo, estas variáveis possuem algum valor que será usado no método invocado. Seu uso ésemelhante ao das variáveis locais podendo ser modificado o seu valor.

As variáveis paramétricas são criadas quando chamadas ao método que pertencem e existemsó durante a execução do método. Existem duas maneiras de atribuir os valores às variáveisparamétricas, passagem de argumento por valor ou por referência.

Passagem de argumentos por valor

Na passagem por valor é feita a chamada a um método e os parâmetros reais utilizados nachamada são avaliados, produzindo valores que são atribuídos aos parâmetros formais corres-pondentes.

Falando de forma mais simplificada, o método cria uma "cópia"dos valores dos argumentospara que sejam utilizados somente dentro do método. Portanto, por mais que se alterem essesvalores, eles não afetarão as variáveis externas ao método.

29

Page 31: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Passagem de argumentos por referência

Ao se invocar uma função ou procedimento, as variáveis paramétricas armazenam uma re-ferência aos parâmetros reais em vez de uma cópia do valor, como é feito na passagem porvalor. Mas, este tipo de passagem em Java não é implementada, isto acontece porque em Javanão existem ponteiros, existem objetos. Assim, toda variável do tipo "objeto"é na realidade umareferência para aquela instância do objeto.

Mais simplificadamente, os argumentos passados por referência terão seu valor alterado den-tro e fora do método, pois não é feita uma cópia daquela variável.

Obs:. Variáveis do tipo de dados primitivo são passadas por valor. Objetos (o conteúdo) nãosão passados diretamente para métodos. Em vez disso, são passados aos métodos referênciasa objetos. As próprias referências também são passadas por valor. Quando um método recebeuma referência a um objeto, o método pode manipular o objeto diretamente.

*Os conceitos de Método e Classe serão abordados em próximas lições.

Escopo de variáveis

O escopo de uma variável é a parte do programa no qual pode-se diretamente referenciá-la.Uma variável local tem seu escopo com alcance somente dentro do bloco onde ela foi declarada.Bloco este que em Java é delimitado por chaves { }.

As variáveis de instância e de classe têm escopo com alcance em todo o corpo da classe emque foram declaradas.

Tipos básicos

Existem oito tipos primitivos em Java, todo o resto é objeto. Estes tipos ficaram na linguagempela sua velocidade de interação e, por isso, não foram transformados em Objetos. Como nãosão objetos a sua declaração já cria a variável em memória não necessitando de construtores.

Inteiros

Tipo Tamanho Valorbyte 8 bits -128 a 127short 16 bits -32.768 a 32.767

int 32 bits -2.147.483.648 a 2.147.483.647long 64 bits -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807

Reais ou Ponto Flutuante

Tipo Tamanho Valorfloat 32 bits - 1.40239846E-45 a + 3.40282347E + 38

double 64 bits - 4.94065645841246544E-324 a + 1.79769313486231570E + 308

Outros Tipos

Tipo Tamanho Valor Descriçãochar 16 bits 0 a 65535 Um caractere

boolean 8 bits true ou false valor booleano(V ou F)

30

Page 32: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

OPERADORES

Executam alguma função sobre os operandos. Existem operadores unários que requerem sóum operando e operadores binários e ternários que requerem dois e três operandos respectiva-mente. Depois de ser executada uma determinada função um operador retorna um valor, sendoque esse valor e o tipo de retorno dependem do operador e de seus operandos.

Operadores Binários

Operador Uso Descrição+ (Adição) X + Y Soma X e Y

- (Subtração) X - Y Subtrai Y de X* (Multiplicação) X * Y Multiplica X de Y

/ (Divisão) X / Y Divide X por Y% (Resto) X % Y Resto da divisao de X por Y

Operadores Unários

Operador Uso Descrição++ X++ Utiliza valor de X antes de fazer o incremento++ ++X Incrementa antes de usar o valor de X– X– Utiliza valor de X antes de fazer o decremento– X– Decrementa antes de usar o valor de X

• Incrementar significa somar 1

• Decrementar significa subtraír 1

Operadores Condicionais e Relacionais

Operador Uso Retorna verdadeiro se> X > Y X é maior que Y

>= X >= Y X é maior ou igual a Y< X < Y X é menor que Y

<= X <= Y X é menor ou igual a Y== X == Y X e Y são iguais!= X != Y X e Y são diferentes

Operadores Binários Condicionais

Operador Uso Retorna verdadeiro se&& X && Y X e Y Verdadeiros, se X é falso, não avalia Y|| X || Y X ou Y Verdadeiro, se X é verdadeiro, não avalia Y! !X X é Falso& X & Y A operação "e"bit-a-bit entre X e Y, sempre avalia X e Y| X | Y A operação "ou"bit-a-bit entre X ou Y, sempre avalia X e Yˆ X ˆ Y A operação "ou exclusivo"xOR entre X e Y, sempre avalia X e Y

31

Page 33: Java Basico

Capítulo 4

Conceitos Básicos

Conceitos Básicos da Orientação a Objeto

4.1 Classes, Objetos, Atributos e Métodos

Conceitos de Classe e Objeto são centrais para a programação orientada a objeto, por isso éextremamente necessária a sua compreensão.

4.1.1 Classes

Uma classe é o elemento básico da programação orientada a objetos que define as formase comportamentos dos objetos pertencentes à ela. Também pode ser entendida como uma es-trutura que associa atributos(dados) e métodos(funções), controlando o acesso a estes. Ou seja,definir uma classe implica em especificar seus objetos.

Para a criação de uma classe coloca-se um comando que inicia a declaração da classe. Apósa palavra-chave class segue-se o nome da classe, que deve ser um identificador válido paraa linguagem. Os modificadores indicam como classe pode ser utilizada por outras classes eaplicações.

Nota: Usualmente recomenda-se que as classes sejam declaradas utilizando nomes iniciadoscom letras maiúsculas enquanto que nomes variáveis ou instâncias de objetos sejam iniciadoscom letras minúsculas. No caso de duas ou mais palavras, as palavras a partir da segundadevem iniciar com letra maiúscula para substituir o espaço. Veja o exemplo:

Por exemplo se o nome fosse "Nome da coisa", caso esse fosse o nome de uma classedeveria ficar assim: "NomeDaCoisa", .Se fosse o nome de uma variável, então deveria ficarassim: "nomeDaCoisa". Porém, lembre-se que isso é apenas uma recomendação. Mas é bomsegui-la para que o código possa ser lido com facilidade por outro programador, e até mesmo porvocê.

Sintaxe: [modificador] class <NomeClasse>{ <corpo classe> }

Exemplo:

public class ExemploDeClasse{//atributos//métodos

}

32

Page 34: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Modificadores

A primeira palavra nos dá a possibilidade de atribuir permissões de acesso à nossa classe,neste caso nossa permissão é de tipo pública (public). Uma classe public é acessível irrestrita-mente por qualquer outra classe que pertença ao mesmo pacote, ou seja, que estejam localizadasno mesmo diretório bem seja diretamente ou por herança.

Um pacote(pakage) em Java é um diretório que contenha um conjunto de classes. Os paco-tes, em certa medida, equivalem às bibliotecas(libraries) de outras linguagens de programação.

Existem também os modificadores privado(private) e protegido(protected) que serão melhorabordados no capítulo de Conceitos Avançados. Exemplos de uso de pacotes:

/* O ponto seguido do asterisco indica que todas classes dentro do pacoteserão importadas */

import java.io.*;import java.lang.Math;import java.awt.*;

O corpo da classe normalmente segue a seguinte seqüencia:

• Variáveis de classe

• Atributos

• Construtores

• Métodos

Pode também conter um método main, que é utilizado pelo interpretador Java para dar inícioà execução de uma aplicação.

Exemplo 1:

class Estudante {/* declaração dos atributos da classe estudante */String aluno;String matricula;

/* métodos da classe estudante */void setAluno (String novoAluno){

aluno = novoAluno;}void setMatricula (String novaMatricula){

matrícula = novaMatricula;}void impEstudante (){

System.out.println( "aluno: "+aluno);System.out.println( "matricula: "+matricula);

}}

33

Page 35: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Em nossa classe Estudante temos 3 métodos setAluno, setMatricula e impEstudante, osdois primeiros usam parâmetros e servem para modificar os atributos aluno e matricula do objetoque os executa. O último método contém a solicitação de um objeto referenciado por System.outpara que este execute seu método println, o qual fará com que seja impresso na tela o aluno esua matrícula.

A palavra void indica que os métodos não retornam valores.

4.1.2 Objetos

É através deles que praticamente todo o processamento ocorre em aplicações desenvolvidascom linguagens de programação orientadas a objetos. Toda linguagem de programação orientadaa objetos oferece mecanismos para definir os tipos de objetos para cada aplicação através doconceito de classes.

Objetos são a instância de uma classe. Em outras palavras, são um pedaço de memóriareservada para armazenar os dados e os métodos declarados na classe. Um objeto não é maisque uma abstração que contém um identificador, um estado e um conjunto de operações que eleconsegue realizar. Eles indicam ao computador como proceder em determinadas situações.

Os identificadores são definidos pelo ambiente ao serem criados, seu estado é determinadopelos valores referentes a seus atributos e as operações executadas são implementadas por meiode código (chamado método). No objeto pode-se executar os métodos que foram definidos, alémde poder acessar e alterar dados.

Criando Objetos

Para, praticamente, toda classe existe definido algum método (metodo()), que é usado paracriar os objetos da classe. Estes métodos usados para a criação de objetos são chamados deconstrutores e se caracterizam por não possuir valor de retorno.

A criação de um objeto da classe "Exemplo"é feita através do comando:

new Exemplo();

Sendo iniciada a execução do construtor da classe.Exemplo2: Suponhamos que num programa temos duas classes a Classe1 e a Classe2.

class Classe1 {int soma;void somar(){

//algum código aqui}

}

Criaremos o objeto assim:

class Classe2 {public static void main(String[] args) {

/* Criando o objeto que referencia a Classe1 */Classe1 objeto = new Classe1();int obj = objeto.soma; // referenciando atributos da classe Classe1

}}

34

Page 36: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

A referência de um objeto se faz com a indicação do objeto sendo concatenado ao nome doatributo através de um ponto (objeto.soma).

4.1.3 Atributos

Atributos são um modo de modificar uma ou mais declarações(as quais são feitas no corpoda classe, fora dos métodos). Um atributo de uma classe é a própria variável da classe que sedestina a armazenar informações singulares daquela classe. Exemplo:

/* Camiseta.java */public class Camiseta {

/* Atributos */String cor;

}

Naturalmente foi definida a classe Camiseta com seu atributo singular cor que poderá arma-zenar dados sobre aquela camiseta. Outros atributos podem ser adicionados como, tamanho porexemplo. Ou seja, diversos atributos podem descrever vários aspectos de um objeto. Exemplo:

public class Camiseta {String cor;char tamanho;float preco;

}

Referência de Atributos

Pode-se referir aos atributos de um objeto das seguintes formas:Pelo nome do atributo, se a referência e o atributo referenciado pertencem à mesma classe.

Exemplo:

cor = verde;

A referência acima só poderá ser feita em métodos da própria classe onde o atributo cor foideclarado, no caso na classe Camiseta.

Pela identificação do objeto seguida de um ponto seguido do nome do atributo. Isso é ocorrequando a referência é feita a um atributo de um determinado objeto. Exemplo:

Camiseta objeto = new Camiseta(); /* criando o objeto camiseta */objeto.cor = "verde";

Pela identificação de uma classe seguida de um ponto seguido do nome do atributo, quandose trata de atributos estáticos.

35

Page 37: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

4.1.4 Atributos estáticos

Os atributos estáticos são declarados com o modificador static, estes atributos se aplicam afunções e dados. Sua declaração não é aplicada a uma instância particular do objeto, mas aotipo do objeto.

A variável totalDeAlunos, ao ser declarada como um atributo estático (static int totalDe-Alunos), permite que seu valor seja compartilhado por todos os objetos da classe Aluno. Ouseja, todas as instâncias estarão compartilhando a mesma porção de dado. Exemplo de umareferência de atributo a objetos específicos:

class Aluno {char turma;static int totalDeAlunos;int matricula;void imprimeAluno() {

System.out.println("Matricula: " + matricula);System.out.println("Turma: " + turma);

}}

class CriadorObjetos{public static void main(String[] arg){

Aluno obj1 = new Aluno();Aluno obj2 = new Aluno();obj1.totalDeAlunos++;obj2.totalDeAlunos++;obj1.matricula = 1;obj2.matricula = 2;obj1.turma = 'K';obj2.turma = 'F';System.out.println("Dados do aluno 1");obj1.imprimeAluno();System.out.println("Dados do aluno 2");obj2.imprimeAluno();

}}

Será impresso na tela:

Dados do aluno 1Matricula: 1Turma: KDados do aluno 2Matricula: 2Turma: FQuantidade de alunos: 2

36

Page 38: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Repare que "totalDeAlunos"foi incrementado em cada objeto, porém seu valor é compartilhadopelos dois objetos. Note que o melhor jeito de referenciar uma variável estática é utilizando onome da classe e não o nome do objeto. Por exemplo:

As linhas:

obj1.totalDeAlunos++;obj2.totalDeAlunos++;

Ficariam melhor se substituídas por:

Aluno.totalDeAlunos++;Aluno.totalDeAlunos++;

OBS:. O uso abusivo de elementos estáticos é desencorajado, pois elementos estáticos sãoarmazenados uma vez na memória e todos os objetos com acesso permitido acessarão o mesmolocal. Isso pode ser fonte de inconsistência já que diversos objetos estarão lendo e escrevendono mesmo local concorrentemente. Adicionalmente, na orientação à objeto deve-se evitar queinformações desnecessárias sejam visíveis por objetos externos.

Em nosso programa, foi mais efetivo definir a variável totalDeAlunos como estática, já que ototalDeAlunos é um valor compartilhado por todos os alunos, e não específico de cada aluno,como a matrícula.

4.1.5 Métodos

Na seqüência serão relembrados os conceitos de classe e objeto, porque é necessário queos manipulemos perfeitamente para poder entender tudo o que será apresentado nesta lição.

Objetos são instâncias de classes. Ao serem criados, possuem uma identificação única queé atribuída pelo ambiente e um conjunto de atributos que o caracteriza. Estes atributos assumemvalores que compõem o estado do objeto, e cada objeto executa operações definidas através decódigos chamados métodos.

Nas classes encontramos os objetos e suas devidas descrições, isto é , as classes descrevemos atributos de seus objetos, bem como os métodos que eles podem executar.

Métodos

Nas linguagens orientadas a objetos os métodos são usados para implementar operaçõesque serão usadas pelos objetos criados no programa.

Os métodos definem as ações a serem tomadas em diversos momentos da execução deum programa, dando dinamismo capaz de permitir que os objetos, em muitos casos, imitem ocomportamento de objetos reais. São os métodos que realizam todas as tarefas para as quaiso programa foi escrito, por exemplo, fazer cálculos, resumir informações de um arquivo, criargráficos, etc.

Chamando Métodos

Podemos chamar um método explicitamente ou implicitamente. A chamada explícita se dáatravés da execução de um comando ou por meio de uma expressão que contém o nome dométodo. Por exemplo ao chamar o método System.out.println (sua função é imprimir na tela)fazemos uma chamada explícita. Chamada implícita ocorre quando o interpretador Java chama

37

Page 39: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

um método por sua própria deliberação. Por exemplo quando o interpretador Java chama ométodo main para iniciar a execução do programa.

Declarando Métodos

Os métodos são declarados como parte da especificação de uma classe.Sintaxe:

<tipo de retorno> <nome do método> {<corpo do método>

}

Caso seja necessário, podemos ter nos métodos um valor de retorno. Na sintaxe acima seutilizarmos void no lugar de <tipo de retorno>, significa que o método não retorna nenhum valor.O <nome do método> é um identificador que define o nome pelo qual o método é conhecido,o <corpo do método> contém todas as declarações e especificações necessárias para quequando seja chamado os comandos sejam executados.

Nos métodos também podemos fazer uso de moderador de acesso como public, protected eprivate que são empregados para restringir o acesso a um método. Os modificadores permitemdar algumas propriedades ao método.

Exemplo 1:

class Exemplo1 {public static int soma(int num, int num2 ) {

int res = 0;res = num + num2;return res;

}}

Para retornar o resultado da soma que é de tipo inteiro é necessário colocar a palavra chaveint antes do nome do método.

O método termina quando o comando return é executado.Exemplo2:

class Exemplo2 {public static String somaPositivos (int num, int num2 ) {

int res = 0;if ((num < 0) || (num2 < 0))

return "numeros negativos";System.out.println(num + num2);return "fim de programa";

}}

No método somaPositivos temos um if que testa se as variáveis num e num2 são maioresque zero. Se não forem, ele dá um return e sai do método, caso contrário, imprime a soma denum e num2 e posteriormente dá um return e sai do método. O comando if será visto maisdetalhadamente na seguinte lição.

38

Page 40: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Referindo-se a métodos

Se a referência e o método são da mesma classe, então nos referimos a ele pelo seu nome.Quando se quer invocar a execução do método por um objeto específico, faz-se a referência

pela identificação de um objeto seguido do nome do método.Para métodos estáticos, faz-se a identificação de uma classe seguida do nome do método

que se quer dentro desta classe.Exemplo 3:

class Exemplo3{int x;int soma;static int quantidadeSomas = 0;

void somaX(){quantidadeSomas++;soma += x;imprime(); /*referencia ao método */

}

void imprime(){System.out.println("Soma dessa instância: " + soma);System.out.println("fim de programa");

}

static void conta() {System.out.println("Quantidade de somas feitas: " + quantidadeSomas);

}}

Neste exemplo, a referência ao método imprime é feita só pelo nome porque ele pertence àmesma classe do método (somaX()) que a chamou.

class Exemplo3TestDrive {public static void main(String[] arg){

Exemplo3 obj = new Exemplo3();obj.x = 21;obj.somaX(); /* executar método por um objeto */Exemplo3.conta(); /* executar o método estático da classe Exemplo3 */Exemplo3 obj2 = new Exemplo3();obj2.x = 23;obj2.somaX();Exemplo3.conta();

}}

No caso do Exemplo3TestDrive o método somaX() teve que ser chamado utilizando o objetoinstânciado, já o método conta() foi chamado utilizando o nome da classe (pois é um métodoestático).

39

Page 41: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Método println

Este método é executado pelo objeto referenciado System.out e imprime o argumento querecebe.

Para imprimir uma seqüencia de caracteres, é necessário que a seqüencia seja colocadaentre aspas duplas, exemplo:

System.out.println("Imprimindo seqüencia de caracteres");

Aparecerá na tela do computador:

Imprimindo seqüencia de caracteres

Os caracteres são impressos exatamente como são escritos. O println após imprimir da umsalto de linha, enquanto o print imprime os argumentos mas não produz salto de linha.

Exemplo 4:

class Exemplo4 {public static void main ( String [] argumento) {

System.out.print("Imprimindo primeira linha ");System.out.println("Imprimindo segunda linha ");System.out.println("Imprimindo terceira linha ");

}}

Aparecerá na tela do computador:

Imprimindo primeira linha Imprimindo segunda linhaImprimindo terceira linha

Na primeira impressão está sendo usado o método print, por isso não se produz salto de linhae a segunda impressão aparece na mesma linha da primeira.

Para imprimir uma variável, ela é passada como argumento sem fazer uso das aspas duplas.Por exemplo: se a váriavel var tem como valor 1000, usamos a seguinte seqüencia de comandospara imprimir este valor.

System.out.println(var);

Aparecerá na tela o valor 1000.Observando o exemplo 5:

void impEstudante (){System.out.println("Aluno: " + aluno);System.out.println("Matricula: "+ matricula);

}

Podemos observar que neste método para cada println são passados dois argumentos, umaseqüencia de caracteres e uma variável, o símbolo de adição "+"serve para indicar que outroargumento será impresso.

40

Page 42: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

4.2 Estruturas de Controle

Na execução de programas as ações primitivas nem sempre são executadas na ordem emque são escritas, devido à lógica de programação que foi aplicada na construção do algoritmo.Isto acontece porque às vezes necessitamos que determinada parte do programa deva repetir-sealgumas vezes ou que uma parte do programa deva ser executada de acordo com uma condição.

4.2.1 Estruturas de Repetição

Os ciclos de repetição em sua estrutura possuem um conjunto de comandos e uma condição.

Comando While

Na execução do comando while primeiro testa-se a <condição>. Se a condição resultar emfalso o comando termina passando o controle para posição após a chave de fechamento docomando. Se resultar em verdadeiro uma nova iteração tem início e o controle passa para oprimeiro comando da cláusula de repetição.

Sintaxe: while (<condição>){ <comandos>; }

Exemplo:

while (cont != 0) {cont = cont -1;

}

Na primeira linha é testado se cont é diferente de zero, se for, então são executados oscomandos que estão dentro do bloco while, mas se a condição não é satisfeita o ciclo de repetiçãotermina e o controle passa para a primeira linha depois do bloco.

Comando do-while

Este comando é parecido ao while sua diferença é que a condição é testada após a execuçãodo bloco de instruções. Portanto, este bloco é executado no mínimo uma vez.

Sintaxe: do { <comandos>; } while (<condição>);

Exemplo:

do {cont = cont - 1;

} while (cont != 0);

Neste exemplo, o controle esta no bloco do comando do, onde primeiro são executadas todasas instruções, neste caso subtrai-se um da variável cont, posteriormente é testada a condiçãoque, caso seja satisfeita (verdadeira), o controle volta para o comando do e se repete o proce-dimento. Mas se não for satisfeita (falso), termina o ciclo de repetição e o controle passa para aprimeira linha que está depois do comando while.

41

Page 43: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Comando For

Como os comandos anteriores, o comando for serve para repetir um conjunto de instruções,diferindo dos demais pela existência de procedimentos executados no inicío de sua estrutura.

Na execução do comando for o <comando inicial> é executado (Caso ele não exista ne-nhuma ação é realizada nesse passo). Em seguida a <condição de parada> é avaliada e seo resultado for falso o comando termina. Se o resultado for verdadeiro uma nova interação teminício e o controle passa para o primeiro comando da cláusula de repetição.

Sintaxe: for (<comando inicial> ; <condição de parada> ; <cláusula_fim_iteração>){ }

Possui um cabeçalho com três elementos separados por ponto e vírgula, no primeiro elementodeclaramos o tipo de variável que vamos utilizar e atribuimos um valor inicial para ela. No segundoelemento é declarada a condição de parada e no terceiro temos a cláusula de fim de iteração.

Exemplo:

for ( int var = 0; var <= 10; var++){System.out.println(var);

}

Neste exemplo, primeiro foi declarada uma variável var de tipo inteiro com um valor inicialde zero, depois é testada a condição que se for satisfeita será impresso o valor de var, senãoterminará o ciclo de repetição e o controle passará para o primeiro comando que estiver depoisdo bloco for .

OBS :. O exemplo usando for acima equivale ao código abaixo usando o while:

int var = 0;while (var <= 10) {

System.out.println (var);var ++;

}

4.2.2 Estruturas Condicionais

A estrutura condicional faz com que o fluxo de execução de um programa seja desviado, poisàs vezes precisamos executar um bloco de ações ou uma seqüência de ações primitivas apenasse uma determinada condição for satisfeita.

Comando if

Sua sintaxe é if (<condição>) <comandos> , ela nos diz que se a condição for verdadeiraas ações que seguem serão executadas. Veja o exemplo:

if (x > 0) {++x;

}

Lê-se: se x for maior que zero então incremente um em x.

42

Page 44: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Comando else

No caso em que a condição for falsa, por exemplo se x não é maior que zero então outrasações serão executadas, neste caso utilizamos o comando else. Tenha em mente que sempreantes de um else deve existir um if.

Sintaxe: if (<condição>) { <comandos> } else { <comandos> }

Exemplo:

if (x > 0)++x;

else--x;

Tomando x menor que zero, o programa passa o controle para o if e testa a primeira condição,como ela é falsa o controle passa para o else e executa o que esta no bloco dele, neste casoserá decrementado o valor da variável x. Veja que não foi necessário colocar chaves no if e noelse, isto acontece porque para cada um deles temos um único comando, portanto podem sersuprimidas as chaves.

Exemplo 1:

class Exemplo1 {public static void main (String [] arg){

int num = 10;float x;if (num != 0) {

x = 100/num;if( x > 10)

System.out.println(x + " > 10");else

System.out.println(x + " <= 10");}System.out.println("fim de programa");

}}

Neste programa testamos no primeiro if se num é diferente de zero, se for, então 100 é divididopor num. Posteriormente se faz um novo teste na condição do segundo if , se o valor obtido emx for maior que 10, então imprime x > 10, senão o controle vai para o else e é impresso x < 10,terminando assim o bloco do primeiro if . Por último é impresso a palavra fim de programa.

No caso em que num é igual a zero, a condição testada no primeiro if será falsa e, portanto,controle não entra no bloco do if, sendo passado o controle à primeira linha de comando depoisdo if , consequentemente será impresso fim de programa.

Comando switch

O comando switch também desvia, por meio de um teste na condição, o controle do programapara outro trecho, trabalhando de forma semelhante ao if, sua diferença é que pode tratar maisde dois blocos de execução. Sintaxe:

43

Page 45: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

switch (<expressão>){case <valor1>:<comandos 1>

break;case <valor2>:<comandos 2>

break;...

default: <comandos default>}

No comando switch a <expressão> que é passada será testada nas diferentes cláusulascase. A <expressão> é comparada com o rótulo (no caso <valor1> e <valor2>) em cada cláu-sula case. A comparação é feita do primeiro comando case até o último, ordenadamente, se elafor igual ao valor de alguma das cláusulas o controle passa para ela e serão executados todosseus comandos. Em seguida o controle passa para o primeiro comando após este rótulo.

Se nenhum rótulo for igual a <expressão>, então verifica-se a existência de um rótulo default.Caso exista, os comandos de default serão executados. Se não existir um rótulo default o fluxodo programa segue sem desvio feito pelo comando switch. O break é utilizado para sair doswitch transferindo o controle para o comando seguinte. Se o break é utilizado em comandosinternos à outros comandos apenas o mais interno é interrompido.

Exemplo 2:

import java.io.*;class Exemplo2 {

public static void main(String[] arg){int x = 21;switch (x) {

case 1: {System.out.println("x vale 1");break;

}case 21: {

System.out.println("x vale 21");break;

}default: {

System.out.println("x não é valido, nesse caso");break;

}case 30: {

System.out.println("x vale 30");break;

}}

}}

44

Page 46: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Se o valor de x for 1 aparecerá na tela:

x vale 1

Se o valor de x for 21 aparecerá na tela:

x vale 21

Se o valor de x não for 1 ou 21 ou 30, então aparecerá na tela:

x não é valido, nesse caso

Se o valor de x for 30 aparecerá na tela:

x vale 30

Como o valor de x não existe em nenhuma cláusula o controle é desviado para o comandodefault, prosseguindo-se a partir deste ponto com a execução dos outros comandos.

Exemplo 3:

import java.io.*;class Exemplo3 {

public static void main(String[] arg){int x = 10;switch (x) {

case 1: System.out.println("rótulo 1");break;

case 2: x = 2+x;switch (x){

case 4: System.out.println("dentro do segundo switch");break;

case 7: System.out.println ("no segundo switch");break;

}System.out.println("fora do segundo switch");break;

}}

}

Se o valor de x é 1 então é impresso na tela rótulo 1 e sai do switch terminando o programa.Se o valor de x é 2 o controle vai para classe 2, e é incrementado 2 à variável x que fica valendo 4agora. O controle é passado para o segundo switch em case 4 é impresso na tela a frase dentrodo segundo switch , posteriormente encontra-se um break que faz o controle sair do segundoswitch, depois é impresso a frase fora do segundo switch e logo encontramos um break com oqual saímos do primeiro switch e termina o programa.

45

Page 47: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

4.3 E/S Teclado e Arquivo

Obtendo Valores do Teclado

Para poder obter os valores do usuário a partir do teclado é necessário criar uma classeauxiliar que chamaremos de Teclado. Ela será criada em um arquivo com nome de Teclado.javae deve ser colocada no mesmo pacote ou diretório da outra classe onde ela será usada.

import java.io.*;public class Teclado {

private BufferedReader fonte = new BufferedReader(new InputStreamReader(System.in));

public int lerInteiro() {while (true) {

try {return Integer.parseInt(fonte.readLine());

} catch (IOException e) {}catch (NumberFormatException e) {

System.out.println("Numero invalido!");System.out.print("Por favor, digite um numero inteiro: ");

}}

}public double lerReal() {

while (true) {try {

return Double.parseDouble(fonte.readLine());} catch (IOException e) {}catch (NumberFormatException e) {

System.out.println("Numero invalido!");System.out.print("Por favor, digite um numero real: ");

}}

}

public String lerLinha() {String linha = null;try {

linha = fonte.readLine();} catch (IOException e) {}return linha;

}}

Nesta classe Teclado, temos 3 métodos public int lerInteiro(),public doublelerReal() e pu-blic String lerLinha(), que nos permitem ler inteiros, reais e strings.

NOTA: Não se preocupe por não conseguir entender a classe Teclado completamente,pois ela possui assuntos mais avançadas que serão vistos mais para frente. Por enquantovocê só precisa saber como usá-la para obter dados do teclado.

46

Page 48: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

4.3.1 E/S Teclado

Vias Lógicas de comunicação

O canal comunicante entre um repositório de dados e um programa é a representação dachamada via lógica de comunicação. Essas vias diferenciam operações físicas (dependem derepositórios e fontes) das operações lógicas (gravação e leitura). As vias podem ser de entrada,de saída ou de ambas(entrada e saída).

• Vias de entrada - Estabelecem um canal comunicação entre uma fonte onde os dados sãolidos e o programa leitor.

• Vias de saída - Estabelecem um canal comunicação entre uma repositório onde os dadossão lidos e o programa gravador.

• Vias de entrada e saída - Estabelecem um canal comunicação entre uma fonte ou reposi-tório com um programa permitindo leitura e/ou gravação.

A implementação das vias se dá em classes que contenham métodos apropriados de leitura,gravação e conexão entre fontes e repositórios de dados. O comando new é o responsável porcriar um objeto capaz de implementar uma via de comunicação. O objeto recém-criado então deveser associado à fonte ou repositório de dados, passando-se sua identificação como argumentoque use seus métodos de gravação e leitura.

Exemplo:

new FileReader("dados.txt");

O arquivo identificado por dados.txt está associado ao objeto da classe FileReader que im-plementa a via de entrada criada pelo comando new no exemplo anterior.

Vias padrões para gravação e leitura

A classe System e seus atributos in e out estão diponíveis automaticamente pelo ambienteJava associados ao teclado e ao vídeo. O método read (leitura) pode ser usado através do objetoin. Enquanto que o objeto out permite o uso dos métodos print (imprime algo mantendo o cursorna mesma linha) e println(imprime algo transferindo o cursor para próxima linha).

System.in.read();System.out.print();System.out.println();

Leitura de dado

Na execução do método read se a tecla x for digitada teremos a impressão do valor 120,que é o código inteiro correspondente à letra x. Ou seja, o método read pertencente à classeInputStream retorna valores inteiros(tipo int) ao ler um byte da fonte de dados.Exemplo:

47

Page 49: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

import java.io.*;class Leitura{

public static void main (String[] args) throws IOException {int lido = System.in.read();System.out.print(lido);

}}

As declarações import java.io.* e throws IOException serão melhor abordadas na lição detratamento de erros. Por hora basta saber que a primeira declaração serve para importar asclasses de entrada e saída e a segunda serve para posteriormente tratar possíveis erros tambémde entrada e saída.

Leitura da linha

O método readLine da classe BufferedReader permite leitura de todo o conteúdo de uma li-nha. Esse método usa leituras provenientes da classe InputStreamReader. Sendo assim, a fontede dados informada deve ser implementada a partir de um objeto da classe InputStreamReaderpara a classe BufferedReader.

Exemplo1:

import java.io.*;class LerLinha {

public static void main (String[] args) throws IOException {BufferedReader teclado = new BufferedReader(

new InputStreamReader(System.in));System.out.print("Digite algo: ");String linha = teclado.readLine();System.out.print("Voce digitou: " + linha);

}}

Exemplo2:

import java.util.*;class LerLinha2 {

public static void main(String[] args) {Scanner teclado = new Scanner(System.in);System.out.print("Digite algo: ");String linha = teclado.nextLine();System.out.print("Voce digitou: "+linha);

}}

A declaração import java.util.* é necessária para localizar a classe Scanner e usar o métodonextLine() tento o teclado como fonte de dados.

48

Page 50: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Leitura de valores múltiplos

Com objetos da classe StringTokenizer pode-se ler valores múltiplos do teclado que foramdigitados numa mesma linha, sendo que esses dados serão tratados como sequência de carac-teres chamados tokens. O espaço é o delimitador padrão dos tokens, mas o delimitador podeser alterado. Exemplo:

A sequência de caracteres "leitura de 4 tokens "contém 4 tokens.O método nextToken retorna o próximo token como uma sequência de caracteres. Já os mé-

todos hasMoreTokens e hasMoreElements determinam a existência de mais tokens na sequên-cia de caracteres caso o valor true tenha sido retornado.

import java.io.*;import java.util.*;class SeqCaracteres {

public static void main(String[] args) throws IOException {BufferedReader teclado = new BufferedReader(

new InputStreamReader(System.in));StringTokenizer linha = null;System.out.print("Digite algo: ");linha = new StringTokenizer(teclado.readLine());while (linha.hasMoreElements()) {

String token = linha.nextToken();System.out.println("valor: "+token);

}}

}

4.3.2 E/S Arquivo

São um conjunto de dados armazenados em um formato específico. Eles podem ser tex-tos(dados gravados em formas de caracteres) ou binários(dados gravados usando-se tipos pri-mitivos da linguagem) que têm diferenças apenas lógicas. O acesso aos arquivos pode ser feitosequencialmente ou randomicamente. No primeiro o cursor sempre move-se pra frente comgravação e leituras sequenciais. Já no segundo o cursor movimenta-se para frente e para trás, oque permite regravações e releitura de dados de maneira não sequencial.

Leitura e Gravação de arquivos sequenciais

Primeiro identifica-se um arquivo passando o caminho para determinar a localização dele.Em seguida o ambiente de execução deve localizá-lo e prepará-lo para leitura ou gravação. Fi-nalmente, fecha-se o arquivo.

O método read da classe FileReader após ler o caractere retorna o inteiro que correspondeao código do caractere lido e identifica o fim do arquivo pelo valor -1.

import java.io.*;class ArqSequencial {

public static void main(String[] args) throws IOException {int i;FileReader arq = new FileReader("/home/usr/arqSeq");

49

Page 51: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

while ((i = arq.read()) != -1)System.out.print(i+".");

arq.close();}

}

O método readLine da classe BufferedReader lê um arquivo linha a linha e identifica o fimdo arquivo pelo valor null.

import java.io.*;class LinhaArqSequencial {

public static void main(String[] args) throws IOException {FileReader fonte = new FileReader("/home/usr/linhaArqSeq");BufferedReader arq = new BufferedReader(fonte);String linha;while ((linha = arq.readLine()) != null)

System.out.println(linha);arq.close();

}}

O método write da classe FileWriter grava um caractere ou uma sequência de caracteres.Se o argumento for do tipo int o método grava o código correspondente ao valor. Se for char ouString serão gravados como caractere e sequência de caracteres respectivamente.

import java.io.*;class Soma {

public static void main(String[] args) throws IOException {FileWriter arq = new FileWriter("/home/usr/soma");String s1 = "Um mais um é igual a ";String s2 = " e dois mais dois é igual a ";char d = '4';arq.write(s1);arq.write(50);arq.write(s2);arq.write(d);arq.close();

}}

Será criado um arquivo texto chamdo soma no diretório /home/usr cujo conteúdo será:

Um mais um é igual a 2 e dois mais dois é igual a 4

Obs: É necessária ter permissão de gravação no diretório /home/usr.Os objetos da classe DataInputStream e DataOutputStream permitem respectivamente lei-

tura(pelo método read<tipo>) e gravação(pelo método de write<tipo>) direta de tipos primitivos.Por exemplo dados gravados com método writeInt devem ser lidos pelo métodos readInt.

Um arquivo acessado através de um objeto da classe DataInputStream tem seu final indicadopela ocorrência da exceção EOFException. Isso para prevenir que o método read<tipo> de tentecontinuar lendo depois o fim do arquivo.

50

Page 52: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Leitura e gravação de arquivos randômicos

A classe RandomAcessFile poussui métodos write<tipo> e read<tipo> para cada tipo pri-mitivo Java. Tais métodos devem ser usados em conjunto, ou sejam, dados gravados por umwrite<tipo> devem ser lidos por read<tipo>. Essa classe deve conter, além da identificação doarquivo, o modo de utilização separados por vírgula. Sintaxe:

new RandomAcessFile("/home/usr/arquivo","rw" );

• r - abre o arquivo apenas para leitura.

• rw - abre o arquivo para leitura e gravação.

• rws e rwd - abrem o arquivo para leitura e gravação, garantindo o sincronismo entre asoperações lógicas e físicas de entrada e saída.

Outros métodos úteis são:

• seek(x) - posiciona o cursor no início do byte de ordem x.

• length - retorna o tamanho do arquivo em bytes.

• getFilePointer - retorna a posição corrente do cursor.

• setLength(x) - define um novo tamanho para o arquivo.

4.4 Vetores e Cadeia de Caracteres

4.4.1 Vetores

Também conhecidos como arrays, são seqüências de elementos de um determinado tipo,em um número pré-determinado de dimensões (vetores de uma, duas ou mais dimensões, porexemplo).

Arrays são ditos unidimensionais quando possuem apenas uma dimensão, podendo assimreferenciar seus elementos através de um único índice numérico, geralmente entre colchetes(vetor[1]). Arrays multidimensionais são aqueles em que devemos referenciar cada elementoatravés de dois ou mais índices numéricos(vetor[1][2]). Podemos implementar matrizes facil-mente através dessa possibilidade de manipulação de arrays.

Arrays são referenciados como variáveis, cabendo ao programador determinar qual o tipodeste vetor. Além de definirmos o nome do array, devemos também definir portanto o tipo destearray e quantas dimensões possuirá. Como dito anteriormente, as dimensões são especificadaspor pares de colchetes, quando declaramos o array.

O comando new seguido do nome da classe e da quantidade de elementos da sua dimensãopode criar explicitamente objetos que representam vetores. Exemplo de um vetor de inteiros de100 elementos:

new int[100];

Vejamos agora exemplos de declarações de arrays unidimensionais e multidimensionais:

51

Page 53: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Uma dimensão

A B C D

Multidimensionais (matriz)

A B CD E FG H IJ K L

Para declarar arrays usaremos a seguinte sintaxe, que já foi apresentada:

• Unidimensional: tipo nome_array[];

• Multidimensionais: tipo nome_array[][]; sendo que nos primeiros colchetes temos o nú-mero de linhas da matriz e no segundo o número de colunas.

Exemplo:

int numeros[10];char Lista[5][4];

Os elementos dos vetores são referenciados por seu índice que é sua própria posição novetor. O atributo length serve para indicar quantidade de elementos de um vetor.

Array Unidimensional

Podemos utilizar arrays para evitar o uso de múltiplas variáveis redundantes em um programa,facilitando a manipulação de grande quantidade de dados. Normalmente, manipula-se uma es-trutura utilizando for para percorrer o array, conforme o exemplo abaixo:

class EscreveVetor {public static void main(String[ ] args) {

int[ ] lnum = new int[100];Teclado tec = new Teclado();System.out.println("Digite ate 100 numeros (0 para parar): ");int qtd = 0;for (; qtd < 100; qtd++) {

int valor = tec.lerInteiro();if (valor == 0) break;

lnum[qtd] = valor;}for (int i = qtd - 1; i > -1 ; i--)

System.out.print(lnum[i]+" ");}

}

Exemplo 2:

52

Page 54: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

import java.io.*;public class EscrevePolinomio {

public static void main (String[] args) {Teclado tec = new Teclado();double[] n = new double[5], n1 = new double[5];int j = 0, tam;/* Laço de leitura dos coeficientes */for (int i = 0; i <= 3; i++) {

System.out.print("Digite o "+(i+1)+"º coeficiente: ");n[i] = tec.lerReal();if (n[i] == 0){

j = j + 1;}

}System.out.println("");System.out.print("");/* Laço condicional para a impressao da expressao */for (int i=0; i <= 3; i++){

if( n[i] != 0 && n[i] > 0 && i == 0){System.out.print(n[i]+"X^3");

}if( n[i] != 0 && n[i] < 0 && i == 0){

System.out.print(n[i]+"X^3");}if( n[i] != 0 && n[i] > 0 && i == 1){

System.out.print(" + "+n[i]+"X^2");}if( n[i] != 0 && n[i] < 0 && i == 1){

System.out.print(" "+n[i]+"X^2");}if( n[i] != 0 && n[i] > 0 && i == 2){

System.out.print(" + "+n[i]+"X");}if( n[i] != 0 && n[i] < 0 && i == 2){

System.out.print(" "+n[i]+"X");}if( n[i] != 0 && n[i] > 0 && i == 3){

System.out.print(" + "+n[i]);}if( n[i] != 0 && n[i] < 0 && i == 3){

System.out.print(" "+n[i]);}

}System.out.println("");System.out.println("");System.out.println("Fim de programa");

}}

53

Page 55: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

O ciclo de repetição for é usado para percorrer o array e guardar em cada posição um valorreal. Lembre-se de que a primeira posição do vetor inicia com o número zero, por isso nossavariável de posição está declarada com o valor inicial de zero. Para imprimir os elementos de umvetor se o segundo for foi utilizado.

Array Multidimensional

A criação de matrizes é muito parecida ao vetor unidimensional, podemos criar arrays demuitas dimensões:

• int array[][] => array de duas dimensões.

• int array[][][] => array de tres dimensões.

• int array[][][][] => array de quatro dimensões.

Para criar um array de n dimensões, devemos colocar n colchetes abertos e fechados.

Percorrer Matriz

Para percorrer uma Matriz faremos uso de dois for, um percorre as linhas enquanto o outropercorre as colunas, exemplo:

class EscreveMatriz {public static void main(String[] args) {

Teclado tec = new Teclado();int L, C;do {

System.out.print("Digite a qtd de linhas: ");L = tec.lerInteiro();

} while (L <= 0);do {

System.out.print("Digite a qtd de colunas: ");C = tec.lerInteiro();

} while (C <= 0);int[] mat[] = new int[L][C];System.out.print("Digite,coluna a coluna, os elementos ");System.out.println("de uma matriz "+L+"x"+C);for (int j = 0; j < C; j++)

for (int i = 0; i < L; i++) {System.out.print("digite o elem ("+(i+1)+","+(j+1)+"): ");mat[i][j] = tec.lerInteiro();

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

for (int j = 0; j < mat[i].length; j++)System.out.print(mat[i][j]+" ");

System.out.println();}

}}

54

Page 56: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

4.4.2 Cadeia de Caracteres

Representam uma seqüência de caracteres e são implementadas como objetos da classeString. Uma cadeia de caractere é o único objeto que possui uma representação no código fontedo programa, ou seja, uma cadeia de caractere é o único objeto que tem um literal na linguagemJava.

System.out.println(21);System.out.println("meu programa");

O literal 21 é de tipo int e a cadeia de caracteres "meu programa"é de tipo String. O int éum tipo primitivo e a cadeia de caracteres é de tipo String (que é uma classe em Java).

Quando temos String str; estamos definindo uma variável com nome str de tipo String,mas o seu conteúdo não é definido. Agora definiremos o conteúdo da variável, String str ="programa"; o conteúdo corresponde a um endereço de memória onde o compilador montou umobjeto contendo a cadeia de caracteres "programa".

Para construir um novo objeto usamos new. A expressão str = new String("oi"); correspondea um construtor. Um construtor instrui o operador new em como deve ser construído o novoobjeto.

Algumas operações

Concatenação

Esta operação é feita em operandos de tipo String por meio do símbolo (mais) +, se o ope-rando que está sendo concatenado não for de tipo String, ele será transformado antes da conca-tenação na cadeia de caracteres que o representa.

Exemplo 1:

class Exemplo1{public static void main (String[] arg){

String aluno;String nome = "Felipe";int matricula = 3219;String curso = new String(" Computacao ");aluno = nome + curso + matricula;System.out.println(aluno);

}}

Aparecerá na tela do computador:

Felipe Computacao 3219

Subcadeia

Fazendo uso do método substring() podemos obter uma subcadeia de uma cadeia de carac-teres. O método recebe um valor inteiro e ele retorna a subcadeia formada pelos caracteres apartir da posição dada pelo valor inteiro.

Exemplo:

55

Page 57: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

String x;String srt = "testando metodo subcadeia";x = srt.substring(9);

Então na variável x produz-se a cadeia de caracteres: "metodo subcadeia".Podemos converter o conteúdo de uma cadeia de caracteres em um tipo primitivo através

dos métodos parse<tipo> das classes <tipo>. Existe um método para cada tipo primitivo Java.Exemplos:

Byte.parseByteShort.parseShortInteger.parseIntBoolean.parseBoolean

Alguns outros métodos que permitem fazer certas operações:

<retorno> <objeto>.<método>([<parâmetro>]);

• int str.length() : Retorna o tamanho da cadeia de caracteres referenciado pelo nome str ;

• int str.compareTo(String str2) : Sendo executado por um objeto instanciado str, comparalexicograficamente a cadeia str com str2, retorna um inteiro negativo se str precede (emordem da tabela UNICODE, que é alfabética) str2 e positivo se str2 precede str, caso sejamiguais retorna o valor zero;

• char str.charAt(int ind) : Usa o inteiro ind e retorna o caracter que está na posição doíndice ind do objeto referenciado pelo nome str ;

• String str.toLowerCase() : Todos os caracteres são convertidos a minúscula. O str deveser um objeto instanciado do tipo String;

• String str.toUpperCase() : Todos os caracteres são convertidos a maiúscula. O str deveser um objeto instanciado do tipo String.

56

Page 58: Java Basico

Capítulo 5

Conceitos Avançados

Conceitos Avançados da Orientação a Objeto

5.1 Tratamento de erros

Na execução de um programa podem ocorrer erros que podem tanto causar a interrupção doprograma quanto produzir resultados incorretos ou comportamento inesperado. Existem erros delógica e erros de execução.

Erros Lógicos

Estes erros se apresentam no desenvolvimento de um algoritmo não apropriado para so-lucionar o problema que se propõe. Estes erros não necessariamente causam interrupção naexecução do programa.

Erros de Execução

São erros mais específicos em relação aos lógicos, que decorrem de uma operação inválidae causam interrupção na execução do programa. Este tipo de erro depende da plataforma e dalinguagem que está sendo utilizada, por exemplo se realizamos uma divisão por zero vai causarum erro de execução.

Ao se causar um erro a execução é interrompida e é enviado um sinal ao programa indicandoque a operação não pode ser realizada.

As linguagens de programação possuem formas para identificar e tratar os erros de execução.Em Java eles são detectados pela JVM e um objeto de uma classe que caracteriza o erro é criada.Notifica-se o programa da operação inválida e caso seja possível tratá-lo, pode-se acessar oobjeto que caracteriza o erro.

Os erros são caracterizados por objetos de classes específicas, estas classes são classeError e classe Exception. Funcionam como superclasses, mas ambas são subclasses da classeThrowable.

• Classe Error: a classe Error, com suas subclasses, é utilizada para indicar erros gravesque não se espera que sejam tratados pelo programas.

• Classe Exception: Esta classe indica erros que podem e devem ser tratados pelos progra-mas, como por exemplo erros aritméticos.

57

Page 59: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Comando Try

Os tratamentos de erros são feitos pelo comando try, em suas sintaxes temos um corpo e aele associadas várias cláusulas catch.

Quando o controle está no bloco do comando try o ambiente passa a monitorar todos oscomandos declarados em seu bloco (corpo). Se nenhum erro aparecer o comando try termina,mas se ocorrer algum erro a cláusula catch é acionada imediatamente, ao fim da execução dacláusula catch o comando try termina normalmente e o fluxo passa para o próximo comandoapós ele.

try {res = 100/num;System.out.println("100/"+num+" = "+res);

}catch (ArithmeticExecption e) {System.out.println("não se pode calcular");

}

Aqui é tratado o erro em que num tenha o valor zero, neste caso é um erro aritmético que étratado na cláusula catch.

try {int num = Interger.parseInt(teclado.readLine());

}catch (NumberFormatException e) {System.out.println("digitou um valor não inteiro");

}

Neste é tratado a entrada de um número não inteiro.

Cláusula Finally

Esta cláusula é sempre executada e se encontra no corpo do comando try, caso não seproduza nenhum erro os comandos são executados e o controle passa para a cláusula finally.Caso ocorra algum erro o controle passa para a cláusula catch onde é tratado o erro e depois éenviado para a cláusula finally.

try {int num = Interger.parseInt(teclado.readLine());

}catch (NumberFormatException e) {System.out.println("digitou um valor não inteiro");

}finally {System.out.println("saindo do bloco try");

}

Caso ocorra um erro no programa será impresso na tela:

digitou um valor não inteiro saindo do bloco try

58

Page 60: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Propagando erros

A cláusula throws indica que o método pode gerar erros das classes relacionadas, que de-vem ser subclasses de Throwable, que precisam ser tratados pelos métodos chamadores. Ouseja, erros das classes relacionadas ou de alguma subclasse têm seu tratamento postergado. Ocomando throw é usado para criar erros que não ocorreriam em sitações normais.

Exemplo de tratamento de erros:

import java.io.*;class TratandoErrodeFormato {

public static void main(String[] arg) throws IOException {BufferedReader teclado = new BufferedReader(

new InputStreamReader(System.in));System.out.print("Digite um numero: ");int num = 0;while (true) {

try {num = Integer.parseInt(teclado.readLine());break;

}catch (NumberFormatException e) {System.out.print("Por favor, digite um valor inteiro: ");

}}System.out.println("O numero digitado foi: "+num);System.out.println("fim de programa");

}}

5.2 Encapsulamento, Herança e Polimorfismo

5.2.1 Encapsulamento

É a capacidade de poder restringir ou controlar na classe o acesso e a visibilidade a seuselementos. É normalmente feito através de um qualificador. Os qualificadores, que são palavrasreservadas, permitem a visibilidade a um determinado atributo ou método definido. Em Java exis-tem os qualificadores private, public, protected e "sem"qualificador (quando não especifica-mos os qualificadores, é automaticamente adotado o qualificador em nível de pacote - package),estas palavras reservadas permitem restringir o acesso às declarações de uma classe e à própriaclasse.

O conceito de encapsulamento está intimamente relacionado ao conceito de abstração naprogramação. A abstração é o processo de "esconder"dos detalhes de implementação para queo programador possa se preocupar somente com a "essência". O encapsulamento, através dasua restrição de visibilidade dos elementos internos à classe, permite a abstração.

Benefícios de se restringir uma classe:

• Código de programa legível;

• Minimização de erros;

59

Page 61: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

• Facilidade de modificação;

• Facilidade de extensão;

• Programa mais seguro (pois pode-se controlar os usos).

Qualificadores

• public: permite que os atributos e métodos sejam acessíveis a todos os métodos de todasas classes, isto é, sejam acessados por códigos externos;

• private: os atributos e métodos só podem ser acessados por métodos que pertençam àmesma classe deles. Este é o mais rígido nível de acesso;

• protected: o acesso dos métodos ou atributos pode ser feito na própria classe ou emsubclasses, isto quer dizer, em classes filhas;

• "sem"qualificador ou em nível de pacotes: os atributos e métodos são acessíveis pelaprópria classe ou por classes que pertencem ao mesmo pacote (package) em que foramcriados.

Exemplo:

public class nome_classe{ //declaração inicial da classe de tipo publicprivate int valor;private float valor2; //atributos da classepublic void exemplo(){}

} //fim da classe

5.2.2 Herança

Definida como a habilidade de uma classe poder herdar características de uma outra. Aclasse que recebe a herança é dita como derivada da classe ou subclasse. A subclasse inclui ocomportamento da superclasse e dá a possibilidade de adicionar-lhe funcionalidades.

Esta propriedade de uma classe poder herdar características de outra e assim sucessiva-mente é chamado de hierarquia de classes. Podemos imaginar a hierarquia como uma árvoregenealógica, onde temos a superclasse pai e a partir dele as subclasses filhos.

Este mecanismo permite que a mesma porção de código projetada para a classe pai possaser utilizada para a classe filho sem alteração do código.

Utilizamos a palavra chave extends para declarar uma herança de classe. A sintaxe é:

<qualificador> [static] class <nome_subclasse> extends <nome_superclasse>{<código_classe_filho> }

Exemplo:

//declaração da superclasseclass Colegio{

String nomeColegio; //atributos da classe colegioString endereco; //atributos da classe colegiopublic String getEndereco(){ //metodo

60

Page 62: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

return endereco;}

} // fim da superclasse// declaração subclasse

class ColegioParticular extends Colegio{float custoMensal;//atributo adicional à superclassepublic String toString(){//metodo adicional à superclasse

return "Sou o colegio particular " + nomeColegio;// Usa-se o "nomeColegio" declarado na superclasse pois não usamos "protected"

}} //fim da subclasse

OBS:. A herança é uma relação do tipo "é um". Ou seja, se a classe Mamiferos herda(extends) a classe Animal, estamos dizendo que os Mamíferos são também Animais. Essa éa idéia que o Java implementa como herança, portanto, um programa criado para rodar com aclasse Animal rodará também com a classe Mamifero.

Uma visualização da herança:

Figura 5.1: Exemplo de Herança

5.2.3 Polimorfismo

É o princípio pelo qual um mesmo comando tem diferentes comportamentos dependendodo contexto em que estão sendo usados. A forma mais comum de implementar polimorfismo éusando, em heranças, métodos com o mesmo nome nas subclasses de uma determinada classe,mas com conteúdo diferente. As subclasses invocam métodos que têm a mesma identificação(nome), mas as classes derivadas possuem distintos comportamentos.

Como exemplo, suponha que a classe Filho1 e Filho2 herdam da superclasse Pai e as trêsclasses possuem um método com o nome metodoQualquer. Suponha também que obj sejadeclarado como um objeto da classe Pai. Ou seja, ele pode referenciar Pai, Filho1 e Filho2graças à herança. Então, o comando obj.metodoQualquer() pode ter diferentes comportamentosdependendo do que classe o obj estiver instanciando naquela porção do código.

61

Page 63: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Em uma máquina virtual Java, uma chamada a um método (a execução de um método) ocorreda maneira abaixo:

Ao fazer a chamada de um método apartir de um objeto de uma classe A, gera-se a buscado método nesta classe, caso ele não seja encontrado é realizada a busca na superclasse (quechamaremos de classe B ) da classe A, caso não seja encontrado na classe B é feita a buscana sua superclasse, isto é feito ate encontrar o método ou até chegar na raiz da hierarquia declasses (que, por padrão, é a classe Object). Encontrado o método ele é executado e qualqueroutra chamada dentro dele gera a mesma busca do método desde essa classe.

Então, mesmo que um determinado método esteja já definido em uma superclasse, você podea reescrever em uma subclasse, pois a máquina virtual sempre procurará o método na própriaclasse primeiro. Essa propriedade facilita o polimorfismo de um método.

OBS:. Temos o polimorfismo em operadores também. Por exemplo, a operação "+"(adição)retorna a soma caso os operandos sejam números, enquanto que fará uma concatenação casoos operadores sejam uma String.

5.3 Interfaces Gráficas

5.3.1 Gerência de Janelas

Em Java existem vários pacotes com classes específicas para criação de interfaces gráficas,sendo que os mais conhecidos são awt(abstract window toolkit) e swing que é uma extensãodo pacote awt.

Janelas de Diálogo

No pacote swing existe a classe JOptionPane que possui métodos estáticos responsáveispelo surgimento de janelas que param a execução do programa até que a janela seja destruídaou alguma ação(pressionar o botão) seja realizada. Isso cria uma interação com usuário sendofeita por botões, mensagens informativas ou ícones.

Fornecimento de informação:

import javax.swing.*;import javax.swing.JOptionPane;class JanelaAviso {

public static void main(String[] arg) {JOptionPane.showMessageDialog(null,"Pressione OK para iniciar","JanelaAviso",JOptionPane.WARNING_MESSAGE);

JOptionPane.showMessageDialog(null,"Pressione OK para terminar");System.out.println("fim do programa");

}}

O método showMessageDialog mostra uma mensagem e espera confirmação do usuário.Sintaxe:

void showMessageDialog(Component comp, Object mensagem);void showMessageDialog(Component comp, Object mensagem,

String titulo, int tipodeMensagem);

62

Page 64: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

As variáveis mesagem e titulo são menemônicas(correspondem à própria mensagem e títuloda janela) e aparecerão tem todos os métodos abaixo. Já o tipodeMensagem pode ser:

ERROR_MESSAGE, WARNING_MESSAGE, QUESTION_MESSAGE, PLAIN_MESSAGE e INFORMATION_MESSAGE

Solicitando informações:

import javax.swing.*;import javax.swing.JOptionPane;class JanelaSolicita {

public static void main(String[] arg) {int[] aceitoNum = new int[5];String aceitoStr = "";int op = 0, num = 0, ind = 0;do {

num = (int)Math.floor(100*Math.random());op = JOptionPane.showConfirmDialog(null,"Aceita o valor"+num+"?","JanelaSolicita",JOptionPane.YES_NO_OPTION);if (op == JOptionPane.YES_OPTION)

aceitoNum[ind++] = num;} while (ind < 5);for (int i = 0; i < ind; i++)

aceitoStr = aceitoStr+" "+aceitoNum[i];JOptionPane.showMessageDialog(null, aceitoStr);System.out.println("fim do programa");

}}

int showConfirmDialog(Component comp, Object mensagem,String titulo, int tipodeBotoes);

int showConfirmDialog(Component comp, Object mensagem);

O primeiro método mostra uma janela de opções com botões de confimação para o usuário.Já o segundo mostra uma janela com três botões(YES, NO e CANCEL).O tipodeBotao podeser:

DEFAULT_OPTION, YES_NO_OPTION, YES_NO_CANCEL_OPTION, OK_CANCEL_OPTION

O DEFAULT_OPTION mostra apenas o botão OK, os demais são menemônicos.Obtendo valores:

import javax.swing.*;import javax.swing.JOptionPane;class JanelaObter {

public static void main(String[] arg) {int[] aceitoNum = new int[5];String aceitoStr = "";for (int i = 0; i < 5; i++) {

String texto = JOptionPane.showInputDialog(

63

Page 65: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

null,"Digite o "+(i+1)+". numero");aceitoNum[i] = Integer.parseInt(texto);aceitoStr = aceitoStr+" "+texto;

}JOptionPane.showMessageDialog(null, aceitoStr,"Numeros Digitados",JOptionPane.INFORMATION_MESSAGE);System.out.println("fim do programa");

}}

String showInputDialog(Component comp, Object mensagem);String showInputDialog(Component comp, Object mensagem, Object valorInserir);

O primeiro método mostra uma janela para recebimento de dados. O segundo mostra o campotexto que é preenchido com o conteúdo de valorInserir. Depois de digitar os dados no campotexto e o botão OK for pressionado, o método retornará o conteúdo digitado em forma de cadeiade caracteres. O retorno será vazio caso o botão CANCEL seja pressionado ou seja destruída ajanela.

Gerência de layout

Saber gerenciar janelas significa controlar a posição dos componetes, sendo capaz deredesenhá-los ou reposicioná-los quando necessário for, segundo políticas previamente deter-minadas. Usa-se normalmente um dos gerentes disponíveis no ambiente Java como uma dasclasses que implementam a interface LayoutManager.

Gerência de eventos

Esses gerentes é que monitoram eventos do ambiente e notificam as aplicações sob seu con-trole da ocorrência de tais eventos. Os gerentes definem modelos, classes, fontes e registradoresde eventos para tratá-los. Para cada classe de eventos há uma interface que especifica métodosque devem ser executados de acordo com o tipo de evento.

Obs:. Os conceitos de gerência de layout e eventos, assim como o estudo de interfacesgráficas em Java, que foram aqui abordados são meramente introdutórios. Seria necessário umnovo curso para desenvolvimento pleno de tais assuntos, o que foge do escopo deste curso.

5.4 Threads

Até o momento foram vistos programas cuja execução tem apenas um único fluxo. Em Java,pode-se lançar múltiplas atividades dentro de um único processo. A isso chamamos Threads ouMultiThreading ou, ainda, sub-processos no sistema operacional. Um programa em execução édito como um processo. Um processo em adamento aloca diversos recursos como memória, hde outros sendo que o sistema operacional é o responsável por esse controle. Já quem controlaas várias threads dentro do programa é o próprio interpretador Java. Por isso o uso de threadsproporciona um maior desempenho em ambientes mulltiprocessados, simplifica a modelagem dealgumas aplicações e tem um custo menor de gerenciamento em relação aos processos.

64

Page 66: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Há duas maneiras de se implementar threads em Java, usando-se herança ou implementandouma interface. Uma thread têm os seguintes estados: Criada, em Execução, Suspensa ouMorta.

Principais Métodos

• run() - Executa as atividades da thread. Se este método finaliza, a thread também o faz;

• start() - Determina a execução da thread. Chama o método run() antes de finalizar;

• sleep(int x) - Coloca a thread para dormir por x milisegundos;

• join() - Espera o término da thread para qual foi mandada a mensagem para poder serliberada;

• interrupt() - Interrompe a execução da thread;

• interrupted() - Testa se a thread está ou não está interrompida.

Usando Herança

Para usar herança deve-se estender a classe Thread que pertence ao pacote java.lang.Thread.Nossa classe deve sobrescrever o método public void run(). O método run() é sempre chamadoquando uma linha de execução é criada para o objeto. Sintaxe:

public Thread (String nomedaThread);public Thread();

Exemplo1:

class Tarefa1 extends Thread {public void run() {

for(int i=0; i<1000; i++)System.out.println("Herança");

}}

Exemplo2:

// ThreadTest1.javapublic class ThreadTest1 extends Object {

public static void main(String args[]){new ThreadTest1();

}ThreadTest1(){

Contador cc = new Contador();for (int i=0; i<5; i++){

System.out.println("(ThreadTest1) Contador = " +cc.proximoValor());

}ClasseNormal CN = new ClasseNormal();

65

Page 67: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

CN.func(cc);for (int i=0; i<5; i++) {

System.out.println("(ThreadTest1) Contador = " +cc.proximoValor());

}}

}

class Contador {int ct = 0;public Contador() { }int proximoValor() {

ct++;try{

Thread.sleep(500);}catch (Exception e) { }

return ct;}

}class ClasseNormal {

void func(Contador cx) {for (int i=0; i<5; i++) {

System.out.println("(ClasseNormal) Contador = " +cx.proximoValor());

}}

}

Usando a interface Runnable

Toda classe que implementa a interface Runnable nos obriga a especificar o método publicvoid run(), que será executado no momento em que a linha de execução do programa é inicia-lizada. Se a classe Filha implementar a interface Runnable, ela se capacita a ser tratada comose fosse um objeto do tipo da interface Runnable. Sintaxe:

public class Filha extends Pai implements Runnable;

Despois de criada a classe Thread passando para o seu construtor a referência do objeto queimplementará a interface Runnable, temos:

Thread umaTarefa = new Thread(Runnable objetodaThread);

ou

Thread umaTarefa = new Thread(Runnable objetodaThread, String nomedaThread);

Exemplo3:

66

Page 68: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

class Tarefa2 implements Runnable {public void run() {

for(int i=0; i<1000; i++)System.out.println("Runnable");

}}

Exemplo4:

// ThreadTest2.javaimport java.lang.Thread;public class ThreadTest2 extends Object {

public static void main(String args[]) {new ThreadTest2();

}ThreadTest2() {

Contador cc = new Contador();for (int i=0; i<5; i++) {

System.out.println("(ThreadTest2) Contador = " +cc.proximoValor());

}ThreadClass1 objetoThread = new ThreadClass1(cc);Thread thread = new Thread(objetoThread);thread.start();for (int i=0; i<5; i++) {

System.out.println("(ThreadTest2) Contador = " +cc.proximoValor());

}}

}

class Contador {int ct = 0;public Contador() {}int proximoValor() {

ct++;try {

Thread.sleep(500);}catch (Exception e) { }return ct;

}}

class ThreadClass1 implements Runnable {Contador cx = null;ThreadClass1(Contador cz) {

cx = cz;}public void run(){

67

Page 69: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

func();}void func() {

for (int i=0; i<5; i++) {System.out.println("(ThreadClass1) Contador = " +cx.proximoValor());

}}

}

Para usar as classes(Tarefa1 e Tarefa2) dos exemplos 1 e 3 deve-se acrescentar:

Thread comHeranca = new Tarefa1();Thread comRunnable = new Thread(new Tarefa2());comHeranca.start();comRunnable.start();

Prioridades de Threads

Em Java, a prioridade é determinada como um valor inteiro de 1 à 10. A prioridade 10 é amaior, a 1 é a menor e a 5 é a prioridade padrão. A thread herda a prioridade da thread que acriou. Métodos:

void setPriority(int prioridade);int getPriority();

Sincronismo entre Threads

Mesmo sendo o mais eficiente dentre os processos, as threads têm a desvantagem de tornaro interpretador pouco eficiente. Isso porque o uso de memória compartilhada entre as threadsobriga o programador a sincronizar as ações de suas threads. Para tal, existe no ambiente Javalocks ou monitores. O lock funciona como uma permissão para determinar que apenas uma th-read possa utilizar um recurso por vez. Os locks são obtidos através do comando synchronized.Sintaxe(Os comandos abaixo são equivalentes:

synchronized public void sincronizando() {algumaAcao();

}

ou

public void sincronizando() {synchronized(this) {

algumaAcao();}

}

68

Page 70: Java Basico

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Alguns métodos da classe Object implementam o conceito de locks notificando as threadspara indicar se elas devem ser suspensas ou se devem voltar a ficar em execução. Para tal, seráutilizado o lock do objeto chamado pela thread para realizar as notificações necessárias. Porisso, antes de chamar um dos três métodos(wait(), notify() ou notifyAll()), o lock deve ser obtidoutilizando-se o comando synchronized.

• wait() - Suspende a thread chamadora do método até que tempo especificado como argu-mento tenha passado ou até que outra thread a acorde;

• notify() - Acorda, se existir alguma thread que esteja esperando um evendo neste objeto;

• notifyAll() - Acorda todas as threads que estejam esperando neste objeto.

69