Professional Documents
Culture Documents
Sumrio
1 ORIENTAO AO ALUNO ............................................................................................. 3
2 CLASSES E OBJETOS .................................................................................................. 3
2.1 Propriedades............................................................................................................ 3
2.2 Mtodos ................................................................................................................... 4
3 MTODOS GETTERS E SETTERS ............................................................................... 5
4 RELACIONAMENTOS ENTRE OBJETOS DO TIPO TEM UM ..................................... 5
5 HERANA - RELACIONAMENTO DE OBJETOS DO TIPO UM ............................. 10
5.1 Instanciando Polimorficamente .............................................................................. 17
5.2 Fazendo Converses (Casting) .............................................................................. 18
5.3 Sistema de Cadastro de Pessoas .......................................................................... 19
6 MTODOS E PROPRIEDADES ESTTICAS ............................................................... 20
7 SOBRECARGA E SOBRESCRITA DE MTODOS ...................................................... 22
7.1 Sobrescrevendo o Mtodo toString() ...................................................................... 23
7.2 Sobrescrevendo o Mtodo equals(Object obj) ........................................................ 24
7.3 Utilizando a IDE para Gerar o Mtodo Equals e Hashcode .................................... 24
7.4 HashCode .............................................................................................................. 25
7.5 A Palavra Reservada This ...................................................................................... 25
8 CONSTRUTORES ........................................................................................................ 26
8.1 Construtor Sobrecarregado .................................................................................... 26
8.2 Sobrecarregando o Construtor de Cidade .............................................................. 28
8.3 Lembrando dos Estticos ....................................................................................... 28
9 SOBRECARGA DE CONSTRUTORES ........................................................................ 29
10 MTODOS SOBRECARREGADOS ............................................................................. 29
11 CLASSES ABSTRATAS ............................................................................................... 30
12 INTERFACES ............................................................................................................... 31
12.1 Implementando as Interfaces ................................................................................. 32
13 GENRICOS - UM GERENCIADOR DE REGISTROS GENRICO ............................. 37
14 TRABALHANDO COM COLEES ............................................................................. 38
14.1 List ......................................................................................................................... 39
14.2 Exemplo de Uso da Interface List com ArrayList .................................................... 39
14.3 Set ......................................................................................................................... 40
14.4 Map ........................................................................................................................ 41
15 EXCEPTIONS ............................................................................................................... 41
15.1 Lanando uma Exception Unchecked (No verificadas)......................................... 42
15.2 Lanando uma Exception Checked (Verificadas) ................................................... 43
Verso: 2.0
2 Edio
www.fabricadeprogramador.com.br
Projeto Fbrica de Programador Mdulo 2
1 ORIENTAO AO ALUNO
2 CLASSES E OBJETOS
No modulo 1 (Java e Algoritmos) vimos os conceitos bsicos de classe como sendo a estrutura
bsica dos objetos. Se voc ainda tem dvidas sobre o que so classe e objetos
recomendamos a leitura da matria do mdulo 1.
O que precisamos entender, que um sistema composto por vrios objetos. Um objeto
uma instncia da classe e cada objeto ocupa um espao na memria podendo ser acessado
por meio das variveis de referncia. As variveis de referncia guardam o endereo do objeto
e funciona com um controle remoto onde podemos acessar seus mtodos e propriedades de
acordo de suas visibilidades.
2.1 Propriedades
Os objetos possuem propriedades que servem para definir ou armazenar as caractersticas,
campos ou atributos do objeto. No caso de um cliente, por exemplo, temos as propriedades:
nome, CPF e RG.
Exemplo de classe Cliente em Java
www.fabricadeprogramador.com.br Pgina: 3
Projeto Fbrica de Programador Mdulo 2
Neste exemplo criamos a classe Cliente e instanciamos dois objetos com o comando new, no
qual, cada objeto uma cpia da classe na memria, com a mesma estrutura da classe. Os
dados dos objetos so definidos no objeto. O objeto que possui nome Jo da Silva
totalmente independente do objeto que possui o nome Maria da Silva, embora os dois
objetos vieram da mesma classe, eles no se conhecem por que esto em posies de
memria diferentes.
2.2 Mtodos
Os mtodos como j vimos no modulo 1, so as funes que o objeto realiza. Um objeto
Calculadora pode possuir os mtodos: somar(), multiplicar(), subtrair (), e dividir().
class Calculadora{
www.fabricadeprogramador.com.br Pgina: 4
Projeto Fbrica de Programador Mdulo 2
Exemplo
www.fabricadeprogramador.com.br Pgina: 5
Projeto Fbrica de Programador Mdulo 2
Classe Cliente sem Relacionamento com Classe Cliente tem Relacionamento com
Exemplo
Cliente jao = new Cliente();
jao.setNome("Jo");
jao.setCidade("Campo Grande");
www.fabricadeprogramador.com.br Pgina: 6
Projeto Fbrica de Programador Mdulo 2
No mundo real, vrios clientes do sistema podem ter nascido em uma cidade. Na memria
podemos imaginar vrios objetos do tipo Cliente e vrios objetos do tipo Cidade onde uma ou
mais instncias de clientes podem estar vinculados a uma mesma instncia de cidade.
Ao acessar um objeto tipo Cidade que est relacionado com um objeto tipo Cliente podemos,
a partir da instncia do Cliente, navegar no objeto Cidade porque a propriedade cidade nada
mais que uma referncia para um objeto do tipo Cidade. Com o mtodo getCidade()
acessamos esta referncia que foi setada para o cliente da instncia jao.
www.fabricadeprogramador.com.br Pgina: 7
Projeto Fbrica de Programador Mdulo 2
Na memria, agora temos um objeto do tipo Estado relacionado ao objeto do tipo Cidade.
Agora nosso programa principal deve ser alterado para que possamos utilizar a propriedade
UF em um objeto do tipo Estado e no mais diretamente na cidade como estava. Assim, j
iremos corrigir o erro gerado: The method setUf(String) is undefined for the type Cidade,
dizendo que no existe mais o mtodo setUf(String) na cidade.
Com uma instncia de estado basta setarmos ele na cidade em sua nova propriedade de
relacionamento estado. Para imprimir o estado da cidade do cliente, utilizamos a navegao
por meio do mtodo get. Primeiro acessamos o cliente, depois a cidade do cliente e por fim o
estado da cidade conforme o cdigo abaixo:
www.fabricadeprogramador.com.br Pgina: 8
Projeto Fbrica de Programador Mdulo 2
www.fabricadeprogramador.com.br Pgina: 9
Projeto Fbrica de Programador Mdulo 2
www.fabricadeprogramador.com.br Pgina: 10
Projeto Fbrica de Programador Mdulo 2
A classe base ou superclasse tem suas caractersticas e a classe filha herda suas
caractersticas e tambm adiciona novas propriedades e mtodos especficos dela. Na
instncia do objeto da classe filha podemos ver os mtodos e propriedades que foram
estendidos. Seno existisse herana, ns teramos que criar vrios campos ou propriedades
repetidas em cada classe.
Desta forma, criamos uma classe individual para cada Cadastro sem herana e sem a
reutilizao de campos.
www.fabricadeprogramador.com.br Pgina: 11
Projeto Fbrica de Programador Mdulo 2
Desta forma, criamos uma classe Pessoa contendo os campos public class Pessoa {
comuns para todos dos cadastros. Mas ainda parece que
ficaram campos repetidos em Cliente e Funcionario. No private String nome;
private Cidade cidade;
poderamos colocar RG e CPF em Pessoa, seno
comprometeramos o Fornecedor que Pessoa Jurdica. //getters e setters
}
Deste jeito, pensamos de forma mais genrica ainda, criando uma classe Pessoa e classes
filhas Pessoa Fsica e Pessoa Jurdica. Agora as classes Cliente e Funcionrio estendem
da classe PessoaFisica e a classe Fornecedor estende da classe PessoaJuridica. Assim,
at se precisarmos em outras partes do sistema futuramente representar clientes do tipo
PessoaJuridica com este modelo teremos mais suporte para isso.
Classe mais Genrica Classes Filhas mais Especficas, mas ainda so Genricas
para suas filhas
www.fabricadeprogramador.com.br Pgina: 12
Projeto Fbrica de Programador Mdulo 2
}
}
}
//Todos campos comuns //Todos campos comuns foram //Todos campos comuns
//Foram herdados //herdados //Foram herdados
Programa Principal
Crie um programa principal para testar o acesso propriedade nome a partir da instncia de
Cliente.
public class ProgramaPrincipalCliente {
public static void main(String[] args) {
www.fabricadeprogramador.com.br Pgina: 13
Projeto Fbrica de Programador Mdulo 2
www.fabricadeprogramador.com.br Pgina: 14
Projeto Fbrica de Programador Mdulo 2
Na IDE (Eclipse ou Netbeans) voc j pode ver que isso possvel utilizando o recurso de
auto complete (ctrl+ espao) como na imagem abaixo.
www.fabricadeprogramador.com.br Pgina: 15
Projeto Fbrica de Programador Mdulo 2
Assim, podemos acessar essa propriedade de forma direta para atribuirmos um valor ou para
recuperarmos seu valor para impresso. Uma forma utilizada tambm por meio do comando
this ficando this.nome.
package br.com.fabricadeprogramador
.temp;
//imports aqui
public class Pessoa {
protected String nome;
//restante da classe aqui
}
www.fabricadeprogramador.com.br Pgina: 16
Projeto Fbrica de Programador Mdulo 2
package br.com.fabricadeprogramador.sistemacadastro;
import br.com.fabricadeprogramador.temp.Pessoa;
}
}
Quando uma classe filha estende uma classe base, dizemos que um objeto da classe filha
um (a) do objeto classe base.
Exemplo
Podemos declarar variveis de um tipo mais genrico para armazenar referncias a objetos
mais especficos. Uma varivel do tipo Object pode apontar para um objeto do tipo Funcionario
porque o mesmo passa no teste um, ou seja, um funcionrio um Object, mesmo que
no herda diretamente, mas no topo da hierarquia sabemos que tudo herda de Object. Uma
varivel do tipo Pessoa pode apontar para um objeto Funcionario porque funcionrio uma
Pessoa. Uma varivel do tipo PessoaFisica pode apontar para um objeto do tipo Funcionario
porque funcionrio uma PessoaFisica. Uma varivel do tipo Funcionario pode apontar
para um objeto Funcionario porque funcionrio um Funcionario.
A figura abaixo mostra que todos podem apontar para um Funcionrio, porm, os que esto
mais abaixo ou especficos podem ver mais detalhes do objeto, porque a varivel de
referncia limita o acesso as propriedades e mtodos do objeto de acordo com seu tipo.
Um tipo Object embora aponte para um objeto Funcionario no pode ter acesso a tudo do
funcionrio, podendo acessar apenas o que corresponde ao tipo Object. Um objeto funcionrio
constitudo de vrias partes, sendo a parte de Object, a parte de Pessoa, a parte de
PessoaFisica e a parte de Funcionario. A soma destas heranas o funcionrio completo,
mas quem pode ter acesso completo apenas uma referncia do tipo Funcionario. A varivel
do tipo Object a mais limitada quanto ao acesso ao objeto Funcionrio e a varivel do tipo
Funcionrio a mais completa.
www.fabricadeprogramador.com.br Pgina: 17
Projeto Fbrica de Programador Mdulo 2
Isso porque o casting no altera o tipo original da varivel mantendo como sendo do tipo
Object. Para acessarmos o mtodo getCargo temos que fazer novamente um casting da
seguinte forma:
www.fabricadeprogramador.com.br Pgina: 18
Projeto Fbrica de Programador Mdulo 2
((Funcionario)objeto).getCargo();
Assim como podemos esticar a visibilidade tambm podemos encolher. Para um objeto do
tipo Funcionrio podemos fazer um casting para torn-lo de o tipo mais Genrico como:
Funcionario funcionario = new Funcionario();
((PessoaFisica) funcionario).setCpf("99009");
Agora na hora de imprimir teremos que utilizar a tcnica de converso para imprimir os dados
especficos de um objeto Pessoa. Como nosso vetor de pessoas genrico e armazena
vrios tipos de pessoas diferentes, como Cliente, Fornecedor e Funcionrio ento temos que
utilizar o instanceof para verificar qual o tipo do objeto da referncia para realizar a converso
e acessar as propriedades especficas.
/**
* Impressao de forma especifica
*/
public void imprimir (){
for (int i = 0; i < pessoas.length; i++) {
System.out.println(pessoas[i].getNome()+ "");
www.fabricadeprogramador.com.br Pgina: 19
Projeto Fbrica de Programador Mdulo 2
//Funcionario
if(pessoas[i] instanceof Funcionario){
//casting
Funcionario func = (Funcionario) pessoas[i] ;
System.out.print(func.getSalario() + " " + func.getCargo());
}
//Faa para Cliente
A soluo para este caso a chamada a um o mtodo static de converso parseInt da classe
Integer ou chamada de um construtor especial que suporta uma entrada String.
Um mtodo esttico um mtodo que no est ligado a instncia do objeto. Para invocar um
mtodo esttico basta colocarmos o nome da classe, um ponto e nome do mtodo como:
Integer.parseInt("10");
Uma propriedade esttica uma propriedade da classe e no do objeto. Isso quer dizer que
o valor dela no pode ser diferente para cada instncia. Para toda instncia de Integer a
propriedade MAX_VALUE sempre ter o mesmo valor.
Integer maximoInt = Integer.MAX_VALUE;
www.fabricadeprogramador.com.br Pgina: 20
Projeto Fbrica de Programador Mdulo 2
Em nosso caso, ser comum utilizarmos mtodos estticos em nossa aplicao para criarmos
classes com mtodos utilitrios.
Exemplo
public class ValidacaoUtil {
O main esttico! O mtodo principal public static void main(String[] args) esttico, por se
tratar de um mtodo principal no sendo necessrio a JVM instanciar um objeto do nosso
programa principal para invoca-lo. Um mtodo esttico somente pode alterar valores de
variveis tambm estticas. O cdigo abaixo no pode ir funcionar por que a propriedade
no esttica e est tentando ser acessar por um mtodo esttico.
www.fabricadeprogramador.com.br Pgina: 21
Projeto Fbrica de Programador Mdulo 2
Ao utilizarmos mtodos estticos, tambm no utilizamos a palavra reservada this, porque ela
quer dizer esta instncia atual e com os mtodos estticos no estamos trabalhando com a
instncia. Certo?
O cdigo abaixo pode ser feito.
public class ValidacaoUtil {
Em Java vimos que a classe mais genrica a java.lang.Object. A classe Object do java
possui vrios mtodos implementados, abaixo vamos listar dois deles: toString( ) e equals(
Object obj).
public String toString() {}
Retorna uma String representando
uma verso texto do objeto.
Exemplo de chamada:
Cliente cli = new Cliente(); Ao tentarmos imprimir uma varivel de
instancia do objeto o mtodo toString
System.out.println(cli); invocado automaticamente.
www.fabricadeprogramador.com.br Pgina: 22
Projeto Fbrica de Programador Mdulo 2
Os mtodos da classe base Object que acabamos de estudar j possuem uma implementao
padro. Mas seria possvel modificarmos essa implementao? E se quisermos considerar
que duas instncias diferentes de objetos do tipo Cliente com o mesmo CPF sejam
considerados clientes iguais, mesmo que esto em posies de memria diferentes? Neste
caso ns temos que modificar o mtodo equals da classe Object, porm se fosse possvel
fazer isso diretamente na classe Object ns comprometeramos todos os objetos do sistema
porque todos herdam de Object.
Ento ser possvel modificarmos somente o mtodo toString da classe Cliente para fazer
essa adaptao para nossa necessidade especfica? Sim, possvel, isso conhecido como
sobrescrita de mtodo, ou seja, escrever uma por cima ou sobre do mtodo herdado da
classe base na classe filha.
//demais mtodos
Desta forma agora ao executarmos o cdigo abaixo a sada ser o nome e o CPF
concatenados do objeto Cliente.
System.out.println(cli);
www.fabricadeprogramador.com.br Pgina: 23
Projeto Fbrica de Programador Mdulo 2
//se no passou
return true;
}
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
www.fabricadeprogramador.com.br Pgina: 24
Projeto Fbrica de Programador Mdulo 2
if (cpf == null) {
if (other.cpf != null)
return false;
} else if (!cpf.equals(other.cpf))
return false;
if (rg == null) {
if (other.rg != null)
return false;
} else if (!rg.equals(other.rg))
return false;
return true;
}
7.4 HashCode
Muito usado nas estruturas de dados que iremos ver mais a frente, mas, por esse momento,
precisamos entender que este um nmero que representa um objeto toda vez que os valores
de suas propriedades estipuladas no mtodo estiverem iguais, o mesmo hashcode deve ser
gerado, neste exemplo quando uma pessoa possuir o mesmo RG e o mesmo CPF um cdigo
de hashcode ser gerado idntico porque o mtodo utiliza dos dados destas propriedades
para dar origem ao nmero de hashcode. Em estrutura de armazenamento HashMap e
HashSet iremos ver isso na prtica.
www.fabricadeprogramador.com.br Pgina: 25
Projeto Fbrica de Programador Mdulo 2
8 CONSTRUTORES
Construtor Padro
Este o construtor sem parmetros de entrada. Todo construtor ao ser chamado executa
primeiro o construtor da classe base. O objeto vai sendo construdo de cima para baixo, ou
seja, primeiro o construtor da classe Object executado e depois o construtor das classes
filhas na ordem da herana. A chamada super() invoca o construtor da classe base. Mesmo
se no escrevermos um construtor padro na classe, o compilador ir escrever no bytecode
gerado, mesmo que no aparea em nosso cdigo fonte, exceto quando ns escrevermos
algum construtor sobrecarregado, que veremos logo a frente.
public class Pessoa {
protected String nome;
private Cidade cidade;
public Pessoa() {
super();
}
}
www.fabricadeprogramador.com.br Pgina: 26
Projeto Fbrica de Programador Mdulo 2
public Pessoa() {
super();
}
public Pessoa(String nome, Cidade cidade) {
super();
this.nome = nome;
this.cidade = cidade;
}
}
Exemplo de chamada
new Pessoa("Jo", new Cidade());
public Cliente() {
super();
}
www.fabricadeprogramador.com.br Pgina: 27
Projeto Fbrica de Programador Mdulo 2
public Cidade() {
super();
}
public Cliente() {
quantidadeCliente++;
}
www.fabricadeprogramador.com.br Pgina: 28
Projeto Fbrica de Programador Mdulo 2
package br.com.fabricadeprogramador.sistemacadastro.construtores;
import br.com.fabricadeprogramador.sistemacadastro.Cliente;
9 SOBRECARGA DE CONSTRUTORES
10 MTODOS SOBRECARREGADOS
www.fabricadeprogramador.com.br Pgina: 29
Projeto Fbrica de Programador Mdulo 2
11 CLASSES ABSTRATAS
Classes abstratas so classes que possuem mtodos abstratos, ou seja, apenas a declarao
do mtodo sem sua implementao. Quando uma classe possui um mtodo abstrato ento a
classe vira abstrata. Uma classe abstrata no pode ser instanciada, por que possuem
mtodos sem implementao. Declaramos um mtodo abstrato quando no queremos uma
implementao genrica padro. Desta forma as classes filhas so obrigadas a implementar
o mtodo abstrato. Dizemos que as classes filhas assinam um contrato onde elas concordam
em implementar os mtodos abstratos da classe base abstrata. No exemplo abaixo vamos
mostrar um caso, no qual definimos que uma classe que estende de Funcionrio deve possuir
uma implementao especfica para o mtodo calculoSalario. Assim a classe filha Analista e
Diretor devem implementar o mtodo abstrato conforme seu tipo especfico.
Agora a classe que estende funcionrio deve implementar o mtodo abstrato da classe base.
Um Analista que um Funcionrio que tem seu clculo de salrio diferente de um diretor com
5% a mais de diferena do salrio base.
www.fabricadeprogramador.com.br Pgina: 30
Projeto Fbrica de Programador Mdulo 2
Um Diretor um Funcionrio e logo deve implementar o mtodo abstrato da classe base com
10% a mais de diferena do salrio base.
12 INTERFACES
Um pedido ser constitudo de vrios itens que iremos chamar de ItemPedido. Vrios objetos
podem ser considerados como Itens a serem pedidos em sistema comercial. Por exemplo,
em uma escola podemos ter objetos Livros e Cursos que podem compor um Pedido que
uma compra. Em uma pizzaria podemos ter Pizza, Refrigerante, Sucos como sendo itens do
Pedido e assim por diante. Na maioria das vezes neste caso uma classe Produto poderia ser
utilizada para representar os itens de um Pizzaria de forma mais genrica.
www.fabricadeprogramador.com.br Pgina: 31
Projeto Fbrica de Programador Mdulo 2
www.fabricadeprogramador.com.br Pgina: 32
Projeto Fbrica de Programador Mdulo 2
import java.util.Date;
www.fabricadeprogramador.com.br Pgina: 33
Projeto Fbrica de Programador Mdulo 2
Agora vamos implementar o Pedido utilizando uma classe PedidoImpl, em que o sufixo Impl
apenas uma abreviao de Implementao como conveno. A classe que implementa a
interface decide como trabalhar os mtodos.
public class PedidoImpl implements Pedido {
private Integer codigo;
private Date data;
private Cliente cliente;
private ItemPedido itens[];
www.fabricadeprogramador.com.br Pgina: 34
Projeto Fbrica de Programador Mdulo 2
int codigoItem = 1;
pedido.adicionarItem(livro);
pedido.adicionarItem(curso1);
pedido.adicionarItem(curso2);
pedido.imprimirItens();
pedido.removerItemPedido(curso1);
double novoTotal = pedido.calcularValorTotal();
System.out.println(novoTotal);
pedido.ordenarItensPedidos();
pedido.imprimirItens();
}
}
www.fabricadeprogramador.com.br Pgina: 35
Projeto Fbrica de Programador Mdulo 2
ProgramaPrincipalPedido para incluir um objeto que no possui uma classe, porm ele
implementa a interface ItemPedido. Um objeto annimo com referncia.
ItemPedido curso2 = new Curso();
curso2.setCodigo(++codigoItem);
curso2.setDescricao("Fbrica de Programador");
www.fabricadeprogramador.com.br Pgina: 36
Projeto Fbrica de Programador Mdulo 2
www.fabricadeprogramador.com.br Pgina: 37
Projeto Fbrica de Programador Mdulo 2
www.fabricadeprogramador.com.br Pgina: 38
Projeto Fbrica de Programador Mdulo 2
14.1 List
Uma lista dinmica de objetos organizada em vetor e acessvel por meio de ndices que aceita
objetos duplicados. Na API () padro do Java iremos utilizar vrias classes que utilizam tipos
genricos como uma lista de objetos da Interface List<E>.
java.util.List<E> uma interface que possui uma implementao padro em java
java.util.ArrayList<E>. Esta interface define o comportamento padro de uma Lista Dinmica.
Um ArrayList nos permite armazenar objetos em um Array Dinmico de objetos, ou seja, a
alocao do objeto na posio do vetor dinmica na qual o ArrayList que controla o nmero
de posies. No exemplo abaixo podemos ver que da interface java.util.List estende outra
Interface chamada Collection. Isso quer dizer que a classe que implementar List<E> dever
tambm implementar os mtodos herdados de Collection.
int size();
boolean isEmpty();
boolean add(E e);
//Outros mtodos declarados aqui
}
www.fabricadeprogramador.com.br Pgina: 39
Projeto Fbrica de Programador Mdulo 2
14.3 Set
No permite registros duplicados. Utilize os mtodos equals e hashcode para definir o critrio
de igualdade. Sua organizao no permite acesso por ndice.
Adicionando no conjunto
//Atribuindo os nomes em um conjunto
Set<String> nomes = new HashSet<String>();
nomes.add("Maria");
nomes.add("Jos");
nomes.add("Maria");
Removendo do conjunto
//removendo objeto do conjunto
nomes.remove("Maria");
www.fabricadeprogramador.com.br Pgina: 40
Projeto Fbrica de Programador Mdulo 2
14.4 Map
Armazena os elementos na forma de pares chaves/valor. As chaves so exclusivas no
podendo ser duplicadas. Os acessos aos objetos so feitos pela chave que so nicas.
public class ProgramaPrincipalMap {
public static void main(String[] args) {
Map<String, String> linguagensProgramacao = new
HashMap<String,String>();
15 EXCEPTIONS
www.fabricadeprogramador.com.br Pgina: 41
Projeto Fbrica de Programador Mdulo 2
Na API do Java temos uma famlia que forma uma hierarquia de classes com Excees
nativas. Na figura acima temos um exemplo de como essa a estrutura dessa herana.
A classe mais genrica que corresponde a famlia das Exceptions Throwable. Logo, temos
a Exception e RuntimeException. Podemos classific-las em dois grupos:
1. Grupo das filhas diretamente de Exception (Checked)
2. Grupo das filhas de RuntimeException (Uncheck)
www.fabricadeprogramador.com.br Pgina: 42
Projeto Fbrica de Programador Mdulo 2
//Construtor padro
public CPFInvalidException() {
//passando para o construtor sobrecarregado da classe base
uma mensagem
//padro
super("CPF invlido!");
}
Em nossa classe ValidacaoUtil vamos implementar uma simples validao que verifica se o
CPF informado no parmetro vlido ou no.
Consideramos que para ser vlido o CPF o mesmo deve conter 11 dgitos e se isso no for
verdade ento um objeto da classe CPFInvalidException ser instanciado (new) e lanado
(throws). Para isso ser possvel devemos declarar na assinatura do mtodo que ele poder
fazer o lanamento throws CPFInvalidException.
www.fabricadeprogramador.com.br Pgina: 43
Projeto Fbrica de Programador Mdulo 2
Uma verificao consiste em tratar a Exception. Temos basicamente duas formas de tratar a
Exception, sendo uma delas usando o try catch, no qual ns pegamos o objeto da exceo
lanada e outra atravs de uma redeclarao throws onde dizermos que no queremos
pegar o objeto Exception lanado.
Agora vamos programar no programa principal uma chamada ao mtodo validarCpf que deve
ser verificado. agora que acontece a verificao, quando formos invocar o mtodo que diz
que pode lanar uma Exception. Ao tentar invocar o mtodo sem fazer a verificao o
compilador avisa.
www.fabricadeprogramador.com.br Pgina: 44
Projeto Fbrica de Programador Mdulo 2
} throws
CPFInvalidException
Parabns pela concluso de mais uma fase do projeto Fbrica de Programador! No prximo
mdulo iremos aprender a fazer aplicaes mais interessantes, voltadas para Web.
www.fabricadeprogramador.com.br Pgina: 45