Я не понимаю, почему Throwable
не абстрактный класс.
Ответ четко сформулирован здесь .
Почему этого не может быть
Throwable.getStackTrace (); или как в
java.lang.Thread
Проще говоря, getStackTrace()
вызывает метод getOurStackTrace()
, который не является статичным. Если getStackTrace()
был статическим, то должен getOurStackTrace()
. Этого не произойдет, так как метод printStackTrace()
использует getOurStackTrace()
. Это разработано в JavaDoc:
Обеспечивает программный доступ к
информация трассировки стека, напечатанная
printStackTrace ().
Источник для java.lang. Throwable:
public StackTraceElement[] getStackTrace() {
return (StackTraceElement[]) getOurStackTrace().clone();
}
Кроме того, если вы прочитаете код метода getOurStackTrace()
, вы увидите, что он вызывает следующий метод:
private native int getStackTraceDepth();
Насколько я знаю, native
не может быть статичным (я могу ошибаться).