No se puede hacer esto de forma estática porque no existe tal distinción.
Cualquier excepción definida en las bibliotecas de clase Java estándar puede ser lanzada por la aplicación o el código de la biblioteca de terceros. En algunos casos, es una mala idea (o incluso terrible) arrojar una excepción estándar, pero en otros es lo que se recomienda hacer.
La única manera posible de distinguir entre una excepción lanzada por la JVM y por código de aplicación es examinar los marcos de la pila de la excepción lanzada para descubrir qué clase creó una instancia de la excepción. (En sentido estricto, eso no indica dónde se lanzó la excepción ... pero está lo suficientemente cerca dado que las excepciones casi siempre se ejemplifican y arrojan en la misma declaración.)
Pero incluso esto no es particularmente útil que hacer. Quiero decir, ¿cuál es la diferencia semántica entre una excepción arrojada por el código de la aplicación y la biblioteca de la clase? Ciertamente no dice nada sobre la causa raíz del problema.
Excepciones JVM Esas excepciones o errores que son exclusivamente o la mayoría lógicamente lanzados por la JVM. Excepciones programáticas Las excepciones que se lanzan explícitamente por la aplicación y/o programadores de API. – Haxed
@ Habilitado: el problema es que el programador puede lanzar explícitamente CUALQUIER excepción (excepto AssertionError). Por lo tanto, no puedes hacer lo que quieres hacer. – NotMe
@Chris: AssertionError es Throwable, solo estaba aclarando que no es una RuntimeException como las demás. –