JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

Post on 18-Apr-2015

142 views 0 download

Transcript of JAVA Linguagem Ambiente de Desenvolvimento Runtime ou Java Virtual Machine.

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 comentario2 public class AloMundo {3 public static void main (String args[ ]) {4 System.out.println("Alo Mundo!");5 }6 }

Exercício

1 //Exemplo de comentario2 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 comentario2 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

switch (valor) {case 1:

instruções;break;

case 2:instruções;break;

default:instruções;break;

}

• Comando switch

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 executarwhile (boolean) {

instrução ou bloco;}

// executa pelo menos uma vezdo {

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. 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.

3. 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. 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

5. 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. 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.

2. 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 char[] s;

Ponto p[]; ou 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 tamanhotwoDim[0] = new int [5];twoDim[l] = new int [5];// ou arrays de tamanhos diferentestwoDim[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ício1. 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.

2. 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étodospublic 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. 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.

2. 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ício1. 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 Empregadopublic Imposto calculaImposto(Empregado e) { //calcula e retorna a faixa de imposto} // em outra classeGerente 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étodospublic 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ão-está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. 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.

2. 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çãopublic 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 y){ // faz consistência do movimento para a Rainha }}public class Rei extends PecaXadrez { public boolean movimentoValido(int x, int y){ // faz consistência do movimento para o 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

Exemplopublic 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 SemaforoVerdeAmareloVermelhojava.lang.ArrayIndexOutOfBoundsException: 3at 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 finallyA 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.