You are on page 1of 21

Curso Java Starter

www.t2ti.com
1

Curso Java Starter

www.t2ti.com
2

Curso Java Starter


Apresentao O Curso Java Starter foi projetado com o objetivo de ajudar quelas pessoas que tm uma base de lgica de programao e desejam entrar no mercado de trabalho sabendo Java, A estrutura do curso formada por mdulos em PDF e por mini-cursos em vdeo. O aluno deve baixar esse material e estud-lo. Deve realizar os exerccios propostos. Todas as dvidas devem ser enviadas para a lista de discusso que est disponvel para inscrio na pgina do Curso Java Starter no site www.t2ti.com. As dvidas sero respondidas pelos instrutores Albert Eije, Cludio de Barros e Miguel Kojiio, alm dos demais participantes da lista. Nosso objetivo que aps o estudo do Curso Java Starter o aluno no tenha dificuldades para acompanhar um curso avanado onde poder aprender a desenvolver aplicativos para Web, utilizando tecnologias como Servlets e JSP e frameworks como Struts e JSF, alm do desenvolvimento para dispositivos mveis. Albert Eije trabalha com informtica desde 1993. Durante esse perodo j trabalhou com vrias linguagens de programao: Clipper, PHP, Delphi, C, Java, etc. Atualmente mantm o site www.alberteije.com. Cludio de Barros Tecnlogo em Processamento de Dados. Miguel Kojiio bacharel em Sistemas de Informao, profissional certificado Java (SCJP 1.5). O curso Java Starter surgiu da idia dos trs amigos que trabalham juntos em uma instituio financeira de grande porte.

www.t2ti.com
3

Curso Java Starter

Mdulo

08
Introduo

Classes Abstratas, Interfaces e Excees

Estamos alcanando o fim da nossa trilha que apenas o incio do maravilhoso mundo que Java nos oferece e este momento bastante adeqado para introduzirmos os conceitos de classes Abstratas, Interfaces e Excees. Classes Abstratas e Interfaces so estruturas muito importantes quando programamos Orientado a Objetos com Java e, visto que j conhecemos os demais fundamentos da linguagem (reuso, herana, polimorfismo, encapsulamento, mtodos, etc.), est na hora de aplicarmos estes recursos existentes na linguagem. Uma das diferenas mais evidentes entre um bom e um mal programa o tratamento de excees, isto , a capacidade que o seu programa tem de responder a situaes inesperadas. Quando o tratamento de excees feito adeqadamente o seu programa fica mais robusto e ao mesmo tempo a usabilidade usabilidade nada mais do que a facilidade que um usurio tem em utilizar o programa aumenta sensivelmente. Porm antes de iniciarmos o novo contedo vamos conhecer uma importante caracterstica do construtor com parmetros levando em conta o uso de herana.

Herana - continuao
Ns j vimos que uma classe herda de sua classe pai as suas caractersticas porm a subclasse no herda o construtor, isto , o construtor individual para cada classe. Sempre que o construtor de uma classe invocado ele invoca , quando no explicitado, implicitamente o construtor da superclasse. Desta forma o construtor da

www.t2ti.com
4

Curso Java Starter


