Te recomiendo que leas manuales o tutoriales de Java que toquen el tema de Excepciones.
Primero, Java tiene por defecto toda una estructura de Excepciones para la mayoría de los casos conocidos, luego puedes heredar de alguna de ellas para especializarla aún más (ahí tienes un ejemplo que puedes reproducir sin reinventar la rueda).
Segundo, conceptual base, para el manejo de excepciones tienes que tener el mismo orden de las reglas de un firewall

, primero las más específicas, bajando, hasta la última más genérica. Si lo haces al revés, siempre entrará por la excepción primera, ya que todos la cumplirían.
PD: por eso digo que en el mundo PHP, si solo vemos PHP, nos estamos perdiendo de un universo de conocimientos. Esto tiene que cambiar, no nos quedemos solo en los lenguajes, busquemos afirmar los conceptos y luego aplicarlos al lenguaje de turno que soporte POO (PHP, Python, Ruby, Java, etc).