Como capturar o tipo da exceção recebida no ExceptionHandler?

Ola,
Fiz um CustomExceptionHandler e gostaria de dar um tratamento especifico para cada tipo de exceção. Como por exemplo informar que existe uma chave duplicada e devolver para o formulario de cadastro. Porem nao consegui fazer dessa forma que achei em C#.

public static bool IsCritical(Exception ex) 
{
  if (ex is OutOfMemoryException)
      //Tratamento para esta exceção;
  if (ex is AppDomainUnloadedException)
      //Tratamento para esta exceção;
  if (ex is BadImageFormatException)
      //Tratamento para esta exceção;
  if (ex is CannotUnloadAppDomainException)
      //Tratamento para esta exceção;
  if (ex is ExecutionEngineException)
      //Tratamento para esta exceção;
  else
      //Tratamento para exceção qualquer;
}

Como proceder em Java usando o exemplo acima? So consegui fazer assim:

@Override
public void handle() throws FacesException {

    //Codigo suprimido

    try {
        //So consegui pegar o tipo da exceção dessa forma, so tem essa forma mesmo?
        if (exception.toString().contains("MySQLIntegrityConstraintViolationException")) {
           //codigo caso seja exceção desse tipo

        } else {
            //Codigo geral para exceções
        }
    } finally {

    }
}