Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Programando em Java
Java Caractersticas
Simples Orientada a Objetos Distribuda Suporte a Concorrncia Dinmica Independente de Plataforma Portvel Alta Performance Robusta Segura
bytecode
JVM
Conceitos Bsicos
ByteCode
Cdigo intermedirio (*.class), entre o cdigo fonte (*.java) e o cdigo de mquina.
Compilador
Responsvel pela gerao do bytecode (*.class) atravs da traduo do cdigo fonte.
JVM
Mquina virtual do Java, responsvel pela leitura do bytecode, traduo para a linguagem de mquina e execuo do programa.
Classpath
Conjunto de caminhos especificado para a JVM encontrar as classes necessrias para a execuo do programa.
Orientao a Objetos
Programando em Java
Conceitos Bsicos
Conceitos chaves da programao Orientada a Objetos:
Classe Um modelo que descreve um objeto
Objetos
Representam entidades existentes no mundo real
Exemplos
A classe Bycicle
Quais itens descrevem caractersticas de uma bicicleta? Quais itens decrevem comportamentos de uma bicicleta?
Exemplos
Objetos da Classe Bycicle
10
Composio
Formao do todo pelas partes.
Generalizao
Comportamento e caractersticas generalizados.
Especializao
Particularizao do Comportamento das subclasses.
11
Especializao
12
Composio
13
Abstrao
Atributos e comportamentos bem encapsulados, o que torna o cdigo mais manutenvel e robusto
14
A Linguagem Java
Programando em Java
Os Arquivos Fontes
Arquivos fontes devem obrigatoriamente seguir a seguinte estrutura e ordem:
Definio do Pacote Lista de imports Declarao de Classe (s)
permitido que haja uma nica classe pblica por arquivo fonte A classe pblica deve conter o mesmo nome que o arquivo fonte.
Se o nome da classe Bicicleta ento o nome do arquivo fonte deve ser
Bicicleta.java
16
Arquivo Fonte
// Declarao de Pacote package pessoal.meuPacote;
// Declarao de imports import java.util.Random; //Importao de uma classe import java.sql.*; //Importao de um pacote inteiro // Definies de Classes public class MinhaClasse { ... }
17
Pacote
Forma de organizar grupos de classes em unidades.
Pode conter qualquer nmero de classes que se relacionam, seja pelo mesmo objetivo ou por escopo.
Reduz problemas de conflitos de nome.
O nome de uma classe no apenas aquele usado em sua declarao, mas sim o
conjunto: nome do pacote + nome usado na definio da classe.
18
Import
Utiliza-se o import para declarao de classes que so referenciadas no arquivo fonte mas que no pertencem ao pacote onde este arquivo se encontra. Imports podem referenciar:
Outras classes no mesmo projeto Classes da API Java, como java.util.List Classes contindas nas bibliotecas utlizadas pelo projeto, ou seja, nos arquivos *.jar referenciados no classpath do projeto
Sintaxe:
import java.util.Date; import java.util.*;
19
Exemplos:
Exemplos:
private static int numero; public final String tamanhoMaximo = 15; private String nome = Maria da Silva; double raio = 6.5; Object o = new Object();
21
Declarando Mtodos
Definio de um mtodo:
[modificadores] retorno nomeDoMetodo ( [Argumentos] ) [ throws Exees ] { ... [ return varRetorno; ] }
Exemplos:
private void obtemNumeroAlunosTurma ( long codigoTurma ) { ... }
22
Exemplo de Classe
public String getNomeAluno() { return nomeAluno; } public void setNomeAluno( String param ) { nomeAluno = param; } public int getCodigoAluno() { return codigoAluno; } public void setCodigoAluno( int param ) { codigoAluno = param; } }
23
Construtor da Classe
Para que um objeto exista necessrio contru-lo, isto , dizer para a JVM que necessrio espao de memria para criao do objeto. Para contruir um objeto usa-se o construtor da classe.
Aluno o1 = new Aluno();
Toda classe possui, por default, um construtor padro: pblico e sem argumentos. O construtor default somente criado quando nenhum outro construtor for definido pelo programador. Uma classe pode ter quantos contrutores desejar. Implicitamente, ou mesmo explicitamente, o construtor sempre chama o contrutor da sua super classe.
24
Exemplos:
public Turma () { ... } public Turma ( long codigoTurma ) { ... } public Curso( int codigoCurso ) throws Exception { ... } public Curso ( String nomeCurso, int codigoCurso ) { ... }
25
Tipos Primitivos
Tipo boolean char byte short int Contedo Valor lgico Caracter Unicode Inteiro com sinal Inteiro com sinal Inteiro com sinal Default false \u0000 0 0 0 Tamanho
(bits)
8 16 8 16 32
long
float double
0
0.0 0.0
64
32 64
-263
IEEE 754* IEEE 754*
263 1
IEEE 754* IEEE 754*
26
Converso: acontece quando existe uma modificao do tipo de uma varavel de forma implcita.
Atribuies
int i; double d; i = 100; d = i;
Chamadas de Mtodos
Operaes Aritmticas
java.util.Vector v; ... String s = Eita!! v.add(s); // Definio do mtodo add add(Object o) ... byte b = 2; int i = 5; float f = 11.1f; double d = b * 1 f; um float convertido p/ double
char
int
byte short
long
float
double
converso casting
29
Expresses e Literais
Um literal inteiro por default do tipo primitivo int.
30
Classes Wrappers
So classes que encapsulam um nico e imutvel valor. Cada tipo primitivo possui uma classe wrapper correspondente.
int
long float
Integer
Long Float
double
Double
31
A classe String
String uma classe da linguagem java e no um tipo primitivo.
Exemplo: String nome = Carolina; String sobreNome = Paula; Alguns mtodos utilitrios da classe String: boolean equals(...) equalsIgnoreCase(...) int length(...) substring(...) toLowerCase(...) toUpperCase(...) Referncia para a classe String: API Java: http://java.sun.com/j2se/1.4.2/docs/api/
33
Modificadores de Acesso
Definem o acesso que outras classes tero classe, a seus mtodos e seus atributos.
public: visvel para qualquer classe sem restries Pode ser usado por classes, atributos e mtodos
34
A classe Object
Topo da Hierarquia de classes do Java
Toda classe em Java filha da classe Object.
35
A classe Object
Mtodos da classe Object que so herdados por toda classe:
Utilizados para controle de Threads.
wait(), notify(), notifyAll() Utilizado para fornecer informaes teis sobre um objeto toString()
Utilizado para realizar uma comparao mais detalhada entre dois objetos
equals()
36
A varivel this
this uma referncia para a instncia corrente
Utilizado em trs situaes:
Para diferenciar um atributo (varivel da classe) de uma varivel local ou de um parmetro. Para passar o objeto corrente como parmetro Para encadear chamadas de contrutores.
37
38
Sintaxe
Programando em Java
Sintaxe
Statement:
Uma ou mais linhas terminadas por ;
Blocos:
Conjuntos de statements delimitados por { e }
Comentrios:
// comentrio simples, de uma linha /* */ comentrio simples, de uma ou mais linhas /** */ comentrios para documentao (Javadoc)
40
Javadoc
Ferramenta do Java para gerao de documentao de cdigo.
Como exemplo de javadoc tem-se a prpria API da linaguagem java em HTML com contedo originado dos arquivos fontes. http://java.sun.com/j2se/1.4.2/docs/api/ Exemplo de comentrio javadoc:
/**
* @return String - Nome do usurio * */ public String getNome() { return this.nome; } Referncia:
http://java.sun.com/j2se/javadoc/
41
Indentificadores
So os nomes dados a uma classe, mtodo, atributo, varivel ou parmetro. Comeam sempre por um caracter Unicode, (_) ou ($).
43
Palavras Reservadas
abstract catch default false goto int null return this try boolean char do final if interface package short throw void break class double finallly implements long private static throws volatile byte const else float import native protected super transient while case continue extends for instanceof new public synchronized true
44
Operadores
Prec
1
Operador
++ , -+ , ~ ! (tipo)
Operando
A A I B O A,A A,A S,S I,I I,I I,I A,A A,A O,C
Assoc.
D D D D D E E E E E E E E E
Operao
In/decremento unrio Mais/menos unrio (sinal) Complemento de 1 Complemento lgico (not) cast Multiplicao, diviso, modulo Adio, subtrao Concatenao de strings Shift left Shift right Shift right sem sinal Menor que, menor ou igual a Maior que, maior ou igual a Comparao de tipos
2 3
*, /, % + , +
45
Operadores Continuao
Prec
6
Operador
==, != ==, !=
Operando
P,P O,O I,I B,B I,I B,B T,T B,B B,B B,B B,Q,Q] V,Q V,Q
Assoc.
E E E E E E E E E E E D D
Operao
Igual/diferente (valores) Igual/diferente (referncia ao objeto) E (bits) E (lgico) XOR (bits) XOR (lgico) OU (bits) OU (lgico) E (lgico) OU (lgico) Operador condicional (ternrio) Atribuio Atribuio com operao
& &
^ ^
| |
10 11 12 13
&& || ?: = *=, /=, %=, +=, -=, <<=, >>=, >>>=, &=, ^=, |=
46
switch
47
48
Caso a expresso booleana seja falsa, o bloco de cdigo no sr executado nenhuma vez. O programador deve garantir que a condio de parada ser satisfeita em algum momento.
49
O programador deve garantir que a condio de parada ser satisfeita em algum momento.
50
{
<bloco de comandos>
O programador deve garantir que a condio de parada ser satisfeita em algum momento.
51
contiune:
Comando de salto para a prxima iterao do lao.
Arrays
Array uma estrutura de tamanho fixo que armazena mltiplos valores do mesmo tipo.
O tamanho de um Array precisa ser definido quando este criado. Um elemento um array correspodente a um dos elementos armazenados no array e pode ser acessado por sua posio.
53
Utilizando Arrays
Para utilizar um array necessrio seguir os trs passos abaixo:
Declarao Construo Inicializao
54
Arrays - Declarao
A declarao de uma array diz ao compilador o nome do array e o
tipo de elemento que ser armazenado.
int [ ] intArray; String [ ] nomes; Object [ ] objects;
Nenhuma memria alocada no momento da declarao do array. No se pode estabelece o tamanho do array no momento de sua declarao.
55
Arrays - Contruo
Contruindo um array:
int [] intArray; intArray = new int [10]; Object [] objArray = { Objeto1, Objeto2 }; String [][] stringMatrix = new String[10][20]; boolean[] answers = { true, false, true, true, false };
Uma vez definido o tamanho do array este no pode mais ser alterado.
Quando o array de referncias para objetos somente a memria ocupada pela referncia em si alocada. Nenhum objeto criado neste momento.
56
Arrays - Contruo
Quando um array contrudo seus valores so automticamente inicializados para valores padro.
Quando o array de referncias para objetos somente a memria ocupada pela referncia em si alocada. Nenhum objeto criado neste momento. Valores default:
Tipo
byte short int
Valor Inicial
0 0 0
long
float double char boolean reference
0L
0.0f 0.0d \u0000 false null
57
Arrays - Inicializao
Declarando, contruindo e inicializando um array:
int[] anArray; // declare an array of integers anArray = new int[10]; // create an array of integers // assign a value to each array element and print
O menor nidice do array sempre zero. O maior ndice do array obtido atravs de array.length - 1
58
Modificadores
final
Usado em: Classes Mtodos Variveis
static
Usado em: Mtodos Variveis Inicializadores estticos
syncronized
59
Modificador final
Classe: define que uma classe no pode ser extendida.
public final class Math { // esta classe no pode ser extendida }
Varivel: define que uma varivel no pode ser modificada depois de receber um valor.
Para tipos primitivos no podem receber outro valor Para referncias, no podem referenciar um outro objeto, mas o contedo do objeto original pode ser alterado.
60
61
62
63
Modificador syncronyzed
Utilizado para controlar o acesso em trechos crticos de cdigo, para programas multi-threaded. Define que apenas uma thread poder executar o trecho delimitado pelo syncronized num perodo de tempo.
public synchronized void metodoSincronizado() { /* somente uma thread de cada vez pode executar este trecho */ }
64
Todos os Modificadores
Modificador
public protected (default) private final abstract static native transient volatile synchronized
Classe
sim no sim no sim sim no no no no no
Atributo
sim sim sim sim sim no sim no sim sim no
Mtodo
sim sim sim sim sim sim sim sim no no sim
Construtor
sim sim sim sim no no no no no no no
Blocos livres
no no sim no no no sim no no no sim
65
Modelo de Memria
O modelo de memria do Java baseado na abordagem de dupla indireo, isto , as referncias so endereos e outro endereo. Esta abordagem permite a utilizao do garbage collector para realocao de memria e reduo da fragmentao.
67
Cliente
nome: Carolina sobrenome = null
cliente2
nomeIndicacao = null
cliente3
68
Para comparar dois objetos de uma mesma classe, deve-se sobreescrever o mtodo equals de maneira que ele possua a funcionalidade de comparar se o objeto recebido igual ao atual.
69
Quando um argumento passado como parmetro na chamada de uma funo, na realidade um cpia do argumento passada.
Tipos Primitivos: passado uma cpia do tipo primitivo. Caso este valor seja alterado dentro do mtodo, isso no afetar o valor no mtodo original. Referncias a Objetos: passado uma cpia da referncia. Caso a refrencia seja alterada para outro objeto, isso no afetar a referncia original. Caso o objeto apontado para refrencia seja alterado, essa alterao ser perpetuada.
70
}
}
71
modificaSB1(string);
System.out.println("Apos execucao modificaSB1: " + string ); modificaSB2( string ); System.out.println("Apos execucao modificaSB2: " + string ); int[] arrayInt = { 10 };
modificaInt1( arrayInt[0] );
System.out.println("Apos execucao modificaInt1: " + arrayInt[0] ); modificaInt2( arrayInt ); System.out.print("Apos execucao modificaInt2: ");
72
73
} public static void main( String args[] ){ Retangulo ret = new Retangulo(); float x1 = 15.5; float y1 = 10.5; ret.translacao(x1, y1); System.out.println(O valor de x1 + x1); System.out.println(O valor de y1 + y1); }
}
74
class Vetor{ //Varivel global da classe String mensagem; //Mtodo de inicializao do vetor public void inicializa(){ //Declarao e inicializao do vetor int v[] = {1, 2, 3, 4, 5}; //Mensagem a ser escrita na tela mensagem = Os valores originais do vetor so: ; for (int i = 0; i < v.length; i++ ){ mensagem += + v[i]; } /* Chamada ao mtodo modificaVetor, passando v1 como argumento. Passagem por referncia */ modificaVetor( v ); mensagem += \nOs valores do vetor aps modificao so: ; for (int i = 0; i < v.length; i++ ){ mensagem += + v[i]; } modificaElemento( v[2] ); mensagem += \n O valor de v[2] = + v[2]; } //Modifica todos os elementos do vetor. Multiplica todos por 3 public void modificaVetor( int v1[] ){ for (int j = 0; j < v1.length; j++ ){ v1[j] *= 3; } } //Modifica um elemento, multiplicando-o por 3 public void modificaElemento( int elem ){ elem *= 3; } //Retorna a mensagem public String getMensagem(){ return mensagem; }
public static void main( String args[] ){ Vetor v = new Vetor(); v.inicializa(); System.out.println( v.getMensagem() ); } }
75
A classe String
Java utiliza esta classe para encapsular strings de caracteres.
Cada instncia da classe representa uma string imutvel, ou seja, depois de criada, a string representada no pode ser alterada. Quando umas1 literal compilada, ela adicionada a minha string um pool de literais. Caso o compilador encontre s2 s2 essa literal no pool, Pool a literal existente re-utilizada. de literais de Strings
76
Garbage Collection
Em Java, no preciso fazer alocao dinmica explcita para criar objetos, tambm no preciso desalocar memria. O Garbage Collector um processo interno da JVM que de tempos em tempos executa seu processo e faz desalocao de objetos que no possuem mais referncias.
No possvel saber quando os objetos sero enviados para o Garbage Collector.
Algumas classes precisam defnir como suas instncias devem ser excludas da
memria. Para isto, o GC utiliza o mtodo finalize() da classe Object. possvel extender o mtodo para fazer a desalocao personalizada para uma subclasse.
77
Herana e Java
Programando em Java
Abstrao
Interfaces
Classes Abstratas Encapsulamento
79
Herana
A implementao do conceito de herana em Java feito com a palavra extends. Em Java possvel extender SOMENTE uma classe. Um classe que extende a outra chamada de sub classe, e a classe extendida chamada de super classe.
A sub classe uma especializao da super classe. A super classe uma generalizao da sub classe.
80
Herana
81
Herana - Sintaxe
public class Pessoa { public void getNome() { } public void getCPF() { } } public class Funcionario extends Pessoa { public void getSalario() { } }
82
Herana
83
84
Sobreescrita de Mtodos
Usado quando preciso modificar o comportamento de um mtodo da classe pai.
85
Herana e super
Quando uma classe sobreescreve um mtodo da super classe, o comportamento normal da subclasse executar o novo mtodo.
Existe uma maneira de executar o mtodo da super classe atravs da palavra reservada super, que uma referncia super classe.
public void metodoSobreescrito super.metodoSobreescrito();
// outras coisas especficas da classe filha
86
Herana - Construtores
Construtores no so herdados como mtodos comuns, e devem ser definidos para cada classe. Caso uma classe no tenha nenhum construtor definido, o compilador automaticamente cria um construtor default que simplesmente chama o construtor da superclasse. Tamb possvel chamar explicitamente o construtor da super classe atravs do mtodo super().
Caso o mtodo super() seja chamado no construtor da subclasse, esta chamada deve ser o primeiro comando do construtor.
87
Sobrecarga de Mtodos
Usada quando preciso vrios mtodos que desempenham papis semelhantes em diferentes condies.
88
Sobrecarga de Mtodos
public class ExemploSobrecarga() { public void metodoSobrecarregado(int param1){ } public void metodoSobrecarregado(String param1){ } public void metodoSobrecarregado(int param1, String param2){ } public void metodoSobrecarregado(String param1, int param2){ } public void metodoSobrecarregado(double param1, String param2, int param3){ }
89
Sobrecarga de Construtores
class Base { public Base( String s ) { // inicializa o objeto usando s } public Base( int i ) { // inicializa o objeto usando i } } class Derived extends Base { public Derived( String s ) { // passa o controle para o construtor de Base na linha 2 super( s ); } Public Derived( int i ) { // passa o controle para o construtor de Base na linha 5 super( i ); } }
90
importante para o implementador saber como foram implementados os mtodos desta classe?
importante saber se a String foi implementada utilizando um array ou uma lista ligada? Para o implementador, o importante somente saber que os mtodos existem
91
92
Num bom uso da abstrao, a implementao de uma classe poderia ser escolhida na hora de execuo
93
Abstrao e Java
Em Java, o conceito de abstrao implementado com:
Interfaces Classes abstratas Mtodos abstratos
94
Interfaces
No so classes
No possuem mtodos implementados Possuem apenas definio de comportamento:
Mtodos abstratos
Constantes
Para qu servem???
95
Interfaces
Mesmo no existindo implementao as interfaces definem um comportamento.
Definio da interface Pet - definio de um comportamento:
public interface Pet { public abstract void beFriendly(); public abstract void play(); }
}
96
Interfaces - Abstrao
Como uma classe comum, pode ser instanciada: Dog pet = new Dog();
No gera erro, porm no usa o conceito de abstrao, fora a utilizao de Dog
97
Classes Abstratas
Classes abstratas so classes que podem possuir mtodos implementados, mas que possuem ao menos um mtodo abstrato.
Mtodo abstrato aquele em que no existe implementao, apenas sua definio.
So teis quando definem a implementao de mtodos comuns a todas as classes que as estendem, mas obrigam que cada uma destas classes definam a implementao dos outros mtodos abstratos. Classes abstratas no so instanciadas.
98
Classes Abstratas
public abstract class Animal { public void comer() { ... } public abstract void andar(); } public class Cachorro extends Animal { public void andar() { // anda com quatro patas } } public class Canguru extends Animal { public void andar() { // anda com duas patas - pulando } }
99
Classes abstratas possuem mtodos abstratos, mas tambm possuem tantos mtodos implementados quantos for necenssrio.
100
101
Collection
Collection List AbstractList LinkedList Vector ArrayList Set AbstractSet HashSet SortedSet
Interfaces Classes
TreeSet
102
Map
Map
SortedMap TreeMap AbstractMap
Interfaces Classes
103
List e Map
List:
add(int index, Object element) add(Object o) get(int index) remove(int index)
Map:
put(Object key, Object value) get(Object key)
104
Percorrendo um List
Exemplo: public void percorre() { List l = new ArrayList(); for ( int i = 0; i < l.size(); i++ ) { Object ob = l.get(i); System.out.println( ob.toString() ); } }
106
107
Gato g = new gato(); AnimalDomestico ad = g; Object o = g; Papagaio p = new Papagaio(); Mercadoria m = p; Object o = m;
108
109
110
ClasseNovoTipo Classe
ClasseNovoTipo Interface
ClasseNovoTipo Array
Erro
Erro
111
TipoOriginal
Interface
TipoOriginal
Interface
TipoOriginal
Array
NovoTipo
Classe no-final
TipoOriginal deve
herdar de Sempre OK
NovoTipo
NovoTipo
Classe final
TipoOriginal e NovoTipo
devem ser da mesma Classe
Serializable
NovoTipo
Interface
Sempre OK
Sempre OK
Erro de Compilao
Erro de Compilao
Erro de Compilao
112
Operador instanceof
Para auxiliar a operao de casting, existe uma maneira para saber qual a real instncia de uma referncia, e testar para saber se vai ocorrer um erro numa suposta converso explcita Object s1 = new String(objeto do tipo String); if ( s1 instanceof String ) { String s = (String) s1; // s.doSomething(); }
113
Exceptions
Programando em Java
Exeptions
Usadas para controle, durante a execuo de um programa, de alguma coisa que no normal - do ponto de vista do objetivo a ser alcanado - mas que possa acontecer. Tipos de erro que podem acontecer:
Previsveis: usurio entra com nome de arquivo invlido, falha num componente de rede, arquivo corrompido, etc. No previsveis bugs no programa, acesso a posies inexistentes num array, falta de memria do sistema, etc.
115
Exceptions
Para os problemas previsveis, o modo de tratamento destes erros em linguagens de programao mais tradicionais, devem ser feitas com ifs. Exemplo: no caso do nome do arquivo, deve se testar se o arquivo existe antes de efetivamente us-lo. Esse tipo de tratamento deixa o cdigo extenso e complexo. O ideal seria fazer um tratamento devido somente se o problema venha a ocorrer. No caso de problemas que no so previstos, ainda assim seria interessante uma forma de tratamento especial para avisar o usurio sobre estes problemas.
116
Exceptions
Em Java, existe um mecanismo que faz exatamente isso. Este mecanismo funciona com exceptions, que nada mais so do que classes especficas para cada tipo de erro, e que contm informaes de quando e qual erro ocorreu, entre outros. O trecho de cdigo em que uma exceo esperada deve ser colocado dentro de um try{}. Caso a exceo esperada venha ocorrer, o seu tratamento feito dentro do trecho catch{}, logo em sequida do try{}.
117
Exceptions
Exemplo:
int x = (int) (Math.random() * 5); int y = (int) (Math.random() * 10); int [] z = new int[5]; try { System.out.println(y/x + (y/x)); System.out.println(y + y + z[y] + z[y]); } catch (ArithmeticException e) { System.out.println(Problema aritmtico + e); } catch (ArrayIndexOutOfBoundsException e) { System.out.println(Erro no ndice + e); }
118
Exceptions
main() calculaMedia() calculaSoma()
Se uma exceo ocorrer e no for tratada em um determinado mtodo, esta passada ao mtodo justamente anterior na pilha de execuo, e assim por diante.
119
Exceptions
Tratando mtiplicas excees e o bloco finally.
try { // faz alguma coisa } catch (FileNotFoundException e) { // trata o erro } catch (SQLException e) { // trata o erro } catch (Exception e) { // trata o erro genrico } finally { /* finaliza o uso dos recursos (arquivos, transaes, etc) */ }
120
Excees e Hierarquia
Todos os tipos de excees e erros so filhos da classe Throwable
Throwable
Exception
SQLException RuntimeException
Error
NullPointerException
OutOfMemoryError
121
Lanando Exceoes
Vimos como podemos tratar excees. Mas como lanar uma exceo?
resumido somente no catch correspondente. Se no houver um catch explcito, quem trata o problema o sistema operacional.
122
Checked Exceptions
Entretanto, como podemos saber se um trecho de cdigo suscetvel a lanamento de excees? Em Java, qualquer mtodo que pode lanar uma exceo deve declarar isto. public void method1 throws SQLException { // este mtodo pode jogar uma SQLException } As excees checadas so somente as subclasses de Exception, exceto RuntimeException e suas filhas. Errors tambm no so checadas.
123
Excees - Vantagens
Mantm separados os trechos de cdigo que tratam
124
125
}
public class IlegallTwo extends BaseClass { public void method() throws Exception {} }
126