You are on page 1of 69

Linguagem Java

A partir de trechos meus [Jane Tavares A. da Silva - JTAS] e de trechos das


apostilas do Prof. Adriano Caminha [AC], Prof. Francisco Santos [FS]. e da Prof
a
.
Letcia Winkler [LK].

















Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

1



Bibliografia

Bibliografia bsica:

1. DEITEL, H. M.; DEITEL, P. J. Java: Como Programar. 6 Edio. So Paulo:
Pearson Prentice Hall, 2005.
2. HORSTMANN, Cay; CORNELL, Gary. Core Java 2 Volume I: Fundamentos.
So Paulo: Pearson Makron Books, 2001.

Bibliografia complementar:

1. CAMARO, Carlos; Figueiredo, Luclia. Programao de computadores em
Java. Rio de Janeiro: LTC, 2003
2. HORSTMANN, Cay S. Big Java. Porto Alegre ; Bookman, 2004.




AVISO: Este material no pretende substituir nenhuma outra apostila, e muito menos
qualquer livro.

Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

2


1. Introduo


1.1. Paradigmas das linguagens de programao [FS]

A maioria das linguagens de programao so extensas e complexas e
normalmente integram vrias idias. No entanto, cada linguagem baseia-se,
normalmente, numa idia central, ou paradigma.
Existem 4 paradigmas (principais) de programao:
o Paradigma Imperativo: Baseado em comandos e procedimentos.
Ex.: Pascal, C, Fortran.
o Paradigma OO: Baseado em objetos e classes.
Ex.: Java, Smalltalk, Simula, C++.
o Paradigma Funcional: Baseado em funes.
Ex.: Lisp, ML, Scheme, Haskell.
o Paradigma Lgico: Baseado na lgica de predicados (fatos e regras)
Ex.: Prolog.
Obs: Linguagens de Marcao (HTML) Linguagens de Programao.
Linguagens de Marcao no especificam computaes, elas apenas
descrevem a aparncia geral de documentos.


1.2. Fundamentos bsicos de programao em Java [FS]

Programao Estruturada x Programao Orientada a Objetos - POO

A principal diferena entre o enfoque tradicional da anlise estruturada e o
enfoque da O.O. est na forma pela qual dados e procedimentos se comunicam.

Anlise Estruturada

nfase nos procedimentos
Comunicao atravs de passagem de dados (parmetros)
Programa = execuo de procedimentos cuja tarefa a manipulao de
dados

Anlise Orientada a Objetos (AOO)

Dados e procedimentos fazem parte de um s elemento bsico (objeto ou
classe)
Dados e procedimentos encapsulados em um s elemento.
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

3


NOTE :

Programao Estruturada

DADOS + FUNES

Programao Orientada a Objetos (POO)

Atributos
(dados)
+
Mtodos
(funes)


1.3.Vantagens e caractersticas da linguagem Java [JTAS]

Java como uma linguagem de programao:

Desenvolvida na dcada de 90 por James Gosling da Sun
Microsystems
Orientada a Objetos
Independente de plataforma (portvel) : No h aspectos dependentes
da implementao. Por exemplo: Os tipos primitivos tm tamanhos
determinados .
Uso de recursos de rede
Segurana : Para ser usada em ambientes de rede/distribudos.
Mecanismos para sistemas livres de vrus e adulteraes, pacotes para
criptografia 128 bits, etc. (No se pode provar que 100% segura, mas
certamente a linguagem mais segura at hoje por causa destes
mecanismos)

Simples (sintaxe similar a C/C++)
Internacionalizao (UNICODE)
Distribuda e multitarefa : Os programas podem utilizar recursos na
Internet com a mesma facilidade que acessam arquivos locais. Lidam
com TCP/IP, HTTP, FTP.

Carga dinmica de cdigo : Java foi projetada para se adaptar a um
ambiente em evoluo. As bibliotecas podem adicionar livremente
novos mtodos e variveis a qualquer instante (mesmo em execuo).

Desalocao automtica de memria (garbage collection)




Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

4

Java possui 3 tipos de programas, levando em conta como e quando eles so
executados:
Applications: programas stand-alone que englobam todos os recursos
de acesso ao Sistema Operacional. Semelhantes aos programas
convencionais.
Applets: programas que so carregados atravs de uma rede TCP/IP
de um servidor remoto e so executados localmente pela JVM no
escopo de um browser. A JVM impe uma srie de restries aos
applets por questes de segurana.
Servlets: programas que so executados remotamente em um servidor
Web atravs de um servlet container. So usados para gerar contedo
dinamicamente.

1.4. Conceitos Bsicos em O.O.

Objeto possui identidade, caractersticas e comportamentos
Classe objetos com caractersticas semelhantes so agrupados em uma
classe. Dados e procedimentos associados a uma classe so chamados de
membros da classe.

Ex. Sistema para informatizao de uma loja comercial.
Classe: Funcionrio
Objeto: Jos da Silva
atributos: nome, endereo,data de admisso, salrio base, etc.
mtodos (procedimentos): calcular salrio liquido, mostrar dados, etc.


1.5. Alguns conceitos ERRADOS Sobre JAVA [AC]
- Java uma extenso do HTML.
- Java fcil de aprender: 1.500 classes e interfaces, sendo necessrio
conhecer muitas delas para se construir programas profissionais.
- Java um ambiente fcil de programao: existem ambientes grficos de
programao, mas o melhor caminho para se aprender um editor simples
como o bloco de notas.
- Java interpretada, ou seja, lenta para aplicaes srias: isto pode ser
resolvido com o uso de compiladores JIT (Just In Time) que compilam na
primeira vez que a aplicao usada. No importa que C++ seja mais rpida,
Java mais fcil de programar e portvel.
- Todos os programas Java executam dentro de uma pgina Web.
- Os applets Java so um grande risco segurana: nenhuma linguagem
100% segura, mas as falhas esto sendo corrigidas e o risco muito menor
que o encontrado em controles ActiveX.
- Javascript a verso mais simples da Java: Javascript foi inventada pela
Netscape e apenas utiliza uma sintaxe parecida com a de Java, nada mais
tem a ver com Java.

Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

5

1.6. A Plataforma Java Caractersticas : [JTAS]

O termo plataforma normalmente usada para designar um conjunto
Hardware + Sistema Operacional.
A plataforma Java definida apenas em software e possui dois componentes:
Mquina Virtual Java (JVM)
Conjunto de bibliotecas que disponibilizam funes comuns (API Java)

Diferentemente das linguagens convencionais, que so compiladas para cdigo
nativo, a linguagem Java compilada para bytecode" (gerando o .class) que
executado por uma mquina virtual (JVM Java Virtual Machine).

Bytecodes interpretados

Cdigo fonte



O modelo inicial (vide figura), que favorece a portabilidade do cdigo,
atravs da interpretao dos bytecodes, foi praticamente substitudo por
outro em que a interpretao dos bytecodes substituda por outra
compilao (a compilao dos bytecodes), que ocorre quando o programa
executado (compilador JIT , isto , just-in-time). Essa mudana foi
fundamental para tornar Java uma linguagem de alto desempenho.

Obs.: compilar just-in-time : o cdigo compilado quando est em vias de ser
executado.

A linguagem Java representa um esforo na direo do conceito
write once, run everywhere (escreva uma vez, execute em todo lugar)
Uma mquina virtual (Virtual Machine VM) pode ser definida como uma
duplicata eficiente e isolada de uma mquina real.
A JVM , ento, uma mquina imaginria que implementada atravs da
emulao por software usando uma mquina real.
Com a JVM existe uma camada extra entre o sistema operacional e a
aplicao, responsvel por traduzir (no apenas isso) o que sua
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

6

aplicao deseja fazer para as respectivas chamadas do sistema
operacional no qual ela est rodando no momento. Veja a figura :


A especificao da Mquina Virtual Java fornece as especificaes da
plataforma de hardware para a qual todo o cdigo Java est compilado. Essa
especificao permite que os programas Java sejam independentes de
plataforma .

A plataforma Java composta por 3 outras plataformas:
J2SE ou Java SE (Java Standard Edition): a base da plataforma e
inclui o ambiente de execuo e as bibliotecas comuns.
J2EE ou Java EE (Java Enterprise Edition): verso voltada para o
desenvolvimento de aplicaes corporativas. Ex: Servlets
J2ME ou Java ME (Java Micro Edition): verso voltada para o
desenvolvimento de aplicaes mveis ou embarcadas. Ex: celular


1.7. O Ambiente de Desenvolvimento [JTAS]

Java 2 System Development Kit (J2SDK)
Coleo de ferramentas de linha de comando para, entre outras tarefas,
compilar, executar e depurar aplicaes Java

Ex: JRE, javac, javadoc, etc.

Java Runtime Environment (JRE)
Tudo o que necessrio para executar aplicaes Java
Parte do J2SDK e das principais distribuies Linux, MacOS X, AIX,
Solaris, Windows 98/ME/2000

Portanto, lembre-se de baixar o JDK (java development kit, ou seja, kit de
desenvolvimento java), e no o JRE (java runtime environment, isto , ambiente de
execuo java). O JDK j vem com um JRE, porm o contrrio no verdade. O
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

7

JRE vem sem compilador e ferramentas para desenvolvimento. Acesse o site da
Sun (java.sun.com) ou o do JCreator (www.jcreator.com), que possui link para o site
da Sun.(Oracle).

1.14. Exemplo de uma Aplicao

Estrutura de uma aplicao Java: [JTAS]
Uma aplicao Java composta de um ou mais arquivos com
extenso .java
Cada arquivo .java deve conter uma e somente uma classe pblica.
O nome do arquivo .java tem que ser igual ao nome da classe pblica
que ele contm. Isso acontece porque a JVM usa o nome da classe
para saber em que arquivo ela se encontra.
Cada arquivo .java quando compilado gera um arquivo com o mesmo
nome com extenso .class. Esse o arquivo que contm o bytecode
que ser executado pela JVM.
Os arquivos .java no precisam estar em um mesmo diretrio. Eles
podem ser organizados em uma hierarquia de diretrios de acordo com
a finalidade de cada um. Esses diretrios so vistos pela JVM como os
diversos pacotes que compem a aplicao.
Podemos dizer, ento, que uma aplicao Java mnima composta de
um nico arquivo .java contendo uma nica classe.

Um Programa Simples em JAVA [AC]
- Veremos inicialmente o mais simples programa JAVA:

package exemplo;
public class Primeiro
{
public static void main (String[] args)
{
System.out.println( simples !!!);
}
}//cuidado com as aspas do MS Word! So diferentes!

- Esta mini-aplicao em Java imprime um texto na tela quando executada via
linha de comando
- Aps compilar e executar este programa, ns vamos analisar suas partes
principais, que se repetem na maioria dos programas JAVA:
o A palavra-chave public um modificador de acesso; esses
modificadores controlam o que outras partes de um programa podem
usar desse cdigo;
o A palavra-chave class est l porque tudo em JAVA est dentro de
uma classe; por enquanto, uma classe um projeto preliminar para os
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

8

dados e mtodos (funes) que sero parte do aplicativo; um aplicativo
pode ser composto por uma ou mais classes;
o Os nomes das classes (neste exemplo a palavra Primeiro) precisam
comear com uma letra e depois desta quaisquer combinaes de
letras e dgitos; como padro, os nomes so substantivos que iniciam
com uma maiscula;
o Para comear a execuo do programa compilado, o interpretador vai
iniciar sempre pelo mtodo main da classe indicada; absolutamente
necessria a presena do main (por se tratar de um aplicativo);
o As chaves, { e }, delimitam os blocos de comandos em JAVA;
o Os cabealhos do mtodo main so sempre idnticos ao exemplo
acima;
o A palavra reservada static significa que o mtodo esttico. Uma
classe que contm apenas mtodos estticos pode ser executada sem
a necessidade de instanciar a classe;
o A palavra reservada void quer dizer que o mtodo no retorna valor,
no tem resposta para o mtodo que o chamou;
o Neste exemplo o mtodo main contm apenas uma instruo (ou
comando ou sentena da linguagem): a instruo utiliza o mtodo
println do objeto System.out, para exibir uma string na console
padro; cada chamada de println escreve uma nova linha;
o Java usa a sintaxe geral:
objeto.mtodo(parmetros);
o Os mtodos em JAVA podem ter zero, um ou mais argumentos, at
mesmo o main, mas mesmo que o mtodo no tenha argumentos, ele
ter que possuir parnteses vazios na sua assinatura;
o Existe tambm o mtodo print em System.out, que imprime sem
quebra de linha no final.
o Comentrios sobre pacote (package) :
Fica fcil notar que a palavra chave package indica qual o
pacote que contm a classe Primeiro. Um pacote pode conter
nenhum, um ou mais subpacotes e uma ou mais classes dentro
dele.
Quando no se pe a linha do pacote, temos um pacote
annimo.
Os nomes dos pacotes devem ser formados apenas de letras
minsculas, no importa quantas letras estejam contidas nele.


