Exceptions as vezes precisa tratar as vezes não

Minha dúvida é a seguinte deve ser muito básica mas eu não consigui achar resposta…

se eu tenho um méto qq que lança um ioException

public void x() throws IOException{

Quando de algum lugar eu chamar este método eu serei obrigado a tratar o IOException ou algum pai dele ou lança-lo novamente, certo??? até ai tudo bem…

mas porque em algumas Exceptions isso não é obrigatório, eu tenho um outro método y que lança uma HibernateException,

public void y() throws HibernateException{

e quando eu chamo esse método mesmo não tratando nenhuma Exception e nem lançando outra ele não da pal…

PorQue???

Por que no Java existem dois tipos de excessões Checked e Unchecked. As excessões do tipo checked precisam ser tratadas. Já as unckecked não. Normalmente, excessões do tipo unchecked são excessões de sistema (NullPointerException, IllegalArgumentException, etc). Eu só não sei responder se dá pra vc, na hora de criar sua própria classe de excessão vc pode especificar se ela precisa ser tratada ou não.

As exceções que herdam RuntimeException não precisam ser tratadas. O nome é auto-explicativo, são exceções que ocorrem em tempo de execucação, daí vem o motivo de não ser necessário tratá-las.