JAVA

Post on 18-Mar-2016

50 views 2 download

description

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 - PowerPoint PPT Presentation

Transcript of JAVA

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ício4. 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 classechar s[]; ou char[] s;Ponto p[]; ou Ponto[] p;

Criando Arrays

• Arrays são criados com a função news = 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)

Exemploclass 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 thispublic 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 Dadospublic 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ício1. 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ícios3. 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 Paipublic 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ício1. 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 AbstratasSubclasses 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ício1. 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/catchpublic 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ícios1. 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.