Unidades de Compilao
- Trs elementos top-level conhecidos como compilation units, no obrigatrios,
aparecem em um arquivo Java na seguinte ordem:
o Declarao de pacote: package
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

9

o Declaraes de importao: import
o Definies de class, interface ou enum
- Uma declarao de pacote serve para indicar um caminho de pastas onde
devero estar os arquivos (.class) do pacote. Por exemplo: package
pasta1.pasta2; indica que os arquivos do pacote esto em pasta2 que
est dentro de pasta1. Falaremos de pacote mais adiante.
- Uma declarao de import serve para importar uma ou todas as classes de
um pacote. O caminho indicado no import justamente um caminho de
pastas. Asterisco significa todos os arquivos da pasta (mas no das
subpastas).
- preciso tomar cuidado com ambigidade nos comandos import. Por
exemplo, ao utilizar a classe Date, se importou java.util.* e
java.sql.* (ambos contm classes Date diferentes). Certifique-se de
importar explicitamente Date do pacote desejado (por exemplo,
java.util.Date).

- Exemplo Modelo:

package org.templojava;
//nome do pacote pode ser o endereo web invertido
import java.util.SimpleDateFormat; //importa classe
import java.util.*;
//o compilador importa classes utilizadas no cdigo

public class Exemplo
{
//codigo
}

Pesquisando na Referncia da Linguagem Java
- Verifique a referncia para cada nova classe que for estudada.
Acesse: http://java.sun.com/








Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

10

2. Estruturas Bsicas de Programao[AC]

2.1. Comentrios em JAVA
- Os comentrios no aparecem no executvel do programa; em JAVA temos
comentrios de uma linha, sinalizados com //, e temos os comentrios de mais
de uma linha, entre /* e */:

// Este um comentrio de uma linha
/* Agora podemos escrever
o comentrio em vrias linhas.
*/
- Os comentrios no podem ser aninhados em JAVA, ao contrrio de outras
linguagens.

2.2. Tipos de Dados

- JAVA fortemente tipada, ou seja, as variveis precisam ter um tipo declarado.
- H oito tipos primitivos de dados em JAVA: quatro tipos inteiros, dois tipos
ponto flutuante, um tipo para caracteres e outro para variveis lgicas.

a) Inteiros [J TAS]

Tipo Tamanho
(bytes)
Faixa de valores Tipo
byte 1 -128 127 byte
short 2 -32768 32767 short
int 4 -2147483658 2147483657 int
long 8 -9223372036854775808
9223372036854775807
long

- O tipo int o mais prtico e o mais usado;
- O mais importante que os intervalos possveis no dependem da mquina;

b) Ponto Flutuante [J TAS]

Tipo Tamanho (bytes) Faixa de valores
float 4 3.40292347E+38
(6-7 dgitos decimais significantes)
double 8 1.79769313486231570E+308
(15 dgitos decimais significantes)

Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

11

- O tipo double tem duas vezes a preciso do float.
- O double usado na maioria dos casos.
- Os valores mnimos e mximos seguem os correspondentes na tabela dos
inteiros.

c) O Tipo Caracter (char)
- Apstrofos definem valores char; por exemplo J um caractere e J uma
string contendo um nico caractere. A faixa de 0 a 2
16
-1 (16 bits), conjunto
Unicode de caracteres.

Caracteres Especiais

Seqncia de
Controle
Significado
\b backspace (volta um caracter)
\t tab (tabulao)
\n linefeed (quebra de linha)
\r carriage return (incio da linha)
\ aspas duplas
\ Apstrofos
\\ barra invertida

d) O Tipo Lgico (Boolean)
- O tipo boolean tem dois valores possveis, false ou true. e so
armazenados em 1 byte.

2.3. Declarao de Variveis em Java
- Declaram-se as variveis Java colocando o tipo primeiro e depois o nome da
varivel, finalizando com ponto e vrgula.
- Exemplos:

byte b;

int numerointeiro1, numerointeiro2;

long inteirolongo;
//para o valor da nossa dvida externa em centavos

char letra;

- Um identificador precisa iniciar com uma letra e ser uma seqncia de letras ou
dgitos;
- Podem ser usados smbolos como _, ou qualquer outro do Unicode
(conjunto de caracteres utilizado por Java), mas no aconselhvel usar
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

12

principalmente caracteres com acento, por causa da diferena de conjuntos de
caracteres nos vrios sistemas operacionais (questo de visualizao correta
do smbolo).
- Comumente no so usados smbolos para nomenclatura em Java, mais
simples usar letras e nmeros, alm de seguir as convenes para cada tipo de
identificador (classes iniciam com maisculas, mtodos com minsculas,
variveis com minsculas, constantes so escritas com maisculas, etc).
- No podem ser usados espaos em nomes de variveis ou de identificadores
quaisquer;

2.4. Atribuies e Inicializaes
- Deve-se inicializar uma varivel antes de utiliz-la, em geral aps a sua
declarao ou na mesma instruo, exemplos:
int numero; //esta uma declarao
numero = 5; //esta uma atribuio
char letra = A; //esta uma inicializao

- As declaraes podem aparecer em qualquer lugar do cdigo, mas uma
varivel s pode ser declarada uma vez em um bloco.

2.5. Constantes
- A palavra final denota uma constante (utilize maisculas nos nomes das
constantes):
final double CMPORPOL = 2.54;

Exemplo :

public class Constantes
{ final double G = 9.81;
//gravitao em metros por segundo ao quadrado

public static void main (String[] args)
{
System.out.println(G + metros por segundo ao quadrado a
acelerao da gravidade.);
System.out.println(A constante de classe G= + G + pode
ser acessada em qualquer mtodo da
classe.);
}
}


2.6. Operadores Aritmticos
- Operadores aritmticos: + para adio, - para subtrao, * para multiplicao e /
para diviso;
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

13

- ATENO: o operador / denota diviso inteira se os dois argumentos forem
inteiros e diviso de ponto flutuante se pelo menos um dos operandos for um
nmero real.
- O resto inteiro denotado por %. Exemplos: (15 / 4) 3, (15 % 2) 1.
- Pode-se utilizar inicializaes do tipo:
int n = 3;
int dobroN = n * 2;

- Pode-se utilizar a forma reduzida:
n += 4; //que equivale a n = n + 4;

2.7. Exponenciao
- No h operador para exponenciao, deve-se usar o mtodo pow da classe
Math, ou seja, Math.pow(operando, expoente).
- Para x
a
, temos:
double y = Math.pow (x, a);



Outros mtodos da classe Math
- Math faz parte do pacote java.lang. No necessrio importar este
pacote, nunca. Podemos us-la diretamente, com ateno para os argumentos
de cada funo. Verifique na referncia de Java toda a lista de mtodos de
Math.

Mtodo Descrio Exemplo
abs (x) Valor absoluto de x Se x = -3, ento abs(x) 3.
ceil (x) Arredonda para o prximo inteiro
maior que x
Se x = 6.7, ceil(x) 7.
Se x = -6.8, ceil(x) 6.
floor (x) Arredonda para o prximo inteiro
menor que x
Se x = 6.7, floor(x) 6.
Se x = -6.8, ceil(x) 7.
max (x, y) Maior valor entre x e y max(3, 4) 4.
min (x, y) Menor valor entre x e y min(3, 4) 3.
sqrt (x) Raiz quadrada de x sqrt(9) 3.
PI Valor da constante PI 3.14159265358979323846


2.8. Operadores para Incremento e Decremento

- Adicionar ou subtrair 1:
int x = 10; x++; //adiciona 1 ao valor de x, x=11
x--; //subtrai 1 do valor de x, x=10
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

14

int y = 5 + ++x; //incrementa x antes, y=16, x=11
//ou, se a posio do operador estivesse trocada:
int y = 5 + x++; //incrementa x depois, y=15, x=11

2.9. Converses entre Tipos Numricos
- Algumas converses so permitidas diretamente:
o byte short int long float double
o char int long float double

- Em operaes binrias, sero seguidas as seguintes regras:
o Se um dos operandos for double, o outro ser convertido para
double;
o Se um dos operandos for float, o outro ser convertido para float;
o Se um dos operandos for long, o outro ser convertido para long;
o Mesma regra para int, short e byte.

- Ou seja, o maior tipo sempre manda na expresso, inclusive String (que
veremos mais a frente).
- Converses explcitas de tipo ou casts so converses onde so permitidas
perdas de informao:
double x = 9.997;
int nx = (int) x;

- Nesta converso, a varivel nx ter o valor final 9, pois a parte fracionria ser
descartada.

- Se for necessrio arredondar um nmero de ponto flutuante para o inteiro mais
prximo, um dos mtodos que pode-se usar o mtodo Math.round (Math
uma classe de java.lang, pacote padro da linguagem):

double x = 9.997;
int nx = (int) Math.round (x);

- Nesta converso, a varivel nx ter o valor final 10. Mas fique atento, round
retorna um long, ento ainda necessrio usar o cast se for preciso
armazenar em uma varivel de outro tipo. aconselhvel sempre testar os
valores obtidos com converses explcitas, a fim de garantir o resultado
desejado.
- O pacote java.lang usado naturalmente na compilao, nunca preciso
incluir (importar) este pacote.


Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

15

2.10. Operadores Relacionais e Lgicos
- Igualdade: (3 == 7) , tem resultado false;
- Desigualdade: (3 != 7) , tem resultado true;
- Os outros operadores mais comuns >, <, >=, <=, so usados nestas formas
mesmo.
- Para o and lgico, usa-se &&, para o ou lgico, usa-se ||. O operador de
negao o !.

2.11. Hierarquia de Operadores e Parnteses
- Como em todas as linguagens, melhor usar parnteses para indicar a ordem
das operaes. A tabela de hierarquia de operaes em Java :

Operadores Associatividade
[], . (ponto), () (chamada de mtodo) ESQ para DIR
!, ~, ++, --, + (unrio), - (unrio) , () (cast), new DIR para ESQ
*, /, %
ESQ para DIR
+, -
ESQ para DIR
<, <=, >, >=, intanceOf
ESQ para DIR
==, !=
ESQ para DIR
&&
ESQ para DIR
||
ESQ para DIR
?:
ESQ para DIR
=, +=, -=, *=, /=, %=
DIR para ESQ

2.12. Strings
- Strings so seqncias de caracteres como tudo bem ?. No h um tipo String
em Java, e sim uma classe predefinida chamada String, que faz parte do
pacote padro de Java. Cada conjunto de caracteres entre aspas uma
instncia da classe String:
String e = ; //uma string vazia
String saudacoes = Ol;

a) Concatenao
String uniao = use o sinal de + para + concatenar Strings;

b) Substrings
- Java possui um mtodo para se obter um subconjunto de uma string, que o
mtodo
nomestring.substring(posicaoinicial, posicaolimite)
onde:
o posicaoinicial a primeira posio a ser inclusa na substring
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

16

o posicaolimite a posio imediatamente posterior ltima a ser
inclusa.

