Вы не можете делать это статически, потому что такого различия не существует.
Любое исключение, определенное в стандартных библиотеках классов Java, может быть вызвано приложением или кодом сторонней библиотеки. В некоторых случаях это плохая (или даже ужасная) идея выбросить стандартное исключение, но в других это рекомендуется делать.
Единственный возможный способ отличить исключение, выдаваемое JVM и кодом приложения, - это проверить кадры стека из выданного исключения, чтобы выяснить, какой класс создал это исключение. (Строго говоря, это не говорит вам, где было сгенерировано исключение ... но это достаточно близко, учитывая, что исключения почти всегда создаются и добавляются в одном и том же утверждении.)
Но даже это не особенно полезно. Я имею в виду, в чем семантическая разница между исключением, создаваемым кодом приложения и библиотекой классов? Это, конечно, ничего не говорит о первопричине проблемы.