JAVA
• Linguagem
• Ambiente de Desenvolvimento
• Runtime ou Java Virtual Machine
JAVA
Características
•
•
•
•
•
•
•
Parecida com C++
Compilada
Portável
Orientada a objetos
Segura
Suporte a concorrência
Suporte a sistemas distribuídos
Máquina Virtual
•
•
•
•
Máquina emulada em software
Java Specification Language
Bytecodes
JVM provê: conjunto de instruções,
conjunto de registradores, formato dos
bytecodes, gerenciamento automático de
memória.
Ambiente de Runtime
Programa Simples
1 //Exemplo de comentario
2 public class AloMundo {
3
public static void main (String args[ ]) {
4
System.out.println("Alo Mundo!");
5
}
6 }
Exercício
1 //Exemplo de comentario
2 public class AloMundo {
3
public static void main (String args[ ]) {
4
System.out.println("Alo Mundo!");
5
}
6 }
Abra uma janela DOS na pasta do arquivo
AloMundo.java. Compile com o javac AloMundo.java
e execute com java AloMundo.
Classes e Pacotes
• Classe é um termo para um módulo que
possui funcionalidade
• O Java possui várias classes que
implementam diversas funções
• Pacote é um grupo de classes relacionadas
Pacote java.lang
String
Math
Integer
Thread
Documentação JAVA API
• Em HTML e descreve:
– Hierarquia da classe
– Propósito geral
– Lista resumida de variáveis, construtores e
métodos
– Lista detalhada com descrição de variáveis,
contrutores e métodos
Declaração
• Uma linha de código terminada com ;
x=5*i;
if (x<50) resposta = "i é menor que 10";
for (int z=0;z<10;z++) a[z] = z;
Bloco
• Um grupo de declarações entre {}
x=5*i;
if (x<50) {
resposta = "i é menor que 10";
}
for (int z=0;z<10;z++) {
a[z] = z;
System.out.println(z);
}
Identificadores
• São nomes utilizados para identificar
classes, variáveis e métodos
1 //Exemplo de comentario
2 public class AloMundo {
3
public static void main (String args[ ]) {
4
System.out.println("Alo Mundo!");
5
}
6 }
Tipos Básicos
• boolean verdade = true;
• String texto = "aeiou";
•
•
•
•
•
char letra = ‘a’;
int idade = 31;
long premio = 200000;
float peso = 80.5
double distancia = 1200.34
Convenções de código
•
•
•
•
•
•
•
Classe: ContaBancaria, Curso
Interface: Conta
Métodos: saque(), adicioneCurso
Variável: clienteAtual
Constantes: VELOCIDADE_MAXIMA
Use {} nas estruturas de controle
Espaçamento
Variáveis
•
•
•
•
Tipos primitivos
Tipos de referência
Locais: dentro de métodos
Atributos ou variáveis membro: dentro da
classe
Inicializando variáveis
• Nenhuma variável pode ser utilizada antes
de ser inicializada.
• Variáveis locais devem ser inicializadas
manualmente.
• Variáveis membro são iniciadas
automaticamente.
Operadores
•
•
•
•
•
•
+ * / %
== != !(expressão lógica)
&& ||
< > <= >=
(expressão lógica) ? valor1:valor2
Concatenação de Strings
• O operador + concatena Strings, criando
uma nova String
String saudacao = "Dr. ";
String nome = "Pedro " + "Silva";
String titulo = saudacao + nome;
Casting
•
•
•
•
int d
long a
a = d; // faz uma conversão implícita
d = (int) (a); // precisa conversão explícita
Instruções Condicionais
• Comando if
if
(nota > 7 && falta < 18) {
aprovado=true;
} else {
aprovado=false;
}
Instruções Condicionais
• Comando switch
switch (valor) {
case 1:
instruções;
break;
case 2:
instruções;
break;
default:
instruções;
break;
}
Instruções de Loop
• Permite a execução repetida de blocos
for (int i=0; i<10; i++) {
instrução ou bloco;
}
Loop
// testa antes de executar
while (boolean) {
instrução ou bloco;
}
// executa pelo menos uma vez
do {
instrução ou bloco;
} while (boolean test);
Controles Especiais
• break ou break com rótulo
• continue ou continue com rótulo
Exercício
1.
Crie um aplicação chamada Fatorial que imprima o
fatorial de um numero. Para pedir um numero: int n =
Integer.parseInt(JOptionPane.showInputMessage
("digite um numero"));
2.
3.
Faça um programa que peça um número ao usuário. O
programa deve dizer se o número é par ou impar. Se o
número for par, o programa deve mostrar os números
pares menores.
Faça um programa que peça um número ao usuário e
diga se é um número primo. Números primos são
divisíveis apenas por 1 e pelo próprio número.
Exercício
4.
5.
Escreva o método main da classe Tabuada que imprime
os valores multiplos de m menores que n. O usuário deve
informar os valores de m e n. O valor de n deve ser
maior que m. Por exemplo: Quais são os múltiplos de 2
(m) ate 8 (n)? Resposta: 0, 2, 4, 6
Escreva uma classe chamada
AreaDoTrianguloRetangulo. Peça para o usuário digitar
os valores da base e da altura do triângulo e mostre o
valor da área e da hipotenusa. A área do triângulo é igual
a base * altura / 2. A hipotenusa é igual a raiz quadrada
da soma dos quadrados da base e altura (catetos). Dica:
use a função Math.sqrt(n) para calcular a raiz.
Criando uma classe
• Definir um tipo que representa uma data
class MinhaData {
int dia;
int mes;
int ano;
}
• Declarando uma variável deste tipo
MinhaData meuNascimento, seuNascimento;
Criando um objeto
• Objetos são criados com a função new
MinhaData meuNascimento;
meuNascimento = new MinhaData( );
• As variáveis que referenciam objetos
servem para acessar sua estrutura
meuNascimento.dia = 26;
meuNascimento.mes = 11;
meuNascimento.ano = 1960;
Exercício
1.
2.
Um ponto pode ser caracterizado por uma coordenada x
e y. Defina uma classe chamada Ponto que representa
esta idéia. As coordenadas são valores inteiros.
Escreva uma classe Main com o método main ( ) dentro
da classe; declare duas variáveis do tipo Ponto. Chame
as variáveis de inicio e fim. Crie os objetos usando new
Ponto( ). Atribua o valor 10 a x e y do objeto inicio.
Mostre seus valores do objeto inicio. Atribua o valor 20
para a variável x do objeto fim, e o valor 30 para y do
objeto fim. Mostre os valores x e y do objeto fim.
Arrays
• Um array é uma coleção de variáveis do
mesmo tipo.
• A coleção é acessada por índices
• Arrays podem ser de qualquer tipo
primitivo ou classe
char s[]; ou
Ponto p[]; ou
char[] s;
Ponto[] p;
Criando Arrays
• Arrays são criados com a função new
s = new char[20];
p = new Ponto[100];
• Arrays de objetos não criam os objetos
automaticamente. Os objetos são criados
separadamente.
p[0] = new Ponto();
p[1] = new Ponto();
Inicializando Arrays
Ponto array[] = {
new Ponto(),
new Ponto(),
new Ponto()
}; // equivalente ao código abaixo
Ponto array[] = new Ponto[3];
array[0] = new Ponto();
array[1] = new Ponto();
array[2] = new Ponto();
Arrays Multi-dimensionais
int twoDim [ ] [ ] = new int [4][ ];
// arrays de mesmo tamanho
twoDim[0] = new int [5];
twoDim[l] = new int [5];
// ou arrays de tamanhos diferentes
twoDim[0] = new int [2];
twoDim[1] = new int [4];
twoDim[2] = new int [6];
twoDim[3] = new int [8];
Tamanho e redimensionamento
• O tamanho de um array está no seu attributo
length
• Você não pode alterar o tamanho de um
array, mas pode usar a mesma variável para
criar um novo e maior array.
Copiando Arrays
• Use o método arrayCopy da classe System
int dados[ ] = { 1, 2, 3, 4, 5, 6 };
int contagem[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
System.arraycopy(dados, 0,
contagem, 0,
dados.length);
Exercício
1.
2.
Crie uma classe chamada Media. No método main,
declare uma variável chamada notas do tipo array de int
para 5 notas. Após o usuário informar as notas, o
programa deve calcular e mostrar a média.
Faça uma classe para perguntar 5 questões ao usuário.
As perguntas devem ser definidas como um array de
String. As respostas devem ser salvas em um array de
Strings também. Ao final das perguntas o programa deve
mostrar as perguntas e respostas.
Classes e Objetos
• Princípios dos Objetos
–
–
–
–
Organizar dados e algoritmos
Encapsulamento
Polimorfismo
Herança
Classes e Objetos
•
•
•
•
O elemento fundamental em Java é a classe
Classe é um modelo para criar objetos
Define a implementação dos métodos
Todos os métodos tem que pertencer a uma
classe
• As variáveis definidas na classe são
chamadas membros (atributos)
Exemplo
class EmpregadoInfo {
String nome;
String cargo;
String departamento;
}
Para instanciar um objeto, crie e atribua valores aos membros:
EmpregadoInfo emp = new EmpregadoInfo( );
emp.nome = "Marcos";
emp.cargo = "gerente";
emp.departamento = "RH";
Métodos
• Método mostra() implementado na classe
EmpregadoInfo
class EmpregadoInfo {
String nome;
String cargo;
String departamento;
void mostra( ) {
System.out.println(nome + " é " +
cargo + " do " + departamento);
}
}
Executando métodos
Este método imprime os dados dos membros da classe quando o objeto
foi criado e instanciado.
EmpregadoInfo empregado = new EmpregadoInfo( );
emp.nome = "Marcos";
emp.cargo = "gerente";
emp.departamento = "RH";
empregado.mostra( );
A idéia que métodos compõe um objeto e podem interagir intimamente
com seus dados é um conceito de orientação a objeto.
Definindo métodos
• Contém o código que manipula o estado do
objeto
• Recebe um número de parâmetros
• Possue um tipo de retorno
• Sintaxe:
<modificador> <tipo_retorno> <nome>
([<parâmetros>])
[throws <exception>] { .... }
Exemplos de métodos
public class SalarioEmpregado {
private double salario;
public void aumentaSalario (double valor){
salario = salario + valor;
}
public double calculaImposto() {
double imposto = 0;
if (salario > 1200) {
imposto = salario * 0.15;
} else if (salario > 2900) {
imposto = salario * 0.27;
}
return imposto;
}
} // fim da classe
Passagem por valor
• Toda passagem de argumentos é por valor,
ou seja, uma cópia vai para o método
chamado.
• Quando o argumento é um objeto, o valor
do argumento é uma referência ao objeto. O
método pode mudar o conteúdo do objeto,
mas nunca a referência.
Referência this
• this é uma referência ao objeto corrente
• this acessa todas as variáveis membro e métodos
do objeto corrente
• this é utilizado quando outro objeto precisa
conhecer o objeto corrente
Exemplo usando this
public class MinhaData {
int dia, mes, ano;
public void convidaAniversario( ) {
Aniversario.envieConvite( this );
}
}
public class Aniversario {
public static void envieConvite ( MinhaData d ) {
System.out.print( "Convido para meu aniversario " );
System.out.print( " será dia " + d.dia );
System.out.print( " mes " + d.mes );
System.out.print( " ano " + d.ano );
}
}
Ocultando Dados
public class Data {
private int dia, mes, ano;
}
public class OutraClasse {
public static void main(String args[ ]) {
Data d = new Data( );
d.dia = 21; // ilegal!
}
}
Encapsulamento
• Protege os dados de um objeto de
modificação imprópria, forçando o usuário
a ter acesso aos dados por um método.
• Assegura que os dados sempre sejam
tratados da mesma forma.
Sobrecarregando Métodos
• Cada método possui uma assinatura.
• A assinatura é composta pelo:
– Nome do método
– Número e tipo de seus argumentos
• Permite escrever vários métodos com o
mesmo nome em uma classe que fazem o
mesmo trabalho, mas recebem argumentos
diferentes.
Sobrecarregando Métodos
public void println(int i)
public void println(float f)
public void println( )
Exercício
1.
2.
Crie uma classe chamada Lampada com um atributo boleano para
indicar se ela está acesa ou apagada. Defina um método para ligar,
um para apagar e outro para mostrar o estado da lampada. No
método main crie um objeto para classe Lampada, ligue a lampada e
mostre seu estado.
Crie uma classe chamada ContaBancaria.java que represente
atributos e operações de uma conta bancária. A conta deve ter os
atributos cliente (String), número (int), saldo (double) e especial
(boolean). A conta deve ter as operações depósito e saque. A
operação depósito só pode aceitar valores positivos. A operação
saque só pode aceitar valores menores que o saldo, mas se a conta
for especial ela pode aceitar valores menores que o saldo mais 1000
reais.
Exercícios
3.
Crie uma classe chamada Terminal que no método main faça o
seguinte: criar um objeto para classe ContaBancaria, definir valores
para seus atributos, depositar 2000 reais, sacar 1200 reais, mostrar o
saldo, sacar 1000 reais, definir como conta especial, sacar 1000 reais
novamente e mostrar o saldo.
Construindo e Inicializando
Objetos
• Utilizar a função new NomeDaClasse()
• O que acontece?
– Aloca espaço em memória para o objeto
– Inicializa as variáveis da classe
– Executa o construtor
Construindo e Inicializando
Objetos
Construtores
•
•
•
•
•
Métodos especiais
Possuem o mesmo nome que a classe
Recebem ou não argumentos
Não possuem tipo de retorno
Os argumentos são fornecidos entre os
parenteses que seguem o nome da classe
• Toda classe tem um construtor
Exemplo de Construtores
public class Empregado {
private String nome;
private int salario;
public Empregado(String n, int s) {
nome = n;
salario = s;
}
public Empregado(String n) {
this(n, 0);
}
public Empregado( ) {
this("Não definido");
}
}
Usando diferentes construtores
Empregado objeto1 = new
Empregado("Pedro",1500);
Empregado objeto2 = new
Empregado("Paulo");
Empregado objeto3 = new Empregado();
Pacotes
• Pacote são grupos de classes relacionadas
• Use a declaração de pacote package para
relacionar a classe a um pacote
• Use a declaração de importação import para
indicar ao compilador onde achar as classes
Exercício
1. Redefina a classe Lampada com um construtor que cria uma lampada
no estado aceso (boleano igual a true).
2. Redefina a classe Lampada no pacote auto.eletrico.
3. Escreva a classe Carro no pacote auto com 2 atributos do tipo
Lampada: um chamado farolEsquerdo e outro farolDireito. Defina
métodos na classe Carro para acender e apagar os faróis e um método
chamado mostra() que mostra se os faróis estão acesos ou não. No
método main crie um objeto para classe Carro, execute o método que
acende os faróis e execute o método mostra(). Compile e execute a
classe Carro. Onde está a classe Carro e a classe Lâmpada em relação
a pasta raiz?
O que é Herança?
• A partir de um modelo de uma classe criar
uma versão especializada do modelo.
• Por exemplo, você tem um modelo para
classe Empregado e quer criar um modelo
para Gerente. O Gerente é um Empregado
com características adicionais.
Modelo da Classe Empregado
public class Empregado {
String nome;
Date admissao;
Date nascimento;
}
Modelo da Classe Gerente
public class Gerente {
String nome;
Date admissao;
Date nascimento;
String cargo;
int nivel;
String departamento;
Empregado surbordinados[ ];
}
A palavra chave Extends
public class Empregado {
String nome;
Date admissao;
Date nascimento;
}
public class Gerente extends Empregado {
String cargo;
int nivel;
String departamento;
Empregado surbordinados[ ];
}
Herança
• Se Gerente estende a classe Empregado, ele
tem todas as variáveis e métodos da classe
Empregado.
• Qualquer operação válida para Empregado
também é válida para Gerente
Herança Simples
• Java permite estender somente uma classe
• Herança simples torna o código menos
confuso
• Você pode ter vários níveis na hierarquia
• Construtores não são herdados
Polimorfismo
• Criar uma classe a partir de outra com
herança permite o polimorfismo do objeto,
ou seja, manipular o objeto por classes
diferentes.
• Um objeto tem só uma forma, mas pode ser
referenciado pelas superclasses.
• Em Java a classe Object é a classe pai para
todas as outras classes
Polimorfismo
Object geral;
geral = new String("texto");
geral = new Empregado();
Isso é possível, pois Empregado é uma subclasse de Object.
public class Empregado extends Object
public class Gerente extends Empregado
Java permite referênciar um objeto com uma variável que é um dos tipos
da classe pai.
Empregado teste = new Gerente( );
Coleções Heterogêneas
Empregado equipe[ ] = new Empregado [1024];
equipe[0] = new Gerente( );
equipe[l] = new Empregado( );
Polimorfismo de Argumentos
// na classe Empregado
public Imposto calculaImposto(Empregado e) {
//calcula e retorna a faixa de imposto
}
// em outra classe
Gerente objeto = new Gerente( );
Imposto ir = calculaImposto (objeto);
Operador instanceof
• Esta função permite verificar se um objeto é um
instância de determidada classe.
public void method(Empregado emp) {
if (emp instanceof Gerente) {
// traz o salário
}
else if (emp instanceof Contratado) {
// traz o valor da horas
}
else {
// empregado normal
}
}
Convertendo Objetos
public void method(Empregado emp) {
if (emp instanceof Gerente) {
Gerente objeto = (Gerente)emp;
System.out.println("This is the Gerente of
objeto.departamento);
}
// resto da operação
}
" +
Sobrescrevendo Métodos
• Permite redefinir o comportamento de um
método herdado da classe pai
• Deve ter a mesma assinatura do método na
classe pai
Sobrescrevendo Métodos
public class Empregado {
String nome;
int salario;
public String getDetalhes( ) {
return "Nome: " + nome + "\n" +
"Salario: " + salario;
}
}
public class Gerente extends Empregado {
String departamento;
public String getDetalhes( ) {
return "Nome: " + nome + "\n" +
"Gerente de " + departamento;
}
}
Sobrescrevendo Métodos
Empregado objetoEmpregado = new Empregado( );
Gerente objetoGerente = new Gerente( );
Ao invocar objetoEmpregado.getDetalhes( ) e objetoGerente.getDetalhes
( ), eles executarão, respectivamente, o método getDetalhes( ) da classe
Empregado e getDetalhes ( ) da classe Gerente.
Sobrescrevendo Métodos
Empregado objeto = new Gerente( );
objeto.getDetalhes ( )
o método a ser chamado será o da classe Gerente, pois você apenas criou
uma variável do tipo Empregado, mas o objeto é um Gerente.
Regras para Sobrescrever
• Tipo de retorno deve ser igual ao pai
• Não pode ser menos acessível que o pai
• Não pode lançar exceções diferentes
Sobrescrevendo Métodos
public class Pai {
public void metodo ( ) {
}
}
public class Filho extends Pai {
private void metodo ( ) { // ilegal
}
}
Referência super
• Está disponível em todos os métodos nãoestáticos e construtores.
• É uma referência ao objeto pelo modelo da
superclasse.
• A execução de super.metodo() utiliza a
implementação do método na superclasse.
super
public class Gerente extends Empregado {
private String departamento;
public String getDetalhes( ) {
// chama metodo da superclasse
return super.getDetalhes( ) + “ Departamento:
" + departamento;
}
}
Construtores da classe Pai
• Você pode construir parte ou todo objeto
pelo modelo da classe pai.
• Invoque o construtor da classe pai com
super na primeira linha do construtor da
classe filho.
Construtor da classe Pai
public class Empregado {
String nome;
public Empregado(String n) {
nome = n;
}
}
public class Gerente extends Empregado {
String departamento;
public Gerente(String s, String d) {
super( s );
departamento = d;
}
}
Exercício
1.
2.
1. Redefina a abstração de uma conta corrente em duas
classes: ContaSimples e ContaEspecial. A classe
ContaSimples tem os atributos cliente, número e saldo.
As operações são: public void deposito(double valor),
public void saque(double valor), public boolean
temSaldo(double valor) e public void mostraSaldo(). A
classe ContaEspecial, além de ser uma conta simples,
tem um limite que é uma variável do tipo double. A
operação temSaldo da ContaEspecial deve levar em
conta este limite.
Faça uma classe chamada GerenciaConta, e no método
main teste as classes ContaSimples e ContaEspecial.
Características da Linguagem
•
•
•
•
•
•
Variáveis, métodos e código estáticos
Orientado a objetos
Classes, métodos e variáveis final
Classes abstratas e interfaces
Controle de acesso
Classes internas e wrappers (envelopes)
Variáveis Estáticas
• Variáveis compartilhadas entre todas as
instâncias de uma classe
• É semelhante a uma variável global em
outras linguagens
• Se a variável não for private, ela pode ser
acessada pelo nome da classe:
NomeDaClasse.nomeDaVariavel
Variáveis Estáticas
public class CEP {
public static final int R_XV = 89200;
public static final int R_AMERICA = 89201;
}
public class Correio {
public void metodo( ) {
int x = CEP.R_XV;
}
}
Métodos Estáticos
public class Quadrado {
public static int calculaArea(int x, int y) {
return x * y;
}
}
public class Grafico {
public static void main( String[] a) {
int a = 9;
int b = 10;
int c = Quadrado.calculaArea(a, b);
System.out.println("Area é igual a " + c);
}
}
Código Estático
• Uma classe pode conter blocos de código
estático.
• Este código executa apenas uma vez quando
a classe é carregada.
• Se houver mais que um bloco estático, eles
são executados na ordem que aparecem na
classe.
Exercícios
1. Defina uma classe chamada Matemática com
dois métodos estáticos: um método chamado
maior(int x, int y) que retorna o valor do maior
parâmetro e outro método chamado menor(int x,
int y).
2. Crie uma classe Compara onde o usuário
informa dois valores e o programa mostra o
valor maior e o menor usando os métodos da
classe Matemática do exercício anterior.
Dados e métodos OO
•
•
•
•
•
Um sistema OO consiste de objetos
Objetos são criados a partir das classes
Os atributos são definidos por variáveis
O comportamento é definido pelos métodos
Os objetos da mesma classe tem as mesmas
características, mas cada objeto é diferente
Orientados a Objetos
public class Carro {
String cor;
String modelo;
public Carro (String cor, String modelo) {
this.cor = cor;
this.modelo = modelo;
}
public void mostra( ) {
System.out.println ("Isto é um " + modelo + cor +
".");
}
}
Orientados a Objetos
Car vectra = new Car("Branco","Vectra");
Car corsa = new Car("Prata","Corsa");
A orientação a objetos é ilustrada pelo fato que ambos os objetos têm
dados separados, embora ambos sejam carros.
vectra.mostra( ) imprimirá "Isto é um Vectra Branco."
corsa.mostra( ) imprimirá "Isto é um Corsa Prata."
Classes final
• Um classe final não pode ser extendida
• Não podemos declarar uma subclasse para
uma classe final
public final class Caixa {
...
}
public class Caixa2 extends Caixa { //ilegal
Métodos final
• Um método final de uma classe não pode
ser sobrescrito nas suas subclasses
• Segurança
• Otimização
public class Folha {
public final double calculaSalario() {...}
}
public class FolhaModificada extends Folha{
public double calculaSalario(){...}//ilegal
}
Variáveis final
• Uma variável final é uma constante
• Qualquer tentativa de mudar o valor causa
erro
public final int CODIGO_BRASIL = 55;
Classes Abstratas
• Uma classe abstrata define apenas parte da
implementação
• Não podemos criar objetos para uma classe
abstrata
• Deixamos as subclasses fornecerem a
implementação que falta da classe abstrata
Classes Abstratas
public abstract class PecaXadrez {
public abstract boolean movimentoValido(int x, int y);
public void move(int x, int y) {
if (movimentoValido(x,y)) {
// faz movimento
} else {
// erro
}
}
}
A classe PecaXadrez declara a existência do método movimentoValido
mas não o implementa.
Classes Abstratas
Subclasses de classes abstratas têm que implementar todos os métodos
abstratos declarados na classe pai. Caso contrário elas também serão
classes abstratas.
public class Rainha extends PecaXadrez {
public boolean movimentoValido(int x, int
// faz consistência do movimento para a
}
}
public class Rei extends PecaXadrez {
public boolean movimentoValido(int x, int
// faz consistência do movimento para o
}
}
y){
Rainha
y){
Rei
Exercícios
1. Defina uma classe Conta com os métodos
saque e deposito (iguais ao da classe
Conta Simples) e um método abstrato
chamado boolean temSaldo(double valor).
Redefina a classe ContaSimples com
relacionamento de herança com a classe
Conta. Implemente o código do método
temSaldo na classe ContaSimples.
Interfaces
• Uma interface não tem implementação,
todos os métodos são abstratos.
• Uma interface pode definir variáveis
estáticas do tipo final (constantes)
public interface Cor {
public int getCor( );
public void setCor(int cor);
}
Múltiplas Interfaces
• A classe pode estender apenas uma classe,
mas implementar múltiplas interfaces
Interfaces
• A classe que implementa uma interface
deve definir os métodos da interface
interface ObjetoSeguro {
void abre(int segredo );
}
class Cofre implements ObjetoSeguro {
void abre(int segredo ) {
if (segredo == 1234) {
System.out.println("Cofre Aberto");
}
}
}
Exercícios
1. Defina uma interface chamada Bancaria,
tendo três métodos: deposito, saque e
mostraSaldo.
2. Redefina a classe, Conta.java, usando a
interface Bancaria para definir tipos de
contas diferentes.
Controle de Acesso
• Java tem quatro níveis de acesso:
–
–
–
–
public
protected
Default (quando é omitido)
private
Controle de Acesso
Comparação
• Operador == compara tipos primitivos
• O método equals compara objetos
toString
• O método toString() faz parte de todos os
objetos em java por ser um método da
classe Object
• Sobrescrevendo o comportamento deste
método podemos definir uma representação
de um objeto como uma String
toString
class Ponto {
int x, y;
public String toString() {
return "Ponto(" + x + "," + y + ")";
}
}
Classes Internas
• Uma classe interna é uma definição de
classe dentro de outra classe
• Defina uma classe como classe interna se
ela não tem utilidade fora da classe que a
contém.
Classes Wrappers
• Uma classe wrapper é uma representação de
um tipo primitivo como um objeto
• Cada tipo primitivo possui seu wrapper
• Wrapper são úteis se você trabalha com
classes e métodos que só aceitam objetos
como argumentos
Wrappers
int pInt = 500;
Integer wInt = new Integer(pInt);
int p2 = wInt.IntValue( );
Exercício
1. Crie uma classe chamada SistemaSolar. No SistemaSolar
crie a classe interna chamada Planeta com os atributos
nome e distanciaDoSol. Defina um array de Planeta para o
SistemaSolar. No construtor de SistemaSolar defina objetos
para o array. Crie o método mostrePlanetas para o
SistemaSolar. No método main crie um objeto da classe
SistemaSolar e chame o método mostrePlanetas.
Exceções
• Mecanismo para tratar os erros durante a
execução do programa.
• Exceções são classes que representam erros
durante a execução de um programa java.
• Os objetos que representam as exceções
podem ser “lançados”, capturados e
manipulados.
Condições de Erro
• Tentar abrir um arquivo que não existe
• Tentar usar uma conexão de rede
interrompida
• Tentar acessar posição de arrays fora da
faixa
• Tentar carregar uma classe que não está no
classpath
Exemplo
public class Semaforo {
public static void main (String args[ ]) {
int i = 0;
String semaforo [ ] = {"Verde", "Amarelo","Vermelho"};
while (i < 4) {
System.out.println (sinais[i]);
i++;
}
}
}
Ao executar o resultado é
java Semaforo
Verde
Amarelo
Vermelho
java.lang.ArrayIndexOutOfBoundsException: 3
at Semaforo.main(Semaforo.java:12)
Instruções try e catch
Conta c = new Conta();
try {
c.saque(100);
} catch (EstouroSaqueException e) {
System.out.println("Erro: " + e.getMessage() );
}
c.mostraSaldo();
Aplicando o try/catch
public class Semaforo {
public static void main (String args[ ]) {
int i = 0;
String semaforo [ ] = {"Verde",
"Amarelo","Vermelho"};
while (i < 4) {
try {
System.out.println (sinais[i]);
catch (Exception e) {
break;
}
i++;
}
}
}
Instrução finally
A instrução finally define um bloco de código que sempre será executado, mesmo que
uma exceção seja lançada ou não:
boolean transacaoOk = false;
try {
abreTransacao( );
debito.saque ( valor );
credito.deposito( valor );
transacaoOk = true;
} finally {
if ( transacaoOk )
fechaTransacao( );
else
desfazTransacao( );
}
Instrução throw e clausula
throws
public void deposito(double valor) throws
DepositoInvalidoException {
if (valor > 0) {
saldo = saldo + valor;
} else {
throw new DepositoInvalidoException("Este
valor é invalido para depósito: " + valor);
}
}
Categorias de Exceção
• Throwable
– Error
– Exception
• RuntimeException
Tratar ou lançar?
• O tratamento de exceções pode ser de 2
modos:
• Tratar dentro do próprio método usando
try,catch e finally
• Lançar para quem chamou o método onde a
exceção foi gerada usando a clausula throws
Criando Exceções
public class DepositoInvalidoException extends Exception {
public DepositoInvalidoException (String motivo) {
// chama construtor da classe pai
super(motivo);
}
}
Exercício
1.Crie as seguintes exceções no pacote erros:
a. EstouroSaqueException - Acontece quando é feita
uma tentativa de tirar mais dinheiro do que a conta
possui.
b. DepositoInvalidoException – Acontece quando uma
quantia inválida de dinheiro (quantia < zero) é
depositada.
2.Reescreva as operações de saque e depósito para lançar
estas exceções.
Calendário e Datas
• A classe java.util.Date representa uma data
e a classe java.util.Calendar representa um
calendário para trabalhar com as datas.
• Date hoje = new Date();
• Calendar c = Calendar.getInstance();
Formatando Datas
• Para formatar datas em java use a classe
java.text.SimpleDateFormat. Esta classe possui dois
métodos básicos: parse(String) para converter um texto
em uma data e format(Date) para formatar a data em um
texto. Por exemplo:
SimpleDateFormat sdf = new
SimpleDateFormat("dd/MM/yyyy HH:mm");
String texto = sdf.format(new Date());
Date dia = sdf.parse("16/06/1971 23:00");
Calculando Datas
• A classe Calendar permite a definição de
data com o método set e o cálculo de datas
com o método add(int, int). Por exemplo:
Coleções
• O java tem um framework de coleções que
inclui listas, conjuntos e mapas. As
operações básicas ao usar as coleções são:
–
–
–
–
–
adicionar objetos
remover objetos
verificar se existe um objeto
recuperar um objeto
percorrer os objetos um a um
Principais Interfaces
• As coleções se dividem em três categorias
básicas:
• Listas: Listas de objetos
• Set: Conjuntos de objetos únicos
• Maps: Objetos com uma identificação única
• Coleções Ordered e Sorted
Principais Métodos
• List: add(Object value), get(int i)
• Set: add(Object value), contains(Object)
• Map: put(Object key, Object value) e
get(Object key)
Exercícios
1. Crie uma classe chamada Agenda que guarde o
nome e o telefone de pessoas como objetos
String em um HashMap, adicione 5 nomes e
telefones e depois mostre o telefone de uma das
pessoas.
2. Cria uma classe chamada Equipes para
armazenar nomes de equipes em um ArrayList.
O programa deve pedir para o usuário digitar os
nomes das equipes até o usuário digitar "fim". O
programa então mostra os nomes das equipes
digitados pelo usuário.
Download

java_-_parte_1