- Lembre-se que em JAVA conta-se a partir do 0 (zero), ou seja, a primeira
posio de uma string a posio 0.
String saudacao = Bem vindo; //0=B,1=e,2=m
String s = saudacao.substring(0, 3); //s = Bem
//o espao na posio 3 no includo

c) Edio de Strings
- Para descobrir o tamanho de uma string, usa-se o mtodo
nomestring.length():
String saudacao = Bem vindo;
int tamanho = saudacao.length(); //tamanho = 9

- Para descobrir o caracter na posio n de uma string, usa-se o mtodo
nomestring.charAt(n):
String saudacao = Bem vindo;
char letra3 = saudacao.charAt(2); //letra3 = m

d) Teste de Igualdade entre Strings
- Para testar se duas strings so iguais, usa-se
nomestring1.equals(nomestring2). O valor true ser retornado se
forem iguais. Ex:

String saudacao = Bem vindo;
boolean igual = Bem vindo.equals(saudacao);
//igual = true

- Para testar se duas strings so iguais ignorando maisculas e minsculas, usa-
se nomestring1.equalsIgnoreCase(nomestring2).

Uma classe pr-definida - Mtodos da Classe java.lang.String
- A classe java.lang.String possui muitos mtodos (verifique na referncia
da linguagem outros mtodos tambm teis). A referncia da linguagem est
acessvel a partir de http://java.sun.com/ ou no javadoc que foi instalado junto
com seu JDK. Seguem alguns mtodos interessantes, dos quais uns j foram
especificados acima:
o charAt(int indice)
//retorna o caractere na posio especificada
o int compareTo(String outraString)
//retorna um valor negativo se a string vier antes de outraString na
//ordem do dicionrio, um valor positivo se outraString vier antes e
//0 (zero) caso forem iguais
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

17

o boolean endsWith(String sufixo)
//retorna true se a string terminar com sufixo
o boolean equals(String outra)
//retorna true se a string for igual outra
o boolean equalsIgnoreCase(String outra)
//retorna true se a string for igual outra, ignorando maisculas e
//minsculas
o String toLowerCase()
//retorna uma nova string convertendo maisculas para minsculas
o String toUpperCase()
//retorna uma nova string convertendo minsculas para maisculas
o String trim()
//elimina espaos iniciais e finais

2.13. Comandos de Deciso

a) Comando if

- Forma mais simples:
if (condicao) instrucao;

- Com bloco de instrues:
if (condicao)
{ instrucao1;
instrucao2;
...
}

- Forma mais simples com else:
if ( condicao ) instrucao1 else instrucao2;

- Forma com else e bloco de instrues:
if ( condicao )
{ instrucao1;
instrucao2;
...
}
else
{ instrucao1;
instrucao2;
...
}

Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

18


- Exemplo Maior.java:

public class Maior
{
public static void main (String[] args)
{ int a = 5;
int b = 3;

if ( a > b )
{ System.out.println(O maior + a);
}
else
{ System.out.println(O maior + b);
}
}
}

b) Selees Mltiplas A Instruo switch
- A instruo if...else pode ser incmoda quando temos vrias selees com
mltiplas alternativas. Com a instruo switch pode-se testar o tipo char e
todos os inteiros menos long e no se pode usar conjuntos de valores, a no
ser que a verso do JDK instalado seja a partir da 1.5 que aceita objetos
Enumeration. (veja a referncia da linguagem)
- Exemplo (trecho de cdigo):
int opcao = 2;
switch ( opcao )
{ case 1:
System.out.println(A opo 1.);
break; // fim do bloco para opcao = 1
case 2:
System.out.println(A opo 2.);
break;
case 3:
System.out.println(A opo 3.);
break;
default:
System.out.println(Opo invlida.);
break; // a clusula default opcional
}

- possvel ainda retirar o comando break de uma clusula fazendo com que a
execuo prossiga para os comandos da clusula seguinte, mas isso tem que
ser feito com bastante cuidado. Nestes casos aconselhvel acrescentar um
comentrio no cdigo.


Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

19

2.14. Comandos de Repetio

a) Comando for (para-faa)
- Se soubermos quantas vezes o conjunto de instrues deve ser processado, o
mais simples usar o comando for:
for (instrucao1; expressao1; expressao2) { bloco }

- Exemplo ContagemRegressiva.java:

public class ContagemRegressiva
{
public static void main (String[] args)
{ for ( int i = 10; i > 0; i-- )
{ System.out.println(Contagem: + i);
}

System.out.println(Lanamento!);
}
}

- possvel tambm criar laos for com variveis e incrementos em ponto
flutuante, com cuidado em relao aos erros de arredondamento dos valores (a
expresso limite deve ser bem definida). Tambm permitido utilizar laos com
duas variveis de controle.

b) Comandos while (enquanto faa) e do-while (faa enquanto)
- Usados quando no sabemos quantas vezes o conjunto de instrues deve ser
processado. O while executa o corpo do lao apenas enquanto a condio for
true (verdadeira):
while ( condicao ) { bloco }

- O while executa o teste da condio antes do incio do bloco. Se for preciso
executar pelo menos uma vez o bloco de comandos do lao, deve-se usar a
verso do de um lao while:
do { bloco } while ( condicao );














Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

20

3. Orientao a Objetos [JTAS]


Como j foi estudado, as principais caractersticas do Paradigma OO so :
identidade
abstrao
classificao
encapsulamento
herana
polimorfismo

Conceitos de OO

3.1. Objeto

Um objeto a representao computacional de um elemento ou processo do
mundo real.

Exemplos :

casa, martelo, venda, programa, carro, ...

Note que, esses objetos podem ser tanto objetos concretos (carro, livro, nota
fiscal), quanto conceitos abstratos (conta corrente, venda, pessoa jurdica). Cada
objeto possui estados e comportamentos.

Um objeto possui identidade, caractersticas e comportamento. Vejamos cada
um:

a) Identidade : Todo objeto possui uma identidade nica que permite que o
sistema o selecione dentre um conjunto de objetos similares. Ou seja, a
identidade possibilita a referncia aos objetos
b) Caractersticas : Uma caracterstica descreve uma propriedade de um
objeto, ou seja, algum elemento que descreva o objeto.
Cada caracterstica chamada de atributo do objeto

Exemplo : Objeto moto tem as seguintes caractersticas ou atributos : cor,
marca, ano de fabricao, tipo de combustvel

c) Comportamento :

Definio:

o Um comportamento representa uma ao ou resposta de um
objeto a uma ao do mundo real (AO ou REAO)
o Cada comportamento chamado de mtodo do objeto

Obs. : Em C++, os mtodos podem ser tambm chamados de
funes membro.


Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

21

Exemplos de comportamento para o objeto moto
o Acelerar
o Parar
o Andar
o Estacionar


Um sistema pode conter um ou inmeros objetos ativos. Cada objeto ativo no
sistema em particular tambm chamado de instncia. As diferentes instncias
possuem seu prprio estado.


Exemplo :

Objeto : Maria

Estado :
Idade : 20 anos
Altura : 1,60 m
Peso : 58 Kg
Comportamento :
andar, falar e pular



Uma segunda caracterstica de OO a abstrao, que foca as
caractersticas essenciais de algum objeto, de acordo com a perspectiva do
observador.

Exemplo :

Se pensarmos no conceito de conta corrente bancria e abstrairmos este
conceito, podemos identificar detalhes comuns, como o nmero da conta, nmero da
agncia e saldo; e operaes como dbito em conta, depsito e extrato da conta.

Basicamente essas so as caractersticas de conta corrente para todos os
bancos, apesar de um ou outro banco ter uma poltica de descontos de taxas etc.

medida que refinamos um objeto, mais especfico ele se torna e mais
dependente do domnio da aplicao.

A terceira caracterstica de OO a classificao. Na Classificao, Objetos
com as mesmas caractersticas (atributos e comportamento) so agrupados em uma
classe, sendo que cada classe define um conjunto possvel de objetos.

Exemplo : Objetos mesas abstrair em Classe Mesa
Classe Mesa Atributos: tamanho, forma, nmero de ps,
___ material
Operaes : mover, limpar


Atributos : idade, altura e
peso

Mtodos : andar, falar e
pular
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

22

3.2.Classes

A classe descreve as caractersticas e comportamento de um conjunto de
objetos :

Cada objeto possui uma nica classe
O objeto possuir os atributos e mtodos definidos na classe
O objeto chamado de instncia de sua classe
A classe o bloco bsico para a construo de programas OO



Criao de Objetos:

A classe responsvel pela criao de seus objetos
Esta criao realizada atravs de um mtodo especial, chamado
de construtor
Em Java, usa-se new para se criar um objeto.

Eliminao de Objetos
A classe responsvel pela eliminao de seus objetos, quando eles
no podem mais ser utilizados pelo sistema
Esta eliminao realizada por um mtodo especial, chamado de
destrutor

Comentrios :

1. Em Java no existe destrutor, mas em C++ sim.
2. Uma classe representa um conjunto de objetos que compartilham uma
mesma estrutura e um mesmo comportamento.

Destacando a terceira caracterstica em OO, isto , a Classificao, temos a
observar que:

Cada objeto dito ser uma instncia de uma classe
Cada instncia mantm seus prprios valores de atributo (estado),
mas compartilha os nomes dos atributos e comportamento (operaes) com outras
instncias da classe.

Uma quarta caracterstica do Paradigma OO o encapsulamento.
Relacionando esta caracterstica com os conceitos de classe e objeto pode-se
afirmar que :

Uma classe encapsula atributos (nomes, tipos) e comportamentos,
ocultando os detalhes de implementao dos objetos.

Com relao ao encapsulamento, os mtodos formam uma cerca em torno
dos atributos, que no podem (ou devem) ser manipulados diretamente. Os
atributos somente podem ser alterados ou consultados atravs dos mtodos do
objeto. Considerando clientes de um objeto X os outros objetos que utilizam
mtodos de X, os benefcios do encapsulamento so :
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

23


os clientes de um objeto podem utilizar seus mtodos sem conhecer os
detalhes de sua implementao
A implementao de um objeto pode ser alterada sem o conhecimento de
seus clientes, desde que a interface visvel seja mantida


Um programa OO um conjunto de objetos que colaboram entre si para a
soluo de um problema. A colaborao ocorre atravs de trocas de
mensagens, sendo que a troca de mensagem representa a chamada de um
mtodo.


Controle de visibilidade

Os atributos e mtodos, em termos de visibilidade, podem ser :

public acessveis por qualquer classe
private acessveis pela prpria classe
protected Acessveis pela prpria classe ou por
seus descendentes

3.3.Herana

O compartilhamento de atributos e comportamentos entre classes baseiam-se
num relacionamento hierrquico.
Uma classe pode ser definida genericamente e ento refinada (especializada)
sucessivamente em sub-classes mais especficas.


Herana Simples x Herana Mltipla

Se uma classe herda de apenas uma superclasse (classe me ou
base), temos uma herana simples
Se uma classe herda de diversas superclasses, temos uma herana
mltipla

No existe herana mltipla em Java.


Exemplo : A classe Animais pode ser subdividida nas sub-classes anfbios,
mamferos, aves, peixes e rpteis.


3.4. Polimorfismo

Uma subclasse pode redefinir um elemento herdado, o que denominado
polimorfismo.
O polimorfismo se realiza atravs da recodificao de um ou mais mtodos
herdados por uma subclasse. Ou seja, um mesmo comportamento pode se
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

24

apresentar de forma diferente em classes diferentes (poli = vrios, morfismo =
forma).
Uma linguagem de programao orientada a objetos automaticamente escolhe
o mtodo correto para implementar uma operao baseado no nome da
operao, nos dados que carrega (parmetros) e na classe implementada do
objeto (assinatura do mtodo) . Por isto, novas classes podem ser
acrescentadas sem a modificao de todo o cdigo existente
Mais adiante, falaremos mais de Polimorfismo.






