Duvida de exceção

Galera estou dando uma estudada no livro SCJP

E estou na parte de polimorfismo gostaria de tirar uma duvida com voces, é o seguinte

O metodo novo nao deae lançar exceções verificadas novas ou mais abrangentes que as declaradas pelo m6todo sobrescrito.
Por exemplo, um m6todo que declare uma exceção FileNotFoundException não poderá ser sobrescrito
Por um m6todo que declare uma exceção SQlException, Except.ion ou qualquer outra excegio que não
seja de tempo de execução, a menos que ela seja uma subclasse de FileNotFoundException.

O metodo novo poderá lançar exeções mais restrivas ou menos abrangentes. Só por que o m6todo sobrescrito "se arriscou’,
não quer dizer que a exceção da nova subclasse deva contemplar os mesmos riscos. Conclusão: O m6todo
novo não precisa declarar nenhuma exceção que nunca lançará, independente do que o m6todo sobrescrito
tenha declarado.

Então o livro da o ex.

class animal {
 public void eat() throws Exception{
// lança uma exceção
}

class Dog2 extends Animal {

public void eat() { //sem Exceções }

public static void main(String [] args) {

Animal a=newDog();
Dog2 d = new Dog();

d.eat();// ok
a.eat(); // erro de compilação
// exeção nao relatada
}


}

Como  isso pode acontecer?

O compilador não está pedindo para envolver o código em um try…catch?

Sim, mas o que eu acho estranho é que no livro ele informa algo e na prática enxergamos que ele so vai rolar se colocar em um try/Catch.
O que livro, está meio confuso.

Sempre que uma exceção for declarada em um método será obrigado na sobrescrita declarar com throws ou circundar o código do metodo sobrescrito com try/catch?
Também queria entender isso um pouco melhor estou estudando pelo livro da Kathy e também fiquei com dúvidas sobre essa questão.

Existem dois tipos de exceções, as Checked e as Unchecked (Checadas e não checadas pelo compilador)!
Se a exceção é Checked o compilador não permite que o programa compile…
Você pode fazer duas coisas:

  • Tratar a exceção com try/catch no seu bloco de código…
  • Ou declarar que o método lança uma exceção daquele tipo (throws), assim a obrigação de usar o try/catch passa para a classe que utilizar esse método.

Entedeu?

Em que circunstacnai deveria usar o bloco try/catch e o lançamento.

Como no exemplo acima como eu estou sobrescrevendo o metodo (polimorfismo) em qual situação se encaixa o try/catch ou o lançamento.

Depende do seu projeto…
Se você tem uma classe para acessar um BD por exemplo. Eu lançaria a exceção para quem usou a classe, pois prefiro tratar os erros na classe que as utiliza ao invés de tratar um pouco em cada classe do projeto!..
http://blog.caelum.com.br/lidando-com-exceptions/

Tenho verificado dessa forma também lançar as exceções nos metodos e trata-las na classe que os utiliza-la.
Queria ter a certeza de como saber se a exceção lançada é checked ou unchecked?