classe Object sempre invocado, pois todas as classes estendem dela. Observe o cdigo abaixo referente a classe Veiculo:
public class Veiculo { private String marca; private Double capacidadeTanqueCombustivel; public Veiculo(String marca) { this.marca = marca; } //Demais membros...

Quando o compilador gerar o bytecode o que ns teremos o seguinte:


public class Veiculo { private String marca; private Double capacidadeTanqueCombustivel; public Veiculo(String marca) { super(); this.marca = marca; } //Demais membros...

Observe que a declarao super() construtor public e sem parmetros

indica que o construtor default

da superclasse est sendo invocado. Isto

acontece de forma automtica, ns no precisamos nos preocupar. O construtor default adicionado pelo compilador quando no h construtor declarado explicitamente, isto , se o programador no declarar um construtor o compilador ir adicionar, implicitamente, um pblico e sem parmetros. No entanto se for adicionado explicitamente um construtor o compilador no ir adicionar implicitamente o construtor default, o que significa que se ns criarmos um construtor com parmetros e estendermos a classe, obrigatoriamente teremos que, explicitamente, invocar o construtor da superclasse passando os parmetros. Para ficar mais claro vamos estender a classe Veiculo que possui um construtor com parmetros:
public class Jipe extends Veiculo{ public Jipe() { } //Demais membros...

O cdigo acima demonstrado no compila. Imagine o compilador tentando

www.t2ti.com
5

Curso Java Starter


adicionar a declarao super() porm sem sucesso. Isto acontece pois no existe construtor sem parmetros na superclasse, existe apenas um construtor com o parmetro marca do tipo String. Podemos solucionar o problema apresentado de diversas maneiras, a primeira seria invocando o construtor da superclasse e encaminhando um parmetro padro para todas as instncias da classe Jipe:
Construtor sem parmetro
public class Jipe extends Veiculo{ public Jipe() { super("Marca padro de jipe"); } //Demais membros...

Invocao do construtor da superclasse

Perceba que no construtor da classe Jipe estamos invocando o construtor da classe Veiculo e passando uma String ("Marca padro de jipe"), ou seja, todas as instncias desta classe Jipe possuiro a mesma marca. Outra soluo seria a implementao de um construtor na classe Jipe que receba o mesmo parmetro repassando-o para a superclasse:
Construtor com parmetro
public class Jipe extends Veiculo{ public Jipe(String marca) { super(marca); } //Demais membros...

Invocao do construtor da superclasse com repasse do parmetro recebido

Desta forma mantida a lgica implementada pela superclasse. E por fim, uma terceira abordagem seria a mais de um construtor, observe que neste caso os dois construtores desenvolvidos anteriormente foram mantidos:
public class Jipe extends Veiculo{ private String modelo; public Jipe(){ super("Marca padro de jipe"); } public Jipe(String marca) { super(marca); } public Jipe(String marca, String modelo) { super(marca); this.modelo = modelo; } //Demais membros...

Construtor novo com dois parmetros

Observe que, neste ltimo caso, temos um construtor sem parmetros, um

www.t2ti.com
6

Curso Java Starter


construtor que recebe o mesmo parmetro da superclasse e outro que recebe dois parmetros (marca e modelo), ou seja, poderamos ter N-construtores, um para cada situao.

Classes Abstratas
At este momento todas as classes que havamos desenvolvido eram classes concretas, isto todas as nossas classes podem originar objetos. Classes concretas so estruturas definidas e prontas para instanciarem objetos. Uma classe abstrata se comporta de forma diferente de uma classe concreta. Uma classe abstrata nunca pode ser instanciada de forma direta, seu maior propsito, a razo da sua existncia, ser estendida. Para que serve esta classe ento? Imagine a seguinte situao, ns temos uma hierarquia de classe conforme abaixo:

Todos os animais (cachorro, cavalo e preguia) estendem da classe Animal, no entanto, no nosso, programa a classe Animal por si s no representa nenhum tipo de animal. Isto , esta classe representa apenas um animal genrico e ela existe apenas para ser estendida dando origem a um animal de fato. Nesta situao mais adeqado que seja feita a mudana na classe Animal a fim de torn-la abstrata e inviabilizar a sua instanciao por qualquer parte do programa. Isto realizado adicionando-se o modificador abstract conforme abaixo:
public abstract class Animal { //corpo da classe }

Observe que agora a classe Animal no pode ser instanciada indevidamente em nenhum trecho do nosso programa, o exemplo abaixo ir produzir um erro de

www.t2ti.com
7

Curso Java Starter


compilao:
Animal animal = new Animal();

Desta forma ns temos certeza que durante a execuo do programa nunca haver um objeto da classe Animal e sim, sempre, de uma de suas subclasses. Uma classe abstrata pode possuir mtodos concretos um mtodo concreto todo aquele possui corpo veja o exemplo abaixo:
public abstract class Animal { private String nome; //getters e setters...

Mtodo concreto

public void emitirSom() { System.out.println("Animal emitindo som"); } }

Perceba que o mtodo emitirSom() na verdade dever ser sobreescrito por

cada uma das subclasses da classe Animal a fim de que forneam um comportamento adeqado pois, cada tipo de animal emite um som diferente dos demais. Porm, da forma como foi feito, esta condio no garantida pois, podemos ter uma subclasse da classe Animal que no sobreescreve o mtodo emitir som, no entanto existem formas de forarmos esta condio. Ao modificarmos o mtodo com abstract impedimos que alguma das subclasses no implementem o

mtodo. Segue exemplo abaixo:


public abstract class Animal { private String nome; //getters e setters... public abstract void emitirSom(); }

Mtodo abstrato

Agora todas as subclasses da classe Animal iro obrigatoriamente ter que fornecer uma implementao para o mtodo emitirSom(). Alm da palavra reservada
abstract devemos encerrar o mtodo sem as chaves para que seja um mtodo

abstrato vlido. Uma classe abstrata pode conter apenas mtodos abstratos, concretos ou ambos. No entanto a presena de um mtodo abstrato torna, obrigatoriamente, a classe abstrata tambm.

www.t2ti.com
8

Curso Java Starter


A extenso de uma classe Abstrata feita da mesma forma que a extenso realizada por classes concretas:

public class Cachorro extends Animal { public void emitirSom() { System.out.println("au! au!"); } }

Em Java no existe o conceito de herana mltipla, isto , cada classe pode estender (extends) apenas uma superclasse de cada vez. Por exemplo, a seguinte situao no permitida:
public class Cachorro extends Animal, Mamifero {

No entanto podemos ter hierarquia de classes de qualquer tamanho o que viabilizaria a extenso de diversas classes nesta estrutura.

Interfaces
Pense em uma interface como sendo uma classe totalmente abstrata, isto que no possui mtodos concretos. Desta forma, quando uma classe implementa uma interface ela obrigatoriamente deve implementar o conjunto de mtodos definidos pela interface. Do site da SUN, implementar uma interface permite a uma classe tornarse mais formal em relao ao comportamento que ela promete fornecer. Interfaces formam um contrato entre a classe e o mundo exterior, e este contrato garantido em tempo de compilao pelo compilador. Se a sua classe deseja implementar uma interface, todos os mtodos definidos pela interface devem aparecer no corpo antes da sua classe ser compilada. Em sntese, quando uma classe concreta implementa uma interface ela est garantindo que possui os mtodos especificados bem como a implementao destes, mesmo que o corpo do mtodo seja vazio. Aqui cabe uma observao: O uso de interfaces garante a existncia do comportamento porm no garante a sua correta implementao. Da mesma forma que classes, a definio de uma interface cria um novo

www.t2ti.com
9

Curso Java Starter


tipo e ns devemos utilizar interfaces quando existem determinados comportamentos que sejam similares entre hierarquias de classes diferentes. Veja o mtodo emitirSom() da classe abstrata Animal, agora suponha que no mesmo programa eu tenha uma classe Bola, que por sinal tambm emite som. Em um determinado momento do programa eu desejo invocar o mtodo emitirSom para alguns objetos conforme a situao abaixo:
public void limpar(Object obj) { //Cdigo para limpar uma bola ou um animal... if(obj instanceof Bola) { ((Bola)obj).emitirSom(); } else if(obj instanceof Animal) { ((Animal)obj).emitirSom(); }

Neste programa ns temos um mtodo que efetua a limpeza de qualquer objeto, seja ele um animal ou uma bola, porm caso o objeto seja de um dos dois tipos, Bola ou Animal, estes devero emitir seus sons caractersticos. Esta situao no pode ser resolvida atravs do uso de herana j que a classe Bola e a classe Animal no esto na mesma hierarquia de classes na verdade at poderia ser resolvida com herana e sobreescrita, mas havemos de convir que colocar a classe Bola e a classe Animal na mesma hierarquia um erro de projeto logo, a soluo seria a criao da interface EmiteSom conforme abaixo:
public abstract interface EmiteSom { } public abstract void emitirSom();

Observe que o uso do abstract opcional tanto na classe quanto no mtodo pois toda interface obrigatoriamente abstrata e seus mtodos tambm o so. A classe Animal e a classe Bola ficariam da seguinte forma:
public class Bola implements EmiteSom{

Implementao do mtodo abstrato

public void emitirSom() { System.out.println("Boing, boing..."); } }

www.t2ti.com
10

Curso Java Starter

public abstract class Animal implements EmiteSom{ private String nome; } //getters e setters...

Cad a implementao?

Perceba o uso da palavra reservada implements que informa ao compilador que esta classe est implementando uma interface. A classe Animal no fornece uma implementao para o mtodo emitirSom(), ao contrrio da classe Bola, isto acontece porque a classe Animal do tipo abstract. Quando uma classe abstrata implementa uma interface ela pode ou no fornecer a implementao dos mtodos oriundos da interface. Caso a classe abstrata no fornea a implementao destes mtodos (situao existente na classe Animal), obrigatoriamente cada subclasse concreta da classe abstrata ir ter que fornecer a implementao. Por exemplo, a classe Cachorro fica da seguinte forma:
public class Cachorro extends Animal { public void emitirSom() { System.out.println("au! au!"); } }

Implementao do mtodo

Ento, podemos interpretar a situao da seguinte forma: A classe Animal

implementa a interface EmiteSom, mas deixou a responsabilidade pela implementao do mtodo para a classe concreta Cachorro. E agora o nosso mesmo mtodo limpar() utilizando a interface:
public void limpar(Object obj) { //Cdigo para limpar uma bola ou um animal... if(obj instanceof EmiteSom) { ((EmiteSom)obj).emitirSom(); }

Perceba que independente do tipo de objeto que vier como parmetro, desde que ele seja do tipo EmiteSom, eu sei que ir possuir a implementao do mtodo emitirSom() e que portanto o cdigo ser executado sem problemas, isto tambm nos permite acabar com aquelas cadeias indesejveis de if's deixando o cdigo mais legvel.

www.t2ti.com
11

Curso Java Starter Excees


At agora ns criamos pequenos programas sem nos preocuparmos em tratar possveis erros. No entanto todos aqueles que programam h algum tempo sabem que o tratamento de erros (excees) parte fundamental da programao. Vamos comear os nossos estudos conhecendo a forma como uma exceo apresentada e o seu significado, observe as duas classes abaixo:

public class modulo10Main { public static void main(String[] args) { new RecebeArray(args); System.out.println("Trmino do programa!"); }

public class RecebeArray { public RecebeArray(String[] array) { imprimirPosicao0(array); } public void imprimirPosicao0(String[] array) { System.out.println(array[0]); }

!
}

As setas indicam o fluxo de execuo at o ponto onde ir acontecer a exceo (estrela) o que ocasiona a quebra no fluxo normal da aplicao. Esta execuo pode ser entendida da seguinte forma: Ao invocar o mtodo main, sem o envio de parmetros, instanciado um novo objeto RecebeArray e passado como parmetro do construtor o array vazio, o construtor por sua vez invoca um mtodo desta mesma classe (imprimirPosicao0()) repassando o parmetro recebido, este mtodo tenta imprimir o elemento da posio 0, primeira posio, e o resultado obtido uma exceo, j que o array est vazio. Quando esta exceo acontece o programa encerrado de forma inesperada, perceba que a ltima linha a ser executada (linha grifada em amarelo) no percorrida devido ao trmino inesperado. Podemos observar a visualizao da execuo desta aplicao na figura a seguir:

www.t2ti.com
12

Curso Java Starter

A exceo foi do tipo java.Lang.ArrayIndexOutOfBoundsException que significa a tentativa de acesso a uma posio fora dos limites do array, a seguir ele informa que posio foi, neste caso o ndice 0 (zero). Embaixo da definio da exceo ns temos a stacktrace que contm a seqncia da pilha de execuo. Pela stacktrace possvel perceber quais caminhos a execuo percorreu at alcanar a exceo. A primeira linha da stacktrace contm a definio da exceo, a segunda linha contm o ltimo trecho de cdigo executado com o nmero da linha no cdigo fonte, neste caso foi a invocao do mtodo imprimirPosicao0() da classe RecebeArray, que no cdigo fonte (arquivo RecebeArray.java) refere-se a linha 10. A fim de construirmos programas mais robustos, poderamos tratar situaes como esta. Para isto iremos utilizar o bloco try/catch:
try{ //Cdigo perigoso }catch(Exception e) { //tratamento da exceo }

O bloco try/catch define dois trechos de cdigo, um sujeito a erros (try) e outro que responsvel pelo tratamento do erro caso acontea (catch). Vamos modificar agora a nossa classe RecebeArray e adicionar este bloco ao mtodo imprimirPosicao0():
public class RecebeArray { public RecebeArray(String[] array) { imprimirPosicao0(array); } public void imprimirPosicao0(String[] array) { try{ System.out.println(array[0]); }catch(ArrayIndexOutOfBoundsException e) { System.out.println("Erro: Array vazio, execute o programa novamente" + " passando ao menos um parmetro."); }

www.t2ti.com
13

Curso Java Starter


} }

E agora ao executarmos novamente este mesmo programa o usurio ir receber uma mensagem mais significativa, observe a execuo abaixo:

Pronto! Agora ao executar o programa sem parmetros o usurio saber o que fazer. Porm o mais interessante o seguinte, uma vez que a exceo foi tratada, o programa continua o fluxo de execuo e termina normalmente. Devemos observar o seguinte, esta no a nica exceo que pode acontecer neste mtodo, vamos modificar o mtodo main() de forma que ele encaminhe como parmetro um valor nulo (null).
public class modulo10Main { public static void main(String[] args) { new RecebeArray(null); System.out.println("Termino do programa!"); } }

Repare que agora a nova instncia da classe RecebeArray est recebendo como parmetro uma referncia nula, isto ocasionar uma exceo do tipo java.lang.NullPointerException. Vejamos o resultado da execuo deste cdigo:

Ok! O programa encerrou de forma inesperada a mensagem Termino do

www.t2ti.com
14

Curso Java Starter


programa! no foi apresentada por uma exceo pois o nosso bloco try/catch no foi capaz de captur-la, isto aconteceu pois ele foi construdo de forma que apenas excees do tipo java.lang.ArrayIndexOutOfBoundsException sejam tratadas. Para corrigir este problema podemos encadear mais um bloco catch que capture todos os tipos de excees, vejamos:
public class RecebeArray { public RecebeArray(String[] array) { imprimirPosicao0(array); } public void imprimirPosicao0(String[] array) { try{ System.out.println(array[0]); }catch(ArrayIndexOutOfBoundsException e) { System.out.println("Erro: Array vazio, execute o programa novamente" + " passando ao menos um parametro."); }catch(Throwable t) { System.out.println("Mensagem do erro: "+t.getMessage()); t.printStackTrace(); } } }

Perceba agora que, no cdigo destacado, adicionamos mais um bloco de catch que captura todos os tipos de excees veremos mais a frente como est estruturada a hierarquia de classes de excees desta forma caso seja uma exceo do tipo java.lang.ArrayIndexOutOfBoundsException ser tratado no primeiro bloco, todos os demais tipos sero tratados no segundo bloco. O cdigo destacado ir imprimir a mensagem (getMessage()) e na seqncia ir imprimir a stacktrace, importante perceber novamente que aps o tratamento da exceo pelo segundo bloco o programa encerrado normalmente. A seguir temos a execuo do novo programa:

www.t2ti.com
15

Curso Java Starter

Todas as excees em Java derivam da classe Throwable conforme hierarquia a seguir:

Observe que, conforme dito em mdulos anteriores, todas as classes em Java estendem de alguma forma direta ou indiretamente da classe Object. Nesta imagem esto representadas as trs modalidades de excees existentes na linguagem Java: Unchecked Exception, Checked Exception e Error. Error: Hierarquia em laranja na imagem, representam situaes

incomuns, que no so causadas pelo programa, indicam situaes que no acontecem usualmente durante a execuo de um programa (Ex: Estouro da pilha de execuo StackOverflowError); Checked Exception: Hierarquia em cinza, representam situaes que, geralmente, no so erros de programao e sim indisponibilidade de recursos ou condio necessria para a correta execuo inexistente (Ex: Em aplicaes distribudas existe dependncia externa de rede de

www.t2ti.com
16

Curso Java Starter


comunicao NoRouteToHostException). Unchecked Exception (RuntimeException): Hierarquia em turquesa (azul escuro), representam situaes que, geralmente, identificam erros de programao (programa no robusto) ou mesmo situaes incomuns/difceis de tratar (Ex: Acessar ndice invlido em um array ArrayIndexOutOfBoundsException); As checked exceptions so tratadas obrigatoriamente, isto , o compilador s compila a classe se houver um tratamento (bloco try/catch) para aquele tipo de exceo. Segue quadro com relao de algumas das mais comuns excees:

Exceo
ArrayIndexOutOfBounds Exception ClassCastException IllegalArgumentException IllegalStateException NullPointerException NumberFormatException StackOverflowError NoClassDefFoundError

Quando acontece
Tentativa de acesso a posio inexistente no array. Tentativa de efetuar um cast em uma referncia que no classe ou subclasse do tipo desejado. Argumento formatado de forma diferente do esperado pelo mtodo. O estado do ambiente no permite a execuo da operao desejada. Acesso a objeto que referenciado por uma varivel cujo valor null. Tentativa de converter uma String invlida em nmero. Normalmente acontece quando existe uma chamada recursiva muito profunda. Indica que a JVM no conseguiu localizar uma classe necessria a execuo.

Jogando (throw) excees


Possivelmente em algum trecho do nosso programa, se uma determinada condio acontecer, ns queiramos lanar uma exceo por incrvel que possa parecer para informar que a situao esperada no aconteceu.

www.t2ti.com
17

Curso Java Starter


Vejamos um exemplo, suponha o mtodo abastecer() pertencente a uma classe que representa um veculo. Este mtodo recebe como parmetro um Double que representa o valor que est sendo abastecido, logo no pode haver situaes onde o valor seja negativo. Caso esta situao acontea ns iremos lanar uma IllegalArgumentException.
public void abastecer(Double litros) { if(litros < 0) { throw new IllegalArgumentException("Era esperado um valor maior que 0: "+litros); }else { tanque += litros; } }

A seta indica o uso da palavra reservada throw que responsvel por jogar a exceo, logo a seguir ns instanciamos um objeto do tipo IllegalArgumentException e passamos como parmetro do mtodo construtor o texto que dever aparecer quando a stacktrace for impressa. Veja o resultado da execuo deste mtodo passando o valor -1 (um negativo):
Exception in thread "main" java.lang.IllegalArgumentException: Valor indevido era esperado um valor maior que 0: -1.0 at Veiculo.abastecer(Veiculo.java:10) at modulo10Main.main(modulo10Main.java:6)

Criando sua prpria exceo


Suponha que ao invs de utilizar a IllegalArgumentException no mtodo abastecer(), caso o valor recebido seja negativo, ns desejemos jogar uma exceo prpria chamada QuantidadeLitrosException, neste caso basta que utilizemos os nossos conhecimentos em herana e faamos uma extenso da classe RuntimeException conforme abaixo:
public class QuantidadeLitrosException extends RuntimeException { QuantidadeLitrosException(String mensagem) { super(mensagem); }

www.t2ti.com
18

Curso Java Starter


A linha em destaque significa que estou invocando o construtor da superclasse (Exception) e enviando o parmetro mensagem para ela. O novo mtodo abastecer fica da seguinte forma:

public void abastecer(Double litros) { if(litros < 0) { throw new QuantidadeLitrosException("Valor indevido. Era esperado um valor maior que 0: "+litros); }else { tanque += litros; } }

A execuo deste mtodo com um valor negativo resulta em:


Exception in thread "main" QuantidadeLitrosException: Valor indevido. Era esperado um valor maior que 0: -1.0 at Veiculo.abastecer(Veiculo.java:10) at modulo10Main.main(modulo10Main.java:6)

Na prtica, so poucos os motivos que nos levam a criar as nossas prprias excees, normalmente as excees existentes nas bibliotecas Java so suficientes para a maioria das ocorrncias.

Exerccios
Aprenda com quem tambm est aprendendo, veja e compartilhe as suas respostas no nosso Frum: Exerccios Mdulo 08 Classes Abstratas, Interfaces e Excees 1. Crie uma classe abstrata que represente um quadriltero e receba como parmetros do construtor os quatro valores referentes a cada lado. 2. Estenda a classe criada no exerccio 1, a subclasse deve representar um quadrado e portanto receber como parmetro um nico valor referente aos seus lados. 3. Estenda novamente a classe criada no exerccio 1, a subclasse deve representar um retngulo e portanto deve receber como parmetros dois valores diferentes. 4. Crie uma interface denominada FiguraGeometrica, adicione os mtodos calcular rea e calcular permetro.

www.t2ti.com
19

Curso Java Starter


5. Modifique a classe abstrata criada no exerccio 1 de forma que ela implemente a interface FiguraGeomtrica. 6. Implemente os mtodos definidos na interface FiguraGeometrica nas classes Quadrado e Retangulo. 7. Modifique o construtor da classe Quadrado de forma que caso seja recebido um valor igual a zero ou negativo seja jogada uma exceo do tipo IllegalArgumentException com o seguinte texto: Valor invlido, o valor esperado maior que 0 (zero). 8. Modifique o construtor da classe Retangulo de forma que caso seja recebido como parmetro um valor igual a zero ou negativo ou ambos os valores positivos idnticos porm idnticos seja jogada duas excees do tipo IllegalArgumentException com os seguintes textos respectivamente: Valor invlido, os valores esperados so maior que 0 (zero) e Valor invlido, modifique um dos valores a fim de torn-los diferentes. 9. Crie um programa que solicite a entrada de 2 parmetros, crie um Quadrado e imprima a rea e o permetro. 10.Modifique o programa desenvolvido no exerccio 9. Adicione o tratamento de excees e caso acontea uma exceo imprima a stacktrace. Execute o programa forando uma exceo e observe a stacktrace. 11.Modifique novamente o programa desenvolvido no exerccio 9 de forma que caso sejam passados valores invlidos ele trate a exceo e exiba a mensagem em um dilogo (JoptionPane). 12.Crie uma classe abstrata denominada conta corrente. Adicione os mtodos sacar, depositar e obter saldo, adicione o atributo saldo total. 13.Estenda a classe desenvolvida no exerccio anterior. Crie a classe conta corrente especial que contenha um atributo que represente um limite extra da conta corrente convencional de forma que: 1. O saque debita primeiro o saldo total, na seqncia deve-se debitar o limite do cheque especial; 2. O depsito primeiro deve creditar o limite do cheque especial, at cobrir, e somente aps o saldo total. 14.Crie uma exceo que represente o estouro da conta corrente, modifique a classe desenvolvida no exerccio 13 de forma que caso seja extrapolado o limite do extra esta exceo seja lanada. 15.Crie um programa que, utilizando as classes desenvolvidas nos exerccios

www.t2ti.com
20

Curso Java Starter


anteriores (12, 13 e 14), efetue alguns saques e depsitos, tanto sobre o limite extra quanto sobre saldo total, e ainda faa um saque que extrapole todo o valor disponvel (limite extra + saldo total).

www.t2ti.com
21

You might also like