Comentrio [AC] : Ao projetar um sistema POO, comeamos pela determinao das
classes e depois acrescentamos os mtodos de cada classe. Uma regra para criar
as classes procurar por substantivos no problema. Os mtodos correspondem aos
verbos.
Exemplo: Num sistema de processamento de pedidos:
- Classes (substantivos): item, pedido, endereo para remessa
(endereoRemessa), pagamento, conta, etc.
- Mtodos (verbos): itens so adicionados aos pedidos, pedidos so
enviados ou cancelados, pagamentos so aplicados aos pedidos.
Cada verbo sugere um mtodo.
- Objetos: com cada verbo, como adicionar, enviar, cancelar e
aplicar, necessrio identificar o objeto que tem a maior
responsabilidade em efetuar esta ao.


Exemplo [FC]: Apresenta uma classe Ponto com 2 atributos, e outra classe
TestaPonto que cria uma instncia de um objeto da classe Ponto.

public class Ponto {
int x, y; //atributos
}


public class TestaPonto {
public static void main(String[] args) {
Ponto p;

p = new Ponto(); // Cria um objeto com new
p.x = 1; // acessa pelo . no privado
p.y = 2;

System.out.println ("Coordenada (x,y) = (" + p.x +
"," + p.y +")");
}
}
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

25

3.5. O Vocabulrio da POO Enfatizando os conceitos [AC]
a) CLASSE
- O modelo ou a forma a partir do qual um objeto criado. Em JAVA, toma-se
como padro a primeira letra do nome da classe em maiscula (como String,
System, Math etc.).
b) OBJETO
- Instncia da classe; componente na memria com seus atributos e dados
prprios, que utilizam seus mtodos para manipular os seus dados internos; se
comunicam entre si atravs de mensagens (chamadas a mtodos).
- Para criar um objeto e utilizar (chamar) os seus mtodos necessrio utilizar o
operador new:
Casa c1 = new Casa();
c) BIBLIOTECA PADRO
- Classes e pacotes para diversos propsitos tais como projetos de interface de
usurio e programao em rede.
d) CLASSE Object
- As classes em Java sempre so formadas a partir de outras classes. Uma
classe formada a partir de outra "estende" esta outra. Em Java existe uma
classe "me" a partir da qual todas as outras classes so naturalmente
formadas, esta a classe Object. Todas as classes herdam de Object.
e) ENCAPSULAMENTO
- Em POO devemos combinar dados e comportamento em um pacote fechado e
ocultar a implementao dos dados, de forma que o usurio do objeto (em geral
outro objeto) no veja como estes dados so manipulados. Dizemos que os
dados e mtodos so encapsulados em objetos. outro conceito fundamental
em POO. O encapsulamento d aos objetos a caracterstica de "caixa-preta".
Os objetos devem se comunicar apenas atravs de mensagens, ou seja, seus
dados (atributos) devem estar protegidos de outros objetos e s podero ser
acessados atravs de mtodos (funes).
f) VARIVEIS DE INSTNCIA
- Dados ou atributos do objeto (s existem aps ser criado o objeto).
g) ESTADO DO OBJETO
- Valores atuais dos dados do objeto.
Vejamos um primeiro exemplo: Suponha que voc deseja construir um
aplicativo que imprima a rea das figuras geomtricas quadrado e tringulo
eqiltero. Definiremos para o exemplo o valor dos lados como 10, para vermos a
diferena no valor das reas calculadas. O primeiro passo criar as classes (cujos
nomes sero: Quadrado e Triangulo, a partir das quais sero gerados os objetos
q e t no mtodo main:

Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

26

public class Quadrado
{ double lado = 0;

public double area() //mtodo clculo da rea
{ return (lado * lado); } // Retorno com return
}
Salve como Quadrado.java mas no compile ainda. Agora, a classe Triangulo:

public class Triangulo
{ double lado = 0;

public double area()
{
return (0.433*lado*lado); }
}
Salve como Triangulo.java mas no compile ainda. Finalmente, a classe
Figuras:
public class Figuras
{ public static void main (String[] args)
{// declarando e instanciando "q"
Quadrado q = new Quadrado();
// declarando e instanciando "t"
Triangulo t = new Triangulo();
//valor do atributo lado do obj q
q.lado = 10;
//chamada ao mtodo area do obj q
double s = q.area();
System.out.println("rea do Quadrado: "+s);
//valor do atributo lado do obj t
t.lado = 10;
//chamada ao mtodo area do obj q
s = t.area();
System.out.println("rea do Tringulo: "+s);
}
}
Salve como Figuras.java e compile esta classe com sua ferramenta ou na
linha de comandos com javac Figuras.java. Ao compilar, voc notar que
todas as classes do exemplo sero compiladas gerando os trs arquivos .class.
Isto acontece porque Java reconhece quais as classes que fazem parte do sistema,
pois esto sendo chamadas pela classe principal, e as compila. Execute com java
Figuras.

3.6. Observaes sobre variveis, valores, referncias e tipos[FS]

a) Variveis, valores e referncias
Variveis so usadas em linguagens em geral para armazenar valores
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

27

Em Java, variveis podem armazenar endereos de memria ou valores
atmicos de tamanho fixo

b) Tipos
Tipos representam um valor, uma coleo de valores ou coleo de outros
tipos. Podem ser
Tipos bsicos, ou primitivos, quando representam unidades indivisveis de
informao de tamanho fixo. Exemplo : um inteiro, um booleano ...
Tipos complexos, quando representam informaes que podem ser
decompostas em tipos menores. Os tipos menores podem ser primitivos
ou outros tipos complexos. Exemplo : Um vetor, uma data ...

Em Java, tipos complexos so armazenados como objetos .

3.7. Coleta de Lixo [FS]

A memria alocada em Java no liberada pelo programador, ou seja,
objetos criados no so destrudos pelo programador

A criao de objetos em Java consiste de

Alocar memria para armazenar os dados do objeto
Inicializar o objeto (via construtor)
Atribuir endereo de memria a uma varivel (referncia)

Mais de uma referncia pode apontar para o mesmo objeto



Mensagem m, n, p;
m = new Mensagem("A");
n = m;
p = new Mensagem("B");





Quando um objeto no tem mais referncias apontando para ele, seus dados
no mais podem ser usados e a memria deve ser liberada.








Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

28

O coletor de lixo ir liberar a memria na primeira oportunidade



n = null;
p = new Mensagem("C");










3.8. Um pouco de entrada e sada de dados em JAVA [AC]


a) Leitura de Dados via Entrada Padro

- A leitura de dados de entrada pelo teclado era difcil em Java antes da verso
1.5. Quando usamos componentes como caixas grficas de entrada de dados
isto se torna menos complexo, mas antes disso preciso verificar como
funciona a entrada via console.

- De forma gerla, uma declarao de import serve para importar uma ou todas
as classes de um pacote. O caminho indicado no import justamente um
caminho de pastas. Asterisco significa todos os arquivos da pasta (mas no as
subpastas).

- O exemplo a seguir utiliza a classe Scanner, que possui mtodos para leitura
de diversos tipos de dados de entrada via console:

Exemplo :
import java.util.*;

public class LeituraComScanner
{
// Testes de leitura com classe Scanner (Java 5.0)
public static void main(String[] args)
{
//objeto para leitura via console
Scanner entrada = new Scanner (System.in);

Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

29

System.out.println("Informe nome:");
//l uma string como o mtodo nextLine()
String nome = entrada.nextLine();

System.out.println("Informe idade:");
//l um inteiro com o mtodo nextInt
int idade = entrada.nextInt();
System.out.println("Nome:" + nome +
"\nIdade:" + idade);
}
}
Tabela com alguns mtodos da classe Scanner [JTAS]

Mtodo Descrio
String nextLine() L toda a linha
int nextInt() L um inteiro
double nextDouble() L um double
float next Float() L um float
long nextLong() L um long
boolean hasNext() Verifica se ainda existem dados a serem lidos


b) Leitura via Componentes Grficos do Pacote Swing
- Mais tarde estudaremos componentes grficos para interfaces de aplicativos,
mas j podemos comear a trabalhar com o componente chamado
JOptionPane, que representa uma janela ou caixa de dilogo com o usurio.
A classe JOptionPane est no pacote javax.swing que devemos importar
para utilizar este componente.

Exemplo:

import javax.swing.JOptionPane; //pacote necessrio
//ou
//import javax.swing.*;
//o compilador verifica


Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

30

public class Mensagem
{ public static void main (String[] args)
{
//comando para a caixa de dilogo
JOptionPane.showMessageDialog
(null, Esta uma mensagem !);

//sada obrigatria do sistema
System.exit(0);
}
}

- O componente pode ser usado, pois a classe foi includa no cdigo com o
comando import. possvel tambm usar o seguinte (selecionar todo o pacote
e deixar o trabalho de carregar a classe, feito pelo compilador):
import javax.swing.*;
- O comando JOptionPane.showMessageDialog usado para mostrar
caixas de mensagem e pode ser usado nesta forma simples, com dois
parmetros: o primeiro, com valor null, representa o componente parent
(janela maior que abriria a caixa de mensagem, como no existe, usa-se null),
o segundo representa a mensagem a ser exibida.
- Por ltimo, preciso, sempre que se usar componentes de interface com o
usurio, incluir o comando de sada do sistema, para encerrar a execuo.
- Uma verso mais completa do comando de caixa de dilogo contm quatro
argumentos, como segue:
JOptionPane.showMessageDialog
(null, Texto da Mensagem,
Titulo da janela, TIPOICONE);
- O campo TitulodaJanela aparece na barra azul da caixa de dilogo. J o
TIPOICONE representa o pequeno desenho que pode aparecer, identificando o
tipo de mensagem. Veja o que pode ser colocado neste argumento e o tipo de
janela gerado:
JOptionPane.ERROR_MESSAGE

JOptionPane.INFORMATION_MESSAGE

Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

31

JOptionPane.WARNING_MESSAGE

JOptionPane.QUESTION_MESSAGE

JOptionPane.PLAIN_MESSAGE


- Para entrada de dados utilizamos o comando showInputDialog, com uma
varivel do tipo String aguardando o retorno (as janelas retornam sempre
uma string):

String numLido =
JOptionPane.showInputDialog( "Informe:" );
- Gerando a janela a seguir:


- Aps a leitura, necessrio obter o nmero a partir da string lida, o que deve
ser feito com um dos comandos a seguir:
int numero =
Integer.parseInt( numLido );
//obtm inteiro

double numero =
Double.parseDouble( numLido );
//obtm ponto flutuante
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

32


NOTE : Classe Integer com o mtodo parseInt
Classe Double com o mtodo parseDouble

Exemplo (DEITEL):

import javax.swing.JOptionPane;

public class Soma {
public static void main( String args[] )
{
String numero1, numero2;
int n1, n2, resultado;

numero1 = JOptionPane.showInputDialog
("Informe um inteiro:");

numero2 = JOptionPane.showInputDialog
("Informe outro inteiro");

// convertendo
n1 = Integer.parseInt( numero1 );
n2 = Integer.parseInt( numero2 );

// somando
resultado = n1 + n2;

JOptionPane.showMessageDialog
(null, "A soma "+resultado,
"Resultado:", JOptionPane.PLAIN_MESSAGE);

System.exit( 0 );
}
}

















Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

33


4. Vetores (Arrays)

So estruturas homogneas, ou seja, so estruturas utilizadas para
armazenar vrios elementos de um mesmo tipo. Os elementos de um vetor,
em Java, podem ser de tipos primitivos (Ex: int, double, etc) ou objetos
(referncias).
O primeiro elemento (posio) possui ndice 0 (zero).
So tratados em java como objetos, ou seja, para serem utilizados temos que
instanci-los (usando new).


4.1. Criao de Vetores

Exemplo 1: Criando um vetor de tipos primitivos (int).
int c[]; // declara o array
c = new int[10]; // aloca o array
c[1] = 20; // atribui o valor 20 ao componente de
// ndice 1

Obs: A linha int c[]; poderia ser substituda por int [] c;

Outro exemplo criando um array com valores iniciais:
int n[] = {20,63,40,58}; //Cria, aloca e inicializa o array

