java linguagem ambiente de desenvolvimento runtime ou java virtual machine
Post on 18-Apr-2015
142 Views
Preview:
TRANSCRIPT
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.
top related