Apostila de Java
Apostila de Java
Apostila de Java
Java e POO
Java e POO
SUMRIO
Java e POO
Java e POO
Introduo
James Gosling e outros desenvolvedores da Sun estavam trabalhando em um projeto de TV interativa em
meados da dcada de 1990, quando Gosling descontente com a linguagem C++, trancou-se em seu escritrio e criou
uma nova linguagem adequada ao projeto e que focalizava alguns de seus motivos de frustrao na C++. O esforo de
TV interativa da Sun falhou, mas seu trabalho na linguagem Java que facilitava a reescrita de software rendeu frutos.
Java foi lanada pela Sun no segundo semestre de 1995, em um kit de desenvolvimento gratuito, do qual era
possvel fazer o download pelo Web site da empresa. O fato de programas Java chamados applets poderem ser
executados como parte das pginas Web contribui para atrair centenas de milhares de desenvolvedores.
Java uma linguagem orientada a objetos, independente de plataforma e segura, projetada para ser mais fcil
de aprender do que C++ e mais difcil de abusar do que C e C++.
A Programao Orientada a Objetos (P.O.O) um tcnica de desenvolvimento de software em que um
programa percebido como um grupo de objetos que trabalham juntos. Os objetos so criados como modelos,
chamados classes, e contem os dados e as instrues necessrias para usar esses dados. Java completamente
orientada a objetos.
Independente de plataforma, um programa Java executado sem modificaes em diferentes sistemas
operacionais. Os programas Java so compilados para um formato chamado bytecode, que executado por qualquer
sistema operacional, software ou dispositivo com um interpretador Java.
Caractersticas:
Java cuida automaticamente da alocao e desalocao de memria;
Java no inclui ponteiros;
Java s inclui herana nica;
Segurana.
A falta de ponteiros e a presena de gerenciamento automtico de memria so dois dos elementos-chave
para a segurana de Java. Outro a forma como os programas Java executados em pginas Web so limitados a um
subconjunto da linguagem, para evitar que um cdigo malicioso prejudique o computador de um usurio.
Os recursos da linguagem que poderiam facilmente ser empregados para fins prejudiciais como a
capacidade de gravar dados em um disco e excluir arquivos no podem ser executados por um programa quando ele
executado pelo interpretador Java de um browser na Internet.
SDK
Software Development Kit um conjunto de programas da linha de comando, usados para criar, compilar e
executar programas Java. Cada nova verso da Java acompanhada por uma nova verso do kit de desenvolvimento.
Ele no oferece uma interface grfica com o usurio, editor de textos ou outros recursos. Para usar o kit, necessrio
digitar os comandos em um prompt de texto, ou seja, um prompt de linha de comando.
No entanto, existem diversas IDEs (Integrated Development Environment), um ambiente integrado para
desenvolvimento de software, tais como: JCreator, Eclipse, NetBeans, dentre outros.
Exemplo:
javac Soma.java compila a classe Soma e gera o arquivo bytecode.
Java Soma interpreta o bytecode da classe Soma.
O download do Software Development Kit pode ser baixaido no site da Sun (http://java.sun.com) e est
disponvel para diversos sistemas operacionais.
Depois da instalao do JDK, teremos que editar as variveis de ambiente do computador para incluir as
referncias ao kit.
1. Edit a varivel PATH do computador e acrecente uma referncia pasta Bin do Software Development
Kit (C:\Program Files\Java\jdk1.6.0_10\bin) se voc instalou nesta pasta.
2. Edite ou crie uma varivel CLASSPATH para que contenha uma referncia pasta ativa, seguida por
uma
referncia
ao
arquivo
tools.jar
na
pasta
lib
do
kit
(.;C:\Program
Files\Java\jdk1.6.0_10\lib\tools.jar). No esquea o ponto-e-vrgula.
Java e POO
O Java Software Development Kit exige o uso de uma linha de comando para compilar os programas Java,
execut-los e tratar de outras tarefas. Uma linha de comando um modo de operar um computador digitando
comandos no seu teclado.
Dicas:
Para abrir uma pasta, digite cd seguido pelo nome da pasta e pressione Enter;
o Exemplo: cd c:\temp.
Digite cd \ para abrir a pasta raiz na unidade de disco;
Digite cd.. para retornar ao nvel anterior;
Para criar uma pasta, digite: md e o nome da pasta;
o Exemplo: md c:\Teste
Para deletar a pasta, digite: rd e o nome da pasta;
o Exemplo: rd c:\Teste
Ao contrrio das ferramentas de desenvolvimento Java mais sofisticadas, o Software Development Kit no
inclui um editor de textos para criar cdigos- fonte.
Para que um editor ou processador de textos funcione com o kit, ele precisa ser capaz de salvar arquivos de
texto sem formatao. No Windows temos, por exemplo, o Bloco de Notas que s trabalha com arquivos de texto
limpo. A desvantagem do uso de editores de texto simples, que eles no exibem nmeros de linha enquanto o
cdigo-fonte criado.
Ver os nmeros de linha ajuda na programao Java, pois muitos compiladores indicam o nmero de linhas
em que ocorreu o erro.
Exemplo:
Menus.java:2: Class Font nor found in type declaration
Java e POO
O nmero 2 depois do nome do arquivo fonte Java indica a linha que disparou o
erro do compilador. Com um editor de textos que aceita numerao, podemos ir diretamente para essa linha e
comear a procurar o erro.
Execute seu editor preferido e digite o programa Java abaixo:
Obs.: Certifique-se de que todos os parnteses, chaves e aspas na listagem sejam digitados corretamente e
use maisculas e minsculas no programa exatamente como aparecem.
Exemplo 1: Classe Oi !
Depois de digitar o programa, salve o arquivo em algum lugar do disco rgido com o nome Oi.java. Os cdigosfonte Java precisam ser salvos com nomes terminando em .java.
Se voc estiver usando o Windows, um editor de textos como o Bloco de Notas poder acrescentar uma
extenso txt extra ao nome de arquivo de qualquer fonte Java salvo. Por exemplo, Oi.java ser salvo como Oi.java.txt.
Como uma alternativa para evitar este problema, coloque aspas em torno do nome de arquivo ao salvar um arquivo
fonte.
Java e POO
Descrio
Adio
Subtrao
Multiplicao
Diviso
Resto da diviso
Descrio
Incremento unitrio (adiciona uma unidade)
Decremento unitrio (subtrai uma unidade)
Obs1.: Se usado como prefixo (antes da varivel), a operao realizada antes do uso do valor da varivel.
Exemplo:
int a=1,b;
b=++a;// b recebe 2, a passa a valer 2.
Obs 2.: Se usado como sufixo (depois da varivel), a operao realizada depois do uso do valor da varivel.
Exemplo:
int a=1,b;
b=a++;//b recebe 1, a passa a valer 2;
Java e POO
Operadores Relacionais
Operador
==
!=
>
>=
<
<=
Descrio
Igual
Diferente
Maior que
Maior ou igual a
Menor que
Menor ou igual a
Obs 1.: O operador de igualdade == no deve ser confundido com o operador de atribuio =.
Obs 2.: No podem ser usados para comparar strings (literal).
Operadores Lgicos
Operador
&&
||
!
Descrio
E lgico (and)
Ou lgico (or)
Negao (not)
Operador Ternrio
um valor simples que permite usar o valor de duas expresses diferentes conforme o resultado da condio.
Sua sintaxe :
<cond>?<expresso_se_verdadeiro>:<expresso_se_falso>
Se a expresso cond verdadeira, retornado o resultado de expresso_se_verdadeiro, seno retornado o
resultado de expresso_se_falso.
Operadores de atribuio compostos
Expresses assim:
varivel = varivel operador expresso
a=a+1;
Podem ser escritas assim:
varivel operador = expresso
a+=1;
Operador
Descrio
+=
Soma e atribui
-=
Subtrai e atribui
+=
Multiplica e atribui
/=
Divide e atribui
%=
Calcula o resto e atribui
Java e POO
Descrio
Byte
Inteiros positivos e negatibos
Short
Inteiros positivos e negativos
Int
Inteiros positivos e negativos
Long
Inteiros positivos e negativos
Float
Valores em ponto flutuante
Double
Valores em ponto flutuante
Char
Caracteres individuais
Boolean
Tipo lgico, s assume false ou true
Obs.: String uma classe em Java.
Tamanho
1
2
4
8
4
8
-
Intervalo
-128 a + 127
-32.768 a +32.767
-2.147.483.648 a 2.147.483.647
-2^64 a +2^64-1
1.40239846E-45 a 3.40282347E+38
4.9406564E-324 a 1.79769313E+308
-
Java e POO
10
Java e POO
11
" i " + i );
" i " + i );
" i " + i );
Java e POO
JOptionPane
A classe JOptionPane oferece vrios mtodos que podem ser usados para criar caixas de dilogos padro.
As quatro caixas de dilogo padro so os seguintes:
ConfirmDialog Faz uma pergunta, com botes para respostas Yes/No/Cancel.
InputDialog Pedidos de entrada de texto.
MessageDialog Apresenta uma mensagem.
OptionDialog Compreende todos os trs outros tipos de caixa de dilogo.
Se configurarmos um estilo para usar com qualquer uma dessas caixas, deveremos estabelecer antes que a
mesma seja aberta.
Inicialmente, estudaremos apenas as caixas de entrada e sada.
CAIXAS DE DILOGO DE ENTRADA
Uma caixa de dilogo de entrada faz uma pergunta e usa um campo de texto para armazenar a
resposta.
O modo mais fcil de criar uma caixa de dilogo de entrada com uma chamada ao mtodo
showInputDialog(Componente, Objeto). Os argumentos so o componente pai e a string, o componente ou
o cone a exibir a caixa.
A chamada de mtodo da caixa de dilogo de entrada retorna uma string que representa a resposta do
usurio.
Exemplo:
String resposta = JOptionPane.showInputDialog(null, Entre com o seu nome:);
Podemos criar uma caixa de dilogo de entrada com o mtodo showInputDialog (Componente,
Objeto, String, int). Os dois ltimos argumentos so:
O ttulo a exibir na barra de ttulo da caixa de dilogo.
Uma das cinco constantes de classe descrevendo o tipo de caixa de dilogo: ERROR_MESSAGE,
INFORMATION_MESSAGE,
PLAIN_MESSAGE,
QUESTION_MESSAGE,
ou
WARNING_MESSAGE.
Exemplo:
String resposta = JOptionPane.showInputDialog(null, Qual o seu CEP?, Entre com o CEP,
JOptionPane.QUESTION_MESSAGE);
CAIXAS DE DILOGO DE MENSAGEM
uma janela simples, que mostra informaes para tanto invocamos o mtodo showMessageDialog
(Componente, Objeto).
Exemplo:
JOptionPane.showMessageDialog(null, O programa foi desinstalado);
Podemos utilizar tambm o mtodo showMessageDialog (Componente, Objeto, String, int).
Exemplo:
JOptionPane.showMessageDialog(null, Um asteride ir destruir a Terra., Alerta de destruio,
JOptionPane.WARNING_MESSAGE);
12
Java e POO
13
Java e POO
Lista 1
1) Em pocas de pouco dinheiro, os comerciantes esto procurando aumentar suas vendas oferecendo desconto.
Faa um algoritmo que possa entrar com o valor de um produto e imprima o novo valor tendo em vista que o
desconto foi de 9%.
2) Criar um algoritmo que efetue o clculo do salrio liquido de um professor. Os dados fornecidos sero: valor da
hora aula, nmero de aulas dadas no ms e percentual de desconto do INSS.
3) Calcular e apresentar o valor do volume de uma lata de leo, utilizando a frmula:
volume: 3.14159*r2* altura.
4) Efetuar o clculo da quantidade de litros de combustvel gastos em uma viagem, sabendo-se que o carro faz 12
km com um litro. Devero ser fornecidos o tempo gasto na viagem e a velocidade mdia. Utilizar as seguintes
frmulas:
distncia = tempo * velocidade
litros usados = distancia /12
14
Java e POO
15
Java e POO
ESTRUTURAS CONDICIONAIS
IF
Um dos principaris aspectos da programao a capacidade de um programa de decidir o que ele far. Isso
tratado por um tipo especial de instruo, chamada condicional.
Um condicional uma instruo de programao executada apenas se uma condio especfica for atendida.
A condicional mais bsica a palavra-chave if. A condicional if usa uma expresso Booleana para decidir se
uma instruo deve ser executada. Se a expresso retornar um valor true, a instruo ser executada.
Exemplo:
if(temperatura >38)
System.out.println(Voc est com febre);
Se quisermos que algo mais acontea no caso em que a expresso if retorna um valor false, ento uma
palavra-chave else opcional poder ser usada.
Exemplo:
if(temperatura>38)
System.out.println(Voc est com febre);
else
Sytem.out.println(Sua temperatura est normal);
Usando if, possvel incluir apenas uma nica instruo como cdigo para executar se a expresso de teste
for verdadeira, e outra instruo se a expresso for falsa.
Podemos testar uma varivel em relao a algum valor e, se ele no combinar, test-lo novamente com um
valor diferente.
Exemplo:
if(operacao == +)
soma(objeto1, objeto2);
else if (operacao == -)
subtracao(objeto1,objeto2);
else if (operacao == *)
multiplicacao(objeto1,objeto2);
else if (operacao == /)
divicao(objeto1,objeto2);
Esse uso das instrues if chamado instruo if aninhada, pois cada instruo else contm outro if, at que
todos os testes possveis tenham sido feitos.
Lista 2
1)
2)
3)
4)
5)
6)
7)
8)
16
Ler um nmero e se ele for maior do que 20, ento imprimir a metade do nmero.
Ler um nmero e imprimir se ele par ou mpar
Ler um nmero e imprimir se ele positivo, negativo ou nulo.
Construir um algoritmo que leia dois nmeros e efetue a adio. Caso o valor somado seja maior que
20, este dever ser apresentado somando-se a ele mais 8; caso o valor somado seja menor ou igual a
20, este dever ser apresentado subtraindo-se 5.
Entrar com um nmero e imprimir a raiz quadrada do nmero caso ele seja positivo e o quadrado do
nmero caso ele seja negativo.
Entrar com um nmero e informar se ele divisvel por 3 e por 7.
Entrar com um nmero e informar se ele divisvel por 10, por 5, por 2 ou se no divisvel por
nenhum destes.
A prefeitura do Rio de Janeiro abriu uma linha de crdito para os funcionrios estatutrios. O valor
mximo da prestao no poder ultrapassar 30% do salrio bruto. Fazer um algoritmo que permita
entrar com o salrio bruto e o valor da prestao e informar se o emprstimo pode ou no ser
concedido.
Java e POO
17
Java e POO
Switch
Em Java podemos agrupar aes com a instruo switch. Esta instruo baseada em um valor da varivel
que pode ser qualquer um dos tipos primitivos char, byte, short ou int, que comparada com cada um dos valores de
case. Se houver uma combinao, a instruo ou as instrues aps o teste sero executadas.
Se nenhuma combinao for encontrada, a instruo ou instrues default sero executadas. O fornecimento
de uma instruo default opcional se ela for omitida e no houver combinao para qualquer uma das instrues
case, a instruo switch ser completada sem qualquer execuo.
A implementao Java de switch limitada:
os testes e os valores s podem ser tipos primitivos simples, que podem ser convertidos para um int;
no se pode usar tipos primitivos maiores, como um long ou float, strings ou outros objetos dentro de um
switch,
no se pode testar qualquer relacionamento alm da igualdade.
Estas restries limitam switch as casos mais simples. Ao contrrio de if aninhadas funcionam para qualquer
tipo de teste em qualquer tipo possvel.
Exemplo:
switch(operation){
case +:
soma(objeto1, objeto2);
break;
case *:
subtracao(objeto1, objeto2);
break;
case -:
multiplicacao(objeto1, objeto2);
break;
case +:
divisao(objeto1, objeto2);
break;
}
Exemplo: Ler um nmero inteiro entre 1 e 12 e escrever o ms correspondente. Caso o usurio digite um
nmero fora desse intervalo, dever aparecer uma mensagem informando que no existe ms com este
nmero.
import javax.swing.*;
public class Algoritmo138{
public static void main(String args[]){
int mes;
mes=Integer.parseInt(JOptionPane.showInputDialog("Digite
nmero do ms 1-12"));
switch(mes){
case 1:
JOptionPane.showMessageDialog(null,"Janeiro");break;
case 2:
JOptionPane.showMessageDialog(null,"Fevereiro");break;
case 3:
JOptionPane.showMessageDialog(null,"Maro");break;
case 4:
JOptionPane.showMessageDialog(null,"Abril");break;
case 5:
JOptionPane.showMessageDialog(null,"Maio");break;
18
Java e POO
case 6:
JOptionPane.showMessageDialog(null,"Junho");break;
case 7:
JOptionPane.showMessageDialog(null,"Julho");break;
case 8:
JOptionPane.showMessageDialog(null,"Agosto");break;
case 9:
JOptionPane.showMessageDialog(null,"Setembro");break;
case 10:
JOptionPane.showMessageDialog(null,"Outubro");break;
case 11:
JOptionPane.showMessageDialog(null,"Novembro");break;
case 12:
JOptionPane.showMessageDialog(null,"Dezembro");break;
default: JOptionPane.showMessageDialog(null,"No
existe ms correspondente para este nmero");
}
}
}
ESTRUTURAS DE REPETIO
FOR
Um loop for usado para repetir uma instruo at que uma condio seja atendida. Embora os loops for
sejam constantemente utilizados para a iterao simples, em que uma instruo repetida por um certo nmero de
vezes, os loops for podem ser usados para quase qualquer tipo de loop.
O loop for em Java possui o seguinte formato:
for(inicializao; condio;incremento){
instruo;
}
O incio do loop for possui trs partes:
Inicializao- expresso que inicializa o incio do loop. Se voc tiver um ndice de loop, essa expresso
poderia declar-lo e incializ-lo, como em int i=0. As variveis declaradas nessa parte do loop for so
locais ao prprio loop; elas deixam de existir depois que o loop terminar sua execuo. Podemos
inicializar mais de uma varivel nesta seo, separando cada expresso com uma vrgula. A instruo
int i=0, int j=10 nesta seo declararia as variveis i e j, e ambas seriam locais ao loop.
Condio teste que ocorre de cada passada do loop. O teste precisa ser uma expresso Booleana
ou uma funo que retorne um valor boolean, como i<50. Se a conido for true, o loop executado.
Quando a condio for false, o loop deixa de ser executado.
Incremento qualquer expresso ou chamada de mtodo. Normalmente, o incremento usado para
alterar o valor do ndice do loop, para trazer o estado do loop para mais perto de retornar false e
encerrar o loop. O incremento ocorre depois de cada passada do loop. Pode-se colocar mis de uma
expresso nesta seo, separando cada expresso com uma vrgula.
Exemplo:
for(int i=0; i<10;i++)
System.out.println(Nmero: +i);
Imprime todos os nmeros de zero a dez.
Obs.: qualquer parte do loop for pode ser uma instruo vazia; em outras palavras, voc pode incluir um pontoe-vrgula sem expresso ou instruo, e essa parte do loop for ser ignorada.
19
Java e POO
Obs.: se utilizada uma instruo vazia no loop for, teremos que inicializar ou
incrementar quaisquer variveis de loop ou ndices de loop em qualquer outro lugar no programa.
Podemos ter uma instruo vazia como corpo do seu loop for, se tudo o que quiser fazer estiver na primeira
linha desse loop.
Exemplo:
for(i=4001;notPrime(i);i+=2);
Encontra o primeiro nmero primo maior do que 4000. Emprega um mtodo chamado notPrime(), que retorna
um valor Booleano, que dever indicar se i primo ou no.
WHILE
usado para repetir uma instruo se uma determinada condio for true.
Exemplo:
while(i<10){
x=x*i++;
}
A condio do while uma expresso Booleana. Se a expresso for true, o loop while executar o corpo do
loop e depois testar a condio novamente. Esse processo se repete at que a condio seja false.
Embora o loop apresentado utilize chaves de abertura e fechamento para tornar uma instruo em bloco, as
chaves no so necessrias, pois o loop contm apenas uma instruo: x=x*i++. O uso das chaves no cria quaisquer
problemas, e as chaves sero exigidas se voc acrescentar outra instruo dentro do loop depois.
DO WHILE
O loop do exatamente como um loop while com uma diferena principal o lugar no loop em que a condio
testada.
Um loop while testa a condio antes do looping, de modo que, se a condio for false na primeira vez que for
testada, o corpo do loop nunca ser executado.
Um loop do executa o corpo do loop pelo menos uma vez antes de testar a condio, de modo que, se a
condio for false na primeira vez em que for testada, o corpo do loop j teria sido executado uma vez.
Exemplo:
do{
i*=2;
System.out.println(i+ );
}while (1<100);
BREAK E CONTINUE
O comando break usado para interromper a execuo de um dos laos de iterao vistos acima ou de um
comando switch. Este comando comumente utilizado para produzir a parada de um lao mediante a ocorrncia de
alguma condio especfica, antes da chegada do final natural do lao.
Exemplo:
// Achar i tal que v[i] negativo
for(i=0; i<n;i++)
if(v[i] <0) break;
if(i == n)
system.out.println("elemento negativo no encontrado.");
E se isto se der dentro de um lao duplo? Nesse caso, o comando break provocar a interrupo apenas do
lao em que o comando imediatamente subjacente. Os outros laos continuam normalmente.
O comando continue tem a funo de pular direto para final do lao, mas em vez de interromper o lao como no
break, ele continua executando o prximo passo do lao. O uso de continue pouco usual na programao
estruturada.
20
Java e POO
Lista - 3
Estruturas repetio
1)
2)
3)
4)
5)
6)
7)
8)
Criar um algoritmo que entre com cinco nmeros e imprimir o quadrado de cada nmero.
Criar um algoritmo que imprima todos os nmeros pares no intervalo 1-10.
Imprimir todos os nmeros de 1 at 100.
Imprimir todos os nmeros de 100 at 1.
Imprimir os mltiplos de 5, no intervalo de 1 at 500.
Criar um algoritmo que imprima todos os nmeros de 1 at 100 e a soma deles.
Entrar com 10 nmeros e imprimir o quadrado de cada nmero.
Entrar com 15 nmeros e imprimir a raiz quadrada de cada nmero. Faa somente raiz de nmeros
positivos.
9) Criar um algoritmo que leia um nmero e imprima seu produto.
Exemplo:
nmero: 3
Sada: 1 2 3
10) Criar um algoritmo que leia um nmero e imprima a soma dos nmeros mltiplos de 5 no intervalo
entre 1 e num. Suponha que num ser maior que zero.
11) Criar um algoritmo que leia um nmero de entrada (num), leia n nmeros inteiros da entrada e
imprima o maior deles. No suponha que todos os nmeros lidos sero positivos.
12) Criar um algoritmo que leia a quantidade de nmeros que se deseja digitar para que possa ser
impresso o maior e o menor nmero digitado. No suponha que todos os nmeros lidos sero
positivos.
13) Entrar com nome, nota da PR1 e nota da PR2 de 5 alunos. Imprimir uma listagem, contendo: nome,
nota da PR1, nota da PR2 e mdia de cada aluno. Ao final, calcule a mdia geral da turma.
14) Entrar com 5 nmeros e imprimir a soma dos positivos e o total de nmeros negativos.
15) Criar um algoritmo que entre com 5 notas de cada aluno de uma turma de 10 alunos e imprima:
a mdia de cada aluno
a mdia da turma
o percentual de alunos que tiveram mdias maiores ou iguais a 5
16) Uma escola tem 5 turmas e cada turma tem n alunos. Criar um algoritmo que imprima, por turma, o
total de alunos com mdia superior a 7 e a mdia geral da escola.
21
Java e POO
Lista - 4
Estruturas repetio(while e do while)
1) Entrar com nmeros e imprimir o triplo de cada nmero. O algoritmo acaba quando entrar com o
nmero -999
2) Entrar com nmeros enquanto forem positivos e imprimir quantos nmeros foram digitados.
3) Entrar com nmeros e imprimir o quadrado de cada nmero at entrar um nmero mltiplo de 6 que
dever ter seu quadrado tambm impresso.
4) Chico tem 1,50 e cresce 2 centmetros por ano, enquanto Juca tem 1,10m e cresce 7 centmetros por
ano. Construir um algoritmo que calcule e imprima quantos anos sero necessrios para que Juca
seja maior que Chico
5) Crie um algoritmo que entre com vrios nmeros inteiros e positivos e imprima a mdia dos
nmeros mltiplos de 3.
6) Uma das maneiras de se conseguir a raiz quadrada de um nmero subtrair do nmero os mpares
consecutivos a partir de 1, at que o resultado da subtrao seja menor ou igual a zero. O nmero de
vezes que se conseguir fazer a subtrao a raiz quadrada exata(resultado 0) ou aproximada do
nmero(resultado negativo).
Exemplo: Raiz de 16
16-1=15-3=12-5=7-7=0 4
22
Java e POO
23
Java e POO
FUNES MATEMTICAS
A linguagem Java possui uma classe com diversos mtodos especializados em realizar clculos matemticos.
Para realizar esses clculos, so utilizados os mtodos da classe Math que devem apresentar a seguinte sintaxe:
Math.<nome do mtodo>(argumentos ou lista de argumentos)
No necessrio importar a classe Math, pois o mesmo faz parte do pacote java.lang
A classe Math define duas constantes matemticas:
o Math.PI valor de pi (3,14159265358979323846)
o Math.E logaritmos naturais (2.7182818284590452354)
Mtodo ceil
Tem como funo realizar o arredondamento de um nmero do tipo double para o seu prximo inteiro. Sua sintaxe
a seguinte:
Math.ceil(<valor do tipo double>)
Mtodo floor
utilizado para arredondar um determinado nmero, mas para seu inteiro anterior. Sua sintaxe :
Math.floor(<valor do tipo double>);
Mtodo max
Utilizado para verificar o maior valor entre dois nmeros, que podem ser do tipo double, float, int ou long. A sua
sintaxe a seguinte:
Math.max(<valor1>,<valor2>);
Mtodo min
Fornece o resultado contrrio do mtodo max, sendo ento utilizado para obter o valor mnimo entre dois
nmeros. Do mesmo modo que o mtodo max, esses nmeros tambm podem ser do tipo double, float, int ou long. A
sua sintaxe a mesma do mtodo max mudando apenas para Math.min
Mtodo sqrt
Utilizado quando h necessidade de calcular a raiz quadrada de um determinado nmero. O nmero que se deseja
extrair a raiz deve ser do tipo double. Veja sua sintaxe:
Math.sqrt(<valor do tipo double>);
Mtodo pow
Assim como possvel extrair a raiz quadrada de um nmero, tambm possvel fazer a operao inversa, ou
seja, elevar um determinado nmero ao quadrado ou a qualquer outro valor de potncia. Os nmeros utilizados
devero ser do tipo double. Sua sintaxe a seguinte:
Math.pow(<valor da base>.<valor da potncia>);
Mtodo random
utilizado para gerar valores de forma aleatria. Toda vez que o mtodo random chamado, ser sorteado
um valor do tipo double entre 0.0 e 1.0 (o valor 1 nunca sorteado). Nem sempre essa faixa de valores suficiente
numa aplicao real.
Exemplo:
(int) (Math.random()*100)
Com isso seriam gerados nmeros inteiros entre 0 e 99
Java e POO
Mtodo length
O mtodo length utilizado para retornar o tamanho de uma determinada string, incluindo tambm os espaos em
branco presentes nela. Esse mtodo retorna sempre um valor do tipo int. Veja sua sintaxe:
<String>.length();
Mtodo charAt
Usado para retornar um caractere de uma determinada string de acordo com um ndice especificado entre
parnteses. Esse ndice refere-se posio do caractere na string, sendo 0 o ndice do primeiro caractere. Sintaxe do
mtodo charAt a seguinte:
<String>.charAt(<ndice>);
Mtodos toUpperCase e toLowerCase
So utilizados para transformar todas as letras de uma determinada string em maisculas ou minsculas.
O mtodo toUpperCase transforma todos os caracteres de uma string em maisculos
O mtodo toLowerCase transforma todos os caracteres de uma string em minsculos
Sua sintaxe a seguinte:
<String>.toUpperCase() ou <String>.toLowerCase()
Mtodo substring
Retorna um cpia de caracteres de uma string a partir de dois ndices inteiros especificados, funcionando
basicamente da mesma forma que o mtodo charAt dentro de um lopping.
A sintaxe da substring a seguinte:
<String>.substring(<ndice inicial>,[<ndice final>]
Mtodo trim
Seu objetivo remover todos os espaos em branco que aparecem no incio e no final de uma determinada
string. Sero removidos apenas os espaos do incio e do fim da string; no sero removidos os espaos entre as
palavras. Sua sintaxe a seguinte:
<String>.trim();
Mtodo replace
utilizado para substituio de caracteres, ou grupo de caracteres, em uma determinada string. Para seu
funcionamento necessrio informar o(s) caractere(s) que deseja(m) substituir e por qual(is) caractere(s) ele ser(o)
substitudo(s). Caso no haja na string nenhuma ocorrncia do caractere a ser substitudo, a string original retornada,
isto , no ocorre nenhuma alterao.Veja sua sintaxe:
<String>.replace(<caracteres a serem substitudos>, <substituio>)
Mtodo valueOf
usado para converter diversos tipos de dados em strings. Esse mtodo aceita vrios tipos de argumento
(nmeros ou cadeia de caracteres) e transforma-os em strings. Sintaxe:
String.valueOf(<nome da varivel a ser convertida>)
Mtodo indexOf
usado para localizar caracteres ou substrings em uma String. Quando realizamos a busca de uma palavra
em um texto, estamos usando algo parecido com o funcionamento de indexOf, isto , ele busca uma palavra e retorna
a posio onde ela se encontra. Caso haja sucesso na busca, retornado um nmero inteiro referente a posio do
texto onde o caractere foi encontrado, ou a posio do texto onde se inicia a substring localizada. Casa haja insucesso
na busca retornado o valor inteiro -1. A sintaxe :
String.indexOf(<caractere ou substring a ser localizada, [posio inicial]>)
25
Java e POO
Os clculos matemticos, em especial os que envolvem multiplicao e diviso, podem gerar resultados com
muitas casas decimais.Isso nem sempre necessrio e esteticamente correto, pois apresentar um resultado com
muitas casas decimais no muito agradvel e legvel maioria dos usurios. Por exemplo: considere duas variveis
do tipo double x=1 e y=6. Ao realizar a diviso de x por y, aparece na tela o resultado 0.16666666666666666. Esse
resultado no o mais adequado para se apresentar. Seria mais conveniente mostrar o resultado com duas ou trs
casas decimais.
Para realizar a formatao, necessrio definir um modelo de formatao, conhecido pelo nome de pattern.
Considere pattern como o estilo de formatao que ser apresentado sobre um valor nmerico. Para definir o pattern,
so usados caracteres especiais
Caractere
Significado
0
Imprime o digito normalmente, ou caso ele no exista, coloca 0 em seu lugar.
Exemplo:
Seja as variveis int x=4, y=32 e z=154, ao usar o pattern 000, o resultado
impresso na tela seria x004, y032 e z154
#
Imprime o digito normalmente, desprezando os zeros esquerda do nmero.
Exemplo:
Sejam as variveis double x=0,4 e y=01.34, ao usar o pattern ##.##, o resultado
impresso na tela seria x.4, y1.34
.
Separador decimal ou separador decimal monetrio
Sinal de nmero negativo
CLASSE LOCALE
A linguagem Java tem como caracterstica ser utilizada no mundo todo. Em funo disso, um mesmo software
feito em Java pode ser utilizado por usurios espalhados pelo globo. Cada pas ou regio adota certos formatos para
representao monetria, apresentao de datas,etc. esses formatos so definidos pelo sistema operacional da
mquina e ficam armazenados como configuraes locais. O separador de casas decimais, por exemplo, pode ser um
ponto ou uma vrgula, dependendo da regio.
A classe Locale permite identificar certas propriedades da mquina em que o software est sendo executado.
Lista 5
Funes Matemticas e de String Formatao com a classe DecimalFormat
1) Crie uma classe para fazer o arredondamento dos seguintes valores: 5.2, 5.6 e -5.8 para o valor inteiro mais
prximo.
2) Crie uma classe para fazer o arredondamento dos seguintes valores: 5.2, 5.6 e -5.8 para o valor inteiro
anterior.
3) Crie uma classe para calcular o maior entre dois nmeros.
4) Crie uma classe para calcular o menor entre dois nmeros.
5) Crie uma classe para calcular a raiz quadrada dos nmeros 900 e 30.25.
6) Crie uma classe para calcular a potncia de 5.5 elevado a 2 e 25 elevado a 0.5.
7) Crie uma classe que gere 5 cartes de loteria com seis nmeros em cada um.
8) Formate os valores como se pede:
o Idade 38 para 038;
o Quantidade 9750 para 9.750;
o Estoque 198564 para 198.564
o Altura 1,74f para 1,74
o Peso 7025 para 70,25
o Valor 2583.75 para R$ 2.583,75
26
Java e POO
10) Crie uma classe para obter o tamanho da frase: Aprendendo Java.
11) Crie uma classe para obter os carateres de 11 a 14 da frase: Aprendendo Java.
12) Coloque a palavra ARROZ em minscula, a palavra batata em maiscula e a palavra SaLaDa em minscula.
13) Crie uma classe que retorne trechos de caracteres definidos por intervalos pr-determinados.
14) Crie um programa que retire espaos em branco antes e depois de uma frase digitada pelo usurio.
15) Crie uma classe que utilize um mtodo para substituir o caracter a por u e o carater n por N e trocar os
espaos em branco por _ de uma frase digitada pelo usurio.
16) Crie uma classe que converta valores nmeros para string.
17) Crie uma classe que realize uma busca pelo caractere a.
DATA/HORA
Os recursos de data e hora devem ser suficientemente flexveis. O uso de datas e horas torna possvel a
criao de pginas que exibem informaes de maneira dinmica. Existem 11 classes diferentes para manipulao de
datas e horas.
As classes disponveis para a manipulao de data e hora pertencem a trs pacotes diferentes
java.util Date, Calendar, GregorianCalendar, TimeZone, SimpleTimeZone
java.text DateFormat, SimpleDateFormat, FormatSymbols
java.sql Date, Time, Timestamp
A classe Date existe em dois pacotes (util e sql), ambos com caractersticas e comportamentos diferentes
A diferena bsica entre as classes Date, DateFormat, SimpleDateFormat e Calendar a seguinte:
Date (pacote util) representa um instante de tempo, sem levar em considerao sua representao ou
localizao geogrfica, com preciso de milisegundos
DateFormat representa um data com formato String de acordo com um determinado fuso horrio e
calendrio
SimpleDateFormat permite a especificao de diferentes formatos para a data
Calendar representar um instante de tempo de acordo com um sistema particular de calendrio e fuso
horrio
CLASSE DATE
Para utilizar uma classe externa, necessrio que ela esteja na mesma pasta da aplicao ou fazemos sua
importao
import java.util.Date;
O compilador compreende que data ser um objeto declarado a partir da classe Date
Date data = new Date( );
Essa declarao indica que o objeto data ser inicializado com a data e hora atuais do sistema(default)
Para marcar o tempo, Java considera o nmero de milisegundos decorridos desde 1 de janeiro de 1970.
Cada segundo possui 1.000 milisegundos, cada minuto possui 60 segundos, cada hora possui 60 minutos e
cada dia possui 24 horas, para saber o correspondente em dias, basta multiplicar 1000 x 60 x 60 x 24
getTime() Esse mtodo retorna um inteiro do tipo long que permite representar milissegundos decorridos
O uso de getTime() permite realizar o clculo entre datas, bastando calcular a diferena entre os milissegundos
CLASSE DATEFORMAT
27
Java e POO
28
Java e POO
Lista 5
1) Crie uma classe que imprima um objeto data em uma JOptionPane.
2) Execute o seguinte exerccio que utiliza a seguinte informao: Java considera o nmero de milisegundos
decorridos desde 1 de janeiro de 1970. Cada segundo possui 1.000 milisegundos, cada minuto possui 60
segundos, cada hora possui 60 minutos e cada dia possui 24 horas, para saber o correspondente em dias,
basta multiplicar 1000 x 60 x 60 x 24.
3) Crie uma classe que utilize os seguintes mtodos:
getHours(); getMinutes();getSeconds();getTime();getTimezoneOffset().
Altere os valores da hora, dos minutos e dos segundos com seus respectivos mtodos.
4) Crie uma classe que formate as datas conforme os exemplos abaixo:
Formato Default = 18/05/2009
Formato SHORT = 18/05/09
Formato MEDIUM = 18/05/2009
Formato LONG = 18 de Maio de 2009
Formato FULL = Segunda-feira, 18 de Maio de 2009
5) Crie uma classe que formate a data conforme os exemplos abaixo:
dia/ms/ano com quatro dgitos, horas:minutos:segundos
dd/MM/yyyy, hh:mm:ss --->18/05/2009, 10:30:29
29
Java e POO
30
Java e POO
EXCEES
31
Java e POO
Excees so objetos que representam erros que podem ocorrer em um programa Java.
Java define uma srie de recursos da linguagem para lidar com excees, incluindo os seguintes:
Como tratar de excees no cdigo e recuperar-se elegantemente de problemas em potencial;
Como dizer Java e aos usurios dos mtodos que voc est esperando uma exceo em potencial;
Como criar uma exceo se voc a detectar;
Como o seu cdigo limitado, embora tornado-se mais robusto pelas excees.
As excees em Java so instncias de classes que herdam da classe Throwable. Uma instncia de uma classe
Throwable criada quando uma exceo lanada.
Throwable possui duas subclasses: Error e Exception
As instncias de Error so erros internos envolvendo a mquina virtual Java (o ambiente runtime). Esses
erros so raros e normalmente fatais.
A classe Exception caem em dois grupos gerais:
Excees de runtime (subclasses da classe RuntimeException), como ArrayIndexOutofBounds,
SecurityException e NullPointerException.
Outras excees, como EOFException e MalformedURLException
As excees de runtime normalmente ocorrem por causa do cdigo.
Uma ArrayIndexOutofBounds nunca deveria ser lanada se verificssemos os limites de um array.
Uma NullPointException no acontecer a menos que tentssemos usar uma varivel antes que ela tenha sido
configurada para conter um objeto.
Uma EOFException acontece, por exemplo, quando se est lendo um arquivo e o mesmo termina de forma
inesperada.
Uma MalformedURLException acontece quando uma URL no est no formato correto.
A maioria das classes de exceo faz parte do pacote java.lang (incluindo Throwable, Exception e
RuntimeException).
Muitos dos outros pacotes definem outras excees, e essas so usadas por toda a biblioteca de classes.
Em muitos casos,o compilador Java impe o gerenciamento de exceo quando tentamos usar mtodos que
utilizam excees, ento precisamos lidar com essas excees no cdigo ou ele simplesmente no ser compilado.
Exemplo de um erro:
XMLParser.java:32:Exception java.lang.InterruptedException must be caught or it must be declared in the
throws clause o f this method
No erro acima preciso pegar a exceo java.lang.InterruptedException ou ento declar-la na clusula
throws deste mtodo.
Um mtodo pode indicar os tipos de erros que possivelmente poderia lanar. Por exemplo, mtodos que lem de
arquivos poderiam potencialmente gerar erros IOException.
Pegar excees em potencial exige:
Que protejamos o cdigo que contm o mtodo que pode lanar uma exceo dentro de um bloco try
Que coloquemos a exceo dentro de um bloco catch
TRY-CATCH
Significa: Experimente este trecho de cdigo, que poderia causar uma exceo. Se ele for executado
corretamente, prossiga o programa. Se o cdigo lanar uma exceo, apanhe-a e trate dela.
Exemplo:
try{
float in = Float.parseFloat(input);
}
catch (NumberFormatException nfe){
System.out.println(input+ is not a valid number.);
}
Na instruo acima o mtodo de classe Float.parseFloat() poderia potencialmente lanar uma exceo do tipo
NumberFormatException, significando que o thread foi interrompido por algum motivo
32
Java e POO
33
Java e POO
}
}
}
Exemplo 2:
class HexRead {
String[] input = { "000A110D1D260219 ",
"78700F1318141E0C ",
"6A197D45B0FFFFFF " };
public static void main(String[] arguments) {
HexRead hex = new HexRead();
for (int i = 0; i < hex.input.length; i++)
hex.readLine(hex.input[i]);
}
void readLine(String code) {
try {
for (int j = 0; j + 1 < code.length(); j += 2) {
String sub = code.substring(j, j+2);
int num = Integer.parseInt(sub, 16);
if (num == 255)
return;
System.out.print(num + " ");
}
} finally {
System.out.println("**");
}
return;
}
}
Exemplo 3:
public class CalorieCounter {
float count;
public CalorieCounter(float calories, float fat, float fiber) {
if (fiber > 4) {
fiber = 4;
}
count = (calories / 50) + (fat / 12) - (fiber / 5);
assert count > 0 : "Adjusted calories < 0";
}
public static void main(String[] arguments) {
if (arguments.length < 2) {
System.out.println("Usage: java CalorieCounter calories fat
fiber");
System.exit(-1);
}
try {
int calories = Integer.parseInt(arguments[0]);
int fat = Integer.parseInt(arguments[1]);
int fiber = Integer.parseInt(arguments[2]);
CalorieCounter diet = new CalorieCounter(calories, fat,
fiber);
System.out.println("Adjusted calories: " + diet.count);
} catch (NumberFormatException nfe) {
System.out.println("All arguments must be numeric.");
System.exit(-1);
}
}
}
34
35
Java e POO
Java e POO
36
Java e POO
Ao lidar com arrays, podemos percorrer os elementos do array, em vez de lidar com cada element
individualmente. Isso torna o cdigo muito mais fcil de ler.
Arrays multidimensionais (matrizes)
Um uso comum de matrizes para representar os dados em uma grade x,y de elementos de array.
Java no aceita arrays multidimensionais, mas podemos conseguir a mesma funcionalidade declarando um
array de arrays. Esses arrays tambm podem conter arrays, e assim por diante, por tantas dimenses quantas forem
necessrias.
Exemplo:
Registrar um valor inteiro a cada dia por um ano e organizar esses valores por semana.
int[][] dias= new int[52][7];
Esse array de arrays contm um total de 364 inteiros, um para cada dia em 52 semanas. Poderiamos definir o
valor para o primeiro dia da dcima semana com a seguinte instruo:
dias[9][0]=14200;
Exemplo: Crie uma matriz 3 por 4 e inicialize seus valores.
public class Matriz {
public static void main(String[] args) {
/* declarando dois arrays do tipo int*/
int[] a1;
int[] a2;
/* instanciando os dois arrays */
a1 = new int[ 10 ]; // array com 10 posies de int
a2 = new int[ 30 ]; // array com 30 posies de int
/* imprimindo o tamanho dos array a1 e a2 */
System.out.println("a1 tamanho : " + a1.length);
System.out.println("a2 tamanho : " + a2.length);
37
/*
declarando,
instanciando
Java e POO
atribuindo
valores
ao
array
notas */
float[] notas = { 7.5f , 9.0f , 10.0f };
/* imprimindo as posies do array notas */
System.out.println("Notas : " + notas[0] + " - " +
notas[1] + " - " +
notas[2]);
/* simulando array bidimensional*/
int[][] matriz = new int[ 3 ][ 4 ];
System.out.println("Linhas da Matriz : " + matriz.length);
System.out.println("Colunas da Matriz : " + matriz[0].length);
matriz[0][0] = 1;
matriz[0][1] = 2;
matriz[0][2] = 3;
matriz[0][3] = 4;
matriz[1][0] = 5;
matriz[1][1] = 6;
matriz[1][2] = 7;
matriz[1][3] = 8;
matriz[2][0] = 9;
matriz[2][1] = 10;
matriz[2][2] = 11;
matriz[2][3] = 12;
/* Imprimindo o array */
for (int i = 0; i < matriz.length; i++){
for (int j = 0; j < matriz[0].length; j++){
System.out.print(matriz[i][j] + "\t");}
System.out.println();}
}
}
Lista - 7
VETOR MATRIZES
1) Criar um algoritmo que entre com dez nomes e imprima uma listagem contendo todos os nomes.
2) Criar um algoritmo que armazene nome e duas notas de 5 alunos e imprima uma listagem contendo nome, as
duas notas e a mdia de cada aluno. Mostre a situao de cada aluno, ou seja, aprovado ou reprovado.
3) Criar um algoritmo que armazene 5 nomes em um vetor. Ordenar e imprimir uma listagem em ordem
crescente.
4) Armazenar 15 nmeros inteiros em um vetor NUM e imprimir uma listagem numerada contendo o nmero e
uma das mensagens: par ou mpar.
5) Armazenar nome e salrio de 5 pessoas. Calcular o novo salrio sabendo-se que o reajuste foi de 8%.
Imprimir uma listagem com nome, salrio antigo e novo salrio.
6) Ler um vetor vet de 5 elementos e obter um vetor w cujos componentes so os fatoriais dos respectivos
componentes de v.
7) Crie um algoritmo que armazene 5 nmeros e gere um vetor com os quadrados destes nmeros.
8) Crie um algoritmo que armazene 5 nomes e faa a ordenao destes em orderm crescente.
38
Java e POO
39
40
Java e POO
Java e POO
41
Java e POO
o import java,util.*;
o import java,util.jar.*;
o import java,util.prefs.*;
Obs.: no se pode iniciar nomes de classes parciais, por exemplo, J* para importar todas as classes que
comeam por J.
Obs.: a importao de um grupo de classes no torna o seu programa mais lento nem o aumenta; somente as
classes realmente usadas no cdigo sero carregadas, conforme a necessidade.
Java permite se referir s constantes de uma classe pelo seu nome. Sendo assim, devemos fazer uma import
static o que torna disponveis as constantes especficas nesta classe.
Exemplo:
Color.black; Math.PI e File.separator.
Aps o import static java.lang.Math.*;
Exemplo:
import static java.lang.Math.*;
public class Constantes{
public static void main(String args[]){
System.out.println(PI: +PI);
System.out.println( +(PI*3));
}
}
Cuidado: Ao importar classes com mesmo nome de pacotes diferentes ser necessrio se referir a esta classe
pelo seu caminho completo. Exemplo: a classe Date existe nos pacotes: java.util e java.sql, sendo assim ao se referir
a classe Date do pacote java.util, utilize: java.util.Date.
Classe
Em Java, um programa composto de uma classe principal e quaisquer outras classes que sejam necessrias
para dar suporte a ela. Essas classes de suporte incluem qualquer uma daquelas na bibliotecas de classes Java de
que voc precisar.
Por padro, as classes herdam da classe Object. Ela a superclasse de todas as classes na hierarquia Java.
A palavra-chave extends usada para indicar a superclasse de uma classe, ou seja, fazer herana.
Exemplo:
public class Cadastro extends JFrame{//corpo da classe}
Objeto
Um objeto uma representao abstrata de uma entidade do mundo real, que tem um identificador nico,
propriedades embutidas e a habilidade de interagir com outros objetos e consigo mesmo. O estado do objeto um
conjunto de valores que os atributos do objeto podem ter em um determinado instante do tempo.
As classes definem a estrutura e o comportamento de um tipo de objeto, elas atuam como templates.
Todos os objetos criados a partir de uma classe so idnticos.
Quando declaramos variveis de qualquer tipo primitivo o espao em memria alocado como parte da
operao.
A declarao de uma varivel referncia a um objeto no aloca espao na memria. A alocao de memria
feita somente quando o objeto criado.
Exemplo:
Cadastro cad;
cad = new Cadastro();
O primeiro comando, a declarao, aloca apenas o espao suficiente para a referncia. O segundo, aloca o
espao para os atributos do objeto cad, somente aps a criao do objeto que seus membros atributos e mtodos
podem ser referenciados.
42
Java e POO
43
Java e POO
Com variveis de instncia, cada nova instncia da classe recebe uma nova cpia
das variveis de instncia que a classe define. Cada instncia, ento, pode alterar os valores dessas variveis de
instncia sem afetar quaisquer outras instncias. Com as variveis de classe, s existe uma cpia dessa varivel. A
alterao do valor dessa varivel o altera para todas as demais instncias.
Cada instncia da classe Cadastro possui seus prprios valores para sexo e idade. A varivel de classe nome e
rendaMinima, no entanto, possui apenas um valor para todos os membros do Cadastro: Cliente. Mude o valor de
nome, e todas as instncias de Cadastro so afetadas.
No caso da varivel de classe rendaMinima ela uma constante e no pode ser modificada, isto feito colocandose a palavra-chave final aps static.
Para acessar variveis de classe, use a mesma notao de ponto que as variveis de instncia. Para obter ou
alterar o valor da varivel de classe, podemos usar a instncia ou o nome da classe no lado esquerdo do ponto. As
duas linhas de sada no exemplo a seguir apresentam o mesmo valor:
Exemplo:
Cadastro cad = new Cadastro();
Sytem.out.println(O nome no Cadastro :+cad.nome);
Sytem.out.println(O nome no Cadastro :+Cadastro.nome);
Exemplo:
public class MembrosEstaticos {
/* Atributo esttico */
private static int contObjetos = 0;
public MembrosEstaticos () {
contObjetos++;
}
/* Mtodo esttico */
public static void numeroDeOjetos () {
System.out.println("Nmero de objetos instanciados
contObjetos);
}
}
Exemplo:
public class MembrosEstaticosApp {
public static void main (String[] args) {
for (int i = 1; i <= 10; i++) {
MembrosEstaticos me = new MembrosEstaticos();
/* chamada ao mtodo esttico */
me.numeroDeOjetos();
}
/* chamada ao mtodo esttico */
MembrosEstaticos.numeroDeOjetos();
}
}
44
"
Java e POO
Mtodos
As definies de mtodo possuem quatro partes bsicas:
O nome do mtodo;
Uma lista de parmetros;
O tipo de objeto ou primitivo retornado pelo mtodo;
O corpo do mtodo.
Obs.: o nome do mtodo e sua lista de parmetros correspondem a sua assinatura.
Obs.: Em Java podemos ter vrios mtodos na mesma classe com o mesmo nome, mas com diferenas nas
assinaturas. Essa prtica chamada de sobrecarga de mtodo.
A menos que um mtodo tenha sido declarado como void como seu tipo de retorno, o mtodo retorna algum
tipo de valor quando completado. O valor precisa ser retornado explicitamente em algum ponto de sada dentro do
mtodo, usando a palavra-chave return.
Exemplo:
tipoRetorno nomeMtodo (tipo1 arg1, tipo2 arg2, tipo3 arg3...){
//corpo do mtodo}
Quando chamamos um mtodo com parmetro de objeto, os objetos que passam para o corpo do mtodo so
passados por referncia. Qualquer modificao feito nos objetos dentro do mtodo persistem fora dele.
Mtodos de classe
Os mtodos de classe esto disponveis a qualquer instncia da prpria classe e podem estar disponveis a
outras classes. Alm disso, ao contrrio de um mtodo de instncia, uma classe no exige uma instncia da classe
para que seus mtodos sejam chamados.
Exemplo:
System.exit(0);
A classe System define um conjunto de mtodos teis durante a exibio do texto, recuperando informaes
de configurao e executando outras tarefas.
O mtodo exit(int) fecha uma aplicao com um cdigo de status que indica sucesso (0) ou falha(qualquer
outro valor).
Para definir mtodos de classe, use a palavra-chave static na frente da definio de mtodo.
Exemplo:
double x=Double.parseDouble(42);
parseDouble um mtodo de classe, pois no precisamos criar nenhum objeto para utiliz-lo.
Obs.: para passar argumentos a um programa Java, os argumentos devero ser anexados linha de comando
(prompt do MS-DOS) quando o programa for executado.
Exemplo:
java Cadastro Abril 450
// passados dois argumentos que so arrays de strings para o mtodo main().
Sendo assim, args[0]=Abril e args[1]=450.
Dentro do mtodo main() podemos tratar os argumentos que foram recebidos.
45
Java e POO
46
5, 7 ) );
5, 7, 3 ) );
8f, 2f ) );
5.3f, 7.9f, 3.1f ) );
8f, 4 ) );
Java e POO
Mtodos construtores
So chamados automaticamente quando os objetos dessa classe so criados.
Ao contrrio dos outros mtodos, um construtor no pode ser chamado diretamente. Java faz trs aes
quando new usada para criar uma instncia de uma classe.
Aloca memria para o objeto;
Inicializa as variveis de instncia desse objeto, seja para valores iniciais ou para um padro(0 para
nmeros, null para objetos, false para Booleanos ou 0\ para caracteres).
Chama o mtodo construtor da classe, que pode ser um dentre vrios mtodos.
Se uma classe no possui quaisquer mtodos construtores definidos, um objeto ainda ser criado quando o
operador new for usado em conjunto com a classe. Contudo, podemos ter de definir essas variveis de instancia ou
chamar outros mtodos que o objeto precise para inicializar-se.
Definindo mtodos construtores em sua prprias classes, possvel definir valores iniciais de
variveis de instncia, chamar mtodos com base nessas variveis, chamar mtodos em outros objetos e
definir propriedades iniciais de um objeto.
Tambm podemos sobrecarregar mtodos construtores, como pode fazer com mtodos normais, para criar um
objeto que tenha propriedades especficas com base nos argumentos fornecidos a new.
Os construtores se parecem muito com os mtodos normais, com trs diferenas bsicas:
Eles sempre tm o mesmo nome da classe.
Eles no tem um tipo de retorno.
Eles no podem retornar um valor no mtodo usando a instruo return.
Exemplo:
import javax.swing.*;
public class Cadastro extends JFrame{
String nome;
int idade;
char sexo;
Cadastro(String nome, int idade, char sexo){
this.nome=nome;
this.idade=idade;
this.sexo=sexo;}
}
Poderamos criar um objeto dessa classe com a seguinte instruo:
Cadastro cad = new Cadastro(Ana,32,F);
O objeto teria os seguintes valores:
cad.Nome=Ana;
cad.idade=32;
cad.sexo=F.
Polimorfismo por reescrita de mtodos
Java procura a definio de um mtodo na classe do objeto. Se no encontrar uma, ele passar para a
chamada de mtodo acima na hierarquia de classe, at que uma definio de mtodo seja encontrada. A herana de
mtodo permite definir e usar mtodos repetidamente em subclasses, sem ter de duplicar o cdigo.
Contudo, pode haver ocasies em que desejemos que um objeto responda aos memos mtodos, mas que
tenha um comportamento diferente quando esse mtodo chamado. Nesse caso, voc pode redefinir o mtodo. Para
redefinir um mtodo, defina um em uma subclasse com a mesma assinatura do mtodo em uma superclasse. Depois,
quando o mtodo for chamado, o mtodo da subclasse ser encontrado e executado no lugar daquele que se encontra
na superclasse.
47
Java e POO
Para reescrever um mtodo, basta criar um mtodo na sua superclasse que tenha
a mesma assinatura (nome e lista de argumentos) do mtodo definido pela superclasse da sua classe. Como Java
executa a primeira definio de mtodo que encontra, que combine com a assinatura, a nova assinatura esconde a
definio do mtodo original.
Exemplo:
class Imprima {
int x = 0;
int y = 1;
void imprimir() {
System.out.println("x " + x + ", y " + y);
System.out.println("Eu sou uma instncia da classe " +
this.getClass().getName());
}
}
Exemplo: Classe Executora
class SubImprima extends Imprima {
int z = 3;
public static void main(String[] arguments) {
SubImprima obj = new SubImprima();
obj.imprimir();
}
}
Exemplo: Correo com reescrita do mtodo acrescentando a varivel de instncia z.
class SubImprima extends Imprima {
int z = 3;
void imprimir() {
System.out.println("x " + x + ", y " + y + ",z "+z);
System.out.println("Eu sou uma instncia da classe " +
this.getClass().getName());
}
public static void main(String[] arguments) {
SubImprima obj = new SubImprima();
obj.imprimir();
}
}
Super
Normalmente, existem dois motivos para querermos definir um mtodo j implementado por uma superclasse:
Para substituir completamente a definio desse mtodo original;
Para aumentar o mtodo original com algum comportamento adicional.
A redefinio de um mtodo e a entrega de uma nova definio ao mtodo escondem a definio do mtodo
original. Entretanto, existem ocasies em que o comportamento deve ser acrescentado definio original, em vez de
substitu-la completamente, em especial quando o comportamento duplicado no mtodo original e no mtodo que o
redefine. Chamando o mtodo original no corpo do mtodo que o redefine, podemos acrescentar apenas o necessrio.
A palavra-chave super usada para chamar o mtodo original de dentro de uma definio de mtodo. Essa
palavra-chave passa a chamada de mtodo para cima na hierarquia.
Exemplo:
class SubImprima extends Imprima {
int z = 3;
void imprimir() {
System.out.println("x " + x + ", y " + y + ",z "+z);
System.out.println("Eu sou uma instncia da classe " +
this.getClass().getName());
super.imprimir();//chama o mtodo da superclasse
48
Java e POO
}
public static void main(String[] arguments) {
SubImprima obj = new SubImprima();
obj.imprimir();
}
}
Obs.: A palavra-chave super, semelhante palavra-chave this, um marcador de lugar para a superclasse da classe.
Pode-se us-la em qualquer lugar em que utiliza this, mas super refere-se superclasse, em vez do objeto atual.
THIS
Escopo a parte de um programa em que uma varivel ou outro tipo de informao existe, possibilitando o
uso de variveis em instrues ou expresses. Quando a parte que define o escopo tiver concludo sua execuo, a
varivel deixar de existir.
Varivel com escopo local s pode ser usada dentro do bloco em que foi definida.
Varivel de instncia se estende classe inteira, de modo que podem ser usadas por qualquer um dos
mtodos de instncia dentro da classe.
Ordem de busca da varivel verifica 1 no escopo atual (que poderia ser um bloco), depois em cada escopo
mais externo e, finalmente, na definio do mtodo atual. Se a varivel no for uma varivel local, ento Java verificar
uma definio dessa varivel como uma varivel de instncia ou de classe, na classe atual. Se a definio da varivel
assim no for encontrada, ela procurar em cada superclasse, uma por vez.
THIS - uma palavra chave usada num mtodo como referncia para o objeto corrente, ela tem o significado
de: o objeto para o qual este trecho de cdigo est sendo executado.
Refere-se ao objeto corrente quando usado no cdigo de um mtodo no esttico. Usado com freqncia para
passar uma referncia do objeto corrente num envio de mensagem para outro objeto.
A this B
A=this
Exemplo:
public class Teste{
int A=0;
public void Teste(int A){
this.A=A;}}//this.A refere-se a varivel de instncia
A palavra-chave this a nica forma de garantir que o valor inteiro A do mtodo Teste() ser passado para a
varivel inteira A da classe Teste.
A palavra this muito utilizada quando um dos parmetros do mtodo tem o mesmo nome que uma varivel
de instncia.
void saca (double quantidade){
double novoSaldo = this.saldo-quantidade;
this.saldo=novoSaldo;}
A palavra-chave this refere-se ao objeto atual, e podemos us-la em qualquer lugar onde uma referncia a um
objeto pudesse aparecer:
Em muitos casos, voc pode no ter de usar explicitamente, pois ela ser assumida. Por exemplo, voc pode
se referir a variveis de instncia e chamadas de mtodo definidas na classe atual simplesmente pelo nome, pois o
this implcito nessas referncias.
Exemplo:
t=x;
resetData(this);
49
Java e POO
This uma referncia instncia atual de uma classe. Devemos us-la apenas
dentro do corpo de uma definio de mtodo de instncia.
Os mtodos de classe que so declarados com a palavra-chave static no podem usar this.
Exemplo:
class ScopeTest{
int test=10;
void printTest(){
int test=20;
System.out.println(Test:+test);}
public static void main (String args[]){
ScopeTest st= new ScopeTest();
st.printTest();}}
Nessa classe, temos duas variveis com o mesmo nome e definio. A primeira, uma varivel de instncia,
possui o nome test e inicializada com o valor 10. A segunda uma varivel local com o valor de 20.
A varivel local test, dentro do mtodo printTest(), esconde a varivel de instncia test. Quando o mtodo
printTest() chamado de dentro do mtodo main(), ele indica que test igual a 20, embora haja uma varivel de
instncia igual a 10. Para evitar esse problema use this.test para se referir varivel de instncia e use apenas test
para se referir varivel local.
Exemplo:
public abstract class Pessoa {
private String identificacao;//varivel de instncia
private String nome; //varivel de instncia
private String dataNascimento; //varivel de instncia
private char sexo;//varivel de instncia
public Pessoa (String id, String nome, String datNasc, char sexo) {
this.nome = nome;//a varivel de instncia recebe nome
this.dataNascimento = datNasc; //a varivel de instncia
recebe datNasc
this.sexo = sexo;//a varivel de instncia recebe sexo
}
public void id (String id) {
this.identificacao = id;
}
public void nome (String nome) {
this.nome = nome;
}
public void dataNascimento (String dataNascimento) {
this.dataNascimento = dataNascimento;
}
public void sexo (char sexo) {
this.sexo = sexo;
}
public String id () {
return identificacao;
}
public String nome () {
return nome;
50
Java e POO
}
public String dataNascimento () {
return dataNascimento;
}
public char sexo () {
return sexo;
}
public String toString () {
return(nome + " | " + dataNascimento + " | " + sexo);
}
}
Encapsulamento
Mecanismo utilizado visando obter segurana, modularidade e autonomia para objetos;
Conseguido atravs da definio de visibilidade privada dos atributos, ganhando-se assim autonomia para
definir o que o mundo externo ao objeto poder visualizar e acessar, normalmente atravs de mtodos pblicos.
Dica: sempre defina os atributos de uma classe como privados, a no ser que tenha uma boa justificativa para
no serem
Modificadores de Visibilidade
Os modificadores usados com mais freqncia nos programas so aqueles que controlam o acesso a mtodos e
variveis: public, private e protected. Esses mtodos modificadores determinam quais variveis e mtodos de uma
classe so visvieis a outras classes.
Usando o controle de acesso, pode-se controlar como outras classes usaro suas classes. Algumas variveis e
mtodos em uma classe sero teis apenas dentro da prpria classe e devero ficar escondidos de outras que possam
interagir com essa classe. Esse processo chamado de encapsulamento. Um objeto controla o que o mundo exterior
pode saber a respeito dele e como o mundo exterior pode interagir com ele.
Encapsulamento o processo que impede que variveis de instncia sejam lidas ou modificadas por outras
classes. A nica maneira de usar essas variveis chamando mtodos da classe, se estiverem disponveis.
Java oferece quatro nveis de controle de acesso: public, private, protected e um nvel padro especificado sem o
uso desses modificadores de controle de acesso.
Public estes atributos e mtodos so sempre acessveis em todos os mtodos de todas as classes. Este o
nvel menos rgido de encapsulamento, que equivale a no encapsular.
Private estes atributos e mtodos so acessveis somente nos mtodos (todos) da prpria classe. Este o nvel
mais rgido de encapsulamento.
Protected estes atributos e mtodos so acessveis no pacote, nos mtodos da prpria classe e suas subclasses
<default> - Visvel no pacote e na classe. Variveis e mtodos declarados sem quaisquer modificadores.
TABELA RESUMO
Visibilidade
Public Protected Default Private
Da mesma classe
Sim
Sim
Sim
Sim
De qualquer classe no mesmo pacote
Sim
Sim
Sim
No
De qualquer classe fora do pacote
Sim
No
No
No
De uma subclasse no mesmo pacote
Sim
Sim
Sim
No
De uma subclasse fora do mesmo Sim
Sim
No
No
pacote
Classes, mtodos e variveis finais
51
Java e POO
O modificador final usado com classes, mtodos e variveis para indicar que no sero alterados. Ele possui
diferentes significados para cada elemento que pode se tornar final, como a seguir:
Uma classe final no pode ser subclassificada(extendida);
Um mtodo final no pode ser redefinido por quaisquer subclasses;
Uma varivel final no pode mudar de valor.
Exemplo: Varivel final (constantes)
public static final int voltas=10;
static final String titulo= Revista;
Exemplo: Mtodo final
public final void get Assinatura(){
//corpo do mtodo}
Obs.: O motivo mais comum para declarar um mtodo final fazer com que a classe seja executada com mais
eficincia. Normalmente, quando o ambiente de runtime Java executa um mtodo, ele primeiro verifica a classe atual
para encontrar o mtodo, depois verifica sua superclasse e prossegue subindo na hierarquia de classes, at que o
mtodo seja encontrado. Esse processo sacrifica alguma velocidade em nome da flexibilidade e facilidade de
desenvolvimento.
Se um mtodo final, o compilador Java pode colocar o bytecode executvel do mtodo diretamente em
qualquer programa que chame o mtodo. Afinal, o mtodo nem sequer mudar devido a uma subclasse que o
redefine.
Exemplo: Classe final
public final class Cadastro{
//corpo da classe}
Obs.: Todos os mtodos em uma classe final so automaticamente finais.
Classes e mtodos abstratos
Em uma hierarquia de classes, quanto maior a classe, mais abstrata sua definio. Uma classe no topo de
uma hierarquia de outras classes s pode definir o comportamento e os atributos comuns a todas as classes.
Comportamentos e atributos mais especficos entraro em algum lugar mais baixo na hierarquia.
Quando estivermos fatorando o comportamento e os atributos comuns durante o processo de definio de uma
hierarquia de classes, s vezes podemos nos deparar com uma classe que nem sequer precisar ser instanciada
diretamente. Em vez disso, esse tipo de classe serve como um lugar para manter comportamentos e atributos comuns,
compartilhados por suas subclasses.
Essas classes so chamadas classes abstratas e so criadas usando o modificador abstract.
Exemplo:
public abstract class Pessoa{
//....
}
Um exemplo de uma classe abstrata java.awt.JComponent, a superclasse dos componentes da interface
grfica com o usurio. Como diversos componentes herdam dessa classe, ela contm mtodos e variveis teis a
cada uma delas. Contudo, no existe algo como um componente genrico que possa ser acrescentado a uma
interface, de modo que nunca precisa criar um objeto Component em um programa.
As classes abstratas podem conter tudo o que um classe normal pode conter, incluindo mtodos construtores,
pois suas subclasses ter de herdar os mtodos. As classes abstratas tambm podem conter mtodos abstratos, que
so assinaturas de mtodo sem implementao. Esses mtodos so implementados em subclasses de classe
abstrata. Os mtodos abstratos so declarados com o modificador abstract. No podemos declara um mtodo abstrato
em uma classe no abstrata. Se uma classe no tiver nada alm de mtodos abstratos, ser melhor usar uma
interface.
Exemplo:
52
Java e POO
Java e POO
abstract
abstract
abstract
abstract
abstract
abstract
}
Exemplo:
public class Alunos {
private Aluno[] alunos;
private int posNovoAluno = 0;
public Alunos() {
alunos = new Aluno[10]; }
public void insere (int mat, String nome, float n1, float n2, float n3){
alunos[posNovoAluno] = new Aluno(mat, nome, n1, n2,n3);
posNovoAluno++;
}
public void escreve () {
String linha = "****************************************************";
System.out.println(linha);
for (int i = 0; i < posNovoAluno; i++) {
alunos[i].escreve(); }
System.out.println(linha);
}
/* Classe Interna : Aluno */
class Aluno {
int matricula;
String nome;
float nota1, nota2, nota3;
Aluno (int mat, String nome, float n1, float n2, float n3) {
this.matricula = mat;
this.nome = nome;
this.nota1 = n1;
this.nota2 = n2;
this.nota3 = n3;
}
void escreve() {
String linha = "_________________________________________________";
System.out.println(linha +
"\nMatrcula : \t" + matricula +
"\nNome : \t" + nome +
"\nNotas : \t" + nota1 + "\t" + nota2 + "\t" + nota3 +
"\n" + linha);
}
}
}
GETTERS E SETTERS
54
Java e POO
55
Java e POO
56
LISTA 8
57
Java e POO
Java e POO
Desenvolver as classes abaixo e fazer um principal e criar 2 objetos de cada classe, alimentar os
objetos e exibir o relatrio.
Na classe Funcionario, o mtodo getSalario() calcula o salrio do funcionrio. O mtodo
exibeDados() exibe as informaes do funcionrio, inclusive o salrio aproveitando o mtodo getSalario().
Funcionrio
String nome
int horastrabalhadas
float valorhora
void setNome(String nome)
String getNome()
void setHorasTrabalhadas(int ht)
int getHorasTrabalhadas()
void setValorHora(float vh)
float getValorHora()
float getSalario()
void exibeDados()
Na classe conta, o mtodo deposito(float qtd) adiciona a quantidade passada por parmetro ao saldo
atual. O mtodo saque(float qtd) retira do saldo a quantidade indicada no parmetro, caso o saldo seja
insuficiente deve retornar o valor 1, caso contrrio retorna 0.
Conta
String conta
String cliente
float saldo
void setCoonta(String cont)
String getConta()
void setCliente(String cliente)
String getCliente()
void setSaldo(float sal)
float getSaldo()
void deposito(float qtd)
int saque(float qtd)
void relatorio()
Na classe Produto, o mtodo getSituacao() retorna 0 se o estoque estiver acima do estoque mnimo
permitido, caso contrrio retorna 1. No mtodo relatorio(), caso o estoque esteja abaixo do permitido deve
se informado que necessita comprar mais produto.
Produto
int codigo
String nome
float preo
int estoque
int estoquemin
void setCodigo(int cod)
int getCodigo()
void setNome(String nome)
58
Java e POO
String getNome()
void setPreco(float p)
float getPreco()
void setEstoque(int est)
int getEstoque()
void setEstoqueMinimo(int estmin)
int getEstoqueMinimo()
int getSituacao()
void relatorio()
59