Exemplo 2: Criando vetores de objetos.
class Coisa { } // Uma classe qualquer

Coisa[] a; // referncia do vetor (Coisa[]) null
Coisa[] b = new Coisa[5]; // referncias Coisa null
Coisa[] c = new Coisa[4];
for (int i = 0; i < c.length; i++) {
c[i] = new Coisa(); // refs. Coisa inicializadas
}
Coisa[] d = {new Coisa(), new Coisa(), new Coisa()};


4.2. Comprimento de um vetor

Pode ser obtido, usando-se a propriedade length.

int x[] = {1,2,3,4,5};
System.out.println(x.length); // Imprimir 5;

4.3. Vetores Multidimencionais (Matrizes)

Possuem mais de uma dimenso

int b[][]; //Declarao
b = new int[3][3]; //Criao
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

34


b[1][2]=5; //Atribuio
ou
int b[][] = {{2,3,4},{4,5,6}};

4.4. Vetores com dimenses diferentes

int b[][];
b = new int[2][];
b[0]=new int[3];
b[1]=new int[10];


5. Getters, Setters e Construtores

5.1. Construo de Classes
Veremos agora algumas recomendaes para criarmos programas JAVA mais
sofisticados, onde a classe escolhida para comear a executar pelo interpretador
geralmente tem pouca funcionalidade alm de criar os vrios objetos que vo
realmente fazer o trabalho do programa.

Construtores
- Um construtor tem o mesmo nome da classe;
- Um construtor pode ter um ou mais parmetros, ou mesmo nenhum (construtor
padro fornecido pelo compilador);
- Um construtor sempre chamado atravs da palavra-chave new;
- Um construtor no retorna valor (mesmo assim no tem void na assinatura)

Exemplo :

public class Cliente{
private String nome; //atributos nome e numConta
private int numConta;
public Cliente(String n, int c)//construtor
{ nome = n;
numConta = c;
}
}

Construtores Padres
- Se um mtodo construtor no for especificado para uma classe e um objeto for
referenciado no sistema, um construtor padro ser providenciado. Estes
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

35

construtores no tm argumentos e inicializam todos os campos de instncia
com valores padres.

Sobrecarga de Construtores
- Ao implementar uma classe, podemos definir mais de um construtor para a
classe, a fim de que possamos criar objetos de vrias maneiras. Exemplo:

Dia hoje = new Dia ();
Dia hoje = new Dia (1999,11,31);

- Existem dois construtores para uma certa classe Dia, o primeiro inicializa os
campos de instncia com a data atual do sistema e o segundo inicializa os
campos de instncia com os parmetros passados na inicializao do objeto.
- A sobrecarga de mtodos acontece quando vrios mtodos dentro de uma
mesma classe tm o mesmo nome, mas argumentos diferentes (o compilador
decide que mtodo ser usado).
- Java permite sobrecarregar qualquer mtodo, de qualquer tipo!

Utilizao de Mtodos e Campos Privados
- Ao implementar uma classe, recomenda-se que os atributos sejam privados
(private), mantendo estes atributos ocultos, impedindo que outros objetos os
acessem, protegendo os objetos como caixas pretas, com sua comunicao
apenas atravs de mensagens (chamada dos mtodos). A classe Cliente no
exemplo anterior j possui dados privados.
- Os mtodos tambm podem ser private, o que os torna acessveis apenas
por outros mtodos da mesma classe. Estes mtodos ocorrem normalmente
quando se divide um mtodo pblico em vrios mdulos de tarefas especficas.
- recomendvel encapsular tarefas internas das classes do sistema em
mtodos privados, para que possam ser modificadas minimizando as mudanas
no lado do usurio, sem mexer na interface com o usurio.

Mtodos Acessadores (getters) e Modificadores (setters)

- Acessadores so mtodos que simplesmente retornam o estado atual de um
campo private do objeto. Por conveno, os nomes iniciam com o prefixo
get.
Por exemplo, digamos que na nossa classe Empregado, quisssemos um
mtodo para nos retornar o nmero da conta do cliente:
public int getNumConta ()
{ return numConta; //o get retorna
}
A partir de agora, com este mtodo, tornamos o campo numConta um campo
de somente-leitura para o mundo exterior classe, ou seja, s atravs de
operaes na classe possvel modificar o seu valor.
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

36


Um mtodo modificador para este mesmo campo poderia ser:
public void setNumConta (int novoNumero)
{ numConta = novoNumero; //o set modifica
}
Em geral, quando o usurio tem interesse em ler e escrever em um campo
private, o programador poder fornecer (se estiver de acordo com o projeto):
o Um mtodo pblico de leitura de campo (acessador get);
o Um mtodo pblico de alterao de campo (modificador set).

Inicializao de atributos
- Em Java, se o construtor do objeto no indicar o valor para inicializao dos
campos de instncia, os nmeros so inicializados com 0 (zero), objetos com
null e booleanos com false, mas as variveis locais dos mtodos precisam
ser inicializadas explicitamente

Referncia ao Objeto Atravs de this
- Para acessar o objeto atual em sua totalidade e o no atributo em particular,
usamos this:
1. Fazendo referncia ao objeto no qual o mtodo opera.
System.out.println (this);
//mostra apenas o endereo do objeto
//usaremos isto no tratamento de eventos
//no prximo captulo

2. Chamada para outro construtor da mesma classe. um excelente
artifcio para combinar cdigo dos construtores.

Veja um exemplo completo, mostrando vrios usos do this:
public class Cliente
{ public Cliente(String n) //sobrecarga
{ this(n,0 );
}
//argumento com mesmos nomes dos atributos
public Cliente(String nome, int numConta) {
this.nome = nome; //atributo=argumento
this.numConta = numConta;
}
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

37


public int getNumConta ()
{ return numConta;
}

public void setNumConta (int numConta)
{ this.numConta = numConta;
}

private String nome;
private int numConta;
}

Ao fazer new Cliente (Joe Satriani), o construtor
Cliente(String) chama o outro construtor Cliente(String, int).





















Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

38

5.2. Os principais modificadores [FS]

A) Modificadores de Classes

- public
o Classes public podem ser instanciadas por qualquer objeto livremente.
o Para declarar uma classe como public, inclua a palavra reservada
public na definio da classe (esta a conveno):
public class NomeClasse

- abstract
o Classes abstract so classes que no permitem que sejam
instanciadas, ou seja, servem para definir superclasses.
o Para declarar uma classe como abstract, inclua a palavra reservada
abstract na definio da classe:
public abstract class NomeClasse

- final
o Classes final so classes que no permitem que voc crie subclasses
delas. Para declarar uma classe como final, inclua a palavra reservada
final na definio da classe:
public final class NomeClasse

B) Modificadores de Mtodos e Atributos


- public
o Faz com que o mtodo ou atributo possa ser utilizado livremente, como
em (na definio da classe Empregado):
public double calc ()

- protected
o Faz com que o mtodo ou atributo somente possa ser invocado
pelas classes do mesmo pacote, ou seja, para classes dentro do
mesmo pacote o mesmo que public (em Java mais comum
proteger/encapsular com private). As subclasses podem acessar
os membros protected, mesmo que estejam em outros pacotes.
protected double calc ()

- private
o Faz com que o mtodo ou atributo somente possa ser invocado na
classe em que definido. Mas as instncias da classe podem acessar
os atributos em outras instncias da mesma classe, ou seja, private
concernente classe e no s instncias. Uma subclasse no
acessa atributos nem mtodos private da superclasse.
private double calc ()
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

39


- static
o Mtodos e atributos static podem ser considerados como
pertencentes classe e no s instncias. Um membro static pode
ser invocado por todas as instncias da classe, ou mesmo sem a
instanciao de um objeto, como o caso do mtodo main na criao
de um aplicativo:
public static void main (String[] args)

- final
o Mtodos final no permitem sobreposio. Atributos final
possuem valor constante, ou seja, no podem ser modificados.
public static final double LUCRO = 0.2;

- abstract
o Mtodos abstract no possuem corpo, apenas definem a assinatura
do mtodo e indicam que devem ser implementados nas subclasses.
Mtodos static, final e private no podem ser abstratos, no faz
sentido reescrev-los em subclasses, isto considerado erro de
sintaxe.
public abstract double calc();

- default
o Um membro sem modificador de acesso definido dito possuir o
modificador default. Mas default no uma palavra-chave em Java,
apenas uma denominao. Na prtica, o acesso funciona normalmente
como o public, mas se estiverem definidos pacotes diferentes para
as classes, o modificador default s permite o acesso para classes
dentro do mesmo pacote, ou seja, neste caso funciona como
protected. O conselho ento definir bem os modificadores de
acesso, escreva todos, mesmo que sejam public. Em Java uma
boa prtica de programao deixar tudo muito claro e definido.

Hierarquia de Modificadores na Sobreposio de Mtodos
- A ordem a ser respeitada :
private default protected public
ou seja, um mtodo private pode ser reescrito nas subclasses com os
modificadores private, default (sem modificador), protected e public,
um mtodo default pode ser reescrito nas subclasses com os modificadores
default, protected e public, e assim por diante.

- Para maiores informaes sobre modificadores, leia o captulo 3 do Sybex
Complete Java Certification Study Guide.
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

40


Sintaxe de declarao de atributos

Sintaxe bsica:

[modificador]* tipo identificador [= valor] ;

onde:

[modificador]* zero ou mais modificadores (de acesso, de qualidade), separados
por espaos: public, private, static, final, etc.
tipo tipo de dados que a varivel (ou constante) pode conter
identificador nome da varivel ou constante
[= valor] valor inicial da varivel ou constante

Exemplo:

protected static final double PI = 3.14159 ;
int numero;




Sintaxe de definio de mtodos

Sintaxe bsica

[mod]* tipo identificador ( [tipo arg]* ) [throws exceo*] { ... }

onde:

[mod]* zero ou mais modificadores separados por espaos
tipo tipo de dados retornado pelo mtodo
identificador nome do mtodo
[arg]* zero ou mais argumentos, com tipo declarado,

separados por vrgula

[throws exceo*] declarao de excees. Estudaremos mais adiante.

Exemplos

public static void main ( String[] args ) { ... }
private final int metodo (int i, int j, int k) ;
String abreArquivo () throws IOException, Excecao2 { ... }





Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

41

6. Mais POO em Java Herana e Polimorfismo

6.1. Herana [AC]
Ao estender uma classe, a classe filha passa a possuir todos os atributos e
mtodos da classe me, alm dos seus prprios. Pode-se tambm adicionar ou
modificar mtodos que se aplicam apenas a esta classe filha. Ento, a classe
filha "herda" mtodos e propriedades da classe me.

Vejamos um exemplo:
Suponha que numa firma hipottica, os empregados sejam identificados por
suas matrculas e nomes. H, porm, dois tipos de empregados: os vendedores e os
tcnicos. Os vendedores tm uma comisso sobre o salrio e os tcnicos tm um
ttulo (advogado, engenheiro, etc.).
Graficamente, pode-se representar este sistema desta forma:

- O vendedor tem, alm de matrcula, nome, e salrio, uma quarta informao,
a porcentagem de comisso, ou seja, podemos dizer que um objeto da classe
Vendedor herda os atributos da classe Empregado.

- Implementando este projeto em Java, da forma mais simples, temos:

Classe construtora Empregado:

public class Empregado
{
String matricula;
Empregado

matricula
nome
salario
Vendedor

comissao
Tecnico

titulo
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

42

String nome;
double salario;
}

Classe construtora Vendedor:

public class Vendedor extends Empregado
{
double comissao;
}

Classe construtora Tecnico:

public class Tecnico extends Empregado {
String titulo;
}

- Podemos observar que os atributos matricula, nome e salario foram
definidos na classe Empregado (tambm chamada superclasse), e as
classes Vendedor e Tcnico (tambm chamadas subclasses) utilizam tais
atributos, pois os herdam da super classe da qual so derivadas.

- No cdigo acima, criamos a classe Vendedor por herana da classe
Empregado utilizando o nome desta aps a instruo extends:

public class Vendedor extends Empregado

- Qualquer modificao na classe Empregado refletir na classe Vendedor
(bem como na classe Tecnico). Por exemplo, a alterao do atributo
matricula de String para int altera este dado tambm nas subclasses.

Para completar o exemplo, s falta a classe que instanciar os objetos das
classes Empregado, Vendedor e Tcnico. Para utilizar os atributos e mtodos
definidos em uma classe, precisamos utilizar um objeto desta classe, o que significa
dizer que precisamos instanciar um objeto desta classe.
A classe que instanciar os objetos ser chamada de Firma, tendo seu cdigo-fonte
definido a seguir:

public class Firma
{
public static void main(String[] args)
{
Empregado e; //declaraes
Vendedor v;
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

43

Tecnico t;

e = new Empregado(); //instanciaes
v = new Vendedor();
t = new Tecnico();

e.nome = "Joo"; //inicializaes dos atributos
e.matricula = "E1";
e.salario = 100.00;

v.nome = "Pedro";
v.matricula = "V1";
v.salario = 500.00;
v.comissao = 20;

t.nome = "Jos";
t.matricula = "T1";
t.salario = 900.30 ;
t.titulo = "Dr. ";

System.out.println ("Matrcula: "+ e.matricula +
" Nome: + e.nome +
" Salrio: R$" + e.salario);

System.out.println ("Matrcula: "+ v.matricula +
" Nome: " + v.nome + " Salrio: R$" +
v.salario + "(j includa a comisso de:
" + v.comissao + "%)");

System.out.println ("Matrcula: "+ t.matricula +
" Nome: " + t.titulo + t.nome +
" Salrio: R$" + t.salario);
}
}

Salve-o como Firma.java, compile-o (as outras classes sero compiladas
automaticamente) e execute com sua ferramenta.

6.2. Uso de Classes Existentes
Podemos usar classes existentes nos nossos projetos, bastando para isso
saber a sintaxe de seus mtodos, como no exemplo anterior:
- Na maior parte das classes Java, criam-se objetos, especifica-se o estado inicial
de cada um e depois se trabalha com estes objetos. E para acessar os objetos,
define-se variveis objeto. Veja:

Empregado e;
// e no objeto ainda nem se refere a nenhum
//objeto

Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

44

e.calculaAumentoAnual(); // NO AINDA !!!!!! ERRO!!!

e = new Empregado(); // agora sim ! Existe o objeto e

e.nome = "Joo"; //OK
e.matricula = "E1";
e.salario = 100.00;

6.3. Relaes entre Classes
- Relaes mais comuns:
o Uso: quando uma classe usa objetos de outra classe. No exemplo
anterior, Firma usa objetos de Empregado.
De um modo geral, uma classe A usa uma classe B se um
mtodo de A envia uma mensagem para um objeto da classe B,
ou se um mtodo de A cria, recebe ou retorna objetos da classe
B.
O uso desta relao deve ser minimizado, visando independncia
de funcionamento entre as classes, facilitando a manuteno do
cdigo.

o Incluso (tem um): ocorre quando um atributo de uma classe um
objeto de outra classe.
Exemplo : Imagine uma Classe Endereco, que possui os atributos :
logradouro, numero, complemento, bairro, cidade, estado, cep.
Pode-se ter outra classe Funcionario, que tenha como
Endereco como um de seus atributos.

o Herana ( um): denota especializao ou generalizao. quando
uma classe estende outra. Vendedor um Empregado.

6.4. Polimorfismo

Voltando ao assunto Herana, veremos um conceito muito importante, o de
Polimorfismo.
No nosso exemplo Firma, o vendedor deve ter X% de comisso. Suponha
ento que seja necessria a construo de um mtodo que calcule o salrio de
todos os empregados, descontando 15% de imposto.
Por exemplo, se o salrio de:

Empregado = 200;
Vendedor = 200; //Salrio-base
Tecnico = 2.000;

Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

45

Supondo uma comisso de 20% , o salrio de Vendedor seria:

Vendedor = 240; // 200 + 20% = 200 + 40 = 240
Calculando o salrio lquido de cada um:

Empregado = 170 // 200-15% = 200-30
Vendedor = 204 // 240-15% = 240-36
Tecnico = 1700 // 2.000-15% = 2.000- 300

O mtodo para clculo do salrio para a classe Empregado pode ser:

public double calc()
{ return ( 0.85 * salario ); //desconto de 15%
}

E esse mtodo ser herdado pela classe Tecnico. Porm, a classe
Vendedor dever implementar seu prprio mtodo:

public double calc()
{
double sal = salario * (1 + comissao/100);
//aumento de 20%

return ( 0.85 * sal);
//desconto de 15%
}

Graficamente, os mtodos so representados separadamente dos atributos,
na parte inferior.
Desta forma, poderamos reescrever os cdigos para um novo exemplo:

Empregado

matricula
nome
salario

calc()
Vendedor

comissao



calc()
Tecnico

titulo
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

46

public class Empregado
{
String matricula;
String nome;
double salario;

public double calc ()
{
return (0.85 * salario);
}
}

public class Vendedor extends Empregado
{
double comissao;

public double calc ()
{
double sal = salario * (1 + comissao/100);
return (0.85 * sal);
}
}

public class Firma
{
public static void main(String args[])
{
Empregado e;
Vendedor v;
Tecnico t;

e = new Empregado();
v = new Vendedor();
t = new Tecnico();

e.nome = "Joo";
e.matricula = "E1";
e.salario = 100.00;

v.nome = "Pedro";
v.matricula = "V1";
v.salario = 500.00;
v.comissao = 20;

t.nome = "Jos";
t.matricula = "T1";
t.salario = 900.30 ;
t.titulo = "Dr. ";
System.out.println ("Matrcula: "+ e.matricula +
" Nome: + e.nome +
" Salrio: R$" + e.calc() );
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

47


System.out.println ("Matrcula: "+ v.matricula +
" Nome: " + v.nome + " Salrio:
R$" + v.calc() + "(j includa a
comisso de: " + v.comissao +
"%)");

System.out.println ("Matrcula: "+ t.matricula +
" Nome: " + t.titulo + t.nome
+ " Salrio: R$" + t. calc());

}
}

Ento, Polimorfismo a capacidade que os mtodos de mesmo nome tm de
efetuarem tarefas diferentes.
Polimorfismo: um mesmo mtodo com vrias formas.
O polimorfismo acontece quando os mtodos so definidos em classes em
herana (sobreposio)
No nosso caso, o mtodo calc efetua um clculo quando utilizado pelos
objetos das classes Empregado e Tecnico, e outro clculo quando o objeto em
questo foi instanciado da classe Vendedor.
Pode-se observar que tanto Empregado como Tecnico utilizam o mtodo
calc para clculo do trabalho, e que Vendedor, apesar de utilizar o mtodo
calc, utiliza o seu prprio mtodo, com corpo diferente daquele definido na
classe ancestral Empregado.
Resumindo o conceito de Polimorfismo:
Reutilizao do mesmo nome para um
conceito correlato em tipos diferentes.

No confunda !
o Sobreposio (Overriding) comparao feita em tempo de
execuo que pergunta Qual mtodo foi definido para este tipo de
objeto? Existe uma redefinio deste mtodo na classe do objeto ou
deve ser usado o mtodo definido na superclasse?.
o Sobrecarga (Overloading) comparao feita em tempo de
compilao que pergunta Qual mtodo possui os tipos de argumentos
correspondentes? e escolhe o mtodo que ser usado. Recurso usado
no caso de mtodos de mesmo nome, definidos em uma mesma
classe, com argumentos diferentes.




Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

48

6.5 . Uso de SUPER
O comando super sempre se refere a uma superclasse. Todo mtodo
construtor de uma subclasse precisa tambm chamar um construtor para os
campos de dados da superclasse, caso existam campos de instncia tambm na
superclasse.
Se a superclasse tiver um construtor ento as subclasses precisam usar
super para passar os parmetros, a fim de utilizar este construtor da
superclasse.

super tambm pode ser usado para passar parmetros para mtodos da
superclasse, utilizando o cdigo deste, sem ter que redefinir totalmente o
mtodo, por exemplo, na linha super.calc (); do exemplo a seguir.
- Exemplo Firma utilizando encapsulamento, polimorfismo, super e this:

public class Empregado
{
private String matricula, nome;
private double salario;

public Empregado (String m, String n, double s)
{ matricula = m;
nome = n;
salario = s;
}

public Empregado (String m, String n)
{ this(m, n, 0 ); //sobrecarga salrio no definido
}

public double calc () {
return (this.getSalario() * 0.85);
}

//getters & setters

public String getMatricula()
{ return matricula; }

public void setMatricula(String matricula)
{ this.matricula = matricula; }

public String getNome()
{ return nome; }

public void setNome(String nome)
{ this.nome = nome; }

public double getSalario()
{ return salario; }
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

49

public void setSalario(double salario)
{ this.salario = salario; }
}// fim classe Empregado


public class Vendedor extends Empregado
{
private double comissao;

public Vendedor(String m, String n, double s, double c)
{ super(m, n, s);
this.comissao = c;
}

public double calc ()
{ return super.calc() * (1 + this.comissao / 100); }

//getters & setters
public double getComissao()
{ return comissao; }

public void setComissao(double comissao)
{ this.comissao = comissao; }
} // fim classe Vendedor

public class Tecnico extends Empregado
{
private String titulo;

public Tecnico(String m, String n, double s, String t)
{
super(m, n, s);
this.titulo = t;
}

//getters & setters
public String getTitulo()
{ return titulo; }


public void setTitulo(String titulo)
{ this.titulo = titulo; }
} // fim classe Tecnico


import java.util.Formatter

public class Firma
{
public static void main(String[] args)
{
Empregado e = new Empregado("E1","Joo",100);
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

50

Vendedor v = new Vendedor("V1","Pedro",500,0.2);
Tecnico t = new Tecnico("T1","Jos",930,"Dr. ");



System.out.format("\nMatricula: %s
\nNome: %s \nSalario:R$ %.2f \n ",
e.getMatricula(), e.getNome(), e.calc());

System.out.format("\nMatricula: %s
\nNome: %s \nSalario:R$ %.2f
\nComissao de %.0f por cento\n",
v.getMatricula(), v.getNome(),
v.calc(), v.getComissao()*100);

System.out.format("\nMatricula: %s
\nNome: %s \nSalario:R$ %.2f \n ",
t.getMatricula(), t.getNome(), t.calc());
}
}
































Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

51

6.6. Relacionamento entre objetos da superclasse e objetos
da subclasse [JTAS]
O objeto de uma subclasse pode ser tratado como um objeto de sua
superclasse. Isso validado pela prpria condio de herana e pode ser
interessante, se for desejvel, por exemplo, criar um vetor com objetos das
subclasses.
No possvel, no entanto, fazer um objeto de uma subclasse receber um
objeto da superclasse. Isso configura erro de sintaxe.
No exemplo da classe Ponto e sua subclasse Circulo, que veremos a seguir,
foi usado o operador cast. Este operador converte a expresso do seu lado
direito no tipo da varivel ou objeto do lado esquerdo de uma atribuio.
(tipo) expressao ou (Classe) expressao
Se tivermos, por exemplo,
int x = 5;
O clculo x/2 dar o inteiro 2 (quociente da diviso com /).
O clculo de (double)x/2 dar 2.5, pois x foi convertido para double.

Exemplo : Vejamos agora as classes Ponto e Circulo

Classe Ponto

public class Ponto {
protected int x, y; // variveis de instncia

public Ponto() { setPonto(0,0); }
public Ponto(int xc, int yc) { setPonto(xc,yc); }
public void setPonto(int xc, int yc) {
x = xc;
y = yc;
}
public int getX() { return x; }
public int getY() { return y; }
public String toString() {
return "[ " + x + " , " + y + "]";
}
}


Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

52


Classe Circulo

public class Circulo extends Ponto {
protected double raio;

public Circulo() { setRaio(0); }
public Circulo(double r, int x, int y) {
super(x,y);
setRaio(r);
}

public void setRaio(double r) {
raio = (r >= 0.0 ? r : 0.0);
}
public double getRaio() { return raio; }
public double getArea() {
return (Math.PI * Math.pow(raio,2));
}
public String toString() {
return "Centro = " + "[ " + x + " , " + y + "]"
+ "; Raio = " + raio;
}
}

Arquivo : TestaHeranca_e_Cast

public class TestaHeranca_e_Cast {
public static void main(String[] args) {
Ponto p1, p2;
Circulo c1, c2;

p1 = new Ponto(30,50);
c1 = new Circulo(2.7, 120, 89);
String saida = "Ponto p1 : " + p1.toString() +
"\nCirculo c1 : " + c1.toString();
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

53

// Atribui objeto da subclasse a um objeto da superclasse
// Ocorrer vinculao dinmica ou vinculao tardia . Ou seja,
// Java sabe que o objeto na verdade um crculo.
// Por isso, o mtodo toString() invocado o da classe Circulo.

p2 = c1;
saida += "\n\nCirculo c1 (atraves da referencia p2) " + p2.toString();
saida += "\n\nCirculo c1 (atraves da referencia c1) " + c1.toString();

// um cast, mas especificamente, um downcasting (cast para a
// subclasse), ou seja, (Circulo)
// NOTE : obj. da subclasse c2 recebe obj. da superclasse p2, pois p2
// havia recebido, primeiramente, um objeto da subclasse, ou seja,
// p2 na verdade referencia um circulo e no um ponto.

c2 = (Circulo) p2; //Converte p2 para c2 apenas neste momento
saida += "\n\nCirculo c1 (via c2) : " + c2.toString();

// ERRO de sintaxe na prxima linha : objeto da subclasse recebe obj.
// da superclasse. Nem que haja cast ser possvel !!!

//c2 = (Circulo)p1; // ERRO !!!!!

System.out.print(saida + "\n\n");
} // fim main
} // fim classe

Comentrio :
Lembre-se de que os construtores nunca so herdados, pois so especficos
da classe onde so definidos.

6.7. Classes Abstratas [AC]
Ao subir na hierarquia de heranas, as classes tornam-se mais genricas. A
classe ancestral pode tornar-se to geral que acaba sendo vista mais como um
modelo para outras classes, do que como uma classe com instncias
especficas.
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

54

Uma classe declarada abstrata no pode ser instanciada, nenhum objeto
desta classe pode ser criado.
Se a classe abstrata contm um mtodo abstrato, deve-se implementar o
mtodo concreto (com todo o cdigo) nas subclasses. Os mtodos abstratos
servem apenas como declarao dos mtodos concretos.
Quando uma subclasse de uma classe abstrata no implementa todos os
mtodos abstratos que herda, ela tambm abstrata, no podendo, portanto, ser
instanciada.
Mtodos static, private e final no podem ser abstract. A
justificativa a seguinte :
1. por definio, um mtodo final no pode ser sobrescrito na subclasse;
2. por definio, um mtodo private s pode ser acessado na classe onde foi
escrito
3. mtodos static no podem ser sobrepostos.

Uma classes abstrata pode ter: [item de FS]
mtodos concretos (usados atravs das subclasses)
campos de dados (memria alocada na criao de objetos pelas suas
subclasses)
construtores (chamados via super( ) pelas subclasses)
Uma classe abstrata dita "pura", quando :
no tm procedimentos no construtor (construtor vazio)
no tm campos de dados (a no ser constantes estticas - static)
todos os mtodos so abstratos

Classes abstratas "puras" podem ser definidas como "interfaces" , que
estudaremos mais adiante.
No nosso exemplo Firma, se definssemos a classe Empregado como
abstract, no poderamos instanciar objetos desta classe, e a mesma serviria
apenas como modelo para Vendedor e Tecnico (tente modificar o cdigo,
retirando tambm a instanciao de Empregado).
No exemplo a seguir, para termos um vetor de formas (Circle, Retangle,
etc), definimos uma classe abstrata Shape, com mtodos abstratos apenas.
Poderemos ento criar um array de objetos Shape.
O cdigo de Shape :

public abstract class Shape
{ public abstract double area ();
public abstract double total ();
// outros mtodos poderiam ser includos aqui,
// sendo abstract ou no
}




Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

55

Usando estas classes, poderamos utilizar um cdigo como, por exemplo:

Shape[] formas = new Shape[3]; //Cria array
formas[0] = new Circle (2.0); //Preenche array
formas[1] = new Rectangle (1.0, 3.0);
formas[2] = new Rectangle (4.0, 2.0);

double totalArea = 0;

for (int i = 0; i < formas.length; i++)
totalArea += formas[i].area();

Veja o cdigo das outras classes (compile-as junto com a classe Shape
anterior):

public class Circle extends Shape
{
private double r;

public Circle (double r) //Construtor
{ this.r = r; }

public double getRadius () { return r; }

public double area () //Implementa o abstrato
{ return (Math.PI*r*r);}

public double total () //circunferencia
{ return (2*Math.PI*r); }
}

public class Rectangle extends Shape
{
public Rectangle (double w, double h)
{ this.w = w; this.h = h;
}
public double getWidth () { return w; }
public double getHeight () { return h; }
public double area () { return (w*h); }
public double total () //Perimetro
{ return (2*(w+h)); }

private double w, h;
}
- Pode-se invocar os mtodos area() e total() de qualquer
objeto Shape do array, embora a classe Shape no defina um corpo para
estes mtodos. Quando se faz isso, o mtodo a ser invocado encontrado
como mtodo dinmico, a rea de um Circle calculada usando o mtodo
definido em Circle e a rea de um Rectangle calculada usando o
mtodo definido em Rectangle.
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

56

6.8. Interface [AC]

Uma classe Java pode herdar de apenas uma classe imediata. Para uma
classe herdar de mais de uma superclasse (o que em C++ se chama Herana
Mltipla), a soluo elegante de Java se chama Interface de Objeto. Ou seja, uma
classe pode estender apenas uma superclasse, mas pode implementar vrias
interfaces (usa-se a palavra-chave implements e o separador ,).
Uma Interface deve ser definida de forma parecida das classes abstratas,
trocando os termos abstract class por interface.
Uma interface especifica uma API (Application Programing Interface) para
executar determinada funcionalidade. No definida nenhuma implementao
dentro de uma interface e as seguintes regras devem ser seguidas :
o Todos os mtodos de uma interface so abstract, mesmo que
seja omitido o modificador na assinatura. No h implementao, os
mtodos terminam com ponto e vrgula.
o Uma interface define uma API pblica. Todos os mtodos de uma
interface so implicitamente public, mesmo quando o modificador
omitido. um erro definir um mtodo protected ou private em
uma interface.
o Uma interface no pode definir campos de instncia. So
permitidos apenas os campos constantes (static e final).
o Uma interface no pode ser instanciada.
o Quando uma classe implementa mais de uma interface, ela deve
implementar cada mtodo de cada interface implementada, ou
deve ser obrigatoriamente uma classe abstract.

Exemplo [Fonte : Como Programar em Java Deitel & Deitel]
// Projeto : FormasComInterface
// Arquivo : FormasComInterface.java

import java.util.Formatter;
public class FormasComInterface {
public static void main(String[] args) {
Ponto p = new Ponto(7,11);
Circulo c = new Circulo(3.5, 22, 8);

Shape f[] = new Shape[2]; // declara e cria um vetor para duas Shapes
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

57

f[0] = p;
f[1] = c;
String saida = p.getNome() + " : " + p.toString() + "\n" +
c.getNome() + " : " + c.toString() + "\n";

for (int i = 0; i < f.length; i++)
{
System.out.format("\n\n%s : %s \nArea = %.2f\n",
f[i].getNome() ,
f[i].toString() ,
f[i].area() );

}

System.out.println();
}
}

// Arquivo : Shape.java


public interface Shape {

//calcula area
public abstract double area();

// retorna o nome
public abstract String getNome();

}


// Arquivo : Ponto.java

public class Ponto extends Object implements Shape{

protected int x, y; // variveis de instncia

public Ponto() { setPonto(0,0); }

public Ponto(int xc, int yc) { setPonto(xc,yc); }

public void setPonto(int xc, int yc) {
x = xc;
y = yc;
}

public int getX()
{
return x;
}
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

58


public int getY() { return y; }

public String toString() {
return "[ " + x + " , " + y + "]";
}

public double area() {
return 0.0;
}

public String getNome() {
return ("Ponto");
}

}


// Arquivo : Circulo.java

public class Circulo extends Ponto {

protected double raio;

public Circulo() {
setRaio(0);
}

public Circulo (double r, int x, int y) //Construtor
{
super(x,y); // invoca o construtor da superclasse Ponto
setRaio(r);
}

public void setRaio (double r) {
raio = r;
}

public double getRaio () //Acessador
{
return raio;
}

public double area () //Implementa o abstrato
{
return (Math.PI*raio*raio);
}

public double perimetro () {
return (2*Math.PI*raio);
}
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

59


public String getNome() {
return "Circulo";
}

// Converte Circulo para uma representao de String,
// usando o mtodo toString() da classe Ponto

public String toString()
{
return "Centro = " + super.toString() //invoca o mtodo do pai
+ "; Raio = " + raio ;
}

}



Comentrios :

1. Quando uma classe implementa uma interface, aplica-se o mesmo
relacionamento um fornecido por herana. Por exemplo, como a classe Ponto
implementa (implements) Shape, um objeto da classe Ponto um Shape. Alm
disso, qualquer objeto de qualquer classe que estende Ponto, tambm um Shape.
2. O mtodo toString() definido na classe Object da seguinte forma :

String toString() retorna uma representao de string do objeto

Note que ele foi sobreposto nas classes vistas.






















Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

60


7. Excees [FS , Prof. Letcia Winkler e JTAS]

7.1. Introduo

Uma exceo um evento que foge ao fluxo normal de execuo esperado
em um programa. uma situao excepcional e geralmente indesejvel que pode
ocorrer durante a execuo de um programa. Excees podem ser tratadas
incluindo-se cdigo adequado no programa. Portanto, erros fatais no podem ser
tratados como exceo.
Alguns exemplos de excees so:

ndice de um vetor fora do intervalo permitido.
Problemas em operaes aritmticas, tais como overflow, underflow e
divises por zero.
Parmetros invlidos na chamada de um mtodo.
Falta de memria.
Arquivo no encontrado
O mecanismo de tratamento de exceo deve ser utilizado, por exemplo, para
processar apenas situaes excepcionais em que um mtodo incapaz de
completar sua tarefa por razes que ele no pode controlar.

O modelo de tratamento de excees do Java permite tratar uma exceo num
escopo diferente daquele que gerou a exceo. Isto permite uma melhor
organizao do cdigo. Em Java, existem vrias classes de excees, todas elas
subclasses de java.lang.Exception.

Mtodos podem capturar excees (Mecanismo try-catch) ou podem deixar
passar excees que ocorrerem em seu corpo, mas obrigatrio, para a maior parte
das excees, que o mtodo declare quaisquer excees que ele no capturar
(usar throws).


7.2. Tipos de erros em tempo de execuo

Basicamente, h trs tipos de erros em tempo de execuo :

1. Erros de lgica de programao : Devem ser corrigidos pelo programador

Ex: limites do vetor ultrapassados, diviso por zero

2. Erros devido a condies do ambiente de execuo : Fogem do controle do
programador, mas podem ser contornados em tempo de execuo
Ex: arquivo no encontrado, rede fora do ar, etc.

3. Erros graves onde no adianta tentar recuperao : Fogem do controle do
programador e no podem ser contornados .

Ex: falta de memria, erro interno da JVM
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

61

7.3. Excees e mtodos

Uma declarao throws (observe o "s") obrigatria em mtodos e
construtores que deixam de capturar uma ou mais excees que ocorrem em seu
interior, caso tais excees precisem ser checadas pelo compilador.

Ex: public void m() throws Excecao1, Excecao2 {...}
public Circulo() throws ExcecaoDeLimite {...}

A palavra reservada throws declara que o mtodo pode provocar excees do
tipo declarado (ou de qualquer subtipo).
A declarao abaixo declara que o mtodo pode provocar qualquer exceo.
Evite ao mximo de fazer isto !

Ex: public void m( ) throws Exception {...}

Mtodos sobrepostos no podem provocar mais excees que os mtodos
originais.

O que acontece quando ocorre uma exceo?

Uma exceo lanada interrompe o fluxo normal do programa, o que faz com
que o fluxo do programa siga a exceo. Se o mtodo onde ela ocorrer no a
capturar, ela ser propagada para o mtodo que chamou este mtodo, e assim por
diante. Se ningum capturar a exceo, ela ir causar o trmino da aplicao. No
entanto, se em algum lugar ela for capturada, o controle poder ser recuperado.


7.4. Estrutura do Mecanismo de Tratamento de Excees

try {
// Cdigo que pode gerar uma exceo.
// Se a exceo ocorrer, daqui at o fim deste bloco nada ser executado
}
catch (XException ex)
{
/* Bloco de tratamento associado condio de exceo XException ou a qualquer
uma de suas subclasses, identificada aqui pelo objeto com referncia ex */
}
catch (YException ey)
{
/* Bloco de tratamento para a situao de exceo YException ou a qualquer uma de
suas subclasses, identificada aqui pelo objeto com referncia ey */
}
// outros blocos catch
finally {
/* Bloco de cdigo que sempre ser executado aps o bloco try, independentemente de

sua concluso ter ocorrido normalmente ou ter sido interrompida.
S obrigatrio se no forem especificados blocos catch */
}
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

62

Observaes:
XException e YException devem ser substitudos pelo tipo de exceo.
Os blocos no podem ser separados por outros comandos um erro de
sintaxe seria detectado pelo compilador Java neste caso.
Cada bloco try pode ser seguido por zero ou mais blocos catch;
Cada bloco catch refere-se a uma nica exceo e pode tratar de qualquer
exceo que seja da mesma classe ou uma subclasse daquela declarada.
Pode-se chamar cada bloco de catch de tratador de exceo, j que quando
possvel o bloco catch tentar recuperar a situao.
possvel fazer um bloco catch para uma exceo especfica e outro para
todas as outras subclasses de uma determinada Exception. Porm,
necessrio que o catch mais especfico (subclasse) aparea antes que o
catch mais genrico (superclasse). Caso contrrio o programa no ir
compilar, apresentando uma mensagem de erro dizendo que a exceo j
tratada anteriormente.
O bloco finally, quando presente, sempre executado independente de
ocorrer exceo, ou no. Em geral, ele inclui comandos que liberam recursos
que eventualmente possam ter sido alocados durante o processamento do
bloco try e que podem ser liberados, independentemente de a execuo ter
encerrado com sucesso ou ter sido interrompida por uma condio de
exceo. A presena desse bloco opcional.
Tanto a clusula finally como a catch so opcionais, porm necessrio ter
pelo menos uma delas para cada bloco try.

Quando ocorre uma exceo, o fluxo de execuo de instrues deixa o bloco
do try, e os blocos de catch so pesquisados em ordem, quanto ao tratador
apropriado. Se o tipo da exceo lanada corresponder ao tipo de parmetro em um
dos blocos catch, o cdigo deste bloco catch disparado. Se no ocorrer exceo
dentro do bloco try, os tratadores de exceo so pulados e o programa continua
seu fluxo aps os blocos catch, que poder ser (caso exista) o bloco finally

Lembre-se: Se uma classe mais geral (ex: Exception) aparecer antes de uma ou
mais classes especficas (subclasses), uma exceo do tipo da especfica jamais
ser capturada . O compilador detecta a situao acima e no compila o cdigo

Para pegar qualquer exceo (geralmente isto no recomendado), faa um
catch que pegue Exception. Exemplo : catch (Exception e) { ... }



Exemplo em que se captura uma exceo :

public class HelloWorld
{
public static void main (String args[])
{
int i;
String msgs [] = {"Aula", "de", POOII" };
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

63

i = 0;
while (i < 4)
{
try {
System.out.println (msgs[i]);
i++;
}
catch (ArrayIndexOutOfBoundsException e)
{ System.out.println("Indice fora do limite");
break;
}
finally
{
System.out.println("Vai imprimir sempre esta frase !!! ");
} // fim finally
} // fim while
} // fim main
} // fim class HelloWorld

Muitas classes de biblioteca possuem mtodos que podem lanar excees.
Estas excees podem ser capturadas por um cdigo escrito pelo programador.
Alm disto, mtodos escritos pelo programador tambm podem lanar excees
(throw), tanto de tipos definidos nas bibliotecas como de novos tipos construdos
pelo programador.


Exemplo em que se lana uma exceo com throw (sem s ) :

s vezes, aps a captura de uma exceo, desejvel relan-la para que
outros mtodos lidem com ela. Isto pode ser feito da seguinte forma:

public void metodo() throws ExcecaoSimples
{
try {
// instrues
}
catch (ExcecaoSimples ex)
{
// faz alguma coisa para lidar com a exceo
throw ex; // lana exceo
} // fim catch
} // fim metodo







Tipo de
exceo
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

64

Exemplo : Avisar que as excees podem ocorrer (throws). Neste caso, a
exceo no foi lanada e nem capturada. Portanto, ocorrer erro na
excecuo.

public class Teste
{
public static void main(String args[]) throws ArrayIndexOutOfBoundsException
{
int i = 0;
String msgs [] = {"Aula"," de"," POOII" };

while (i < 4)
{
System.out.println ("i = " + i + msgs[i]);
i++;
}
}// fim main
} // fim classe

Exemplo : Uma exceo pode ser lanada para outro mtodo a tratar, caso ele
seja programado para isso.
Lanar uma exceo com throw, passa a responsabilidade para o mtodo
que disparou este trecho.

public class TesteExcecao
{
static int i = 0;
static String msgs [] = { " Hello world!", " Alo mundo!", " Estacio de Sa"};

public static void escrever() throws ArrayIndexOutOfBoundsException
{
try {
while (i < 4)
{
System.out.println ("i = " + i + msgs[i]);
i++;
}
}
catch (ArrayIndexOutOfBoundsException e)
{
System.out.println("Lancei a exceo");
throw e; // lana a exceo
}
} // fim escrever

public static void main(String args[]) // Ocorrer erro na exceuo {
escrever();

}// fim main

} // fim classe
Objeto e
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

65


Para que o erro no ocorra, seria necessrio, j que a programao foi mal
feita, capturar a exceo na main.

As excees podem ser de dois tipos:
Excees verificadas (checked). Neste caso, a exceo obrigatoriamente ter
que ser capturada (try/catch) ou pelo menos, declarada com throws.
Excees de runtime, ou excees no-verificadas (uncheked). Neste caso
na linguagem Java no exigido o tratamento da exceo e nem que a
mesma seja declarada com throws. Por exemplo, para testar o limite de um
vetor, basta programar corretamente, o que o mais adequado. Mas se
desejado, pode-se declarar a exceo com throws ou captur-la com
try/catch.

Uma exceo em Java um objeto. A classe raiz de todas as excees
java.lang.Throwable. Apenas objetos dessa classe ou de suas classes derivadas
podem ser gerados, propagados e capturados atravs do mecanismo de tratamento
de excees.
A classe Throwable tem duas subclasses:
java.lang.Exception

a raiz das classes derivadas de Throwable que indica situaes que a
aplicao pode querer capturar e realizar um tratamento que permita
prosseguir com o processamento. Prov alguns mtodos muito teis para
obter informaes sobre uma exceo, tais como o printStackTrace().

java.lang.Error

a raiz das classes derivadas de Throwable que indica situaes que a
aplicao no deve tentar tratar. Usualmente indica situaes anormais, que
no deveriam ocorrer.

Errors e RuntimeExceptions so considerados uncheked (no verificadas),
portando o compilador no obriga que exista tratamento para eles. Erros
normalmente representam situaes crticas, que no deveriam acontecer, como por
exemplo, acabar a memria da JVM. J subclasses de RuntimeException
representam erros de lgica de programao que devem ser corrigidos (podem, mas
no devem ser capturadas: erros devem ser corrigidos) .


Exemplos de excees j definidas em Java incluem:

java.lang.ArithmeticException

Indica situaes de erros em processamento aritmtico, tal como uma
diviso inteira por 0.

Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

66

java.lang.NumberFormatException

Indica que ocorreu uma tentativa de converter uma string para um formato
numrico, mas seu contedo no representava adequadamente um nmero
para aquele formato. uma subclasse de
java.lang.IllegalArgumentException.

java.lang.ArrayIndexOutOfBoundsException

Indica a tentativa de acesso a um elemento de um vetor fora de seus
limites - ou o ndice era negativo ou ainda, era maior ou igual ao tamanho do
vetor. uma subclasse de java.lang.IndexOutOfBounds, assim como a
classe java.lang.StringIndexOutOfBounds.


java.lang.NullPointerException

Indica que a aplicao tentou usar null onde uma referncia a um objeto
era necessria -- invocando um mtodo ou acessando um atributo, por
exemplo.

java.lang.ClassNotFoundException

Indica que a aplicao tentou carregar uma classe mas no foi possvel
encontr-la.


java.io.IOException

Indica a ocorrncia de algum tipo de erro em operaes de entrada e
sada. a raiz das classes java.io.EOFException (fim de arquivo ou stream),
java.io.FileNotFoundException (arquivo especificado no foi encontrado) e
java.io.InterruptedIOException (operao de entrada ou sada foi
interrompida), entre outras.


Entre os erros definidos em Java, as subclasses de java.lang.Error, so
java.lang.StackOverflowError e java.lang.OutOfMemoryError. So situaes onde
no possvel uma correo a partir de um tratamento realizado pelo prprio
programa que est executando.

Como excees so objetos, podem incluir atributos. A classe Throwable inclui o
registro do estado atual da pilha das chamadas de mtodos e uma string associada
a uma mensagem de erro, que pode ser obtida para qualquer exceo atravs do
mtodo Throwable.getMessage().




Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

67

Hierarquia





Principais Mtodos de Exception :

1. String getMessage() Retorna mensagem passada pelo construtor
2. String toString() Retorna nome da exceo e mensagem
3. void printStackTrace( ) Imprime detalhes (stack trace) sobre exceo


Exemplo : Aqui voc v a criao de uma nova exceo que lanada. Este
exemplo ilustra o uso dos mtodos getMessage, toString e printStackTrace.

public class TesteExcecao
{
static int i = 0;
static String msgs [] = {" Hello world!", " Alo mundo!"," Estacio de Sa"};

public static void escrever() throws ArrayIndexOutOfBoundsException
{
try {
while (i < 4)
{
System.out.println ("i = " + i + msgs[i]);
i++;
}// fim do while

} // fim try
Prof
a
. Jane Programao Orientada a Objetos I I (Linguagem Java)

68


catch (ArrayIndexOutOfBoundsException e) //e obj original
{
System.out.println("Lancei a excecao");
e.printStackTrace();
System.out.println("Treinando a toString " + e.toString());


// cria uma nova exceo - imprime msg desejada e a msg do obj original

throw new ArrayIndexOutOfBoundsException("Voce acessou
indice inexistente ! " + e.getMessage());

} // fim catch

} // fim escrever

public static void main(String args[])
{
escrever();
} // fim main

} // fim classe


Exemplo : Entrada de dado via teclado (System.in), atravs de nextInt(), e
verificao se os dados de entrada so dgitos.

import java.util.Scanner;
public class Numero2 {

public static void main(String args[])
{
Scanner teclado;

teclado = new Scanner(System.in);

try
{

System.out.print("Digite um numero:");
int num = scanner.nextInt();
System.out.println ("O numero digitado foi: " + num);
}
catch (InputMismatchException e)
{
System.out.println ("\nERRO: Digite um numero !\n");
}
} // fim main

} // fim classe

You might also like